| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 | #ifndef JTJAI_MEDIA_REPORTER_H#define JTJAI_MEDIA_REPORTER_H#include "config.h"#include "rtsp_client.h"#include "scheduler.h"#include <vector>#include <string>#include <boost/json.hpp>namespace jtjai_media {class ResultReporter {public:    ResultReporter(const ConfigManager& config_mgr);        // 生成完整报告    bool generate_report(        const std::vector<RTSPClientStats>& client_stats,        const StreamScheduler::SchedulerStats& scheduler_stats    );        // 生成JSON格式报告    std::string generate_json_report(        const std::vector<RTSPClientStats>& client_stats,        const StreamScheduler::SchedulerStats& scheduler_stats    ) const;        // 生成文本格式报告    std::string generate_text_report(        const std::vector<RTSPClientStats>& client_stats,        const StreamScheduler::SchedulerStats& scheduler_stats    ) const;        // 生成CSV格式报告    std::string generate_csv_report(        const std::vector<RTSPClientStats>& client_stats    ) const;        // 保存报告到文件    bool save_to_file(const std::string& content, const std::string& filename) const;        // 打印控制台报告    void print_console_report(        const std::vector<RTSPClientStats>& client_stats,        const StreamScheduler::SchedulerStats& scheduler_stats    ) const;private:    ConfigManager config_mgr_;        // 辅助方法    std::string format_duration(const std::chrono::system_clock::time_point& start,                               const std::chrono::system_clock::time_point& end) const;    std::string format_bytes(int64_t bytes) const;    std::string format_timestamp(const std::chrono::system_clock::time_point& time) const;    std::string status_to_string(RTSPClientStatus status) const;        // JSON转换方法    boost::json::object client_stats_to_json(const RTSPClientStats& stats) const;    boost::json::object scheduler_stats_to_json(const StreamScheduler::SchedulerStats& stats) const;    boost::json::object config_to_json() const;        // 统计计算方法    struct SummaryStats {        int total_streams;        int successful_streams;        int failed_streams;        int cancelled_streams;        int64_t total_bytes;        int64_t total_frames;        double success_rate;        double average_duration;        std::chrono::system_clock::time_point earliest_start;        std::chrono::system_clock::time_point latest_end;    };        SummaryStats calculate_summary_stats(const std::vector<RTSPClientStats>& client_stats) const;};} // namespace jtjai_media#endif // JTJAI_MEDIA_REPORTER_H
 |