| // Copyright 2020 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef DLCSERVICE_METRICS_H_ |
| #define DLCSERVICE_METRICS_H_ |
| |
| #include <map> |
| #include <memory> |
| #include <string> |
| #include <utility> |
| |
| #include <metrics/metrics_library.h> |
| |
| #include "dlcservice/error.h" |
| |
| namespace dlcservice { |
| |
| namespace metrics { |
| extern const char kMetricInstallResult[]; |
| extern const char kMetricUninstallResult[]; |
| |
| // IMPORTANT: Please read this before making any changes to the file: |
| // - Never change existing numerical values on the enums, because the same |
| // numbering is used in the UMA website. If you don't need a value, comment out |
| // the value that is no longer needed, and remove it from the map in metrics.cc; |
| // this will let the error fall into the |kUnknownError| bucket. |
| // - Never reuse a number. |
| // - When adding a new value, a new entry has to be added in |
| // chromium/src/tools/metrics/histograms/enums.xml |
| enum class InstallResult { |
| kUnknownError = 0, |
| kSuccessNewInstall = 1, |
| kSuccessAlreadyInstalled = 2, |
| kFailedToCreateDirectory = 3, |
| kFailedInstallInUpdateEngine = 4, |
| kFailedInvalidDlc = 5, |
| kFailedNeedReboot = 6, |
| kFailedUpdateEngineBusy = 7, |
| kFailedToVerifyImage = 8, |
| kFailedToMountImage = 9, |
| kNumConstants |
| }; |
| |
| enum class UninstallResult { |
| kUnknownError = 0, |
| kSuccess = 1, |
| kFailedInvalidDlc = 2, |
| kFailedUpdateEngineBusy = 3, |
| kNumConstants |
| }; |
| } // namespace metrics |
| |
| // Performs UMA metrics logging for the dlcservice daemon. |
| class Metrics { |
| public: |
| explicit Metrics(std::unique_ptr<MetricsLibraryInterface> metrics_library) |
| : metrics_library_(std::move(metrics_library)) {} |
| |
| virtual ~Metrics() = default; |
| |
| // Initializes the class. |
| void Init(); |
| |
| // Sends the |InstallResult| value for a successful installation. There are |
| // two success scenarios, |kSuccessNewInstall| and |kSuccessAlreadyInstalled|. |
| void SendInstallResultSuccess(const bool& installed_by_ue); |
| |
| // Sends the |InstallResult| value for when the installation was not |
| // successful. |
| void SendInstallResultFailure(brillo::ErrorPtr* err); |
| |
| // Sends the |UninstallResult| value. If |err| is empty, send |kSuccess|, |
| // otherwise send a failure value. |
| void SendUninstallResult(brillo::ErrorPtr* err); |
| |
| protected: |
| // For testing. |
| Metrics() = default; |
| // Sends the value for |InstallResult|. |
| virtual void SendInstallResult(metrics::InstallResult result); |
| |
| // Sends the value for |UninstallResult|. |
| virtual void SendUninstallResult(metrics::UninstallResult result); |
| |
| private: |
| std::unique_ptr<MetricsLibraryInterface> metrics_library_; |
| // Map DBus error codes and |dlcservice::error|s to |InstallResult| values. |
| typedef std::map<std::string, metrics::InstallResult> InstallResultMap; |
| static InstallResultMap install_result_; |
| // Map DBus error codes and |dlcservice::error|s to |UninstallResult| values. |
| typedef std::map<std::string, metrics::UninstallResult> UninstallResultMap; |
| static UninstallResultMap uninstall_result_; |
| |
| Metrics(const Metrics&) = delete; |
| Metrics& operator=(const Metrics&) = delete; |
| }; |
| |
| } // namespace dlcservice |
| |
| #endif // DLCSERVICE_METRICS_H_ |