blob: 32ff706b8b4044d24d1c954c6b6af4eba3804c73 [file] [log] [blame]
James Kuszmaule4853542023-05-15 20:35:48 -07001#include "aos/util/simulation_logger.h"
Philipp Schrader790cb542023-07-05 21:06:52 -07002
James Kuszmaul827bd212023-05-15 23:57:39 -07003#include "aos/events/logging/logfile_utils.h"
James Kuszmaule4853542023-05-15 20:35:48 -07004
5namespace aos::util {
6LoggerState::LoggerState(aos::SimulatedEventLoopFactory *factory,
Pallavi Madhukar3076d5c2023-09-09 10:23:26 -07007 const aos::Node *node, std::string_view output_folder,
8 bool do_skip_timing_report)
James Kuszmaule4853542023-05-15 20:35:48 -07009 : event_loop_(factory->MakeEventLoop("logger", node)),
10 namer_(std::make_unique<aos::logger::MultiNodeFilesLogNamer>(
James Kuszmaul827bd212023-05-15 23:57:39 -070011 absl::StrCat(output_folder, "/", logger::MaybeNodeName(node), "/"),
James Kuszmaule4853542023-05-15 20:35:48 -070012 event_loop_.get())),
13 logger_(std::make_unique<aos::logger::Logger>(event_loop_.get())) {
Pallavi Madhukar3076d5c2023-09-09 10:23:26 -070014 if (do_skip_timing_report) {
15 event_loop_->SkipTimingReport();
16 }
James Kuszmaule4853542023-05-15 20:35:48 -070017 event_loop_->SkipAosLog();
Maxwell Gumley29620b32023-12-14 11:48:16 -070018
19 // TODO (James, Maxwell) This shouldn't be necessary to have a delay here.
20 // We'd like to have the logger start as soon as the event loop starts. The
21 // logger must be started after (not on) `factory->send_delay()` amount of
22 // time. Keep this simple, use two of those delays.
23 TimerHandler *status_timer = event_loop_->AddTimer(
24 [this]() { logger_->StartLogging(std::move(namer_)); });
25 status_timer->Schedule(
26 monotonic_clock::time_point(factory->send_delay() * 2));
James Kuszmaule4853542023-05-15 20:35:48 -070027}
28
29std::vector<std::unique_ptr<LoggerState>> MakeLoggersForNodes(
30 aos::SimulatedEventLoopFactory *factory,
31 const std::vector<std::string> &nodes_to_log,
Pallavi Madhukar3076d5c2023-09-09 10:23:26 -070032 std::string_view output_folder, bool do_skip_timing_report) {
James Kuszmaule4853542023-05-15 20:35:48 -070033 std::vector<std::unique_ptr<LoggerState>> loggers;
34 for (const std::string &node : nodes_to_log) {
35 loggers.emplace_back(std::make_unique<LoggerState>(
36 factory, aos::configuration::GetNode(factory->configuration(), node),
Pallavi Madhukar3076d5c2023-09-09 10:23:26 -070037 output_folder, do_skip_timing_report));
James Kuszmaule4853542023-05-15 20:35:48 -070038 }
39 return loggers;
40}
41
42std::vector<std::unique_ptr<LoggerState>> MakeLoggersForAllNodes(
Pallavi Madhukar3076d5c2023-09-09 10:23:26 -070043 aos::SimulatedEventLoopFactory *factory, std::string_view output_folder,
44 bool do_skip_timing_report) {
James Kuszmaule4853542023-05-15 20:35:48 -070045 std::vector<std::unique_ptr<LoggerState>> loggers;
Philipp Schrader790cb542023-07-05 21:06:52 -070046 for (const aos::Node *node :
47 configuration::GetNodes(factory->configuration())) {
Pallavi Madhukar3076d5c2023-09-09 10:23:26 -070048 loggers.emplace_back(std::make_unique<LoggerState>(
49 factory, node, output_folder, do_skip_timing_report));
James Kuszmaule4853542023-05-15 20:35:48 -070050 }
51 return loggers;
52}
53
54} // namespace aos::util