正在显示
7 个修改的文件
包含
121 行增加
和
15 行删除
| @@ -1263,12 +1263,12 @@ void SrsConfig::print_help(char** argv) | @@ -1263,12 +1263,12 @@ void SrsConfig::print_help(char** argv) | ||
| 1263 | argv[0], argv[0], argv[0], argv[0]); | 1263 | argv[0], argv[0], argv[0], argv[0]); |
| 1264 | } | 1264 | } |
| 1265 | 1265 | ||
| 1266 | -string SrsConfig::get_cwd() | 1266 | +string SrsConfig::cwd() |
| 1267 | { | 1267 | { |
| 1268 | return _cwd; | 1268 | return _cwd; |
| 1269 | } | 1269 | } |
| 1270 | 1270 | ||
| 1271 | -string SrsConfig::get_argv() | 1271 | +string SrsConfig::argv() |
| 1272 | { | 1272 | { |
| 1273 | return _argv; | 1273 | return _argv; |
| 1274 | } | 1274 | } |
| @@ -149,8 +149,8 @@ private: | @@ -149,8 +149,8 @@ private: | ||
| 149 | virtual int parse_argv(int& i, char** argv); | 149 | virtual int parse_argv(int& i, char** argv); |
| 150 | virtual void print_help(char** argv); | 150 | virtual void print_help(char** argv); |
| 151 | public: | 151 | public: |
| 152 | - virtual std::string get_cwd(); | ||
| 153 | - virtual std::string get_argv(); | 152 | + virtual std::string cwd(); |
| 153 | + virtual std::string argv(); | ||
| 154 | // global section | 154 | // global section |
| 155 | public: | 155 | public: |
| 156 | virtual SrsConfDirective* get_root(); | 156 | virtual SrsConfDirective* get_root(); |
| @@ -205,12 +205,16 @@ int SrsApiSummaries::do_process_request(SrsSocket* skt, SrsHttpMessage* req) | @@ -205,12 +205,16 @@ int SrsApiSummaries::do_process_request(SrsSocket* skt, SrsHttpMessage* req) | ||
| 205 | SrsProcSystemStat* s = srs_get_system_proc_stat(); | 205 | SrsProcSystemStat* s = srs_get_system_proc_stat(); |
| 206 | SrsCpuInfo* c = srs_get_cpuinfo(); | 206 | SrsCpuInfo* c = srs_get_cpuinfo(); |
| 207 | SrsMemInfo* m = srs_get_meminfo(); | 207 | SrsMemInfo* m = srs_get_meminfo(); |
| 208 | + SrsPlatformInfo* p = srs_get_platform_info(); | ||
| 208 | 209 | ||
| 209 | float self_mem_percent = 0; | 210 | float self_mem_percent = 0; |
| 210 | if (m->MemTotal > 0) { | 211 | if (m->MemTotal > 0) { |
| 211 | self_mem_percent = (float)(r->r.ru_maxrss / (double)m->MemTotal); | 212 | self_mem_percent = (float)(r->r.ru_maxrss / (double)m->MemTotal); |
| 212 | } | 213 | } |
| 213 | 214 | ||
| 215 | + int64_t now = srs_get_system_time_ms(); | ||
| 216 | + double srs_uptime = (now - p->srs_startup_time) / 100 / 10.0; | ||
| 217 | + | ||
| 214 | ss << JOBJECT_START | 218 | ss << JOBJECT_START |
| 215 | << JFIELD_ERROR(ERROR_SUCCESS) << JFIELD_CONT | 219 | << JFIELD_ERROR(ERROR_SUCCESS) << JFIELD_CONT |
| 216 | << JFIELD_ORG("data", JOBJECT_START) | 220 | << JFIELD_ORG("data", JOBJECT_START) |
| @@ -219,14 +223,17 @@ int SrsApiSummaries::do_process_request(SrsSocket* skt, SrsHttpMessage* req) | @@ -219,14 +223,17 @@ int SrsApiSummaries::do_process_request(SrsSocket* skt, SrsHttpMessage* req) | ||
| 219 | << JFIELD_ORG("system_cpu_stat_ok", (s->ok? "true":"false")) << JFIELD_CONT | 223 | << JFIELD_ORG("system_cpu_stat_ok", (s->ok? "true":"false")) << JFIELD_CONT |
| 220 | << JFIELD_ORG("cpuinfo_ok", (c->ok? "true":"false")) << JFIELD_CONT | 224 | << JFIELD_ORG("cpuinfo_ok", (c->ok? "true":"false")) << JFIELD_CONT |
| 221 | << JFIELD_ORG("meminfo_ok", (m->ok? "true":"false")) << JFIELD_CONT | 225 | << JFIELD_ORG("meminfo_ok", (m->ok? "true":"false")) << JFIELD_CONT |
| 226 | + << JFIELD_ORG("platform_ok", (p->ok? "true":"false")) << JFIELD_CONT | ||
| 227 | + << JFIELD_ORG("now", now) << JFIELD_CONT | ||
| 222 | << JFIELD_ORG("self", JOBJECT_START) | 228 | << JFIELD_ORG("self", JOBJECT_START) |
| 223 | << JFIELD_ORG("pid", getpid()) << JFIELD_CONT | 229 | << JFIELD_ORG("pid", getpid()) << JFIELD_CONT |
| 224 | << JFIELD_ORG("ppid", u->ppid) << JFIELD_CONT | 230 | << JFIELD_ORG("ppid", u->ppid) << JFIELD_CONT |
| 225 | - << JFIELD_STR("argv", _srs_config->get_argv()) << JFIELD_CONT | ||
| 226 | - << JFIELD_STR("cwd", _srs_config->get_cwd()) << JFIELD_CONT | 231 | + << JFIELD_STR("argv", _srs_config->argv()) << JFIELD_CONT |
| 232 | + << JFIELD_STR("cwd", _srs_config->cwd()) << JFIELD_CONT | ||
| 227 | << JFIELD_ORG("mem_kbyte", r->r.ru_maxrss) << JFIELD_CONT | 233 | << JFIELD_ORG("mem_kbyte", r->r.ru_maxrss) << JFIELD_CONT |
| 228 | << JFIELD_ORG("mem_percent", self_mem_percent) << JFIELD_CONT | 234 | << JFIELD_ORG("mem_percent", self_mem_percent) << JFIELD_CONT |
| 229 | - << JFIELD_ORG("cpu_percent", u->percent) | 235 | + << JFIELD_ORG("cpu_percent", u->percent) << JFIELD_CONT |
| 236 | + << JFIELD_ORG("srs_uptime", srs_uptime) | ||
| 230 | << JOBJECT_END << JFIELD_CONT | 237 | << JOBJECT_END << JFIELD_CONT |
| 231 | << JFIELD_ORG("system", JOBJECT_START) | 238 | << JFIELD_ORG("system", JOBJECT_START) |
| 232 | << JFIELD_ORG("cpu_percent", s->percent) << JFIELD_CONT | 239 | << JFIELD_ORG("cpu_percent", s->percent) << JFIELD_CONT |
| @@ -234,8 +241,13 @@ int SrsApiSummaries::do_process_request(SrsSocket* skt, SrsHttpMessage* req) | @@ -234,8 +241,13 @@ int SrsApiSummaries::do_process_request(SrsSocket* skt, SrsHttpMessage* req) | ||
| 234 | << JFIELD_ORG("mem_ram_percent", m->percent_ram) << JFIELD_CONT | 241 | << JFIELD_ORG("mem_ram_percent", m->percent_ram) << JFIELD_CONT |
| 235 | << JFIELD_ORG("mem_swap_kbyte", m->SwapTotal) << JFIELD_CONT | 242 | << JFIELD_ORG("mem_swap_kbyte", m->SwapTotal) << JFIELD_CONT |
| 236 | << JFIELD_ORG("mem_swap_percent", m->percent_swap) << JFIELD_CONT | 243 | << JFIELD_ORG("mem_swap_percent", m->percent_swap) << JFIELD_CONT |
| 237 | - << JFIELD_ORG("nb_processors", c->nb_processors) << JFIELD_CONT | ||
| 238 | - << JFIELD_ORG("nb_processors_online", c->nb_processors_online) | 244 | + << JFIELD_ORG("cpus", c->nb_processors) << JFIELD_CONT |
| 245 | + << JFIELD_ORG("cpus_online", c->nb_processors_online) << JFIELD_CONT | ||
| 246 | + << JFIELD_ORG("uptime", p->os_uptime) << JFIELD_CONT | ||
| 247 | + << JFIELD_ORG("ilde_time", p->os_ilde_time) << JFIELD_CONT | ||
| 248 | + << JFIELD_ORG("load_1m", p->load_one_minutes) << JFIELD_CONT | ||
| 249 | + << JFIELD_ORG("load_5m", p->load_five_minutes) << JFIELD_CONT | ||
| 250 | + << JFIELD_ORG("load_15m", p->load_fifteen_minutes) | ||
| 239 | << JOBJECT_END | 251 | << JOBJECT_END |
| 240 | << JOBJECT_END | 252 | << JOBJECT_END |
| 241 | << JOBJECT_END; | 253 | << JOBJECT_END; |
| @@ -479,7 +479,7 @@ void SrsHttpHooks::on_dvr_hss_reap_flv_header(std::string url, SrsRequest* req, | @@ -479,7 +479,7 @@ void SrsHttpHooks::on_dvr_hss_reap_flv_header(std::string url, SrsRequest* req, | ||
| 479 | << JFIELD_STR("app", req->app) << JFIELD_CONT | 479 | << JFIELD_STR("app", req->app) << JFIELD_CONT |
| 480 | << JFIELD_STR("stream", req->stream) << JFIELD_CONT | 480 | << JFIELD_STR("stream", req->stream) << JFIELD_CONT |
| 481 | << JFIELD_NAME("segment") << JOBJECT_START | 481 | << JFIELD_NAME("segment") << JOBJECT_START |
| 482 | - << JFIELD_STR("cwd", _srs_config->get_cwd()) << JFIELD_CONT | 482 | + << JFIELD_STR("cwd", _srs_config->cwd()) << JFIELD_CONT |
| 483 | << JFIELD_STR("path", header_file) | 483 | << JFIELD_STR("path", header_file) |
| 484 | << JOBJECT_END | 484 | << JOBJECT_END |
| 485 | << JOBJECT_END; | 485 | << JOBJECT_END; |
| @@ -532,7 +532,7 @@ void SrsHttpHooks::on_dvr_hss_reap_flv(string url, SrsRequest* req, SrsFlvSegmen | @@ -532,7 +532,7 @@ void SrsHttpHooks::on_dvr_hss_reap_flv(string url, SrsRequest* req, SrsFlvSegmen | ||
| 532 | << JFIELD_STR("app", req->app) << JFIELD_CONT | 532 | << JFIELD_STR("app", req->app) << JFIELD_CONT |
| 533 | << JFIELD_STR("stream", req->stream) << JFIELD_CONT | 533 | << JFIELD_STR("stream", req->stream) << JFIELD_CONT |
| 534 | << JFIELD_NAME("segment") << JOBJECT_START | 534 | << JFIELD_NAME("segment") << JOBJECT_START |
| 535 | - << JFIELD_STR("cwd", _srs_config->get_cwd()) << JFIELD_CONT | 535 | + << JFIELD_STR("cwd", _srs_config->cwd()) << JFIELD_CONT |
| 536 | << JFIELD_STR("path", segment->path) << JFIELD_CONT | 536 | << JFIELD_STR("path", segment->path) << JFIELD_CONT |
| 537 | << JFIELD_ORG("duration", segment->duration) << JFIELD_CONT | 537 | << JFIELD_ORG("duration", segment->duration) << JFIELD_CONT |
| 538 | << JFIELD_ORG("offset", segment->sequence_header_offset) << JFIELD_CONT | 538 | << JFIELD_ORG("offset", segment->sequence_header_offset) << JFIELD_CONT |
| @@ -71,6 +71,10 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -71,6 +71,10 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
| 71 | // SRS_SYS_CYCLE_INTERVAL * SRS_SYS_MEMINFO_RESOLUTION_TIMES | 71 | // SRS_SYS_CYCLE_INTERVAL * SRS_SYS_MEMINFO_RESOLUTION_TIMES |
| 72 | #define SRS_SYS_MEMINFO_RESOLUTION_TIMES 60 | 72 | #define SRS_SYS_MEMINFO_RESOLUTION_TIMES 60 |
| 73 | 73 | ||
| 74 | +// update platform info interval: | ||
| 75 | +// SRS_SYS_CYCLE_INTERVAL * SRS_SYS_PLATFORM_INFO_RESOLUTION_TIMES | ||
| 76 | +#define SRS_SYS_PLATFORM_INFO_RESOLUTION_TIMES 80 | ||
| 77 | + | ||
| 74 | SrsListener::SrsListener(SrsServer* server, SrsListenerType type) | 78 | SrsListener::SrsListener(SrsServer* server, SrsListenerType type) |
| 75 | { | 79 | { |
| 76 | fd = -1; | 80 | fd = -1; |
| @@ -623,6 +627,7 @@ int SrsServer::do_cycle() | @@ -623,6 +627,7 @@ int SrsServer::do_cycle() | ||
| 623 | max = srs_max(max, SRS_SYS_RUSAGE_RESOLUTION_TIMES); | 627 | max = srs_max(max, SRS_SYS_RUSAGE_RESOLUTION_TIMES); |
| 624 | max = srs_max(max, SRS_SYS_CPU_STAT_RESOLUTION_TIMES); | 628 | max = srs_max(max, SRS_SYS_CPU_STAT_RESOLUTION_TIMES); |
| 625 | max = srs_max(max, SRS_SYS_MEMINFO_RESOLUTION_TIMES); | 629 | max = srs_max(max, SRS_SYS_MEMINFO_RESOLUTION_TIMES); |
| 630 | + max = srs_max(max, SRS_SYS_PLATFORM_INFO_RESOLUTION_TIMES); | ||
| 626 | 631 | ||
| 627 | // the deamon thread, update the time cache | 632 | // the deamon thread, update the time cache |
| 628 | while (true) { | 633 | while (true) { |
| @@ -665,6 +670,9 @@ int SrsServer::do_cycle() | @@ -665,6 +670,9 @@ int SrsServer::do_cycle() | ||
| 665 | if ((i % SRS_SYS_MEMINFO_RESOLUTION_TIMES) == 0) { | 670 | if ((i % SRS_SYS_MEMINFO_RESOLUTION_TIMES) == 0) { |
| 666 | srs_update_meminfo(); | 671 | srs_update_meminfo(); |
| 667 | } | 672 | } |
| 673 | + if ((i % SRS_SYS_PLATFORM_INFO_RESOLUTION_TIMES) == 0) { | ||
| 674 | + srs_update_platform_info(); | ||
| 675 | + } | ||
| 668 | } | 676 | } |
| 669 | } | 677 | } |
| 670 | 678 |
| @@ -224,13 +224,13 @@ bool get_proc_self_stat(SrsProcSelfStat& r) | @@ -224,13 +224,13 @@ bool get_proc_self_stat(SrsProcSelfStat& r) | ||
| 224 | &r.wchan, &r.nswap, &r.cnswap, &r.exit_signal, &r.processor, | 224 | &r.wchan, &r.nswap, &r.cnswap, &r.exit_signal, &r.processor, |
| 225 | &r.rt_priority, &r.policy, &r.delayacct_blkio_ticks, | 225 | &r.rt_priority, &r.policy, &r.delayacct_blkio_ticks, |
| 226 | &r.guest_time, &r.cguest_time); | 226 | &r.guest_time, &r.cguest_time); |
| 227 | + | ||
| 228 | + fclose(f); | ||
| 227 | 229 | ||
| 228 | if (ret >= 0) { | 230 | if (ret >= 0) { |
| 229 | r.ok = true; | 231 | r.ok = true; |
| 230 | } | 232 | } |
| 231 | 233 | ||
| 232 | - fclose(f); | ||
| 233 | - | ||
| 234 | return r.ok; | 234 | return r.ok; |
| 235 | } | 235 | } |
| 236 | 236 | ||
| @@ -349,6 +349,8 @@ void srs_update_meminfo() | @@ -349,6 +349,8 @@ void srs_update_meminfo() | ||
| 349 | } | 349 | } |
| 350 | } | 350 | } |
| 351 | 351 | ||
| 352 | + fclose(f); | ||
| 353 | + | ||
| 352 | r.sample_time = srs_get_system_time_ms(); | 354 | r.sample_time = srs_get_system_time_ms(); |
| 353 | r.MemActive = r.MemTotal - r.MemFree; | 355 | r.MemActive = r.MemTotal - r.MemFree; |
| 354 | r.RealInUse = r.MemActive - r.Buffers - r.Cached; | 356 | r.RealInUse = r.MemActive - r.Buffers - r.Cached; |
| @@ -361,8 +363,6 @@ void srs_update_meminfo() | @@ -361,8 +363,6 @@ void srs_update_meminfo() | ||
| 361 | if (r.SwapTotal > 0) { | 363 | if (r.SwapTotal > 0) { |
| 362 | r.percent_swap = (float)((r.SwapTotal - r.SwapFree) / (double)r.SwapTotal); | 364 | r.percent_swap = (float)((r.SwapTotal - r.SwapFree) / (double)r.SwapTotal); |
| 363 | } | 365 | } |
| 364 | - | ||
| 365 | - fclose(f); | ||
| 366 | } | 366 | } |
| 367 | 367 | ||
| 368 | SrsCpuInfo::SrsCpuInfo() | 368 | SrsCpuInfo::SrsCpuInfo() |
| @@ -388,3 +388,63 @@ SrsCpuInfo* srs_get_cpuinfo() | @@ -388,3 +388,63 @@ SrsCpuInfo* srs_get_cpuinfo() | ||
| 388 | 388 | ||
| 389 | return cpu; | 389 | return cpu; |
| 390 | } | 390 | } |
| 391 | + | ||
| 392 | +SrsPlatformInfo::SrsPlatformInfo() | ||
| 393 | +{ | ||
| 394 | + ok = false; | ||
| 395 | + | ||
| 396 | + srs_startup_time = srs_get_system_time_ms(); | ||
| 397 | + | ||
| 398 | + os_uptime = 0; | ||
| 399 | + os_ilde_time = 0; | ||
| 400 | + | ||
| 401 | + load_one_minutes = 0; | ||
| 402 | + load_five_minutes = 0; | ||
| 403 | + load_fifteen_minutes = 0; | ||
| 404 | +} | ||
| 405 | + | ||
| 406 | +static SrsPlatformInfo _srs_system_platform_info; | ||
| 407 | + | ||
| 408 | +SrsPlatformInfo* srs_get_platform_info() | ||
| 409 | +{ | ||
| 410 | + return &_srs_system_platform_info; | ||
| 411 | +} | ||
| 412 | + | ||
| 413 | +void srs_update_platform_info() | ||
| 414 | +{ | ||
| 415 | + SrsPlatformInfo& r = _srs_system_platform_info; | ||
| 416 | + r.ok = true; | ||
| 417 | + | ||
| 418 | + if (true) { | ||
| 419 | + FILE* f = fopen("/proc/uptime", "r"); | ||
| 420 | + if (f == NULL) { | ||
| 421 | + srs_warn("open uptime failed, ignore"); | ||
| 422 | + return; | ||
| 423 | + } | ||
| 424 | + | ||
| 425 | + int ret = fscanf(f, "%lf %lf\n", &r.os_uptime, &r.os_ilde_time); | ||
| 426 | + | ||
| 427 | + fclose(f); | ||
| 428 | + | ||
| 429 | + if (ret < 0) { | ||
| 430 | + r.ok = false; | ||
| 431 | + } | ||
| 432 | + } | ||
| 433 | + | ||
| 434 | + if (true) { | ||
| 435 | + FILE* f = fopen("/proc/loadavg", "r"); | ||
| 436 | + if (f == NULL) { | ||
| 437 | + srs_warn("open loadavg failed, ignore"); | ||
| 438 | + return; | ||
| 439 | + } | ||
| 440 | + | ||
| 441 | + int ret = fscanf(f, "%lf %lf %lf\n", | ||
| 442 | + &r.load_one_minutes, &r.load_five_minutes, &r.load_fifteen_minutes); | ||
| 443 | + | ||
| 444 | + fclose(f); | ||
| 445 | + | ||
| 446 | + if (ret < 0) { | ||
| 447 | + r.ok = false; | ||
| 448 | + } | ||
| 449 | + } | ||
| 450 | +} |
| @@ -313,4 +313,30 @@ struct SrsCpuInfo | @@ -313,4 +313,30 @@ struct SrsCpuInfo | ||
| 313 | // get system cpu info, use cache to avoid performance problem. | 313 | // get system cpu info, use cache to avoid performance problem. |
| 314 | extern SrsCpuInfo* srs_get_cpuinfo(); | 314 | extern SrsCpuInfo* srs_get_cpuinfo(); |
| 315 | 315 | ||
| 316 | +// platform(os, srs) summary | ||
| 317 | +struct SrsPlatformInfo | ||
| 318 | +{ | ||
| 319 | + // whether the data is ok. | ||
| 320 | + bool ok; | ||
| 321 | + | ||
| 322 | + // srs startup time, in ms. | ||
| 323 | + int64_t srs_startup_time; | ||
| 324 | + | ||
| 325 | + // @see: cat /proc/uptime | ||
| 326 | + double os_uptime; | ||
| 327 | + double os_ilde_time; | ||
| 328 | + | ||
| 329 | + // @see: cat /proc/loadavg | ||
| 330 | + double load_one_minutes; | ||
| 331 | + double load_five_minutes; | ||
| 332 | + double load_fifteen_minutes; | ||
| 333 | + | ||
| 334 | + SrsPlatformInfo(); | ||
| 335 | +}; | ||
| 336 | + | ||
| 337 | +// get platform info, use cache to avoid performance problem. | ||
| 338 | +extern SrsPlatformInfo* srs_get_platform_info(); | ||
| 339 | +// the deamon st-thread will update it. | ||
| 340 | +extern void srs_update_platform_info(); | ||
| 341 | + | ||
| 316 | #endif | 342 | #endif |
-
请 注册 或 登录 后发表评论