Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
胡斌
/
srs
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
winlin
2014-04-19 21:43:13 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
951a93ab866d5b158ffa05724a954723ed62f708
951a93ab
1 parent
117fd679
get self proc and system proc stat
隐藏空白字符变更
内嵌
并排对比
正在显示
5 个修改的文件
包含
156 行增加
和
20 行删除
trunk/src/app/srs_app_http_api.cpp
trunk/src/app/srs_app_http_api.hpp
trunk/src/app/srs_app_server.cpp
trunk/src/kernel/srs_kernel_utility.cpp
trunk/src/kernel/srs_kernel_utility.hpp
trunk/src/app/srs_app_http_api.cpp
查看文件 @
951a93a
...
...
@@ -118,6 +118,8 @@ SrsApiV1::SrsApiV1()
handlers
.
push_back
(
new
SrsApiVersion
());
handlers
.
push_back
(
new
SrsApiSummaries
());
handlers
.
push_back
(
new
SrsApiRusages
());
handlers
.
push_back
(
new
SrsApiSelfProcStats
());
handlers
.
push_back
(
new
SrsApiSystemProcStats
());
handlers
.
push_back
(
new
SrsApiAuthors
());
}
...
...
@@ -140,7 +142,8 @@ int SrsApiV1::do_process_request(SrsSocket* skt, SrsHttpMessage* req)
<<
JFIELD_STR
(
"versions"
,
"the version of SRS"
)
<<
JFIELD_CONT
<<
JFIELD_STR
(
"summaries"
,
"the summary(pid, argv, pwd, cpu, mem) of SRS"
)
<<
JFIELD_CONT
<<
JFIELD_STR
(
"rusages"
,
"the rusage of SRS"
)
<<
JFIELD_CONT
<<
JFIELD_STR
(
"proc_stats"
,
"the /proc/self/stat of SRS"
)
<<
JFIELD_CONT
<<
JFIELD_STR
(
"self_proc_stats"
,
"the self process stats"
)
<<
JFIELD_CONT
<<
JFIELD_STR
(
"system_proc_stats"
,
"the system process stats"
)
<<
JFIELD_CONT
<<
JFIELD_STR
(
"authors"
,
"the primary authors and contributors"
)
<<
JOBJECT_END
<<
JOBJECT_END
;
...
...
@@ -196,8 +199,8 @@ int SrsApiSummaries::do_process_request(SrsSocket* skt, SrsHttpMessage* req)
std
::
stringstream
ss
;
SrsRusage
*
r
=
srs_get_system_rusage
();
SrsCpuSelfStat
*
u
=
srs_get_self_cpu_stat
();
SrsCpuSystemStat
*
s
=
srs_get_system_cpu_stat
();
SrsProcSelfStat
*
u
=
srs_get_self_proc_stat
();
SrsProcSystemStat
*
s
=
srs_get_system_proc_stat
();
ss
<<
JOBJECT_START
<<
JFIELD_ERROR
(
ERROR_SUCCESS
)
<<
JFIELD_CONT
...
...
@@ -261,6 +264,117 @@ int SrsApiRusages::do_process_request(SrsSocket* skt, SrsHttpMessage* req)
return
res_json
(
skt
,
req
,
ss
.
str
());
}
SrsApiSelfProcStats
::
SrsApiSelfProcStats
()
{
}
SrsApiSelfProcStats
::~
SrsApiSelfProcStats
()
{
}
bool
SrsApiSelfProcStats
::
can_handle
(
const
char
*
path
,
int
length
,
const
char
**
/*pchild*/
)
{
return
srs_path_equals
(
"/self_proc_stats"
,
path
,
length
);
}
int
SrsApiSelfProcStats
::
do_process_request
(
SrsSocket
*
skt
,
SrsHttpMessage
*
req
)
{
std
::
stringstream
ss
;
SrsProcSelfStat
*
u
=
srs_get_self_proc_stat
();
ss
<<
JOBJECT_START
<<
JFIELD_ERROR
(
ERROR_SUCCESS
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"data"
,
JOBJECT_START
)
<<
JFIELD_ORG
(
"self_cpu_stat_ok"
,
(
u
->
ok
?
"true"
:
"false"
))
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"pid"
,
u
->
pid
)
<<
JFIELD_CONT
<<
JFIELD_STR
(
"comm"
,
u
->
comm
)
<<
JFIELD_CONT
<<
JFIELD_STR
(
"state"
,
u
->
state
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"ppid"
,
u
->
ppid
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"pgrp"
,
u
->
pgrp
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"session"
,
u
->
session
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"tty_nr"
,
u
->
tty_nr
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"tpgid"
,
u
->
tpgid
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"flags"
,
u
->
flags
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"minflt"
,
u
->
minflt
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"cminflt"
,
u
->
cminflt
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"majflt"
,
u
->
majflt
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"cmajflt"
,
u
->
cmajflt
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"utime"
,
u
->
utime
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"stime"
,
u
->
stime
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"cutime"
,
u
->
cutime
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"cstime"
,
u
->
cstime
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"priority"
,
u
->
priority
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"nice"
,
u
->
nice
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"num_threads"
,
u
->
num_threads
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"itrealvalue"
,
u
->
itrealvalue
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"starttime"
,
u
->
starttime
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"vsize"
,
u
->
vsize
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"rss"
,
u
->
rss
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"rsslim"
,
u
->
rsslim
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"startcode"
,
u
->
startcode
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"endcode"
,
u
->
endcode
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"startstack"
,
u
->
startstack
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"kstkesp"
,
u
->
kstkesp
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"kstkeip"
,
u
->
kstkeip
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"signal"
,
u
->
signal
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"blocked"
,
u
->
blocked
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"sigignore"
,
u
->
sigignore
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"sigcatch"
,
u
->
sigcatch
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"wchan"
,
u
->
wchan
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"nswap"
,
u
->
nswap
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"cnswap"
,
u
->
cnswap
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"exit_signal"
,
u
->
exit_signal
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"processor"
,
u
->
processor
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"rt_priority"
,
u
->
rt_priority
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"policy"
,
u
->
policy
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"delayacct_blkio_ticks"
,
u
->
delayacct_blkio_ticks
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"guest_time"
,
u
->
guest_time
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"cguest_time"
,
u
->
cguest_time
)
<<
JOBJECT_END
<<
JOBJECT_END
;
return
res_json
(
skt
,
req
,
ss
.
str
());
}
SrsApiSystemProcStats
::
SrsApiSystemProcStats
()
{
}
SrsApiSystemProcStats
::~
SrsApiSystemProcStats
()
{
}
bool
SrsApiSystemProcStats
::
can_handle
(
const
char
*
path
,
int
length
,
const
char
**
/*pchild*/
)
{
return
srs_path_equals
(
"/system_proc_stats"
,
path
,
length
);
}
int
SrsApiSystemProcStats
::
do_process_request
(
SrsSocket
*
skt
,
SrsHttpMessage
*
req
)
{
std
::
stringstream
ss
;
SrsProcSystemStat
*
s
=
srs_get_system_proc_stat
();
ss
<<
JOBJECT_START
<<
JFIELD_ERROR
(
ERROR_SUCCESS
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"data"
,
JOBJECT_START
)
<<
JFIELD_ORG
(
"system_cpu_stat_ok"
,
(
s
->
ok
?
"true"
:
"false"
))
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"user"
,
s
->
user
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"nice"
,
s
->
nice
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"sys"
,
s
->
sys
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"idle"
,
s
->
idle
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"iowait"
,
s
->
iowait
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"irq"
,
s
->
irq
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"softirq"
,
s
->
softirq
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"steal"
,
s
->
steal
)
<<
JFIELD_CONT
<<
JFIELD_ORG
(
"guest"
,
s
->
guest
)
<<
JOBJECT_END
<<
JOBJECT_END
;
return
res_json
(
skt
,
req
,
ss
.
str
());
}
SrsApiAuthors
::
SrsApiAuthors
()
{
}
...
...
trunk/src/app/srs_app_http_api.hpp
查看文件 @
951a93a
...
...
@@ -109,6 +109,28 @@ protected:
virtual
int
do_process_request
(
SrsSocket
*
skt
,
SrsHttpMessage
*
req
);
};
class
SrsApiSelfProcStats
:
public
SrsHttpHandler
{
public
:
SrsApiSelfProcStats
();
virtual
~
SrsApiSelfProcStats
();
public
:
virtual
bool
can_handle
(
const
char
*
path
,
int
length
,
const
char
**
pchild
);
protected
:
virtual
int
do_process_request
(
SrsSocket
*
skt
,
SrsHttpMessage
*
req
);
};
class
SrsApiSystemProcStats
:
public
SrsHttpHandler
{
public
:
SrsApiSystemProcStats
();
virtual
~
SrsApiSystemProcStats
();
public
:
virtual
bool
can_handle
(
const
char
*
path
,
int
length
,
const
char
**
pchild
);
protected
:
virtual
int
do_process_request
(
SrsSocket
*
skt
,
SrsHttpMessage
*
req
);
};
class
SrsApiAuthors
:
public
SrsHttpHandler
{
public
:
...
...
trunk/src/app/srs_app_server.cpp
查看文件 @
951a93a
...
...
@@ -447,7 +447,7 @@ int SrsServer::cycle()
srs_update_system_rusage
();
}
if
(
i
==
SRS_SYS_CPU_STAT_RESOLUTION_TIMES
)
{
srs_update_
system_cpu
_stat
();
srs_update_
proc
_stat
();
}
}
}
...
...
trunk/src/kernel/srs_kernel_utility.cpp
查看文件 @
951a93a
...
...
@@ -81,30 +81,30 @@ void srs_update_system_rusage()
_srs_system_rusage
.
ok
=
true
;
}
static
SrsCpuSelfStat
_srs_system_cpu_self_stat
;
static
SrsCpuSystemStat
_srs_system_cpu_system_stat
;
static
SrsProcSelfStat
_srs_system_cpu_self_stat
;
static
SrsProcSystemStat
_srs_system_cpu_system_stat
;
Srs
CpuSelfStat
::
SrsCpu
SelfStat
()
Srs
ProcSelfStat
::
SrsProc
SelfStat
()
{
ok
=
false
;
}
Srs
CpuSystemStat
::
SrsCpu
SystemStat
()
Srs
ProcSystemStat
::
SrsProc
SystemStat
()
{
ok
=
false
;
}
Srs
CpuSelfStat
*
srs_get_self_cpu
_stat
()
Srs
ProcSelfStat
*
srs_get_self_proc
_stat
()
{
return
&
_srs_system_cpu_self_stat
;
}
Srs
CpuSystemStat
*
srs_get_system_cpu
_stat
()
Srs
ProcSystemStat
*
srs_get_system_proc
_stat
()
{
return
&
_srs_system_cpu_system_stat
;
}
void
srs_update_
system_cpu
_stat
()
void
srs_update_
proc
_stat
()
{
// system cpu stat
if
(
true
)
{
...
...
@@ -114,7 +114,7 @@ void srs_update_system_cpu_stat()
return
;
}
Srs
Cpu
SystemStat
&
r
=
_srs_system_cpu_system_stat
;
Srs
Proc
SystemStat
&
r
=
_srs_system_cpu_system_stat
;
for
(;;)
{
int
ret
=
fscanf
(
f
,
"%4s %lu %lu %lu %lu %lu "
"%lu %lu %lu %lu
\n
"
,
...
...
@@ -143,7 +143,7 @@ void srs_update_system_cpu_stat()
return
;
}
Srs
Cpu
SelfStat
&
r
=
_srs_system_cpu_self_stat
;
Srs
Proc
SelfStat
&
r
=
_srs_system_cpu_self_stat
;
int
ret
=
fscanf
(
f
,
"%d %32s %c %d %d %d %d "
"%d %u %lu %lu %lu %lu "
"%lu %lu %ld %ld %ld %ld "
...
...
trunk/src/kernel/srs_kernel_utility.hpp
查看文件 @
951a93a
...
...
@@ -52,7 +52,7 @@ extern SrsRusage* srs_get_system_rusage();
extern
void
srs_update_system_rusage
();
// @see: man 5 proc, /proc/[pid]/stat
struct
Srs
Cpu
SelfStat
struct
Srs
Proc
SelfStat
{
// whether the data is ok.
bool
ok
;
...
...
@@ -195,11 +195,11 @@ struct SrsCpuSelfStat
// Guest time of the process’s children, measured in clock ticks (divide by sysconf(_SC_CLK_TCK).
long
cguest_time
;
Srs
Cpu
SelfStat
();
Srs
Proc
SelfStat
();
};
// @see: man 5 proc, /proc/stat
struct
Srs
Cpu
SystemStat
struct
Srs
Proc
SystemStat
{
// whether the data is ok.
bool
ok
;
...
...
@@ -238,14 +238,14 @@ struct SrsCpuSystemStat
// operating systems under the control of the Linux kernel.
unsigned
long
guest
;
Srs
Cpu
SystemStat
();
Srs
Proc
SystemStat
();
};
// get system cpu stat, use cache to avoid performance problem.
extern
Srs
CpuSelfStat
*
srs_get_self_cpu
_stat
();
extern
Srs
ProcSelfStat
*
srs_get_self_proc
_stat
();
// get system cpu stat, use cache to avoid performance problem.
extern
Srs
CpuSystemStat
*
srs_get_system_cpu
_stat
();
extern
Srs
ProcSystemStat
*
srs_get_system_proc
_stat
();
// the deamon st-thread will update it.
extern
void
srs_update_
system_cpu
_stat
();
extern
void
srs_update_
proc
_stat
();
#endif
...
...
请
注册
或
登录
后发表评论