Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Canread
Gopsutil
提交
13e0d343
G
Gopsutil
项目概览
Canread
/
Gopsutil
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
Gopsutil
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
13e0d343
编写于
11月 02, 2014
作者:
K
KenjiTakahashi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
CPUPercent
上级
ab23ece7
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
89 addition
and
0 deletion
+89
-0
cpu.go
cpu.go
+57
-0
cpu_test.go
cpu_test.go
+32
-0
未找到文件。
cpu.go
浏览文件 @
13e0d343
...
...
@@ -3,6 +3,7 @@ package gopsutil
import
(
"encoding/json"
"runtime"
"time"
)
type
CPUTimesStat
struct
{
...
...
@@ -39,6 +40,57 @@ func CPUCounts(logical bool) (int, error) {
return
runtime
.
NumCPU
(),
nil
}
var
lastCPUTimes
[]
CPUTimesStat
var
lastPerCPUTimes
[]
CPUTimesStat
func
CPUPercent
(
interval
time
.
Duration
,
percpu
bool
)
([]
float32
,
error
)
{
getAllBusy
:=
func
(
t
CPUTimesStat
)
(
float32
,
float32
)
{
busy
:=
t
.
User
+
t
.
System
+
t
.
Nice
+
t
.
Iowait
+
t
.
Irq
+
t
.
Softirq
+
t
.
Steal
+
t
.
Guest
+
t
.
GuestNice
+
t
.
Stolen
return
busy
+
t
.
Idle
,
busy
}
calculate
:=
func
(
t1
,
t2
CPUTimesStat
)
float32
{
t1All
,
t1Busy
:=
getAllBusy
(
t1
)
t2All
,
t2Busy
:=
getAllBusy
(
t2
)
if
t2Busy
<=
t1Busy
{
return
0
}
return
(
t2Busy
-
t1Busy
)
/
(
t2All
-
t1All
)
*
100
}
cpuTimes
,
err
:=
CPUTimes
(
percpu
)
if
err
!=
nil
{
return
nil
,
err
}
if
interval
>
0
{
if
!
percpu
{
lastCPUTimes
=
cpuTimes
}
else
{
lastPerCPUTimes
=
cpuTimes
}
time
.
Sleep
(
interval
)
cpuTimes
,
err
=
CPUTimes
(
percpu
)
if
err
!=
nil
{
return
nil
,
err
}
}
ret
:=
make
([]
float32
,
len
(
cpuTimes
))
if
!
percpu
{
ret
[
0
]
=
calculate
(
lastCPUTimes
[
0
],
cpuTimes
[
0
])
lastCPUTimes
=
cpuTimes
}
else
{
for
i
,
t
:=
range
cpuTimes
{
ret
[
i
]
=
calculate
(
lastPerCPUTimes
[
i
],
t
)
}
lastPerCPUTimes
=
cpuTimes
}
return
ret
,
nil
}
func
(
c
CPUTimesStat
)
String
()
string
{
s
,
_
:=
json
.
Marshal
(
c
)
return
string
(
s
)
...
...
@@ -48,3 +100,8 @@ func (c CPUInfoStat) String() string {
s
,
_
:=
json
.
Marshal
(
c
)
return
string
(
s
)
}
func
init
()
{
lastCPUTimes
,
_
=
CPUTimes
(
false
)
lastPerCPUTimes
,
_
=
CPUTimes
(
true
)
}
cpu_test.go
浏览文件 @
13e0d343
...
...
@@ -2,7 +2,9 @@ package gopsutil
import
(
"fmt"
"runtime"
"testing"
"time"
)
func
TestCpu_times
(
t
*
testing
.
T
)
{
...
...
@@ -55,3 +57,33 @@ func TestCpuInfo(t *testing.T) {
}
}
}
func
testCPUPercent
(
t
*
testing
.
T
,
percpu
bool
)
{
v
,
err
:=
CPUPercent
(
time
.
Millisecond
,
percpu
)
if
err
!=
nil
{
t
.
Errorf
(
"error %v"
,
err
)
}
numcpu
:=
runtime
.
NumCPU
()
if
(
percpu
&&
len
(
v
)
!=
numcpu
)
||
(
!
percpu
&&
len
(
v
)
!=
1
)
{
t
.
Fatalf
(
"wrong number of entries from CPUPercent: %v"
,
v
)
}
for
i
:=
0
;
i
<
1000
;
i
++
{
v
,
err
:=
CPUPercent
(
0
,
percpu
)
if
err
!=
nil
{
t
.
Errorf
(
"error %v"
,
err
)
}
for
_
,
percent
:=
range
v
{
if
percent
<
0.0
||
percent
>
100.0
*
float32
(
numcpu
)
{
t
.
Fatalf
(
"CPUPercent value is invalid: %f"
,
percent
)
}
}
}
}
func
TestCPUPercent
(
t
*
testing
.
T
)
{
testCPUPercent
(
t
,
false
)
}
func
TestCPUPercentPerCpu
(
t
*
testing
.
T
)
{
testCPUPercent
(
t
,
true
)
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录