mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-11-22 19:00:01 +08:00
Merge branch 'feature/keep_alive_monk' of https://gitee.com/xia-chu/ZLMediaKit
This commit is contained in:
commit
10afab77f3
@ -131,8 +131,12 @@ on_stream_none_reader=https://127.0.0.1/index/hook/on_stream_none_reader
|
|||||||
on_stream_not_found=https://127.0.0.1/index/hook/on_stream_not_found
|
on_stream_not_found=https://127.0.0.1/index/hook/on_stream_not_found
|
||||||
#服务器启动报告,可以用于服务器的崩溃重启事件监听
|
#服务器启动报告,可以用于服务器的崩溃重启事件监听
|
||||||
on_server_started=https://127.0.0.1/index/hook/on_server_started
|
on_server_started=https://127.0.0.1/index/hook/on_server_started
|
||||||
|
#server保活上报
|
||||||
|
on_server_keepalive=https://127.0.0.1/index/hook/on_server_keepalive
|
||||||
#hook api最大等待回复时间,单位秒
|
#hook api最大等待回复时间,单位秒
|
||||||
timeoutSec=10
|
timeoutSec=10
|
||||||
|
#keepalive hook触发间隔,单位秒,float类型
|
||||||
|
alive_interval=10.0
|
||||||
|
|
||||||
[http]
|
[http]
|
||||||
#http服务器字符编码,windows上默认gb2312
|
#http服务器字符编码,windows上默认gb2312
|
||||||
|
@ -348,6 +348,36 @@ Value makeMediaSourceJson(MediaSource &media){
|
|||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Value getStatisticJson() {
|
||||||
|
Value val(objectValue);
|
||||||
|
val["MediaSource"] = (Json::UInt64)(ObjectStatistic<MediaSource>::count());
|
||||||
|
val["MultiMediaSourceMuxer"] = (Json::UInt64)(ObjectStatistic<MultiMediaSourceMuxer>::count());
|
||||||
|
|
||||||
|
val["TcpServer"] = (Json::UInt64)(ObjectStatistic<TcpServer>::count());
|
||||||
|
val["TcpSession"] = (Json::UInt64)(ObjectStatistic<TcpSession>::count());
|
||||||
|
val["UdpServer"] = (Json::UInt64)(ObjectStatistic<UdpServer>::count());
|
||||||
|
val["UdpSession"] = (Json::UInt64)(ObjectStatistic<UdpSession>::count());
|
||||||
|
val["TcpClient"] = (Json::UInt64)(ObjectStatistic<TcpClient>::count());
|
||||||
|
val["Socket"] = (Json::UInt64)(ObjectStatistic<Socket>::count());
|
||||||
|
|
||||||
|
val["FrameImp"] = (Json::UInt64)(ObjectStatistic<FrameImp>::count());
|
||||||
|
val["Frame"] = (Json::UInt64)(ObjectStatistic<Frame>::count());
|
||||||
|
|
||||||
|
val["Buffer"] = (Json::UInt64)(ObjectStatistic<Buffer>::count());
|
||||||
|
val["BufferRaw"] = (Json::UInt64)(ObjectStatistic<BufferRaw>::count());
|
||||||
|
val["BufferLikeString"] = (Json::UInt64)(ObjectStatistic<BufferLikeString>::count());
|
||||||
|
val["BufferList"] = (Json::UInt64)(ObjectStatistic<BufferList>::count());
|
||||||
|
|
||||||
|
val["RtpPacket"] = (Json::UInt64)(ObjectStatistic<RtpPacket>::count());
|
||||||
|
val["RtmpPacket"] = (Json::UInt64)(ObjectStatistic<RtmpPacket>::count());
|
||||||
|
#ifdef ENABLE_MEM_DEBUG
|
||||||
|
auto bytes = getTotalMemUsage();
|
||||||
|
val["totalMemUsage"] = (Json::UInt64)bytes;
|
||||||
|
val["totalMemUsageMB"] = (int)(bytes / 1024 / 1024);
|
||||||
|
#endif
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 安装api接口
|
* 安装api接口
|
||||||
* 所有api都支持GET和POST两种方式
|
* 所有api都支持GET和POST两种方式
|
||||||
@ -1150,31 +1180,7 @@ void installWebApi() {
|
|||||||
|
|
||||||
api_regist("/index/api/getStatistic",[](API_ARGS_MAP){
|
api_regist("/index/api/getStatistic",[](API_ARGS_MAP){
|
||||||
CHECK_SECRET();
|
CHECK_SECRET();
|
||||||
val["data"]["MediaSource"] = (Json::UInt64)(ObjectStatistic<MediaSource>::count());
|
val["data"] = getStatisticJson();
|
||||||
val["data"]["MultiMediaSourceMuxer"] = (Json::UInt64)(ObjectStatistic<MultiMediaSourceMuxer>::count());
|
|
||||||
|
|
||||||
val["data"]["TcpServer"] = (Json::UInt64)(ObjectStatistic<TcpServer>::count());
|
|
||||||
val["data"]["TcpSession"] = (Json::UInt64)(ObjectStatistic<TcpSession>::count());
|
|
||||||
val["data"]["UdpServer"] = (Json::UInt64)(ObjectStatistic<UdpServer>::count());
|
|
||||||
val["data"]["UdpSession"] = (Json::UInt64)(ObjectStatistic<UdpSession>::count());
|
|
||||||
val["data"]["TcpClient"] = (Json::UInt64)(ObjectStatistic<TcpClient>::count());
|
|
||||||
val["data"]["Socket"] = (Json::UInt64)(ObjectStatistic<Socket>::count());
|
|
||||||
|
|
||||||
val["data"]["FrameImp"] = (Json::UInt64)(ObjectStatistic<FrameImp>::count());
|
|
||||||
val["data"]["Frame"] = (Json::UInt64)(ObjectStatistic<Frame>::count());
|
|
||||||
|
|
||||||
val["data"]["Buffer"] = (Json::UInt64)(ObjectStatistic<Buffer>::count());
|
|
||||||
val["data"]["BufferRaw"] = (Json::UInt64)(ObjectStatistic<BufferRaw>::count());
|
|
||||||
val["data"]["BufferLikeString"] = (Json::UInt64)(ObjectStatistic<BufferLikeString>::count());
|
|
||||||
val["data"]["BufferList"] = (Json::UInt64)(ObjectStatistic<BufferList>::count());
|
|
||||||
|
|
||||||
val["data"]["RtpPacket"] = (Json::UInt64)(ObjectStatistic<RtpPacket>::count());
|
|
||||||
val["data"]["RtmpPacket"] = (Json::UInt64)(ObjectStatistic<RtmpPacket>::count());
|
|
||||||
#ifdef ENABLE_MEM_DEBUG
|
|
||||||
auto bytes = getTotalMemUsage();
|
|
||||||
val["data"]["totalMemUsage"] = (Json::UInt64)bytes;
|
|
||||||
val["data"]["totalMemUsageMB"] = (int)(bytes / 1024 / 1024);
|
|
||||||
#endif
|
|
||||||
});
|
});
|
||||||
|
|
||||||
#ifdef ENABLE_WEBRTC
|
#ifdef ENABLE_WEBRTC
|
||||||
|
@ -235,4 +235,5 @@ bool checkArgs(Args &args, const First &first, const KeyTypes &...keys) {
|
|||||||
void installWebApi();
|
void installWebApi();
|
||||||
void unInstallWebApi();
|
void unInstallWebApi();
|
||||||
Value makeMediaSourceJson(MediaSource &media);
|
Value makeMediaSourceJson(MediaSource &media);
|
||||||
|
Value getStatisticJson();
|
||||||
#endif //ZLMEDIAKIT_WEBAPI_H
|
#endif //ZLMEDIAKIT_WEBAPI_H
|
||||||
|
@ -42,7 +42,9 @@ const string kOnShellLogin = HOOK_FIELD"on_shell_login";
|
|||||||
const string kOnStreamNoneReader = HOOK_FIELD"on_stream_none_reader";
|
const string kOnStreamNoneReader = HOOK_FIELD"on_stream_none_reader";
|
||||||
const string kOnHttpAccess = HOOK_FIELD"on_http_access";
|
const string kOnHttpAccess = HOOK_FIELD"on_http_access";
|
||||||
const string kOnServerStarted = HOOK_FIELD"on_server_started";
|
const string kOnServerStarted = HOOK_FIELD"on_server_started";
|
||||||
|
const string kOnServerKeepalive = HOOK_FIELD"on_server_keepalive";
|
||||||
const string kAdminParams = HOOK_FIELD"admin_params";
|
const string kAdminParams = HOOK_FIELD"admin_params";
|
||||||
|
const string kAliveInterval = HOOK_FIELD"alive_interval";
|
||||||
|
|
||||||
onceToken token([](){
|
onceToken token([](){
|
||||||
mINI::Instance()[kEnable] = false;
|
mINI::Instance()[kEnable] = false;
|
||||||
@ -61,7 +63,9 @@ onceToken token([](){
|
|||||||
mINI::Instance()[kOnStreamNoneReader] = "";
|
mINI::Instance()[kOnStreamNoneReader] = "";
|
||||||
mINI::Instance()[kOnHttpAccess] = "";
|
mINI::Instance()[kOnHttpAccess] = "";
|
||||||
mINI::Instance()[kOnServerStarted] = "";
|
mINI::Instance()[kOnServerStarted] = "";
|
||||||
|
mINI::Instance()[kOnServerKeepalive] = "";
|
||||||
mINI::Instance()[kAdminParams] = "secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc";
|
mINI::Instance()[kAdminParams] = "secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc";
|
||||||
|
mINI::Instance()[kAliveInterval] = 30.0;
|
||||||
},nullptr);
|
},nullptr);
|
||||||
}//namespace Hook
|
}//namespace Hook
|
||||||
|
|
||||||
@ -184,6 +188,27 @@ static void reportServerStarted(){
|
|||||||
do_http_hook(hook_server_started,body, nullptr);
|
do_http_hook(hook_server_started,body, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 服务器定时保活定时器
|
||||||
|
static Timer::Ptr g_keepalive_timer;
|
||||||
|
static void reportServerKeepalive() {
|
||||||
|
GET_CONFIG(bool, hook_enable, Hook::kEnable);
|
||||||
|
GET_CONFIG(string, hook_server_keepalive, Hook::kOnServerKeepalive);
|
||||||
|
if (!hook_enable || hook_server_keepalive.empty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
GET_CONFIG(float, alive_interval, Hook::kAliveInterval);
|
||||||
|
g_keepalive_timer = std::make_shared<Timer>(alive_interval, []() {
|
||||||
|
ArgsType body;
|
||||||
|
body["data"] = getStatisticJson();
|
||||||
|
|
||||||
|
//执行hook
|
||||||
|
do_http_hook(hook_server_keepalive, body, nullptr);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
void installWebHook(){
|
void installWebHook(){
|
||||||
GET_CONFIG(bool,hook_enable,Hook::kEnable);
|
GET_CONFIG(bool,hook_enable,Hook::kEnable);
|
||||||
GET_CONFIG(string,hook_adminparams,Hook::kAdminParams);
|
GET_CONFIG(string,hook_adminparams,Hook::kAdminParams);
|
||||||
@ -484,8 +509,11 @@ void installWebHook(){
|
|||||||
|
|
||||||
//汇报服务器重新启动
|
//汇报服务器重新启动
|
||||||
reportServerStarted();
|
reportServerStarted();
|
||||||
|
|
||||||
|
//定时上报保活
|
||||||
|
reportServerKeepalive();
|
||||||
}
|
}
|
||||||
|
|
||||||
void unInstallWebHook(){
|
void unInstallWebHook(){
|
||||||
|
g_keepalive_timer.reset();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user