SimpleDiagnostics.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include "SimpleLogger.hpp"
4 
8 
9 #include <unordered_set>
10 
11 namespace iv
12 {
13 
15 {
16 public:
19 
20  SimpleDiagnostics( Instance * inst );
21  virtual ~SimpleDiagnostics(){}
22 
23  void print_systems();
24  //void AddGlobalLog( LogId id );
25 
26  void StartupDump();
27 
28 protected:
29  // InputNode
30  virtual bool input_trigger_process( InputRoot * root, Input::DeviceKey key ) override;
31 
32  // ConfigStream
33  virtual void config_stream_changed() override;
34 
35  // SimpleLogger
36  virtual SimpleLogger::Flags ClientLogFlags( ClientMarker const * marker, LogId id ) override;
37  virtual SimpleLogger::Flags SystemLogFlags( System const * system, LogId id ) override;
38 
39 private:
40  struct LogLine
41  {
42  std::optional< LogId > log_id;
43  SimpleLogger::Flags flags;
44  bool frame;
45 
46  LogLine() : log_id(), flags( SimpleLogger::Flags::Enabled ), frame( false ){}
47  };
48 
49  struct SimpleLogger_InstanceLog
50  {
51  std::optional< std::string > instance_name;
52  LogLine line;
53  };
54 
55  struct SimpleLogger_ClientLog
56  {
57  std::optional< std::string > client_name;
58  std::optional< int > client_id;
59  LogLine line;
60  };
61 
62  struct SimpleLogger_SystemLog
63  {
64  std::optional< std::string > system_name;
65  LogLine line;
66  };
67 
68  struct SimpleLogger_GeneralLog
69  {
70  LogLine line;
71  };
72 
73 private:
74  void AcceptLogLine( Lex & lex, LogLine & line );
76  SimpleLogger::Flags LineLogFlags( LogLine const & line, bool frame_enabled, LogId id );
77 
78  void print_welcome();
79  bool action( unsigned key );
80  void print_system( System * sys );
81 
82 private:
83  // configuration
84  bool reading;
85  unsigned frame_enabled;
86  std::vector< SimpleLogger_InstanceLog > instanceLog;
87  std::vector< SimpleLogger_ClientLog > clientLog;
88  std::vector< SimpleLogger_SystemLog > systemLog;
89  std::vector< SimpleLogger_GeneralLog > generalLog;
90 };
91 
92 }