mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-02-19 04:13:54 +08:00
Put journal and nvme stats in bootlog (#22849)
* Run commands and put output in bootlog
* log nvme
* fix indent
* cereal without event
* use regular array
old-commit-hash: fa0cbe5d40
This commit is contained in:
2
cereal
2
cereal
Submodule cereal updated: 12162ac4de...a6965af402
@@ -209,6 +209,22 @@ std::string dir_name(std::string const &path) {
|
||||
return path.substr(0, pos);
|
||||
}
|
||||
|
||||
std::string check_output(const std::string& command) {
|
||||
char buffer[128];
|
||||
std::string result;
|
||||
std::unique_ptr<FILE, decltype(&pclose)> pipe(popen(command.c_str(), "r"), pclose);
|
||||
|
||||
if (!pipe) {
|
||||
return "";
|
||||
}
|
||||
|
||||
while (fgets(buffer, std::size(buffer), pipe.get()) != nullptr) {
|
||||
result += std::string(buffer);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
struct tm get_time() {
|
||||
time_t rawtime;
|
||||
time(&rawtime);
|
||||
|
||||
@@ -89,6 +89,8 @@ std::string readlink(const std::string& path);
|
||||
bool file_exists(const std::string& fn);
|
||||
bool create_directories(const std::string &dir, mode_t mode);
|
||||
|
||||
std::string check_output(const std::string& command);
|
||||
|
||||
inline void sleep_for(const int milliseconds) {
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(milliseconds));
|
||||
}
|
||||
|
||||
@@ -5,7 +5,14 @@
|
||||
#include "selfdrive/common/swaglog.h"
|
||||
#include "selfdrive/loggerd/logger.h"
|
||||
|
||||
|
||||
static kj::Array<capnp::word> build_boot_log() {
|
||||
std::vector<std::string> bootlog_commands;
|
||||
if (Hardware::TICI()) {
|
||||
bootlog_commands.push_back("journalctl");
|
||||
bootlog_commands.push_back("sudo nvme smart-log --output-format=json /dev/nvme0");
|
||||
}
|
||||
|
||||
MessageBuilder msg;
|
||||
auto boot = msg.initEvent().initBoot();
|
||||
|
||||
@@ -30,6 +37,20 @@ static kj::Array<capnp::word> build_boot_log() {
|
||||
}
|
||||
}
|
||||
|
||||
// Gather output of commands
|
||||
i = 0;
|
||||
auto commands = boot.initCommands().initEntries(bootlog_commands.size());
|
||||
for (auto &command : bootlog_commands) {
|
||||
auto lentry = commands[i];
|
||||
|
||||
lentry.setKey(command);
|
||||
|
||||
const std::string result = util::check_output(command);
|
||||
lentry.setValue(capnp::Data::Reader((const kj::byte*)result.data(), result.size()));
|
||||
|
||||
i++;
|
||||
}
|
||||
|
||||
boot.setLaunchLog(util::read_file("/tmp/launch_log"));
|
||||
return capnp::messageToFlatArray(msg);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user