blob: bdc245eb113e30b1b3538f3ea8d910956ef84e7f [file] [log] [blame]
Tianjie Xu1b661142017-09-28 14:03:42 -07001//
2// Copyright (C) 2017 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
16
17#include "update_engine/metrics_reporter_android.h"
18
19#ifndef _UE_SIDELOAD
Tianjie Xu52c678c2017-10-18 15:52:27 -070020#include <string>
21
Tianjie Xu1b661142017-09-28 14:03:42 -070022#include <metricslogger/metrics_logger.h>
Tianjie Xu52c678c2017-10-18 15:52:27 -070023
24#include "update_engine/common/constants.h"
Tianjie Xu1b661142017-09-28 14:03:42 -070025#endif // _UE_SIDELOAD
26
Tianjie Xu52c678c2017-10-18 15:52:27 -070027namespace {
28#ifndef _UE_SIDELOAD
29void LogHistogram(const std::string& metrics, int value) {
30 android::metricslogger::LogHistogram(metrics, value);
31 LOG(INFO) << "uploading " << value << "to histogram for metric " << metrics;
32}
33#endif
34} // namespace
35
Tianjie Xu1b661142017-09-28 14:03:42 -070036namespace chromeos_update_engine {
37
38namespace metrics {
39
40#ifndef _UE_SIDELOAD
Tianjie Xu52c678c2017-10-18 15:52:27 -070041// The histograms are defined in:
42// depot/google3/analysis/uma/configs/clearcut/TRON/histograms.xml
43constexpr char kMetricsUpdateEngineAttemptNumber[] =
44 "ota_update_engine_attempt_count";
45constexpr char kMetricsUpdateEngineAttemptResult[] =
46 "ota_update_engine_attempt_result";
47constexpr char kMetricsUpdateEngineAttemptDurationInMinutes[] =
48 "ota_update_engine_attempt_duration_in_minutes";
49constexpr char kMetricsUpdateEngineAttemptDurationUptimeInMinutes[] =
50 "ota_update_engine_attempt_duration_uptime_in_minutes";
51constexpr char kMetricsUpdateEngineAttemptErrorCode[] =
52 "ota_update_engine_attempt_error_code";
53constexpr char kMetricsUpdateEngineAttemptPayloadSizeMiB[] =
54 "ota_update_engine_attempt_payload_size_mib";
55constexpr char kMetricsUpdateEngineAttemptPayloadType[] =
56 "ota_update_engine_attempt_payload_type";
57
58constexpr char kMetricsUpdateEngineSuccessfulUpdateAttemptCount[] =
59 "ota_update_engine_successful_update_attempt_count";
60constexpr char kMetricsUpdateEngineSuccessfulUpdateTotalDurationInMinutes[] =
61 "ota_update_engine_successful_update_total_duration_in_minutes";
62constexpr char kMetricsUpdateEngineSuccessfulUpdatePayloadSizeMiB[] =
63 "ota_update_engine_successful_update_payload_size_mib";
64constexpr char kMetricsUpdateEngineSuccessfulUpdatePayloadType[] =
65 "ota_update_engine_successful_update_payload_type";
66constexpr char kMetricsUpdateEngineSuccessfulUpdateRebootCount[] =
67 "ota_update_engine_successful_update_reboot_count";
Tianjie Xu1b661142017-09-28 14:03:42 -070068#endif
69} // namespace metrics
70
71void MetricsReporterAndroid::ReportUpdateAttemptMetrics(
72 SystemState* /* system_state */,
Tianjie Xu52c678c2017-10-18 15:52:27 -070073 int attempt_number,
74 PayloadType payload_type,
75 base::TimeDelta duration,
76 base::TimeDelta duration_uptime,
77 int64_t payload_size,
78 metrics::AttemptResult attempt_result,
Tianjie Xu1f93d092017-10-09 12:13:29 -070079 ErrorCode error_code) {
Tianjie Xu1b661142017-09-28 14:03:42 -070080// No need to log histogram under sideload mode.
81#ifndef _UE_SIDELOAD
Tianjie Xu52c678c2017-10-18 15:52:27 -070082 LogHistogram(metrics::kMetricsUpdateEngineAttemptNumber, attempt_number);
83 LogHistogram(metrics::kMetricsUpdateEngineAttemptPayloadType,
84 static_cast<int>(payload_type));
85 LogHistogram(metrics::kMetricsUpdateEngineAttemptDurationInMinutes,
86 duration.InMinutes());
87 LogHistogram(metrics::kMetricsUpdateEngineAttemptDurationUptimeInMinutes,
88 duration_uptime.InMinutes());
89
90 int64_t payload_size_mib = payload_size / kNumBytesInOneMiB;
91 LogHistogram(metrics::kMetricsUpdateEngineAttemptPayloadSizeMiB,
92 payload_size_mib);
93
94 LogHistogram(metrics::kMetricsUpdateEngineAttemptResult,
95 static_cast<int>(attempt_result));
96 LogHistogram(metrics::kMetricsUpdateEngineAttemptErrorCode,
97 static_cast<int>(error_code));
98#endif
99}
100
101void MetricsReporterAndroid::ReportSuccessfulUpdateMetrics(
102 int attempt_count,
103 int /* updates_abandoned_count */,
104 PayloadType payload_type,
105 int64_t payload_size,
106 int64_t* /* num_bytes_downloaded */,
107 int /* download_overhead_percentage */,
108 base::TimeDelta total_duration,
109 int reboot_count,
110 int /* url_switch_count */) {
111#ifndef _UE_SIDELOAD
112 LogHistogram(metrics::kMetricsUpdateEngineSuccessfulUpdateAttemptCount,
113 attempt_count);
114 LogHistogram(metrics::kMetricsUpdateEngineSuccessfulUpdatePayloadType,
115 static_cast<int>(payload_type));
116
117 int64_t payload_size_mib = payload_size / kNumBytesInOneMiB;
118 LogHistogram(metrics::kMetricsUpdateEngineSuccessfulUpdatePayloadSizeMiB,
119 payload_size_mib);
120
121 LogHistogram(
122 metrics::kMetricsUpdateEngineSuccessfulUpdateTotalDurationInMinutes,
123 total_duration.InMinutes());
124 LogHistogram(metrics::kMetricsUpdateEngineSuccessfulUpdateRebootCount,
125 reboot_count);
126#endif
127}
128
129void MetricsReporterAndroid::ReportAbnormallyTerminatedUpdateAttemptMetrics() {
130#ifndef _UE_SIDELOAD
131 int attempt_result =
132 static_cast<int>(metrics::AttemptResult::kAbnormalTermination);
133 LogHistogram(metrics::kMetricsUpdateEngineAttemptResult, attempt_result);
Tianjie Xu1b661142017-09-28 14:03:42 -0700134#endif
135}
136
137}; // namespace chromeos_update_engine