telemetry_log.cc 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. // Copyright 2021 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ash/system/diagnostics/telemetry_log.h"
  5. #include <sstream>
  6. #include <utility>
  7. #include "base/i18n/time_formatting.h"
  8. #include "base/strings/string_number_conversions.h"
  9. #include "base/strings/utf_string_conversions.h"
  10. #include "base/time/time.h"
  11. namespace ash {
  12. namespace diagnostics {
  13. namespace {
  14. const char kNewline[] = "\n";
  15. // SystemInfo constants:
  16. const char kSystemInfoSectionName[] = "--- System Info ---";
  17. const char kSystemInfoCurrentTimeTitle[] = "Snapshot Time: ";
  18. const char kSystemInfoBoardNameTitle[] = "Board Name: ";
  19. const char kSystemInfoMarketingNameTitle[] = "Marketing Name: ";
  20. const char kSystemInfoCpuModelNameTitle[] = "CpuModel Name: ";
  21. const char kSystemInfoTotalMemoryTitle[] = "Total Memory (kib): ";
  22. const char kSystemInfoCpuThreadCountTitle[] = "Thread Count: ";
  23. const char kSystemInfoCpuMaxClockSpeedTitle[] = "Cpu Max Clock Speed (kHz): ";
  24. const char kSystemInfoMilestoneVersionTitle[] = "Version: ";
  25. const char kSystemInfoHasBatteryTitle[] = "Has Battery: ";
  26. // BatteryChargeStatus constants:
  27. const char kBatteryChargeStatusSectionName[] = "--- Battery Charge Status ---";
  28. const char kBatteryChargeStatusBatteryStateTitle[] = "Battery State: ";
  29. const char kBatteryChargeStatusPowerSourceTitle[] = "Power Source: ";
  30. const char kBatteryChargeStatusPowerTimeTitle[] = "Power Time: ";
  31. const char kBatteryChargeStatusCurrentNowTitle[] = "Current Now (mA): ";
  32. const char kBatteryChargeStatusChargeNowTitle[] = "Chage Now (mAh): ";
  33. // BatteryHealth constants:
  34. const char kBatteryHealthSectionName[] = "--- Battery Health ---";
  35. const char kBatteryHealthChargeFullNowTitle[] = "Charge Full Now (mAh): ";
  36. const char kBatteryHealthChargeFullDesignTitle[] = "Charge Full Design (mAh): ";
  37. const char kBatteryHealthCycleCountTitle[] = "Cycle Count: ";
  38. const char kBatteryHealthWearPercentageTitle[] = "Wear Percentage: ";
  39. // MemoryUsage constants:
  40. const char kMemoryUsageSectionName[] = "--- Memory Usage ---";
  41. const char kMemoryUsageTotalMemoryTitle[] = "Total Memory (kib): ";
  42. const char kMemoryUsageAvailableMemoryTitle[] = "Available Memory (kib): ";
  43. const char kMemoryUsageFreeMemoryTitle[] = "Free Memory (kib): ";
  44. // CpuUsage constants:
  45. const char kCpuUsageSectionName[] = "--- Cpu Usage ---";
  46. const char kCpuUsageUserTitle[] = "Usage User (%): ";
  47. const char kCpuUsageSystemTitle[] = "Usage System (%): ";
  48. const char kCpuUsageFreeTitle[] = "Usage Free (%): ";
  49. const char kCpuUsageAvgTempTitle[] = "Avg Temp (C): ";
  50. const char kCpuUsageScalingFrequencyTitle[] =
  51. "Current scaled frequency (kHz): ";
  52. std::string GetCurrentDateTimeWithTimeZoneAsString() {
  53. return base::UTF16ToUTF8(
  54. base::TimeFormatShortDateAndTimeWithTimeZone(base::Time::Now()));
  55. }
  56. } // namespace
  57. TelemetryLog::TelemetryLog() = default;
  58. TelemetryLog::~TelemetryLog() = default;
  59. void TelemetryLog::UpdateSystemInfo(mojom::SystemInfoPtr latest_system_info) {
  60. latest_system_info_ = std::move(latest_system_info);
  61. }
  62. void TelemetryLog::UpdateBatteryChargeStatus(
  63. mojom::BatteryChargeStatusPtr latest_battery_charge_status) {
  64. latest_battery_charge_status_ = std::move(latest_battery_charge_status);
  65. }
  66. void TelemetryLog::UpdateBatteryHealth(
  67. mojom::BatteryHealthPtr latest_battery_health) {
  68. latest_battery_health_ = std::move(latest_battery_health);
  69. }
  70. void TelemetryLog::UpdateMemoryUsage(
  71. mojom::MemoryUsagePtr latest_memory_usage) {
  72. latest_memory_usage_ = std::move(latest_memory_usage);
  73. }
  74. void TelemetryLog::UpdateCpuUsage(mojom::CpuUsagePtr latest_cpu_usage) {
  75. latest_cpu_usage_ = std::move(latest_cpu_usage);
  76. }
  77. std::string TelemetryLog::GetContents() const {
  78. std::stringstream output;
  79. if (latest_system_info_) {
  80. output << kSystemInfoSectionName << kNewline << kSystemInfoCurrentTimeTitle
  81. << GetCurrentDateTimeWithTimeZoneAsString() << kNewline
  82. << kSystemInfoBoardNameTitle << latest_system_info_->board_name
  83. << kNewline << kSystemInfoMarketingNameTitle
  84. << latest_system_info_->marketing_name << kNewline
  85. << kSystemInfoCpuModelNameTitle
  86. << latest_system_info_->cpu_model_name << kNewline
  87. << kSystemInfoTotalMemoryTitle
  88. << latest_system_info_->total_memory_kib << kNewline
  89. << kSystemInfoCpuThreadCountTitle
  90. << latest_system_info_->cpu_threads_count << kNewline
  91. << kSystemInfoCpuMaxClockSpeedTitle
  92. << latest_system_info_->cpu_max_clock_speed_khz << kNewline
  93. << kSystemInfoMilestoneVersionTitle
  94. << latest_system_info_->version_info->full_version_string << kNewline
  95. << kSystemInfoHasBatteryTitle
  96. << ((latest_system_info_->device_capabilities->has_battery)
  97. ? "true"
  98. : "false")
  99. << kNewline << kNewline;
  100. }
  101. if (latest_battery_charge_status_) {
  102. output << kBatteryChargeStatusSectionName << kNewline
  103. << kBatteryChargeStatusBatteryStateTitle
  104. << latest_battery_charge_status_->battery_state << kNewline
  105. << kBatteryChargeStatusPowerSourceTitle
  106. << latest_battery_charge_status_->power_adapter_status << kNewline
  107. << kBatteryChargeStatusPowerTimeTitle
  108. << latest_battery_charge_status_->power_time << kNewline
  109. << kBatteryChargeStatusCurrentNowTitle
  110. << latest_battery_charge_status_->current_now_milliamps << kNewline
  111. << kBatteryChargeStatusChargeNowTitle
  112. << latest_battery_charge_status_->charge_now_milliamp_hours
  113. << kNewline << kNewline;
  114. }
  115. if (latest_battery_health_) {
  116. output << kBatteryHealthSectionName << kNewline
  117. << kBatteryHealthChargeFullNowTitle
  118. << latest_battery_health_->charge_full_now_milliamp_hours << kNewline
  119. << kBatteryHealthChargeFullDesignTitle
  120. << latest_battery_health_->charge_full_design_milliamp_hours
  121. << kNewline << kBatteryHealthCycleCountTitle
  122. << latest_battery_health_->cycle_count << kNewline
  123. << kBatteryHealthWearPercentageTitle
  124. << base::NumberToString(
  125. latest_battery_health_->battery_wear_percentage)
  126. << kNewline << kNewline;
  127. }
  128. if (latest_memory_usage_) {
  129. output << kMemoryUsageSectionName << kNewline
  130. << kMemoryUsageTotalMemoryTitle
  131. << latest_memory_usage_->total_memory_kib << kNewline
  132. << kMemoryUsageAvailableMemoryTitle
  133. << latest_memory_usage_->available_memory_kib << kNewline
  134. << kMemoryUsageFreeMemoryTitle
  135. << latest_memory_usage_->free_memory_kib << kNewline << kNewline;
  136. }
  137. if (latest_cpu_usage_) {
  138. output << kCpuUsageSectionName << kNewline << kCpuUsageUserTitle
  139. << base::NumberToString(latest_cpu_usage_->percent_usage_user)
  140. << kNewline << kCpuUsageSystemTitle
  141. << base::NumberToString(latest_cpu_usage_->percent_usage_system)
  142. << kNewline << kCpuUsageFreeTitle
  143. << base::NumberToString(latest_cpu_usage_->percent_usage_free)
  144. << kNewline << kCpuUsageAvgTempTitle
  145. << latest_cpu_usage_->average_cpu_temp_celsius << kNewline
  146. << kCpuUsageScalingFrequencyTitle
  147. << latest_cpu_usage_->scaling_current_frequency_khz << kNewline
  148. << kNewline;
  149. }
  150. return output.str();
  151. }
  152. } // namespace diagnostics
  153. } // namespace ash