blob: e6c9311a05082b7330162235420b59e945eccaf0 [file] [log] [blame]
// Copyright 2019 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 DIAGNOSTICS_WILCO_DTC_SUPPORTD_TELEMETRY_SYSTEM_FILES_SERVICE_H_
#define DIAGNOSTICS_WILCO_DTC_SUPPORTD_TELEMETRY_SYSTEM_FILES_SERVICE_H_
#include <memory>
#include <string>
#include <vector>
#include <base/files/file_path.h>
#include <base/macros.h>
#include <base/optional.h>
namespace diagnostics {
class SystemFilesService {
public:
struct FileDump {
FileDump();
~FileDump();
FileDump(FileDump&& other);
FileDump& operator=(FileDump&& other);
// Absolute path to the file.
base::FilePath path;
// Canonicalized path to the file. Unlike |path|, this path never contains
// symbolic links.
base::FilePath canonical_path;
std::string contents;
};
using FileDumps = std::vector<std::unique_ptr<FileDump>>;
enum class Directory {
kProcAcpiButton, // request contents of files under
// “/proc/acpi/button/"
kSysClassHwmon, // request information about hwmon devices (contents of
// files under /sys/class/hwmon/)
kSysClassThermal, // request information about thermal zone devices and
// cooling devices (contents of files under
// /sys/class/thermal/)
kSysFirmwareDmiTables, // request SMBIOS information as raw DMI tables
// (contents of files under
// /sys/firmware/dmi/tables/)
kSysClassPowerSupply, // request information about power supplies
// (contents of files under
// /sys/class/power_supply/)
kSysClassBacklight, // request information about brightness
// (contents of files under /sys/class/backlight/)
kSysClassNetwork, // request information about WLAN and Ethernet
// (contents of files under /sys/class/net/)
kSysDevicesSystemCpu, // request information about CPU details.
// (contents of files under
// /sys/devices/system/cpu/)
};
enum class File {
kProcUptime, // request contents of "/proc/uptime"
kProcMeminfo, // request contents of “/proc/meminfo"
kProcLoadavg, // request contents of “/proc/loadavg"
kProcStat, // request contents of “/proc/stat"
kProcNetNetstat, // request contents of “/proc/net/netstat"
kProcNetDev, // request contents of “/proc/net/dev"
kProcDiskstats, // request contents of “/proc/diskstats"
kProcCpuinfo, // request contents of “/proc/cpuinfo"
kProcVmstat, // request contents of “/proc/vmstat"
};
enum class VpdField {
kActivateDate, // request value of ActivateDate VPD field
kAssetId, // request value of AssetId VPD field
kMfgDate, // request value of MfgDate VPD field
kModelName, // request value of ModelName VPD field
kSerialNumber, // request value of SerialNumber VPD field
kSkuNumber, // request value of SkuNumber VPD field
kSystemId, // request value of SystemId VPD field
kUuid, // request value of Uuid VPD field
};
SystemFilesService() = default;
SystemFilesService(const SystemFilesService&) = delete;
SystemFilesService& operator=(const SystemFilesService&) = delete;
virtual ~SystemFilesService() = default;
// Gets the dump of the specified file. Returns base::nullopt on failure.
virtual base::Optional<FileDump> GetFileDump(File location) = 0;
// Gets the dumps of the files in the specified directory. Returns true if
// successful.
virtual base::Optional<FileDumps> GetDirectoryDump(Directory location) = 0;
// Gets trimmed value of the specified VPD field.
// Returns base::nullopt if VPD value does not exist, empty or contains
// non-ASCII symbols.
// TODO(b/154595154): consider changing behavior: empty string is valid, non
// ASCII symbols are allowed.
virtual base::Optional<std::string> GetVpdField(VpdField vpd_field) = 0;
};
} // namespace diagnostics
#endif // DIAGNOSTICS_WILCO_DTC_SUPPORTD_TELEMETRY_SYSTEM_FILES_SERVICE_H_