1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

refine code, use global virtual id to generate the id of vhost and stream.

This commit is contained in:
winlin 2015-01-05 13:08:11 +08:00
parent ae63af6a4a
commit f1efdcd000
3 changed files with 57 additions and 2 deletions

View file

@ -529,6 +529,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("vhosts", __SRS_JARRAY_START) << __SRS_JFIELD_ORG("vhosts", __SRS_JARRAY_START)
<< data.str() << data.str()
<< __SRS_JARRAY_END << __SRS_JARRAY_END
@ -560,6 +561,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("streams", __SRS_JARRAY_START) << __SRS_JFIELD_ORG("streams", __SRS_JARRAY_START)
<< data.str() << data.str()
<< __SRS_JARRAY_END << __SRS_JARRAY_END

View file

@ -23,16 +23,44 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include <srs_app_statistic.hpp> #include <srs_app_statistic.hpp>
#include <unistd.h>
#include <sstream> #include <sstream>
using namespace std; using namespace std;
#include <srs_protocol_rtmp.hpp> #include <srs_protocol_rtmp.hpp>
#include <srs_app_json.hpp> #include <srs_app_json.hpp>
int64_t __srs_gvid = getpid();
int64_t __srs_generate_id()
{
return __srs_gvid++;
}
SrsStatisticVhost::SrsStatisticVhost()
{
id = __srs_generate_id();
}
SrsStatisticVhost::~SrsStatisticVhost()
{
}
SrsStatisticStream::SrsStatisticStream()
{
id = __srs_generate_id();
vhost = NULL;
}
SrsStatisticStream::~SrsStatisticStream()
{
}
SrsStatistic* SrsStatistic::_instance = new SrsStatistic(); SrsStatistic* SrsStatistic::_instance = new SrsStatistic();
SrsStatistic::SrsStatistic() SrsStatistic::SrsStatistic()
{ {
_server_id = __srs_generate_id();
} }
SrsStatistic::~SrsStatistic() SrsStatistic::~SrsStatistic()
@ -87,7 +115,8 @@ int SrsStatistic::on_client(int id, SrsRequest* req)
if (streams.find(url) == streams.end()) { if (streams.find(url) == streams.end()) {
stream = new SrsStatisticStream(); stream = new SrsStatisticStream();
stream->vhost = vhost; stream->vhost = vhost;
stream->stream = url; stream->stream = req->stream;
stream->url = url;
streams[url] = stream; streams[url] = stream;
} else { } else {
stream = streams[url]; stream = streams[url];
@ -96,6 +125,11 @@ int SrsStatistic::on_client(int id, SrsRequest* req)
return ret; return ret;
} }
int64_t SrsStatistic::server_id()
{
return _server_id;
}
int SrsStatistic::dumps_vhosts(stringstream& ss) int SrsStatistic::dumps_vhosts(stringstream& ss)
{ {
int ret = ERROR_SUCCESS; int ret = ERROR_SUCCESS;
@ -104,6 +138,7 @@ int SrsStatistic::dumps_vhosts(stringstream& ss)
for (it = vhosts.begin(); it != vhosts.end(); it++) { for (it = vhosts.begin(); it != vhosts.end(); it++) {
SrsStatisticVhost* vhost = it->second; SrsStatisticVhost* vhost = it->second;
ss << __SRS_JOBJECT_START ss << __SRS_JOBJECT_START
<< __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;
} }
@ -119,7 +154,9 @@ int SrsStatistic::dumps_streams(stringstream& ss)
for (it = streams.begin(); it != streams.end(); it++) { for (it = streams.begin(); it != streams.end(); it++) {
SrsStatisticStream* stream = it->second; SrsStatisticStream* stream = it->second;
ss << __SRS_JOBJECT_START ss << __SRS_JOBJECT_START
<< __SRS_JFIELD_STR("url", stream->stream) << __SRS_JFIELD_ORG("id", stream->id) << __SRS_JFIELD_CONT
<< __SRS_JFIELD_STR("name", stream->stream) << __SRS_JFIELD_CONT
<< __SRS_JFIELD_ORG("vhost", stream->vhost->id)
<< __SRS_JOBJECT_END; << __SRS_JOBJECT_END;
} }

View file

@ -38,15 +38,24 @@ class SrsRequest;
struct SrsStatisticVhost struct SrsStatisticVhost
{ {
public: public:
int64_t id;
std::string vhost; std::string vhost;
public:
SrsStatisticVhost();
virtual ~SrsStatisticVhost();
}; };
struct SrsStatisticStream struct SrsStatisticStream
{ {
public: public:
int64_t id;
SrsStatisticVhost* vhost; SrsStatisticVhost* vhost;
std::string app; std::string app;
std::string stream; std::string stream;
std::string url;
public:
SrsStatisticStream();
virtual ~SrsStatisticStream();
}; };
struct SrsStatisticClient struct SrsStatisticClient
@ -60,6 +69,8 @@ class SrsStatistic
{ {
private: private:
static SrsStatistic *_instance; static SrsStatistic *_instance;
// the id to identify the sever.
int64_t _server_id;
// key: vhost name, value: vhost object. // key: vhost name, value: vhost object.
std::map<std::string, SrsStatisticVhost*> vhosts; std::map<std::string, SrsStatisticVhost*> vhosts;
// key: stream name, value: stream object. // key: stream name, value: stream object.
@ -79,6 +90,11 @@ public:
*/ */
virtual int on_client(int id, SrsRequest* req); virtual int on_client(int id, SrsRequest* req);
public: public:
/**
* get the server id, used to identify the server.
* for example, when restart, the server id must changed.
*/
virtual int64_t server_id();
/** /**
* dumps the vhosts to sstream in json. * dumps the vhosts to sstream in json.
*/ */