Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Canread
Gopsutil
提交
b3cf7354
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,发现更多精彩内容 >>
提交
b3cf7354
编写于
9月 18, 2015
作者:
S
Shirou WAKAYAMA
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
process[linux, darwin]: implements Connections using lsof.
上级
a369a885
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
46 addition
and
10 deletion
+46
-10
README.rst
README.rst
+2
-2
common/common_darwin.go
common/common_darwin.go
+4
-0
common/common_linux.go
common/common_linux.go
+6
-0
net/net_darwin.go
net/net_darwin.go
+7
-2
net/net_linux.go
net/net_linux.go
+7
-1
process/process_darwin.go
process/process_darwin.go
+1
-1
process/process_linux.go
process/process_linux.go
+1
-1
process/process_test.go
process/process_test.go
+18
-3
未找到文件。
README.rst
浏览文件 @
b3cf7354
...
...
@@ -186,8 +186,9 @@ threads
cpu_percent
cpu_affinity
memory_percent
parent x x
children
connections
connections
x x
is_running
================ ===== ======= ====== =======
...
...
@@ -231,7 +232,6 @@ hostname x x x x
- wait_procs
- Process class
- parent (use ppid instead)
- as_dict
- wait
...
...
common/common_darwin.go
浏览文件 @
b3cf7354
...
...
@@ -74,6 +74,10 @@ func CallLsof(invoke Invoker, pid int32, args ...string) ([]string, error) {
}
out
,
err
:=
invoke
.
Command
(
lsof
,
cmd
...
)
if
err
!=
nil
{
// if not pid found, lsof returnes code 1
if
err
.
Error
()
==
"exit status 1"
&&
len
(
out
)
==
0
{
return
[]
string
{},
nil
}
return
[]
string
{},
err
}
lines
:=
strings
.
Split
(
string
(
out
),
"
\n
"
)
...
...
common/common_linux.go
浏览文件 @
b3cf7354
...
...
@@ -8,6 +8,8 @@ import (
"strings"
)
// CallLsof invokes lsof to get connection informations.
// This is same as darwin currently.
func
CallLsof
(
invoke
Invoker
,
pid
int32
,
args
...
string
)
([]
string
,
error
)
{
var
cmd
[]
string
if
pid
==
0
{
// will get from all processes.
...
...
@@ -22,6 +24,10 @@ func CallLsof(invoke Invoker, pid int32, args ...string) ([]string, error) {
}
out
,
err
:=
invoke
.
Command
(
lsof
,
cmd
...
)
if
err
!=
nil
{
// if not pid found, lsof returnes code 1
if
err
.
Error
()
==
"exit status 1"
&&
len
(
out
)
==
0
{
return
[]
string
{},
nil
}
return
[]
string
{},
err
}
lines
:=
strings
.
Split
(
string
(
out
),
"
\n
"
)
...
...
net/net_darwin.go
浏览文件 @
b3cf7354
...
...
@@ -91,8 +91,13 @@ func NetIOCounters(pernic bool) ([]NetIOCountersStat, error) {
return
ret
,
nil
}
// Return a list of network connections opened
by a process
// Return a list of network connections opened
.
func
NetConnections
(
kind
string
)
([]
NetConnectionStat
,
error
)
{
return
NetConnectionsPid
(
kind
,
0
)
}
// Return a list of network connections opened by a process.
func
NetConnectionsPid
(
kind
string
,
pid
int32
)
([]
NetConnectionStat
,
error
)
{
var
ret
[]
NetConnectionStat
args
:=
[]
string
{
"-i"
}
...
...
@@ -126,7 +131,7 @@ func NetConnections(kind string) ([]NetConnectionStat, error) {
}
// we can not use -F filter to get all of required information at once.
r
,
err
:=
common
.
CallLsof
(
invoke
,
0
,
args
...
)
r
,
err
:=
common
.
CallLsof
(
invoke
,
pid
,
args
...
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
net/net_linux.go
浏览文件 @
b3cf7354
...
...
@@ -90,7 +90,13 @@ func NetIOCounters(pernic bool) ([]NetIOCountersStat, error) {
return
ret
,
nil
}
// Return a list of network connections opened.
func
NetConnections
(
kind
string
)
([]
NetConnectionStat
,
error
)
{
return
NetConnectionsPid
(
kind
,
0
)
}
// Return a list of network connections opened by a process.
func
NetConnectionsPid
(
kind
string
,
pid
int32
)
([]
NetConnectionStat
,
error
)
{
var
ret
[]
NetConnectionStat
args
:=
[]
string
{
"-i"
}
...
...
@@ -124,7 +130,7 @@ func NetConnections(kind string) ([]NetConnectionStat, error) {
}
// we can not use -F filter to get all of required information at once.
r
,
err
:=
common
.
CallLsof
(
invoke
,
0
,
args
...
)
r
,
err
:=
common
.
CallLsof
(
invoke
,
pid
,
args
...
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
process/process_darwin.go
浏览文件 @
b3cf7354
...
...
@@ -286,7 +286,7 @@ func (p *Process) OpenFiles() ([]OpenFilesStat, error) {
}
func
(
p
*
Process
)
Connections
()
([]
net
.
NetConnectionStat
,
error
)
{
return
n
il
,
common
.
NotImplementedError
return
n
et
.
NetConnectionsPid
(
"all"
,
p
.
Pid
)
}
func
(
p
*
Process
)
IsRunning
()
(
bool
,
error
)
{
...
...
process/process_linux.go
浏览文件 @
b3cf7354
...
...
@@ -211,7 +211,7 @@ func (p *Process) OpenFiles() ([]OpenFilesStat, error) {
}
func
(
p
*
Process
)
Connections
()
([]
net
.
NetConnectionStat
,
error
)
{
return
n
il
,
common
.
NotImplementedError
return
n
et
.
NetConnectionsPid
(
"all"
,
p
.
Pid
)
}
func
(
p
*
Process
)
IsRunning
()
(
bool
,
error
)
{
...
...
process/process_test.go
浏览文件 @
b3cf7354
...
...
@@ -97,7 +97,7 @@ func Test_Process_MemoryInfo(t *testing.T) {
v
,
err
:=
p
.
MemoryInfo
()
if
err
!=
nil
{
t
.
Errorf
(
"geting
ppid
error %v"
,
err
)
t
.
Errorf
(
"geting
memory info
error %v"
,
err
)
}
empty
:=
MemoryInfoStat
{}
if
v
==
nil
||
*
v
==
empty
{
...
...
@@ -110,7 +110,7 @@ func Test_Process_CmdLine(t *testing.T) {
v
,
err
:=
p
.
Cmdline
()
if
err
!=
nil
{
t
.
Errorf
(
"geting
ppid
error %v"
,
err
)
t
.
Errorf
(
"geting
cmdline
error %v"
,
err
)
}
if
!
strings
.
Contains
(
v
,
"process.test"
)
{
t
.
Errorf
(
"invalid cmd line %v"
,
v
)
...
...
@@ -134,7 +134,7 @@ func Test_Process_Status(t *testing.T) {
v
,
err
:=
p
.
Status
()
if
err
!=
nil
{
t
.
Errorf
(
"geting
ppid
error %v"
,
err
)
t
.
Errorf
(
"geting
status
error %v"
,
err
)
}
if
!
strings
.
HasPrefix
(
v
,
"S"
)
&&
v
!=
"running"
&&
v
!=
"sleeping"
{
t
.
Errorf
(
"could not get state %v"
,
v
)
...
...
@@ -289,3 +289,18 @@ func Test_Parent(t *testing.T) {
t
.
Fatalf
(
"wrong parent pid"
)
}
}
func
Test_Connections
(
t
*
testing
.
T
)
{
p
:=
testGetProcess
()
c
,
err
:=
p
.
Connections
()
if
err
!=
nil
{
t
.
Fatalf
(
"error %v"
,
err
)
}
// TODO:
// Since go test open no conneciton, ret is empty.
// should invoke child process or other solutions.
if
len
(
c
)
!=
0
{
t
.
Fatalf
(
"wrong connections"
)
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录