get self proc and system proc stat

pull/133/head
winlin 11 years ago
parent 117fd67950
commit 951a93ab86

@ -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()
{
}

@ -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:

@ -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();
}
}
}

@ -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;
SrsCpuSelfStat::SrsCpuSelfStat()
SrsProcSelfStat::SrsProcSelfStat()
{
ok = false;
}
SrsCpuSystemStat::SrsCpuSystemStat()
SrsProcSystemStat::SrsProcSystemStat()
{
ok = false;
}
SrsCpuSelfStat* srs_get_self_cpu_stat()
SrsProcSelfStat* srs_get_self_proc_stat()
{
return &_srs_system_cpu_self_stat;
}
SrsCpuSystemStat* srs_get_system_cpu_stat()
SrsProcSystemStat* 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;
}
SrsCpuSystemStat& r = _srs_system_cpu_system_stat;
SrsProcSystemStat& 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;
}
SrsCpuSelfStat& r = _srs_system_cpu_self_stat;
SrsProcSelfStat& 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 "

@ -52,7 +52,7 @@ extern SrsRusage* srs_get_system_rusage();
extern void srs_update_system_rusage();
// @see: man 5 proc, /proc/[pid]/stat
struct SrsCpuSelfStat
struct SrsProcSelfStat
{
// whether the data is ok.
bool ok;
@ -195,11 +195,11 @@ struct SrsCpuSelfStat
// Guest time of the processs children, measured in clock ticks (divide by sysconf(_SC_CLK_TCK).
long cguest_time;
SrsCpuSelfStat();
SrsProcSelfStat();
};
// @see: man 5 proc, /proc/stat
struct SrsCpuSystemStat
struct SrsProcSystemStat
{
// 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;
SrsCpuSystemStat();
SrsProcSystemStat();
};
// get system cpu stat, use cache to avoid performance problem.
extern SrsCpuSelfStat* srs_get_self_cpu_stat();
extern SrsProcSelfStat* srs_get_self_proc_stat();
// get system cpu stat, use cache to avoid performance problem.
extern SrsCpuSystemStat* srs_get_system_cpu_stat();
extern SrsProcSystemStat* 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

Loading…
Cancel
Save