#ifndef JTJAI_MEDIA_REPORTER_H #define JTJAI_MEDIA_REPORTER_H #include "config.h" #include "rtsp_client.h" #include "scheduler.h" #include #include #include namespace jtjai_media { class ResultReporter { public: ResultReporter(const ConfigManager& config_mgr); // 生成完整报告 bool generate_report( const std::vector& client_stats, const StreamScheduler::SchedulerStats& scheduler_stats ); // 生成JSON格式报告 std::string generate_json_report( const std::vector& client_stats, const StreamScheduler::SchedulerStats& scheduler_stats ) const; // 生成文本格式报告 std::string generate_text_report( const std::vector& client_stats, const StreamScheduler::SchedulerStats& scheduler_stats ) const; // 生成CSV格式报告 std::string generate_csv_report( const std::vector& client_stats ) const; // 保存报告到文件 bool save_to_file(const std::string& content, const std::string& filename) const; // 打印控制台报告 void print_console_report( const std::vector& 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& client_stats) const; }; } // namespace jtjai_media #endif // JTJAI_MEDIA_REPORTER_H