1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

add cpu stat

This commit is contained in:
winlin 2014-04-19 21:23:34 +08:00
parent 4c5aae7804
commit 117fd67950
7 changed files with 510 additions and 14 deletions

View file

@ -34,6 +34,8 @@ using namespace std;
#include <srs_app_socket.hpp>
#include <srs_core_autofree.hpp>
#include <srs_app_json.hpp>
#include <srs_app_config.hpp>
#include <srs_kernel_utility.hpp>
SrsApiRoot::SrsApiRoot()
{
@ -114,6 +116,8 @@ int SrsApiApi::do_process_request(SrsSocket* skt, SrsHttpMessage* req)
SrsApiV1::SrsApiV1()
{
handlers.push_back(new SrsApiVersion());
handlers.push_back(new SrsApiSummaries());
handlers.push_back(new SrsApiRusages());
handlers.push_back(new SrsApiAuthors());
}
@ -134,6 +138,9 @@ int SrsApiV1::do_process_request(SrsSocket* skt, SrsHttpMessage* req)
<< JFIELD_ERROR(ERROR_SUCCESS) << JFIELD_CONT
<< JFIELD_ORG("urls", JOBJECT_START)
<< 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("authors", "the primary authors and contributors")
<< JOBJECT_END
<< JOBJECT_END;
@ -171,6 +178,89 @@ int SrsApiVersion::do_process_request(SrsSocket* skt, SrsHttpMessage* req)
return res_json(skt, req, ss.str());
}
SrsApiSummaries::SrsApiSummaries()
{
}
SrsApiSummaries::~SrsApiSummaries()
{
}
bool SrsApiSummaries::can_handle(const char* path, int length, const char** /*pchild*/)
{
return srs_path_equals("/summaries", path, length);
}
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();
ss << JOBJECT_START
<< JFIELD_ERROR(ERROR_SUCCESS) << JFIELD_CONT
<< JFIELD_ORG("data", JOBJECT_START)
<< JFIELD_ORG("pid", getpid()) << JFIELD_CONT
<< JFIELD_STR("argv", _srs_config->get_argv()) << JFIELD_CONT
<< JFIELD_STR("cwd", _srs_config->get_cwd()) << JFIELD_CONT
<< JFIELD_ORG("rusage_ok", (r->ok? "true":"false")) << JFIELD_CONT
<< JFIELD_ORG("self_cpu_stat_ok", (u->ok? "true":"false")) << JFIELD_CONT
<< JFIELD_ORG("system_cpu_stat_ok", (s->ok? "true":"false")) << JFIELD_CONT
<< JFIELD_ORG("mem_kbyte", r->r.ru_maxrss) << JFIELD_CONT
<< JFIELD_ORG("ppid", u->ppid)
<< JOBJECT_END
<< JOBJECT_END;
return res_json(skt, req, ss.str());
}
SrsApiRusages::SrsApiRusages()
{
}
SrsApiRusages::~SrsApiRusages()
{
}
bool SrsApiRusages::can_handle(const char* path, int length, const char** /*pchild*/)
{
return srs_path_equals("/rusages", path, length);
}
int SrsApiRusages::do_process_request(SrsSocket* skt, SrsHttpMessage* req)
{
std::stringstream ss;
SrsRusage* r = srs_get_system_rusage();
ss << JOBJECT_START
<< JFIELD_ERROR(ERROR_SUCCESS) << JFIELD_CONT
<< JFIELD_ORG("data", JOBJECT_START)
<< JFIELD_ORG("rusage_ok", (r->ok? "true":"false")) << JFIELD_CONT
<< JFIELD_ORG("ru_utime", r->r.ru_utime.tv_sec) << JFIELD_CONT
<< JFIELD_ORG("ru_stime", r->r.ru_stime.tv_sec) << JFIELD_CONT
<< JFIELD_ORG("ru_maxrss", r->r.ru_maxrss) << JFIELD_CONT
<< JFIELD_ORG("ru_ixrss", r->r.ru_ixrss) << JFIELD_CONT
<< JFIELD_ORG("ru_idrss", r->r.ru_idrss) << JFIELD_CONT
<< JFIELD_ORG("ru_isrss", r->r.ru_isrss) << JFIELD_CONT
<< JFIELD_ORG("ru_minflt", r->r.ru_minflt) << JFIELD_CONT
<< JFIELD_ORG("ru_majflt", r->r.ru_majflt) << JFIELD_CONT
<< JFIELD_ORG("ru_nswap", r->r.ru_nswap) << JFIELD_CONT
<< JFIELD_ORG("ru_inblock", r->r.ru_inblock) << JFIELD_CONT
<< JFIELD_ORG("ru_oublock", r->r.ru_oublock) << JFIELD_CONT
<< JFIELD_ORG("ru_msgsnd", r->r.ru_msgsnd) << JFIELD_CONT
<< JFIELD_ORG("ru_msgrcv", r->r.ru_msgrcv) << JFIELD_CONT
<< JFIELD_ORG("ru_nsignals", r->r.ru_nsignals) << JFIELD_CONT
<< JFIELD_ORG("ru_nvcsw", r->r.ru_nvcsw) << JFIELD_CONT
<< JFIELD_ORG("ru_nivcsw", r->r.ru_nivcsw)
<< JOBJECT_END
<< JOBJECT_END;
return res_json(skt, req, ss.str());
}
SrsApiAuthors::SrsApiAuthors()
{
}