正在显示
6 个修改的文件
包含
97 行增加
和
15 行删除
| @@ -240,6 +240,7 @@ Supported operating systems and hardware: | @@ -240,6 +240,7 @@ Supported operating systems and hardware: | ||
| 240 | * 2013-10-17, Created.<br/> | 240 | * 2013-10-17, Created.<br/> |
| 241 | 241 | ||
| 242 | ## History | 242 | ## History |
| 243 | +* v1.0, 2014-06-19, add connections count to api summaries. 0.9.127 | ||
| 243 | * v1.0, 2014-06-19, add srs bytes and kbps to api summaries. 0.9.126 | 244 | * v1.0, 2014-06-19, add srs bytes and kbps to api summaries. 0.9.126 |
| 244 | * v1.0, 2014-06-18, add network bytes to api summaries. 0.9.125 | 245 | * v1.0, 2014-06-18, add network bytes to api summaries. 0.9.125 |
| 245 | * v1.0, 2014-06-14, fix [#98](https://github.com/winlinvip/simple-rtmp-server/issues/98), workaround for librtmp ping(fmt=1,cid=2 fresh stream). 0.9.124 | 246 | * v1.0, 2014-06-14, fix [#98](https://github.com/winlinvip/simple-rtmp-server/issues/98), workaround for librtmp ping(fmt=1,cid=2 fresh stream). 0.9.124 |
| @@ -462,7 +462,12 @@ int SrsApiSummaries::do_process_request(SrsSocket* skt, SrsHttpMessage* req) | @@ -462,7 +462,12 @@ int SrsApiSummaries::do_process_request(SrsSocket* skt, SrsHttpMessage* req) | ||
| 462 | << JFIELD_ORG("srs_recv_bytes", nrs->rbytes) << JFIELD_CONT | 462 | << JFIELD_ORG("srs_recv_bytes", nrs->rbytes) << JFIELD_CONT |
| 463 | << JFIELD_ORG("srs_recv_kbps", nrs->rkbps) << JFIELD_CONT | 463 | << JFIELD_ORG("srs_recv_kbps", nrs->rkbps) << JFIELD_CONT |
| 464 | << JFIELD_ORG("srs_send_bytes", nrs->sbytes) << JFIELD_CONT | 464 | << JFIELD_ORG("srs_send_bytes", nrs->sbytes) << JFIELD_CONT |
| 465 | - << JFIELD_ORG("srs_send_kbps", nrs->skbps) | 465 | + << JFIELD_ORG("srs_send_kbps", nrs->skbps) << JFIELD_CONT |
| 466 | + << JFIELD_ORG("conn_sys", nrs->nb_conn_sys) << JFIELD_CONT | ||
| 467 | + << JFIELD_ORG("conn_sys_et", nrs->nb_conn_sys_et) << JFIELD_CONT | ||
| 468 | + << JFIELD_ORG("conn_sys_tw", nrs->nb_conn_sys_tw) << JFIELD_CONT | ||
| 469 | + << JFIELD_ORG("conn_sys_ls", nrs->nb_conn_sys_ls) << JFIELD_CONT | ||
| 470 | + << JFIELD_ORG("conn_srs", nrs->nb_conn_srs) | ||
| 466 | << JOBJECT_END | 471 | << JOBJECT_END |
| 467 | << JOBJECT_END | 472 | << JOBJECT_END |
| 468 | << JOBJECT_END; | 473 | << JOBJECT_END; |
| @@ -733,7 +733,7 @@ int SrsServer::do_cycle() | @@ -733,7 +733,7 @@ int SrsServer::do_cycle() | ||
| 733 | if ((i % SRS_SYS_NETWORK_RTMP_SERVER_RESOLUTION_TIMES) == 0) { | 733 | if ((i % SRS_SYS_NETWORK_RTMP_SERVER_RESOLUTION_TIMES) == 0) { |
| 734 | srs_info("update network rtmp server info."); | 734 | srs_info("update network rtmp server info."); |
| 735 | resample_kbps(NULL); | 735 | resample_kbps(NULL); |
| 736 | - srs_update_rtmp_server(kbps); | 736 | + srs_update_rtmp_server((int)conns.size(), kbps); |
| 737 | } | 737 | } |
| 738 | #ifdef SRS_AUTO_HTTP_PARSER | 738 | #ifdef SRS_AUTO_HTTP_PARSER |
| 739 | if (_srs_config->get_heartbeat_enabled()) { | 739 | if (_srs_config->get_heartbeat_enabled()) { |
| @@ -528,6 +528,8 @@ SrsNetworkRtmpServer::SrsNetworkRtmpServer() | @@ -528,6 +528,8 @@ SrsNetworkRtmpServer::SrsNetworkRtmpServer() | ||
| 528 | { | 528 | { |
| 529 | ok = false; | 529 | ok = false; |
| 530 | sample_time = rbytes = sbytes = 0; | 530 | sample_time = rbytes = sbytes = 0; |
| 531 | + nb_conn_sys = nb_conn_srs = 0; | ||
| 532 | + nb_conn_sys_et = nb_conn_sys_tw = nb_conn_sys_ls = 0; | ||
| 531 | } | 533 | } |
| 532 | 534 | ||
| 533 | static SrsNetworkRtmpServer _srs_network_rtmp_server; | 535 | static SrsNetworkRtmpServer _srs_network_rtmp_server; |
| @@ -537,23 +539,90 @@ SrsNetworkRtmpServer* srs_get_network_rtmp_server() | @@ -537,23 +539,90 @@ SrsNetworkRtmpServer* srs_get_network_rtmp_server() | ||
| 537 | return &_srs_network_rtmp_server; | 539 | return &_srs_network_rtmp_server; |
| 538 | } | 540 | } |
| 539 | 541 | ||
| 540 | -void srs_update_rtmp_server(SrsKbps* kbps) | 542 | +// @see: http://stackoverflow.com/questions/5992211/list-of-possible-internal-socket-statuses-from-proc |
| 543 | +enum { | ||
| 544 | + SYS_TCP_ESTABLISHED = 1, | ||
| 545 | + SYS_TCP_SYN_SENT, | ||
| 546 | + SYS_TCP_SYN_RECV, | ||
| 547 | + SYS_TCP_FIN_WAIT1, | ||
| 548 | + SYS_TCP_FIN_WAIT2, | ||
| 549 | + SYS_TCP_TIME_WAIT, | ||
| 550 | + SYS_TCP_CLOSE, | ||
| 551 | + SYS_TCP_CLOSE_WAIT, | ||
| 552 | + SYS_TCP_LAST_ACK, | ||
| 553 | + SYS_TCP_LISTEN, | ||
| 554 | + SYS_TCP_CLOSING, /* Now a valid state */ | ||
| 555 | + | ||
| 556 | + SYS_TCP_MAX_STATES /* Leave at the end! */ | ||
| 557 | +}; | ||
| 558 | + | ||
| 559 | +void srs_update_rtmp_server(int nb_conn, SrsKbps* kbps) | ||
| 541 | { | 560 | { |
| 542 | SrsNetworkRtmpServer& r = _srs_network_rtmp_server; | 561 | SrsNetworkRtmpServer& r = _srs_network_rtmp_server; |
| 543 | 562 | ||
| 544 | - r.ok = true; | 563 | + if (true) { |
| 564 | + FILE* f = fopen("/proc/net/tcp", "r"); | ||
| 565 | + if (f == NULL) { | ||
| 566 | + srs_warn("open proc network tcp failed, ignore"); | ||
| 567 | + return; | ||
| 568 | + } | ||
| 569 | + | ||
| 570 | + // ignore title. | ||
| 571 | + static char buf[1024]; | ||
| 572 | + fgets(buf, sizeof(buf), f); | ||
| 545 | 573 | ||
| 546 | - r.sample_time = srs_get_system_time_ms(); | 574 | + int nb_conn_sys_established = 0; |
| 575 | + int nb_conn_sys_time_wait = 0; | ||
| 576 | + int nb_conn_sys_listen = 0; | ||
| 577 | + int nb_conn_sys_other = 0; | ||
| 578 | + for (;;) { | ||
| 579 | + int st = 0; | ||
| 580 | + | ||
| 581 | + int ret = fscanf(f, "%*s %*s %*s %2x\n", &st); | ||
| 582 | + // ignore to end. | ||
| 583 | + fgets(buf, sizeof(buf), f); | ||
| 584 | + | ||
| 585 | + if (ret == 1) { | ||
| 586 | + if (st == SYS_TCP_ESTABLISHED) { | ||
| 587 | + nb_conn_sys_established++; | ||
| 588 | + } else if (st == SYS_TCP_TIME_WAIT) { | ||
| 589 | + nb_conn_sys_time_wait++; | ||
| 590 | + } else if (st == SYS_TCP_LISTEN) { | ||
| 591 | + nb_conn_sys_listen++; | ||
| 592 | + } else { | ||
| 593 | + nb_conn_sys_other++; | ||
| 594 | + } | ||
| 595 | + } | ||
| 596 | + | ||
| 597 | + if (ret == EOF) { | ||
| 598 | + break; | ||
| 599 | + } | ||
| 600 | + } | ||
| 601 | + | ||
| 602 | + r.nb_conn_sys = nb_conn_sys_established + nb_conn_sys_time_wait + nb_conn_sys_listen + nb_conn_sys_other; | ||
| 603 | + r.nb_conn_sys_et = nb_conn_sys_established; | ||
| 604 | + r.nb_conn_sys_tw = nb_conn_sys_time_wait; | ||
| 605 | + r.nb_conn_sys_ls = nb_conn_sys_listen; | ||
| 547 | 606 | ||
| 548 | - r.rbytes = kbps->get_recv_bytes(); | ||
| 549 | - r.rkbps = kbps->get_recv_kbps(); | ||
| 550 | - r.rkbps_30s = kbps->get_recv_kbps_30s(); | ||
| 551 | - r.rkbps_5m = kbps->get_recv_kbps_5m(); | 607 | + fclose(f); |
| 608 | + } | ||
| 552 | 609 | ||
| 553 | - r.sbytes = kbps->get_send_bytes(); | ||
| 554 | - r.skbps = kbps->get_send_kbps(); | ||
| 555 | - r.skbps_30s = kbps->get_send_kbps_30s(); | ||
| 556 | - r.skbps_5m = kbps->get_send_kbps_5m(); | 610 | + if (true) { |
| 611 | + r.ok = true; | ||
| 612 | + | ||
| 613 | + r.nb_conn_srs = nb_conn; | ||
| 614 | + r.sample_time = srs_get_system_time_ms(); | ||
| 615 | + | ||
| 616 | + r.rbytes = kbps->get_recv_bytes(); | ||
| 617 | + r.rkbps = kbps->get_recv_kbps(); | ||
| 618 | + r.rkbps_30s = kbps->get_recv_kbps_30s(); | ||
| 619 | + r.rkbps_5m = kbps->get_recv_kbps_5m(); | ||
| 620 | + | ||
| 621 | + r.sbytes = kbps->get_send_bytes(); | ||
| 622 | + r.skbps = kbps->get_send_kbps(); | ||
| 623 | + r.skbps_30s = kbps->get_send_kbps_30s(); | ||
| 624 | + r.skbps_5m = kbps->get_send_kbps_5m(); | ||
| 625 | + } | ||
| 557 | } | 626 | } |
| 558 | 627 | ||
| 559 | vector<string> _srs_system_ipv4_ips; | 628 | vector<string> _srs_system_ipv4_ips; |
| @@ -414,13 +414,20 @@ public: | @@ -414,13 +414,20 @@ public: | ||
| 414 | int skbps_30s; | 414 | int skbps_30s; |
| 415 | int skbps_5m; | 415 | int skbps_5m; |
| 416 | 416 | ||
| 417 | + // connections | ||
| 418 | + int nb_conn_sys; | ||
| 419 | + int nb_conn_sys_et; // established | ||
| 420 | + int nb_conn_sys_tw; // time wait | ||
| 421 | + int nb_conn_sys_ls; // listen | ||
| 422 | + int nb_conn_srs; | ||
| 423 | + | ||
| 417 | SrsNetworkRtmpServer(); | 424 | SrsNetworkRtmpServer(); |
| 418 | }; | 425 | }; |
| 419 | 426 | ||
| 420 | // get network devices info, use cache to avoid performance problem. | 427 | // get network devices info, use cache to avoid performance problem. |
| 421 | extern SrsNetworkRtmpServer* srs_get_network_rtmp_server(); | 428 | extern SrsNetworkRtmpServer* srs_get_network_rtmp_server(); |
| 422 | // the deamon st-thread will update it. | 429 | // the deamon st-thread will update it. |
| 423 | -extern void srs_update_rtmp_server(SrsKbps* kbps); | 430 | +extern void srs_update_rtmp_server(int nb_conn, SrsKbps* kbps); |
| 424 | 431 | ||
| 425 | // get local ip, fill to @param ips | 432 | // get local ip, fill to @param ips |
| 426 | extern void srs_retrieve_local_ipv4_ips(); | 433 | extern void srs_retrieve_local_ipv4_ips(); |
| @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
| 31 | // current release version | 31 | // current release version |
| 32 | #define VERSION_MAJOR "0" | 32 | #define VERSION_MAJOR "0" |
| 33 | #define VERSION_MINOR "9" | 33 | #define VERSION_MINOR "9" |
| 34 | -#define VERSION_REVISION "126" | 34 | +#define VERSION_REVISION "127" |
| 35 | #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION | 35 | #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION |
| 36 | // server info. | 36 | // server info. |
| 37 | #define RTMP_SIG_SRS_KEY "SRS" | 37 | #define RTMP_SIG_SRS_KEY "SRS" |
-
请 注册 或 登录 后发表评论