Files
cariflex/tools/EVerest-main/modules/Misc/Linux_Systemd_Rauc/diagnostics_handler.cpp
Eric F d398a6ced2 Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter
- CitrineOS core extracted (CSMS OCPP 2.0.1)
- OpenOCPP extracted (firmware OCPP 1.6J/2.0.1)
- ShapeShifter library installed (pip install -e)
- ShapeShifter specification extracted
- EVerest extracted

TODO updated with progress
2026-06-08 00:38:27 -04:00

80 lines
2.9 KiB
C++

// SPDX-License-Identifier: Apache-2.0
// Copyright 2020 - 2025 Pionix GmbH and Contributors to EVerest
#include "diagnostics_handler.hpp"
#include <everest/logging.hpp>
#include <everest/system/safe_system.hpp>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <vector>
namespace module {
DiagnosticsHandler::log_result_t DiagnosticsHandler::create_log(const std::string& filename,
const std::optional<std::string>& from,
const std::optional<std::string>& to) {
log_result_t result = log_result_t::success;
int fd;
if ((fd = open(filename.c_str(), O_WRONLY | O_CREAT | O_TRUNC, S_IWUSR | S_IXUSR)) == -1) {
EVLOG_error << "Unable to create file journal file: " << filename << " (" << errno << ")";
result = log_result_t::error_file;
} else {
result = create_journal_log(fd, from, to);
if (result == log_result_t::success) {
result = create_ocpp_log(fd, from, to);
}
if (result == log_result_t::success) {
result = create_session_log(fd, from, to);
}
(void)close(fd);
}
return result;
}
DiagnosticsHandler::log_result_t DiagnosticsHandler::collect_logs(int fd, const char* logType,
const std::optional<std::string>& logDir,
const std::optional<std::string>& from,
const std::optional<std::string>& to) {
log_result_t result = log_result_t::success;
std::string arg_cmd = "diagnostics_collector.sh";
std::vector<std::string> args;
std::string cmd = script_dir + "/" + arg_cmd;
args.push_back(arg_cmd);
args.emplace_back(logType);
if (logDir.has_value()) {
args.emplace_back("--dir");
args.push_back(logDir.value());
}
if (from.has_value()) {
args.emplace_back("--since");
args.push_back(from.value());
}
if (to.has_value()) {
args.emplace_back("--until");
args.push_back(to.value());
}
const auto res = everest::lib::system::safe_system(fd, cmd, &args);
if (res.status != everest::lib::system::CommandExecutionStatus::CMD_SUCCESS || res.code != 0) {
EVLOG_error << "Unable to extract journal logs from:" << from.value_or("<not specified>")
<< " to:" << to.value_or("<not specified>") << " ("
<< everest::lib::system::cmd_execution_status_to_string(res.status) << ": "
<< std::to_string(res.code) << ")";
EVLOG_info << "Failed command: '" << everest::lib::system::command_string_repr(cmd, args) << "'";
result = log_result_t::error_parameter;
}
return result;
}
} // namespace module