1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-02-13 11:51:57 +00:00

Merge pull request #279 from tufang14/develop

add client num for stream in statistic for #227
This commit is contained in:
winlin 2015-01-08 15:52:44 +08:00
commit ac584a4db2
4 changed files with 52 additions and 8 deletions

View file

@ -530,9 +530,7 @@ int SrsApiVhosts::do_process_request(SrsStSocket* skt, SrsHttpMessage* req)
ss << __SRS_JOBJECT_START ss << __SRS_JOBJECT_START
<< __SRS_JFIELD_ERROR(ret) << __SRS_JFIELD_CONT << __SRS_JFIELD_ERROR(ret) << __SRS_JFIELD_CONT
<< __SRS_JFIELD_ORG("server", stat->server_id()) << __SRS_JFIELD_CONT << __SRS_JFIELD_ORG("server", stat->server_id()) << __SRS_JFIELD_CONT
<< __SRS_JFIELD_ORG("vhosts", __SRS_JARRAY_START) << __SRS_JFIELD_ORG("vhosts", data.str())
<< data.str()
<< __SRS_JARRAY_END
<< __SRS_JOBJECT_END; << __SRS_JOBJECT_END;
return res_json(skt, req, ss.str()); return res_json(skt, req, ss.str());
@ -562,9 +560,7 @@ int SrsApiStreams::do_process_request(SrsStSocket* skt, SrsHttpMessage* req)
ss << __SRS_JOBJECT_START ss << __SRS_JOBJECT_START
<< __SRS_JFIELD_ERROR(ret) << __SRS_JFIELD_CONT << __SRS_JFIELD_ERROR(ret) << __SRS_JFIELD_CONT
<< __SRS_JFIELD_ORG("server", stat->server_id()) << __SRS_JFIELD_CONT << __SRS_JFIELD_ORG("server", stat->server_id()) << __SRS_JFIELD_CONT
<< __SRS_JFIELD_ORG("streams", __SRS_JARRAY_START) << __SRS_JFIELD_ORG("streams", data.str())
<< data.str()
<< __SRS_JARRAY_END
<< __SRS_JOBJECT_END; << __SRS_JOBJECT_END;
return res_json(skt, req, ss.str()); return res_json(skt, req, ss.str());

View file

@ -200,6 +200,7 @@ int SrsRtmpConn::do_cycle()
ret = service_cycle(); ret = service_cycle();
http_hooks_on_close(); http_hooks_on_close();
SrsStatistic::instance()->on_close(_srs_context->get_id());
return ret; return ret;
} }

View file

@ -121,7 +121,35 @@ int SrsStatistic::on_client(int id, SrsRequest* req)
} else { } else {
stream = streams[url]; stream = streams[url];
} }
// create client if not exists
SrsStatisticClient* client = NULL;
if (clients.find(id) == clients.end()) {
client = new SrsStatisticClient();
client->stream = stream;
clients[id] = client;
} else {
client = clients[id];
}
stream->clients[id] = client;
return ret;
}
int SrsStatistic::on_close(int id)
{
int ret = ERROR_SUCCESS;
std::map<int, SrsStatisticClient*>::iterator it;
it = clients.find(id);
if (it != clients.end()) {
SrsStatisticClient* client = it->second;
client->stream->clients.erase(id);
srs_freep(client);
clients.erase(it);
}
return ret; return ret;
} }
@ -134,15 +162,21 @@ int SrsStatistic::dumps_vhosts(stringstream& ss)
{ {
int ret = ERROR_SUCCESS; int ret = ERROR_SUCCESS;
ss << __SRS_JARRAY_START;
std::map<std::string, SrsStatisticVhost*>::iterator it; std::map<std::string, SrsStatisticVhost*>::iterator it;
for (it = vhosts.begin(); it != vhosts.end(); it++) { for (it = vhosts.begin(); it != vhosts.end(); it++) {
SrsStatisticVhost* vhost = it->second; SrsStatisticVhost* vhost = it->second;
if (it != vhosts.begin()) {
ss << __SRS_JFIELD_CONT;
}
ss << __SRS_JOBJECT_START ss << __SRS_JOBJECT_START
<< __SRS_JFIELD_ORG("id", vhost->id) << __SRS_JFIELD_CONT << __SRS_JFIELD_ORG("id", vhost->id) << __SRS_JFIELD_CONT
<< __SRS_JFIELD_STR("name", vhost->vhost) << __SRS_JFIELD_STR("name", vhost->vhost)
<< __SRS_JOBJECT_END; << __SRS_JOBJECT_END;
} }
ss << __SRS_JARRAY_END;
return ret; return ret;
} }
@ -150,15 +184,22 @@ int SrsStatistic::dumps_streams(stringstream& ss)
{ {
int ret = ERROR_SUCCESS; int ret = ERROR_SUCCESS;
ss << __SRS_JARRAY_START;
std::map<std::string, SrsStatisticStream*>::iterator it; std::map<std::string, SrsStatisticStream*>::iterator it;
for (it = streams.begin(); it != streams.end(); it++) { for (it = streams.begin(); it != streams.end(); it++) {
SrsStatisticStream* stream = it->second; SrsStatisticStream* stream = it->second;
if (it != streams.begin()) {
ss << __SRS_JFIELD_CONT;
}
ss << __SRS_JOBJECT_START ss << __SRS_JOBJECT_START
<< __SRS_JFIELD_ORG("id", stream->id) << __SRS_JFIELD_CONT << __SRS_JFIELD_ORG("id", stream->id) << __SRS_JFIELD_CONT
<< __SRS_JFIELD_STR("name", stream->stream) << __SRS_JFIELD_CONT << __SRS_JFIELD_STR("name", stream->stream) << __SRS_JFIELD_CONT
<< __SRS_JFIELD_ORG("vhost", stream->vhost->id) << __SRS_JFIELD_ORG("vhost", stream->vhost->id) << __SRS_JFIELD_CONT
<< __SRS_JFIELD_ORG("clients", stream->clients.size())
<< __SRS_JOBJECT_END; << __SRS_JOBJECT_END;
} }
ss << __SRS_JARRAY_END;
return ret; return ret;
} }

View file

@ -34,6 +34,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include <string> #include <string>
class SrsRequest; class SrsRequest;
struct SrsStatisticClient;
struct SrsStatisticVhost struct SrsStatisticVhost
{ {
@ -53,6 +54,7 @@ public:
std::string app; std::string app;
std::string stream; std::string stream;
std::string url; std::string url;
std::map<int, SrsStatisticClient*> clients;
public: public:
SrsStatisticStream(); SrsStatisticStream();
virtual ~SrsStatisticStream(); virtual ~SrsStatisticStream();
@ -89,6 +91,10 @@ public:
* @param req, the client request object. * @param req, the client request object.
*/ */
virtual int on_client(int id, SrsRequest* req); virtual int on_client(int id, SrsRequest* req);
/**
* client close
*/
virtual int on_close(int id);
public: public:
/** /**
* get the server id, used to identify the server. * get the server id, used to identify the server.