From 843e3423cff835a862ae6aa7aa5127376d1c8155 Mon Sep 17 00:00:00 2001 From: xia-chu <771730766@qq.com> Date: Sun, 12 Mar 2023 00:06:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AE=9E=E4=BE=8B=E4=B8=8A?= =?UTF-8?q?=E6=8A=A5=E5=8A=9F=E8=83=BD:=20#2294?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3rdpart/ZLToolKit | 2 +- CMakeLists.txt | 6 +- src/Http/HttpRequester.cpp | 145 +++++++++++++++++++++++++++++++++++++ 3 files changed, 151 insertions(+), 2 deletions(-) diff --git a/3rdpart/ZLToolKit b/3rdpart/ZLToolKit index 43690d71..aea48a14 160000 --- a/3rdpart/ZLToolKit +++ b/3rdpart/ZLToolKit @@ -1 +1 @@ -Subproject commit 43690d713c156007da43bc0210f81293d0ebd460 +Subproject commit aea48a14f9619d292789b6ba66d2922e1ed36e71 diff --git a/CMakeLists.txt b/CMakeLists.txt index f562d96d..6b110377 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,7 +54,7 @@ option(ENABLE_SCTP "Enable SCTP" ON) option(ENABLE_WEBRTC "Enable WebRTC" ON) option(ENABLE_X264 "Enable x264" OFF) 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) ############################################################################## @@ -203,6 +203,10 @@ endif() update_cached_list(MK_LINK_LIBRARIES "") 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") include(CheckCXXSourceCompiles) file(READ ${CMAKE_CURRENT_SOURCE_DIR}/cmake/checks/atomic_check.cpp atomic_check_cpp) diff --git a/src/Http/HttpRequester.cpp b/src/Http/HttpRequester.cpp index c5ca15d1..0aa1ba66 100644 --- a/src/Http/HttpRequester.cpp +++ b/src/Http/HttpRequester.cpp @@ -9,6 +9,8 @@ */ #include "HttpRequester.h" +#include "Util/onceToken.h" +#include "Util/NoticeCenter.h" using namespace std; using namespace toolkit; @@ -47,4 +49,147 @@ void HttpRequester::setOnResult(const HttpRequesterResult &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(); + // 获取一次静态信息,定时上报主要方便统计在线实例个数 + 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