reporter.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #ifndef JTJAI_MEDIA_REPORTER_H
  2. #define JTJAI_MEDIA_REPORTER_H
  3. #include "config.h"
  4. #include "rtsp_client.h"
  5. #include "scheduler.h"
  6. #include <vector>
  7. #include <string>
  8. #include <boost/json.hpp>
  9. namespace jtjai_media {
  10. class ResultReporter {
  11. public:
  12. ResultReporter(const ConfigManager& config_mgr);
  13. // 生成完整报告
  14. bool generate_report(
  15. const std::vector<RTSPClientStats>& client_stats,
  16. const StreamScheduler::SchedulerStats& scheduler_stats
  17. );
  18. // 生成JSON格式报告
  19. std::string generate_json_report(
  20. const std::vector<RTSPClientStats>& client_stats,
  21. const StreamScheduler::SchedulerStats& scheduler_stats
  22. ) const;
  23. // 生成文本格式报告
  24. std::string generate_text_report(
  25. const std::vector<RTSPClientStats>& client_stats,
  26. const StreamScheduler::SchedulerStats& scheduler_stats
  27. ) const;
  28. // 生成CSV格式报告
  29. std::string generate_csv_report(
  30. const std::vector<RTSPClientStats>& client_stats
  31. ) const;
  32. // 保存报告到文件
  33. bool save_to_file(const std::string& content, const std::string& filename) const;
  34. // 打印控制台报告
  35. void print_console_report(
  36. const std::vector<RTSPClientStats>& client_stats,
  37. const StreamScheduler::SchedulerStats& scheduler_stats
  38. ) const;
  39. private:
  40. ConfigManager config_mgr_;
  41. // 辅助方法
  42. std::string format_duration(const std::chrono::system_clock::time_point& start,
  43. const std::chrono::system_clock::time_point& end) const;
  44. std::string format_bytes(int64_t bytes) const;
  45. std::string format_timestamp(const std::chrono::system_clock::time_point& time) const;
  46. std::string status_to_string(RTSPClientStatus status) const;
  47. // JSON转换方法
  48. boost::json::object client_stats_to_json(const RTSPClientStats& stats) const;
  49. boost::json::object scheduler_stats_to_json(const StreamScheduler::SchedulerStats& stats) const;
  50. boost::json::object config_to_json() const;
  51. // 统计计算方法
  52. struct SummaryStats {
  53. int total_streams;
  54. int successful_streams;
  55. int failed_streams;
  56. int cancelled_streams;
  57. int64_t total_bytes;
  58. int64_t total_frames;
  59. double success_rate;
  60. double average_duration;
  61. std::chrono::system_clock::time_point earliest_start;
  62. std::chrono::system_clock::time_point latest_end;
  63. };
  64. SummaryStats calculate_summary_stats(const std::vector<RTSPClientStats>& client_stats) const;
  65. };
  66. } // namespace jtjai_media
  67. #endif // JTJAI_MEDIA_REPORTER_H