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
commatwo_master
Willem Melching 4 years ago committed by GitHub
parent d6c860cb0a
commit 669ed5ff2b
  1. 2
      cereal
  2. 16
      selfdrive/common/util.cc
  3. 2
      selfdrive/common/util.h
  4. 21
      selfdrive/loggerd/bootlog.cc

@ -1 +1 @@
Subproject commit 12162ac4dee9537611ee6d075e4b9b2873c6e741
Subproject commit a6965af4020f21f6a1981fc2f68e075a086c32ad

@ -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);
}

Loading…
Cancel
Save