blob: 680ddb92eccfee7c05c39afeafa96be79b6cbb03 [file] [log] [blame]
// Copyright 2021 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.
#include "src/developer/forensics/feedback/reboot_log/graceful_reboot_reason.h"
#include <lib/syslog/cpp/macros.h>
namespace forensics {
namespace feedback {
namespace {
constexpr char kReasonNotSet[] = "NOT SET";
constexpr char kReasonNone[] = "NONE";
constexpr char kReasonUserRequest[] = "USER REQUEST";
constexpr char kReasonSystemUpdate[] = "SYSTEM UPDATE";
constexpr char kReasonRetrySystemUpdate[] = "RETRY SYSTEM UPDATE";
constexpr char kReasonHighTemperature[] = "HIGH TEMPERATURE";
constexpr char kReasonSessionFailure[] = "SESSION FAILURE";
constexpr char kReasonSysmgrFailure[] = "SYSMGR FAILURE";
constexpr char kReasonCriticalComponentFailure[] = "CRITICAL COMPONENT FAILURE";
constexpr char kReasonFdr[] = "FACTORY DATA RESET";
constexpr char kReasonZbiSwap[] = "ZBI SWAP";
constexpr char kOutOfMemory[] = "OUT OF MEMORY";
constexpr char kReasonNotSupported[] = "NOT SUPPORTED";
constexpr char kReasonNotParseable[] = "NOT PARSEABLE";
} // namespace
std::string ToString(const GracefulRebootReason reason) {
switch (reason) {
case GracefulRebootReason::kNotSet:
return kReasonNotSet;
case GracefulRebootReason::kNone:
return kReasonNone;
case GracefulRebootReason::kUserRequest:
return kReasonUserRequest;
case GracefulRebootReason::kSystemUpdate:
return kReasonSystemUpdate;
case GracefulRebootReason::kRetrySystemUpdate:
return kReasonRetrySystemUpdate;
case GracefulRebootReason::kHighTemperature:
return kReasonHighTemperature;
case GracefulRebootReason::kSessionFailure:
return kReasonSessionFailure;
case GracefulRebootReason::kSysmgrFailure:
return kReasonSysmgrFailure;
case GracefulRebootReason::kCriticalComponentFailure:
return kReasonCriticalComponentFailure;
case GracefulRebootReason::kFdr:
return kReasonFdr;
case GracefulRebootReason::kZbiSwap:
return kReasonZbiSwap;
case GracefulRebootReason::kOutOfMemory:
return kOutOfMemory;
case GracefulRebootReason::kNotSupported:
return kReasonNotSupported;
case GracefulRebootReason::kNotParseable:
return kReasonNotParseable;
}
}
std::string ToFileContent(const GracefulRebootReason reason) {
switch (reason) {
case GracefulRebootReason::kUserRequest:
case GracefulRebootReason::kSystemUpdate:
case GracefulRebootReason::kRetrySystemUpdate:
case GracefulRebootReason::kHighTemperature:
case GracefulRebootReason::kSessionFailure:
case GracefulRebootReason::kSysmgrFailure:
case GracefulRebootReason::kCriticalComponentFailure:
case GracefulRebootReason::kFdr:
case GracefulRebootReason::kZbiSwap:
case GracefulRebootReason::kOutOfMemory:
case GracefulRebootReason::kNotSupported:
return ToString(reason);
case GracefulRebootReason::kNotSet:
case GracefulRebootReason::kNone:
case GracefulRebootReason::kNotParseable:
FX_LOGS(ERROR) << "Invalid persisted graceful reboot reason: " << ToString(reason);
return kReasonNotSupported;
}
}
GracefulRebootReason FromFileContent(const std::string reason) {
if (reason == kReasonUserRequest) {
return GracefulRebootReason::kUserRequest;
} else if (reason == kReasonSystemUpdate) {
return GracefulRebootReason::kSystemUpdate;
} else if (reason == kReasonRetrySystemUpdate) {
return GracefulRebootReason::kRetrySystemUpdate;
} else if (reason == kReasonHighTemperature) {
return GracefulRebootReason::kHighTemperature;
} else if (reason == kReasonSessionFailure) {
return GracefulRebootReason::kSessionFailure;
} else if (reason == kReasonSysmgrFailure) {
return GracefulRebootReason::kSysmgrFailure;
} else if (reason == kReasonCriticalComponentFailure) {
return GracefulRebootReason::kCriticalComponentFailure;
} else if (reason == kReasonFdr) {
return GracefulRebootReason::kFdr;
} else if (reason == kReasonZbiSwap) {
return GracefulRebootReason::kZbiSwap;
} else if (reason == kReasonNotSupported) {
return GracefulRebootReason::kNotSupported;
} else if (reason == kOutOfMemory) {
return GracefulRebootReason::kOutOfMemory;
}
FX_LOGS(ERROR) << "Invalid persisted graceful reboot reason: " << reason;
return GracefulRebootReason::kNotParseable;
}
GracefulRebootReason ToGracefulRebootReason(
const fuchsia::hardware::power::statecontrol::RebootReason reason) {
using fuchsia::hardware::power::statecontrol::RebootReason;
switch (reason) {
case RebootReason::USER_REQUEST:
return GracefulRebootReason::kUserRequest;
case RebootReason::SYSTEM_UPDATE:
return GracefulRebootReason::kSystemUpdate;
case RebootReason::RETRY_SYSTEM_UPDATE:
return GracefulRebootReason::kRetrySystemUpdate;
case RebootReason::HIGH_TEMPERATURE:
return GracefulRebootReason::kHighTemperature;
case RebootReason::SESSION_FAILURE:
return GracefulRebootReason::kSessionFailure;
case RebootReason::SYSMGR_FAILURE:
return GracefulRebootReason::kSysmgrFailure;
case RebootReason::CRITICAL_COMPONENT_FAILURE:
return GracefulRebootReason::kCriticalComponentFailure;
case RebootReason::FACTORY_DATA_RESET:
return GracefulRebootReason::kFdr;
case RebootReason::ZBI_SWAP:
return GracefulRebootReason::kZbiSwap;
case RebootReason::OUT_OF_MEMORY:
return GracefulRebootReason::kOutOfMemory;
default:
return GracefulRebootReason::kNotSupported;
}
}
} // namespace feedback
} // namespace forensics