winlin

add connections count to api summaries. 0.9.127

@@ -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,12 +539,78 @@ SrsNetworkRtmpServer* srs_get_network_rtmp_server() @@ -537,12 +539,78 @@ 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
  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);
  573 +
  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;
  606 +
  607 + fclose(f);
  608 + }
  609 +
  610 + if (true) {
544 r.ok = true; 611 r.ok = true;
545 612
  613 + r.nb_conn_srs = nb_conn;
546 r.sample_time = srs_get_system_time_ms(); 614 r.sample_time = srs_get_system_time_ms();
547 615
548 r.rbytes = kbps->get_recv_bytes(); 616 r.rbytes = kbps->get_recv_bytes();
@@ -554,6 +622,7 @@ void srs_update_rtmp_server(SrsKbps* kbps) @@ -554,6 +622,7 @@ void srs_update_rtmp_server(SrsKbps* kbps)
554 r.skbps = kbps->get_send_kbps(); 622 r.skbps = kbps->get_send_kbps();
555 r.skbps_30s = kbps->get_send_kbps_30s(); 623 r.skbps_30s = kbps->get_send_kbps_30s();
556 r.skbps_5m = kbps->get_send_kbps_5m(); 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"