Merge pull request #279 from tufang14/develop
add client num for stream in statistic for #227
正在显示
4 个修改的文件
包含
52 行增加
和
8 行删除
| @@ -530,9 +530,7 @@ int SrsApiVhosts::do_process_request(SrsStSocket* skt, SrsHttpMessage* req) | @@ -530,9 +530,7 @@ int SrsApiVhosts::do_process_request(SrsStSocket* skt, SrsHttpMessage* req) | ||
| 530 | ss << __SRS_JOBJECT_START | 530 | ss << __SRS_JOBJECT_START |
| 531 | << __SRS_JFIELD_ERROR(ret) << __SRS_JFIELD_CONT | 531 | << __SRS_JFIELD_ERROR(ret) << __SRS_JFIELD_CONT |
| 532 | << __SRS_JFIELD_ORG("server", stat->server_id()) << __SRS_JFIELD_CONT | 532 | << __SRS_JFIELD_ORG("server", stat->server_id()) << __SRS_JFIELD_CONT |
| 533 | - << __SRS_JFIELD_ORG("vhosts", __SRS_JARRAY_START) | ||
| 534 | - << data.str() | ||
| 535 | - << __SRS_JARRAY_END | 533 | + << __SRS_JFIELD_ORG("vhosts", data.str()) |
| 536 | << __SRS_JOBJECT_END; | 534 | << __SRS_JOBJECT_END; |
| 537 | 535 | ||
| 538 | return res_json(skt, req, ss.str()); | 536 | return res_json(skt, req, ss.str()); |
| @@ -562,9 +560,7 @@ int SrsApiStreams::do_process_request(SrsStSocket* skt, SrsHttpMessage* req) | @@ -562,9 +560,7 @@ int SrsApiStreams::do_process_request(SrsStSocket* skt, SrsHttpMessage* req) | ||
| 562 | ss << __SRS_JOBJECT_START | 560 | ss << __SRS_JOBJECT_START |
| 563 | << __SRS_JFIELD_ERROR(ret) << __SRS_JFIELD_CONT | 561 | << __SRS_JFIELD_ERROR(ret) << __SRS_JFIELD_CONT |
| 564 | << __SRS_JFIELD_ORG("server", stat->server_id()) << __SRS_JFIELD_CONT | 562 | << __SRS_JFIELD_ORG("server", stat->server_id()) << __SRS_JFIELD_CONT |
| 565 | - << __SRS_JFIELD_ORG("streams", __SRS_JARRAY_START) | ||
| 566 | - << data.str() | ||
| 567 | - << __SRS_JARRAY_END | 563 | + << __SRS_JFIELD_ORG("streams", data.str()) |
| 568 | << __SRS_JOBJECT_END; | 564 | << __SRS_JOBJECT_END; |
| 569 | 565 | ||
| 570 | return res_json(skt, req, ss.str()); | 566 | return res_json(skt, req, ss.str()); |
| @@ -200,6 +200,7 @@ int SrsRtmpConn::do_cycle() | @@ -200,6 +200,7 @@ int SrsRtmpConn::do_cycle() | ||
| 200 | 200 | ||
| 201 | ret = service_cycle(); | 201 | ret = service_cycle(); |
| 202 | http_hooks_on_close(); | 202 | http_hooks_on_close(); |
| 203 | + SrsStatistic::instance()->on_close(_srs_context->get_id()); | ||
| 203 | 204 | ||
| 204 | return ret; | 205 | return ret; |
| 205 | } | 206 | } |
| @@ -121,7 +121,35 @@ int SrsStatistic::on_client(int id, SrsRequest* req) | @@ -121,7 +121,35 @@ int SrsStatistic::on_client(int id, SrsRequest* req) | ||
| 121 | } else { | 121 | } else { |
| 122 | stream = streams[url]; | 122 | stream = streams[url]; |
| 123 | } | 123 | } |
| 124 | + | ||
| 125 | + // create client if not exists | ||
| 126 | + SrsStatisticClient* client = NULL; | ||
| 127 | + if (clients.find(id) == clients.end()) { | ||
| 128 | + client = new SrsStatisticClient(); | ||
| 129 | + client->stream = stream; | ||
| 130 | + clients[id] = client; | ||
| 131 | + } else { | ||
| 132 | + client = clients[id]; | ||
| 133 | + } | ||
| 124 | 134 | ||
| 135 | + stream->clients[id] = client; | ||
| 136 | + | ||
| 137 | + return ret; | ||
| 138 | +} | ||
| 139 | + | ||
| 140 | +int SrsStatistic::on_close(int id) | ||
| 141 | +{ | ||
| 142 | + int ret = ERROR_SUCCESS; | ||
| 143 | + | ||
| 144 | + std::map<int, SrsStatisticClient*>::iterator it; | ||
| 145 | + it = clients.find(id); | ||
| 146 | + if (it != clients.end()) { | ||
| 147 | + SrsStatisticClient* client = it->second; | ||
| 148 | + client->stream->clients.erase(id); | ||
| 149 | + srs_freep(client); | ||
| 150 | + clients.erase(it); | ||
| 151 | + } | ||
| 152 | + | ||
| 125 | return ret; | 153 | return ret; |
| 126 | } | 154 | } |
| 127 | 155 | ||
| @@ -134,15 +162,21 @@ int SrsStatistic::dumps_vhosts(stringstream& ss) | @@ -134,15 +162,21 @@ int SrsStatistic::dumps_vhosts(stringstream& ss) | ||
| 134 | { | 162 | { |
| 135 | int ret = ERROR_SUCCESS; | 163 | int ret = ERROR_SUCCESS; |
| 136 | 164 | ||
| 165 | + ss << __SRS_JARRAY_START; | ||
| 137 | std::map<std::string, SrsStatisticVhost*>::iterator it; | 166 | std::map<std::string, SrsStatisticVhost*>::iterator it; |
| 138 | for (it = vhosts.begin(); it != vhosts.end(); it++) { | 167 | for (it = vhosts.begin(); it != vhosts.end(); it++) { |
| 139 | SrsStatisticVhost* vhost = it->second; | 168 | SrsStatisticVhost* vhost = it->second; |
| 169 | + if (it != vhosts.begin()) { | ||
| 170 | + ss << __SRS_JFIELD_CONT; | ||
| 171 | + } | ||
| 172 | + | ||
| 140 | ss << __SRS_JOBJECT_START | 173 | ss << __SRS_JOBJECT_START |
| 141 | << __SRS_JFIELD_ORG("id", vhost->id) << __SRS_JFIELD_CONT | 174 | << __SRS_JFIELD_ORG("id", vhost->id) << __SRS_JFIELD_CONT |
| 142 | << __SRS_JFIELD_STR("name", vhost->vhost) | 175 | << __SRS_JFIELD_STR("name", vhost->vhost) |
| 143 | << __SRS_JOBJECT_END; | 176 | << __SRS_JOBJECT_END; |
| 144 | } | 177 | } |
| 145 | - | 178 | + ss << __SRS_JARRAY_END; |
| 179 | + | ||
| 146 | return ret; | 180 | return ret; |
| 147 | } | 181 | } |
| 148 | 182 | ||
| @@ -150,15 +184,22 @@ int SrsStatistic::dumps_streams(stringstream& ss) | @@ -150,15 +184,22 @@ int SrsStatistic::dumps_streams(stringstream& ss) | ||
| 150 | { | 184 | { |
| 151 | int ret = ERROR_SUCCESS; | 185 | int ret = ERROR_SUCCESS; |
| 152 | 186 | ||
| 187 | + ss << __SRS_JARRAY_START; | ||
| 153 | std::map<std::string, SrsStatisticStream*>::iterator it; | 188 | std::map<std::string, SrsStatisticStream*>::iterator it; |
| 154 | for (it = streams.begin(); it != streams.end(); it++) { | 189 | for (it = streams.begin(); it != streams.end(); it++) { |
| 155 | SrsStatisticStream* stream = it->second; | 190 | SrsStatisticStream* stream = it->second; |
| 191 | + if (it != streams.begin()) { | ||
| 192 | + ss << __SRS_JFIELD_CONT; | ||
| 193 | + } | ||
| 194 | + | ||
| 156 | ss << __SRS_JOBJECT_START | 195 | ss << __SRS_JOBJECT_START |
| 157 | << __SRS_JFIELD_ORG("id", stream->id) << __SRS_JFIELD_CONT | 196 | << __SRS_JFIELD_ORG("id", stream->id) << __SRS_JFIELD_CONT |
| 158 | << __SRS_JFIELD_STR("name", stream->stream) << __SRS_JFIELD_CONT | 197 | << __SRS_JFIELD_STR("name", stream->stream) << __SRS_JFIELD_CONT |
| 159 | - << __SRS_JFIELD_ORG("vhost", stream->vhost->id) | 198 | + << __SRS_JFIELD_ORG("vhost", stream->vhost->id) << __SRS_JFIELD_CONT |
| 199 | + << __SRS_JFIELD_ORG("clients", stream->clients.size()) | ||
| 160 | << __SRS_JOBJECT_END; | 200 | << __SRS_JOBJECT_END; |
| 161 | } | 201 | } |
| 202 | + ss << __SRS_JARRAY_END; | ||
| 162 | 203 | ||
| 163 | return ret; | 204 | return ret; |
| 164 | } | 205 | } |
| @@ -34,6 +34,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -34,6 +34,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
| 34 | #include <string> | 34 | #include <string> |
| 35 | 35 | ||
| 36 | class SrsRequest; | 36 | class SrsRequest; |
| 37 | +struct SrsStatisticClient; | ||
| 37 | 38 | ||
| 38 | struct SrsStatisticVhost | 39 | struct SrsStatisticVhost |
| 39 | { | 40 | { |
| @@ -53,6 +54,7 @@ public: | @@ -53,6 +54,7 @@ public: | ||
| 53 | std::string app; | 54 | std::string app; |
| 54 | std::string stream; | 55 | std::string stream; |
| 55 | std::string url; | 56 | std::string url; |
| 57 | + std::map<int, SrsStatisticClient*> clients; | ||
| 56 | public: | 58 | public: |
| 57 | SrsStatisticStream(); | 59 | SrsStatisticStream(); |
| 58 | virtual ~SrsStatisticStream(); | 60 | virtual ~SrsStatisticStream(); |
| @@ -89,6 +91,10 @@ public: | @@ -89,6 +91,10 @@ public: | ||
| 89 | * @param req, the client request object. | 91 | * @param req, the client request object. |
| 90 | */ | 92 | */ |
| 91 | virtual int on_client(int id, SrsRequest* req); | 93 | virtual int on_client(int id, SrsRequest* req); |
| 94 | + /** | ||
| 95 | + * client close | ||
| 96 | + */ | ||
| 97 | + virtual int on_close(int id); | ||
| 92 | public: | 98 | public: |
| 93 | /** | 99 | /** |
| 94 | * get the server id, used to identify the server. | 100 | * get the server id, used to identify the server. |
-
请 注册 或 登录 后发表评论