新增实例上报功能: #2294

This commit is contained in:
xia-chu 2023-03-12 00:06:39 +08:00
parent 4617b6faa0
commit 843e3423cf
3 changed files with 151 additions and 2 deletions

@ -1 +1 @@
Subproject commit 43690d713c156007da43bc0210f81293d0ebd460 Subproject commit aea48a14f9619d292789b6ba66d2922e1ed36e71

View File

@ -54,7 +54,7 @@ option(ENABLE_SCTP "Enable SCTP" ON)
option(ENABLE_WEBRTC "Enable WebRTC" ON) option(ENABLE_WEBRTC "Enable WebRTC" ON)
option(ENABLE_X264 "Enable x264" OFF) option(ENABLE_X264 "Enable x264" OFF)
option(ENABLE_WEPOLL "Enable wepoll" ON) option(ENABLE_WEPOLL "Enable wepoll" ON)
option(DISABLE_REPORT "Disable report to report.zlmediakit.com" off)
option(USE_SOLUTION_FOLDERS "Enable solution dir supported" ON) option(USE_SOLUTION_FOLDERS "Enable solution dir supported" ON)
############################################################################## ##############################################################################
@ -203,6 +203,10 @@ endif()
update_cached_list(MK_LINK_LIBRARIES "") update_cached_list(MK_LINK_LIBRARIES "")
update_cached_list(MK_COMPILE_DEFINITIONS ENABLE_VERSION) update_cached_list(MK_COMPILE_DEFINITIONS ENABLE_VERSION)
if (DISABLE_REPORT)
update_cached_list(MK_COMPILE_DEFINITIONS DISABLE_REPORT)
endif ()
if(CMAKE_SYSTEM_NAME MATCHES "Linux") if(CMAKE_SYSTEM_NAME MATCHES "Linux")
include(CheckCXXSourceCompiles) include(CheckCXXSourceCompiles)
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/cmake/checks/atomic_check.cpp atomic_check_cpp) file(READ ${CMAKE_CURRENT_SOURCE_DIR}/cmake/checks/atomic_check.cpp atomic_check_cpp)

View File

@ -9,6 +9,8 @@
*/ */
#include "HttpRequester.h" #include "HttpRequester.h"
#include "Util/onceToken.h"
#include "Util/NoticeCenter.h"
using namespace std; using namespace std;
using namespace toolkit; using namespace toolkit;
@ -47,4 +49,147 @@ void HttpRequester::setOnResult(const HttpRequesterResult &onResult) {
_on_result = onResult; _on_result = onResult;
} }
////////////////////////////////////////////////////////////////////////
#if !defined(DISABLE_REPORT)
static constexpr auto s_interval_second = 60 * 5;
static constexpr auto s_report_url = "http://report.zlmediakit.com:8888/index/api/report";
extern const char kServerName[];
static std::string httpBody() {
HttpArgs args;
auto &os = args["os"];
#if defined(_WIN32)
os = "windows";
#elif defined(__ANDROID__)
os = "android";
#elif defined(__linux__)
os = "linux";
#elif defined(OS_IPHONE)
os = "ios";
#elif defined(__MACH__)
os = "macos";
#else
os = "unknow";
#endif
auto &arch = args["arch"];
#if defined(__i386__)
arch = "x86";
#elif defined(__x86_64__) || defined(__amd64__)
arch = "x86_64";
#elif defined(__arm__)
arch = "arm";
#elif defined(__arm64__)
arch = "arm64";
#elif defined(__loognarch__)
arch = "loognarch";
#elif defined(__riscv)
arch = "riscv";
#elif defined(__mipsl__)
arch = "mipsl";
#else
arch = "unknow";
#endif
auto &compiler = args["compiler"];
#if defined(__clang__)
compiler = "clang";
#elif defined(_MSC_VER)
compiler = "msvc";
#elif defined(__MINGW32__)
compiler = "mingw";
#elif defined(__CYGWIN__)
compiler = "cygwin";
#elif defined(__GNUC__)
compiler = "gcc";
#elif defined(__ICC__)
compiler = "icc";
#else
compiler = "unknow";
#endif
args["cplusplus"] = __cplusplus;
args["build_date"] = __DATE__;
args["version"] = kServerName;
args["exe_name"] = exeName();
#if NDEBUG
args["release"] = 1;
#else
args["release"] = 0;
#endif
#if ENABLE_RTPPROXY
args["rtp_proxy"] = 1;
#else
args["rtp_proxy"] = 0;
#endif
#if ENABLE_HLS
args["hls"] = 1;
#else
args["hls"] = 0;
#endif
#if ENABLE_WEBRTC
args["webrtc"] = 1;
#else
args["webrtc"] = 0;
#endif
#if ENABLE_SCTP
args["sctp"] = 1;
#else
args["sctp"] = 0;
#endif
#if ENABLE_SRT
args["srt"] = 1;
#else
args["srt"] = 0;
#endif
#if ENABLE_MP4
args["mp4"] = 1;
#else
args["mp4"] = 0;
#endif
#if ENABLE_OPENSSL
args["openssl"] = 1;
#else
args["openssl"] = 0;
#endif
args["rand_str"] = makeRandStr(32);
for (auto &pr : mINI::Instance()) {
// 只获取转协议相关配置
if (pr.first.find("protocol.") == 0) {
args[pr.first] = pr.second;
}
}
return args.make();
}
static void sendReport() {
static HttpRequester::Ptr requester = std::make_shared<HttpRequester>();
// 获取一次静态信息,定时上报主要方便统计在线实例个数
static auto body = httpBody();
requester->setMethod("POST");
requester->setBody(body);
requester->startRequester(s_report_url, nullptr, s_interval_second);
}
static toolkit::onceToken s_token([]() {
NoticeCenter::Instance().addListener(nullptr, EventPollerPool::kOnStarted, [](EventPollerPool &pool, size_t &size) {
pool.getPoller()->doDelayTask(s_interval_second * 1000, []() {
sendReport();
return s_interval_second * 1000;
});
});
});
#endif
} // namespace mediakit } // namespace mediakit