blob: 2acb7a3dc5e0e225dd05e2f1004e283548617168 [file] [log] [blame]
// Copyright 2019 The Fuchsia 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 SRC_DEVELOPER_FORENSICS_FEEDBACK_DATA_CONSTANTS_H_
#define SRC_DEVELOPER_FORENSICS_FEEDBACK_DATA_CONSTANTS_H_
#include <fuchsia/feedback/cpp/fidl.h>
#include <cstdint>
#include <set>
#include <string>
#include <vector>
#include "src/developer/forensics/utils/cobalt/metrics.h"
namespace forensics {
namespace feedback_data {
///////////////////////////////////////////////////////////////////////////////////////////////////
// Annotations
///////////////////////////////////////////////////////////////////////////////////////////////////
const uint32_t kMaxNumPlatformAnnotations = 32u;
const uint32_t kMaxNumNonPlatformAnnotations = 30u;
const uint32_t kMaxNumDebugAnnotations = 2u;
static_assert(kMaxNumPlatformAnnotations + kMaxNumNonPlatformAnnotations +
kMaxNumDebugAnnotations ==
fuchsia::feedback::MAX_NUM_ANNOTATIONS_PROVIDED,
"The max number of provided annotations has to be split between a max number of "
"platform annotations, a max number of non-platform annotations, and a max number of "
"debug annotations");
// Platform annotation keys.
constexpr char kAnnotationBuildBoard[] = "build.board";
constexpr char kAnnotationBuildIsDebug[] = "build.is_debug";
constexpr char kAnnotationBuildLatestCommitDate[] = "build.latest-commit-date";
constexpr char kAnnotationBuildProduct[] = "build.product";
constexpr char kAnnotationBuildVersion[] = "build.version";
constexpr char kAnnotationDeviceBoardName[] = "device.board-name";
constexpr char kAnnotationDeviceFeedbackId[] = "device.feedback-id";
constexpr char kAnnotationDeviceUptime[] = "device.uptime";
constexpr char kAnnotationDeviceUtcTime[] = "device.utc-time";
constexpr char kAnnotationHardwareBoardName[] = "hardware.board.name";
constexpr char kAnnotationHardwareBoardRevision[] = "hardware.board.revision";
constexpr char kAnnotationHardwareProductLanguage[] = "hardware.product.language";
constexpr char kAnnotationHardwareProductLocaleList[] = "hardware.product.locale-list";
constexpr char kAnnotationHardwareProductManufacturer[] = "hardware.product.manufacturer";
constexpr char kAnnotationHardwareProductModel[] = "hardware.product.model";
constexpr char kAnnotationHardwareProductName[] = "hardware.product.name";
constexpr char kAnnotationHardwareProductRegulatoryDomain[] = "hardware.product.regulatory-domain";
constexpr char kAnnotationHardwareProductSKU[] = "hardware.product.sku";
constexpr char kAnnotationSystemBootIdCurrent[] = "system.boot-id.current";
constexpr char kAnnotationSystemBootIdPrevious[] = "system.boot-id.previous";
constexpr char kAnnotationSystemLastRebootReason[] = "system.last-reboot.reason";
constexpr char kAnnotationSystemLastRebootUptime[] = "system.last-reboot.uptime";
constexpr char kAnnotationSystemUpdateChannelCurrent[] = "system.update-channel.current";
// Reserved namespaces for platform annotations. Components are not allowed to use these namespaces
// when supplying non-platform annotations.
const std::set<const std::string> kReservedAnnotationNamespaces({
"build",
"device",
"hardware",
"hardware.board",
"hardware.product",
"misc",
"system",
});
///////////////////////////////////////////////////////////////////////////////////////////////////
// Attachments
///////////////////////////////////////////////////////////////////////////////////////////////////
// Platform attachments keys.
constexpr char kAttachmentAnnotations[] = "annotations.json";
constexpr char kAttachmentBuildSnapshot[] = "build.snapshot.xml";
constexpr char kAttachmentInspect[] = "inspect.json";
constexpr char kAttachmentLogKernel[] = "log.kernel.txt";
constexpr char kAttachmentLogSystem[] = "log.system.txt";
constexpr char kAttachmentLogSystemPrevious[] = "log.system.previous_boot.txt";
constexpr char kAttachmentMetadata[] = "metadata.json";
// Snapshot key.
constexpr char kSnapshotFilename[] = "snapshot.zip";
///////////////////////////////////////////////////////////////////////////////////////////////////
// Device ID
///////////////////////////////////////////////////////////////////////////////////////////////////
constexpr char kDeviceIdPath[] = "/data/device_id.txt";
///////////////////////////////////////////////////////////////////////////////////////////////////
// Boot ID
///////////////////////////////////////////////////////////////////////////////////////////////////
constexpr char kBootIdFileName[] = "boot_id.txt";
///////////////////////////////////////////////////////////////////////////////////////////////////
// UTC-monotonic difference
///////////////////////////////////////////////////////////////////////////////////////////////////
constexpr char kUtcMonotonicDifferenceFile[] = "current_utc_monotonic_difference.txt";
///////////////////////////////////////////////////////////////////////////////////////////////////
// Logs from previous boot cycle.
///////////////////////////////////////////////////////////////////////////////////////////////////
constexpr char kPreviousLogsFilePath[] = "/tmp/log.system.previous_boot.txt";
// We use the 8 files below to store up to 512 kb of logs. So, assuming all components have logged
// at least 512 kb of data, we can expect between 448 kb and 512 kb of logs to be persisted due to
// the log rotation.
constexpr uint64_t kPersistentLogsMaxSizeInKb = 512;
constexpr char kCurrentLogsDir[] = "/cache/current_system_logs";
constexpr size_t kMaxNumLogFiles = 8u;
// At most 16KB of logs will be persisted each second.
constexpr size_t kMaxWriteSizeInBytes = 16 * 1024;
// Repeated messge format
constexpr char kRepeatedStrPrefix[] = "!!! MESSAGE REPEATED ";
constexpr char kRepeatedOnceFormatStr[] = "!!! MESSAGE REPEATED 1 MORE TIME !!!\n";
constexpr char kRepeatedFormatStr[] = "!!! MESSAGE REPEATED %lu MORE TIMES !!!\n";
// One repeated message can occupy up to "kMaxRepeatedBuffers" buffers.
constexpr size_t kMaxRepeatedBuffers = 30;
// The current version of the snapshot. Update these values together!
struct SnapshotVersion {
static constexpr cobalt::SnapshotVersion kCobalt = cobalt::SnapshotVersion::kV_01;
static constexpr const char* kString = "1";
};
// Use this file to determine whether or not a previous instance of the component was instructed to
// terminated system log recording.
constexpr char kDoNotLaunchSystemLogRecorder[] = "/tmp/do_not_launch_system_log_recorder.txt";
} // namespace feedback_data
} // namespace forensics
#endif // SRC_DEVELOPER_FORENSICS_FEEDBACK_DATA_CONSTANTS_H_