use amf0 encode for json encode.

pull/556/head
winlin
parent e0219bd7aa
commit 04bea781ca

@ -36,6 +36,7 @@ using namespace std;
#include <srs_app_utility.hpp>
#include <srs_core_autofree.hpp>
#include <srs_app_http_conn.hpp>
#include <srs_rtmp_amf0.hpp>
SrsHttpHeartbeat::SrsHttpHeartbeat()
{
@ -65,23 +66,25 @@ void SrsHttpHeartbeat::heartbeat()
ip = ips[_srs_config->get_stats_network() % (int)ips.size()];
}
std::stringstream ss;
ss << SRS_JOBJECT_START
<< SRS_JFIELD_STR("device_id", device_id) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("ip", ip);
SrsAmf0Object* obj = SrsAmf0Any::object();
SrsAutoFree(SrsAmf0Object, obj);
obj->set("device_id", SrsAmf0Any::str(device_id.c_str()));
obj->set("ip", SrsAmf0Any::str(ip.c_str()));
if (_srs_config->get_heartbeat_summaries()) {
ss << SRS_JFIELD_CONT << SRS_JFIELD_ORG("summaries", "");
srs_api_dump_summaries(ss);
SrsAmf0Object* summaries = SrsAmf0Any::object();
obj->set("summaries", summaries);
srs_api_dump_summaries(summaries);
}
ss << SRS_JOBJECT_END;
std::string req = ss.str();
SrsHttpClient http;
if ((ret = http.initialize(uri.get_host(), uri.get_port())) != ERROR_SUCCESS) {
return;
}
std::string req = obj->to_json();
ISrsHttpMessage* msg = NULL;
if ((ret = http.post(uri.get_path(), req, &msg)) != ERROR_SUCCESS) {
srs_info("http post hartbeart uri failed. url=%s, request=%s, ret=%d",

@ -267,9 +267,12 @@ SrsGoApiSummaries::~SrsGoApiSummaries()
int SrsGoApiSummaries::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
{
std::stringstream ss;
srs_api_dump_summaries(ss);
return srs_api_response(w, r, ss.str());
SrsAmf0Object* obj = SrsAmf0Any::object();
SrsAutoFree(SrsAmf0Object, obj);
srs_api_dump_summaries(obj);
return srs_api_response(w, r, obj->to_json());
}
SrsGoApiRusages::SrsGoApiRusages()
@ -295,7 +298,7 @@ int SrsGoApiRusages::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
SrsRusage* ru = srs_get_system_rusage();
data->set("ok", SrsAmf0Any::boolean(ru->ok? "true":"false"));
data->set("ok", SrsAmf0Any::boolean(ru->ok));
data->set("sample_time", SrsAmf0Any::number(ru->sample_time));
data->set("ru_utime", SrsAmf0Any::number(ru->r.ru_utime.tv_sec));
data->set("ru_stime", SrsAmf0Any::number(ru->r.ru_stime.tv_sec));
@ -343,7 +346,7 @@ int SrsGoApiSelfProcStats::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage
string state;
state += (char)u->state;
data->set("ok", SrsAmf0Any::boolean(u->ok? "true":"false"));
data->set("ok", SrsAmf0Any::boolean(u->ok));
data->set("sample_time", SrsAmf0Any::number(u->sample_time));
data->set("percent", SrsAmf0Any::number(u->percent));
data->set("pid", SrsAmf0Any::number(u->pid));
@ -417,7 +420,7 @@ int SrsGoApiSystemProcStats::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessa
SrsProcSystemStat* s = srs_get_system_proc_stat();
data->set("ok", SrsAmf0Any::boolean(s->ok? "true":"false"));
data->set("ok", SrsAmf0Any::boolean(s->ok));
data->set("sample_time", SrsAmf0Any::number(s->sample_time));
data->set("percent", SrsAmf0Any::number(s->percent));
data->set("user", SrsAmf0Any::number(s->user));
@ -456,7 +459,7 @@ int SrsGoApiMemInfos::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
SrsMemInfo* m = srs_get_meminfo();
data->set("ok", SrsAmf0Any::boolean(m->ok? "true":"false"));
data->set("ok", SrsAmf0Any::boolean(m->ok));
data->set("sample_time", SrsAmf0Any::number(m->sample_time));
data->set("percent_ram", SrsAmf0Any::number(m->percent_ram));
data->set("percent_swap", SrsAmf0Any::number(m->percent_swap));

@ -38,6 +38,7 @@ using namespace std;
#include <srs_app_config.hpp>
#include <srs_kernel_utility.hpp>
#include <srs_app_http_conn.hpp>
#include <srs_rtmp_amf0.hpp>
#define SRS_HTTP_RESPONSE_OK SRS_XSTR(ERROR_SUCCESS)
@ -62,18 +63,18 @@ int SrsHttpHooks::on_connect(string url, SrsRequest* req)
int client_id = _srs_context->get_id();
std::stringstream ss;
ss << SRS_JOBJECT_START
<< SRS_JFIELD_STR("action", "on_connect") << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("client_id", client_id) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("ip", req->ip) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("vhost", req->vhost) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("app", req->app) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("tcUrl", req->tcUrl) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("pageUrl", req->pageUrl)
<< SRS_JOBJECT_END;
SrsAmf0Object* obj = SrsAmf0Any::object();
SrsAutoFree(SrsAmf0Object, obj);
obj->set("action", SrsAmf0Any::str("on_connect"));
obj->set("client_id", SrsAmf0Any::number(client_id));
obj->set("ip", SrsAmf0Any::str(req->ip.c_str()));
obj->set("vhost", SrsAmf0Any::str(req->vhost.c_str()));
obj->set("app", SrsAmf0Any::str(req->app.c_str()));
obj->set("tcUrl", SrsAmf0Any::str(req->tcUrl.c_str()));
obj->set("pageUrl", SrsAmf0Any::str(req->pageUrl.c_str()));
std::string data = ss.str();
std::string data = obj->to_json();
std::string res;
int status_code;
if ((ret = do_post(url, data, status_code, res)) != ERROR_SUCCESS) {
@ -96,18 +97,18 @@ void SrsHttpHooks::on_close(string url, SrsRequest* req, int64_t send_bytes, int
int client_id = _srs_context->get_id();
std::stringstream ss;
ss << SRS_JOBJECT_START
<< SRS_JFIELD_STR("action", "on_close") << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("client_id", client_id) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("ip", req->ip) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("vhost", req->vhost) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("send_bytes", send_bytes) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("recv_bytes", recv_bytes) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("app", req->app)
<< SRS_JOBJECT_END;
SrsAmf0Object* obj = SrsAmf0Any::object();
SrsAutoFree(SrsAmf0Object, obj);
obj->set("action", SrsAmf0Any::str("on_close"));
obj->set("client_id", SrsAmf0Any::number(client_id));
obj->set("ip", SrsAmf0Any::str(req->ip.c_str()));
obj->set("vhost", SrsAmf0Any::str(req->vhost.c_str()));
obj->set("app", SrsAmf0Any::str(req->app.c_str()));
obj->set("send_bytes", SrsAmf0Any::number(send_bytes));
obj->set("recv_bytes", SrsAmf0Any::number(recv_bytes));
std::string data = ss.str();
std::string data = obj->to_json();
std::string res;
int status_code;
if ((ret = do_post(url, data, status_code, res)) != ERROR_SUCCESS) {
@ -130,17 +131,17 @@ int SrsHttpHooks::on_publish(string url, SrsRequest* req)
int client_id = _srs_context->get_id();
std::stringstream ss;
ss << SRS_JOBJECT_START
<< SRS_JFIELD_STR("action", "on_publish") << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("client_id", client_id) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("ip", req->ip) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("vhost", req->vhost) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("app", req->app) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("stream", req->stream)
<< SRS_JOBJECT_END;
SrsAmf0Object* obj = SrsAmf0Any::object();
SrsAutoFree(SrsAmf0Object, obj);
obj->set("action", SrsAmf0Any::str("on_publish"));
obj->set("client_id", SrsAmf0Any::number(client_id));
obj->set("ip", SrsAmf0Any::str(req->ip.c_str()));
obj->set("vhost", SrsAmf0Any::str(req->vhost.c_str()));
obj->set("app", SrsAmf0Any::str(req->app.c_str()));
obj->set("stream", SrsAmf0Any::str(req->stream.c_str()));
std::string data = ss.str();
std::string data = obj->to_json();
std::string res;
int status_code;
if ((ret = do_post(url, data, status_code, res)) != ERROR_SUCCESS) {
@ -163,17 +164,17 @@ void SrsHttpHooks::on_unpublish(string url, SrsRequest* req)
int client_id = _srs_context->get_id();
std::stringstream ss;
ss << SRS_JOBJECT_START
<< SRS_JFIELD_STR("action", "on_unpublish") << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("client_id", client_id) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("ip", req->ip) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("vhost", req->vhost) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("app", req->app) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("stream", req->stream)
<< SRS_JOBJECT_END;
SrsAmf0Object* obj = SrsAmf0Any::object();
SrsAutoFree(SrsAmf0Object, obj);
obj->set("action", SrsAmf0Any::str("on_unpublish"));
obj->set("client_id", SrsAmf0Any::number(client_id));
obj->set("ip", SrsAmf0Any::str(req->ip.c_str()));
obj->set("vhost", SrsAmf0Any::str(req->vhost.c_str()));
obj->set("app", SrsAmf0Any::str(req->app.c_str()));
obj->set("stream", SrsAmf0Any::str(req->stream.c_str()));
std::string data = ss.str();
std::string data = obj->to_json();
std::string res;
int status_code;
if ((ret = do_post(url, data, status_code, res)) != ERROR_SUCCESS) {
@ -196,18 +197,18 @@ int SrsHttpHooks::on_play(string url, SrsRequest* req)
int client_id = _srs_context->get_id();
std::stringstream ss;
ss << SRS_JOBJECT_START
<< SRS_JFIELD_STR("action", "on_play") << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("client_id", client_id) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("ip", req->ip) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("vhost", req->vhost) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("app", req->app) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("stream", req->stream) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("pageUrl", req->pageUrl)
<< SRS_JOBJECT_END;
SrsAmf0Object* obj = SrsAmf0Any::object();
SrsAutoFree(SrsAmf0Object, obj);
obj->set("action", SrsAmf0Any::str("on_play"));
obj->set("client_id", SrsAmf0Any::number(client_id));
obj->set("ip", SrsAmf0Any::str(req->ip.c_str()));
obj->set("vhost", SrsAmf0Any::str(req->vhost.c_str()));
obj->set("app", SrsAmf0Any::str(req->app.c_str()));
obj->set("stream", SrsAmf0Any::str(req->stream.c_str()));
obj->set("pageUrl", SrsAmf0Any::str(req->pageUrl.c_str()));
std::string data = ss.str();
std::string data = obj->to_json();
std::string res;
int status_code;
if ((ret = do_post(url, data, status_code, res)) != ERROR_SUCCESS) {
@ -230,17 +231,17 @@ void SrsHttpHooks::on_stop(string url, SrsRequest* req)
int client_id = _srs_context->get_id();
std::stringstream ss;
ss << SRS_JOBJECT_START
<< SRS_JFIELD_STR("action", "on_stop") << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("client_id", client_id) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("ip", req->ip) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("vhost", req->vhost) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("app", req->app) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("stream", req->stream)
<< SRS_JOBJECT_END;
SrsAmf0Object* obj = SrsAmf0Any::object();
SrsAutoFree(SrsAmf0Object, obj);
obj->set("action", SrsAmf0Any::str("on_stop"));
obj->set("client_id", SrsAmf0Any::number(client_id));
obj->set("ip", SrsAmf0Any::str(req->ip.c_str()));
obj->set("vhost", SrsAmf0Any::str(req->vhost.c_str()));
obj->set("app", SrsAmf0Any::str(req->app.c_str()));
obj->set("stream", SrsAmf0Any::str(req->stream.c_str()));
std::string data = ss.str();
std::string data = obj->to_json();
std::string res;
int status_code;
if ((ret = do_post(url, data, status_code, res)) != ERROR_SUCCESS) {
@ -264,19 +265,19 @@ int SrsHttpHooks::on_dvr(string url, SrsRequest* req, string file)
int client_id = _srs_context->get_id();
std::string cwd = _srs_config->cwd();
std::stringstream ss;
ss << SRS_JOBJECT_START
<< SRS_JFIELD_STR("action", "on_dvr") << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("client_id", client_id) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("ip", req->ip) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("vhost", req->vhost) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("app", req->app) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("stream", req->stream) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("cwd", cwd) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("file", file)
<< SRS_JOBJECT_END;
SrsAmf0Object* obj = SrsAmf0Any::object();
SrsAutoFree(SrsAmf0Object, obj);
obj->set("action", SrsAmf0Any::str("on_dvr"));
obj->set("client_id", SrsAmf0Any::number(client_id));
obj->set("ip", SrsAmf0Any::str(req->ip.c_str()));
obj->set("vhost", SrsAmf0Any::str(req->vhost.c_str()));
obj->set("app", SrsAmf0Any::str(req->app.c_str()));
obj->set("stream", SrsAmf0Any::str(req->stream.c_str()));
obj->set("cwd", SrsAmf0Any::str(cwd.c_str()));
obj->set("file", SrsAmf0Any::str(file.c_str()));
std::string data = ss.str();
std::string data = obj->to_json();
std::string res;
int status_code;
if ((ret = do_post(url, data, status_code, res)) != ERROR_SUCCESS) {
@ -300,24 +301,24 @@ int SrsHttpHooks::on_hls(string url, SrsRequest* req, string file, string ts_url
int client_id = _srs_context->get_id();
std::string cwd = _srs_config->cwd();
std::stringstream ss;
ss << SRS_JOBJECT_START
<< SRS_JFIELD_STR("action", "on_hls") << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("client_id", client_id) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("ip", req->ip) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("vhost", req->vhost) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("app", req->app) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("stream", req->stream) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("duration", duration) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("cwd", cwd) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("file", file) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("url", ts_url) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("m3u8", m3u8) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("m3u8_url", m3u8_url) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("seq_no", sn)
<< SRS_JOBJECT_END;
SrsAmf0Object* obj = SrsAmf0Any::object();
SrsAutoFree(SrsAmf0Object, obj);
obj->set("action", SrsAmf0Any::str("on_hls"));
obj->set("client_id", SrsAmf0Any::number(client_id));
obj->set("ip", SrsAmf0Any::str(req->ip.c_str()));
obj->set("vhost", SrsAmf0Any::str(req->vhost.c_str()));
obj->set("app", SrsAmf0Any::str(req->app.c_str()));
obj->set("stream", SrsAmf0Any::str(req->stream.c_str()));
obj->set("duration", SrsAmf0Any::number(duration));
obj->set("cwd", SrsAmf0Any::str(cwd.c_str()));
obj->set("file", SrsAmf0Any::str(file.c_str()));
obj->set("url", SrsAmf0Any::str(url.c_str()));
obj->set("m3u8", SrsAmf0Any::str(m3u8.c_str()));
obj->set("m3u8_url", SrsAmf0Any::str(m3u8_url.c_str()));
obj->set("seq_no", SrsAmf0Any::number(sn));
std::string data = ss.str();
std::string data = obj->to_json();
std::string res;
int status_code;
if ((ret = do_post(url, data, status_code, res)) != ERROR_SUCCESS) {

@ -45,6 +45,7 @@ using namespace std;
#include <srs_protocol_kbps.hpp>
#include <srs_protocol_json.hpp>
#include <srs_kernel_stream.hpp>
#include <srs_rtmp_amf0.hpp>
// the longest time to wait for a process to quit.
#define SRS_PROCESS_QUIT_TIMEOUT_MS 1000
@ -1354,7 +1355,7 @@ string srs_get_peer_ip(int fd)
return ip;
}
void srs_api_dump_summaries(std::stringstream& ss)
void srs_api_dump_summaries(SrsAmf0Object* obj)
{
SrsRusage* r = srs_get_system_rusage();
SrsProcSelfStat* u = srs_get_self_proc_stat();
@ -1407,57 +1408,61 @@ void srs_api_dump_summaries(std::stringstream& ss)
bool ok = (r->ok && u->ok && s->ok && c->ok
&& d->ok && m->ok && p->ok && nrs->ok);
ss << SRS_JOBJECT_START
<< SRS_JFIELD_ERROR(ERROR_SUCCESS) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("data", SRS_JOBJECT_START)
<< SRS_JFIELD_ORG("ok", (ok? "true":"false")) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("now_ms", now) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("self", SRS_JOBJECT_START)
<< SRS_JFIELD_STR("version", RTMP_SIG_SRS_VERSION) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("pid", getpid()) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("ppid", u->ppid) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("argv", _srs_config->argv()) << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("cwd", _srs_config->cwd()) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("mem_kbyte", r->r.ru_maxrss) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("mem_percent", self_mem_percent) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("cpu_percent", u->percent) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("srs_uptime", srs_uptime)
<< SRS_JOBJECT_END << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("system", SRS_JOBJECT_START)
<< SRS_JFIELD_ORG("cpu_percent", s->percent) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("disk_read_KBps", d->in_KBps) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("disk_write_KBps", d->out_KBps) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("disk_busy_percent", d->busy) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("mem_ram_kbyte", m->MemTotal) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("mem_ram_percent", m->percent_ram) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("mem_swap_kbyte", m->SwapTotal) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("mem_swap_percent", m->percent_swap) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("cpus", c->nb_processors) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("cpus_online", c->nb_processors_online) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("uptime", p->os_uptime) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("ilde_time", p->os_ilde_time) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("load_1m", p->load_one_minutes) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("load_5m", p->load_five_minutes) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("load_15m", p->load_fifteen_minutes) << SRS_JFIELD_CONT
// system network bytes stat.
<< SRS_JFIELD_ORG("net_sample_time", n_sample_time) << SRS_JFIELD_CONT
// internet public address network device bytes.
<< SRS_JFIELD_ORG("net_recv_bytes", nr_bytes) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("net_send_bytes", ns_bytes) << SRS_JFIELD_CONT
// intranet private address network device bytes.
<< SRS_JFIELD_ORG("net_recvi_bytes", nri_bytes) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("net_sendi_bytes", nsi_bytes) << SRS_JFIELD_CONT
// srs network bytes stat.
<< SRS_JFIELD_ORG("srs_sample_time", nrs->sample_time) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("srs_recv_bytes", nrs->rbytes) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("srs_send_bytes", nrs->sbytes) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("conn_sys", nrs->nb_conn_sys) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("conn_sys_et", nrs->nb_conn_sys_et) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("conn_sys_tw", nrs->nb_conn_sys_tw) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("conn_sys_udp", nrs->nb_conn_sys_udp) << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("conn_srs", nrs->nb_conn_srs)
<< SRS_JOBJECT_END
<< SRS_JOBJECT_END
<< SRS_JOBJECT_END;
SrsAmf0Object* data = SrsAmf0Any::object();
obj->set("data", data);
data->set("ok", SrsAmf0Any::boolean(ok));
data->set("now_ms", SrsAmf0Any::number(now));
// self
SrsAmf0Object* self = SrsAmf0Any::object();
data->set("self", self);
self->set("version", SrsAmf0Any::str(RTMP_SIG_SRS_VERSION));
self->set("pid", SrsAmf0Any::number(getpid()));
self->set("ppid", SrsAmf0Any::number(u->ppid));
self->set("argv", SrsAmf0Any::str(_srs_config->argv().c_str()));
self->set("cwd", SrsAmf0Any::str(_srs_config->cwd().c_str()));
self->set("mem_kbyte", SrsAmf0Any::number(r->r.ru_maxrss));
self->set("mem_percent", SrsAmf0Any::number(self_mem_percent));
self->set("cpu_percent", SrsAmf0Any::number(u->percent));
self->set("srs_uptime", SrsAmf0Any::number(srs_uptime));
// system
SrsAmf0Object* sys = SrsAmf0Any::object();
data->set("system", sys);
sys->set("cpu_percent", SrsAmf0Any::number(s->percent));
sys->set("disk_read_KBps", SrsAmf0Any::number(d->in_KBps));
sys->set("disk_write_KBps", SrsAmf0Any::number(d->out_KBps));
sys->set("disk_busy_percent", SrsAmf0Any::number(d->busy));
sys->set("mem_ram_kbyte", SrsAmf0Any::number(m->MemTotal));
sys->set("mem_ram_percent", SrsAmf0Any::number(m->percent_ram));
sys->set("mem_swap_kbyte", SrsAmf0Any::number(m->SwapTotal));
sys->set("mem_swap_percent", SrsAmf0Any::number(m->percent_swap));
sys->set("cpus", SrsAmf0Any::number(c->nb_processors));
sys->set("cpus_online", SrsAmf0Any::number(c->nb_processors_online));
sys->set("uptime", SrsAmf0Any::number(p->os_uptime));
sys->set("ilde_time", SrsAmf0Any::number(p->os_ilde_time));
sys->set("load_1m", SrsAmf0Any::number(p->load_one_minutes));
sys->set("load_5m", SrsAmf0Any::number(p->load_five_minutes));
sys->set("load_15m", SrsAmf0Any::number(p->load_fifteen_minutes));
// system network bytes stat.
sys->set("net_sample_time", SrsAmf0Any::number(n_sample_time));
// internet public address network device bytes.
sys->set("net_recv_bytes", SrsAmf0Any::number(nr_bytes));
sys->set("net_send_bytes", SrsAmf0Any::number(ns_bytes));
// intranet private address network device bytes.
sys->set("net_recvi_bytes", SrsAmf0Any::number(nri_bytes));
sys->set("net_sendi_bytes", SrsAmf0Any::number(nsi_bytes));
// srs network bytes stat.
sys->set("srs_sample_time", SrsAmf0Any::number(nrs->sample_time));
sys->set("srs_recv_bytes", SrsAmf0Any::number(nrs->rbytes));
sys->set("srs_send_bytes", SrsAmf0Any::number(nrs->sbytes));
sys->set("conn_sys", SrsAmf0Any::number(nrs->nb_conn_sys));
sys->set("conn_sys_et", SrsAmf0Any::number(nrs->nb_conn_sys_et));
sys->set("conn_sys_tw", SrsAmf0Any::number(nrs->nb_conn_sys_tw));
sys->set("conn_sys_udp", SrsAmf0Any::number(nrs->nb_conn_sys_udp));
sys->set("conn_srs", SrsAmf0Any::number(nrs->nb_conn_srs));
}

@ -41,6 +41,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
class SrsKbps;
class SrsStream;
class SrsAmf0Object;
// client open socket and connect to server.
extern int srs_socket_connect(std::string server, int port, int64_t timeout, st_netfd_t* pstfd);
@ -669,7 +670,7 @@ extern int srs_get_local_port(int fd);
extern std::string srs_get_peer_ip(int fd);
// dump summaries for /api/v1/summaries.
extern void srs_api_dump_summaries(std::stringstream& ss);
extern void srs_api_dump_summaries(SrsAmf0Object* obj);
#endif

@ -174,56 +174,6 @@ public:
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/* json encode
cout<< SRS_JOBJECT_START
<< SRS_JFIELD_STR("name", "srs") << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("version", 100) << SRS_JFIELD_CONT
<< SRS_JFIELD_NAME("features") << SRS_JOBJECT_START
<< SRS_JFIELD_STR("rtmp", "released") << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("hls", "released") << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("dash", "plan")
<< SRS_JOBJECT_END << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("author", "srs team")
<< SRS_JOBJECT_END
it's:
cont<< "{"
<< "name:" << "srs" << ","
<< "version:" << 100 << ","
<< "features:" << "{"
<< "rtmp:" << "released" << ","
<< "hls:" << "released" << ","
<< "dash:" << "plan"
<< "}" << ","
<< "author:" << "srs team"
<< "}"
that is:
"""
{
"name": "srs",
"version": 100,
"features": {
"rtmp": "released",
"hls": "released",
"dash": "plan"
},
"author": "srs team"
}
"""
*/
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
#define SRS_JOBJECT_START "{"
#define SRS_JFIELD_NAME(k) "\"" << k << "\":"
#define SRS_JFIELD_OBJ(k) SRS_JFIELD_NAME(k) << SRS_JOBJECT_START
#define SRS_JFIELD_STR(k, v) SRS_JFIELD_NAME(k) << "\"" << v << "\""
#define SRS_JFIELD_ORG(k, v) SRS_JFIELD_NAME(k) << std::dec << v
#define SRS_JFIELD_BOOL(k, v) SRS_JFIELD_ORG(k, (v? "true":"false"))
#define SRS_JFIELD_NULL(k) SRS_JFIELD_NAME(k) << "null"
#define SRS_JFIELD_ERROR(ret) "\"" << "code" << "\":" << ret
#define SRS_JFIELD_CONT ","
#define SRS_JOBJECT_END "}"
#define SRS_JARRAY_START "["
#define SRS_JARRAY_END "]"
// json encode, please use AMF0.to_json() to encode json object.
#endif

@ -35,6 +35,55 @@ using namespace std;
using namespace _srs_internal;
/* json encode
cout<< SRS_JOBJECT_START
<< SRS_JFIELD_STR("name", "srs") << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("version", 100) << SRS_JFIELD_CONT
<< SRS_JFIELD_NAME("features") << SRS_JOBJECT_START
<< SRS_JFIELD_STR("rtmp", "released") << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("hls", "released") << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("dash", "plan")
<< SRS_JOBJECT_END << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("author", "srs team")
<< SRS_JOBJECT_END
it's:
cont<< "{"
<< "name:" << "srs" << ","
<< "version:" << 100 << ","
<< "features:" << "{"
<< "rtmp:" << "released" << ","
<< "hls:" << "released" << ","
<< "dash:" << "plan"
<< "}" << ","
<< "author:" << "srs team"
<< "}"
that is:
"""
{
"name": "srs",
"version": 100,
"features": {
"rtmp": "released",
"hls": "released",
"dash": "plan"
},
"author": "srs team"
}
"""
*/
#define SRS_JOBJECT_START "{"
#define SRS_JFIELD_NAME(k) "\"" << k << "\":"
#define SRS_JFIELD_OBJ(k) SRS_JFIELD_NAME(k) << SRS_JOBJECT_START
#define SRS_JFIELD_STR(k, v) SRS_JFIELD_NAME(k) << "\"" << v << "\""
#define SRS_JFIELD_ORG(k, v) SRS_JFIELD_NAME(k) << std::dec << v
#define SRS_JFIELD_BOOL(k, v) SRS_JFIELD_ORG(k, (v? "true":"false"))
#define SRS_JFIELD_NULL(k) SRS_JFIELD_NAME(k) << "null"
#define SRS_JFIELD_ERROR(ret) "\"" << "code" << "\":" << ret
#define SRS_JFIELD_CONT ","
#define SRS_JOBJECT_END "}"
#define SRS_JARRAY_START "["
#define SRS_JARRAY_END "]"
// AMF0 marker
#define RTMP_AMF0_Number 0x00
#define RTMP_AMF0_Boolean 0x01

Loading…
Cancel
Save