artdaq_mfextensions  v1_03_05
ANSI_mfPlugin.cc
1 #include "cetlib/PluginTypeDeducer.h"
2 #include "fhiclcpp/ParameterSet.h"
3 
4 #include "messagefacility/MessageService/ELdestination.h"
5 #include "messagefacility/Utilities/ELseverityLevel.h"
6 #include "messagefacility/Utilities/exception.h"
7 //#include "messagefacility/Utilities/formatTime.h"
8 #include <iostream>
9 #include "cetlib/compiler_macros.h"
10 
11 namespace mfplugins {
12 using mf::ELseverityLevel;
13 using mf::ErrorObj;
14 using mf::service::ELdestination;
15 
19 class ELANSI : public ELdestination {
20  public:
24  struct Config {
26  fhicl::TableFragment<ELdestination::Config> elDestConfig;
28  fhicl::Atom<bool> bellOnError = fhicl::Atom<bool>{fhicl::Name{"bell_on_error"},
29  fhicl::Comment{"Whether to ring the system bell on error messages"}, true};
31  fhicl::Atom<bool> blinkOnError =
32  fhicl::Atom<bool>{fhicl::Name{"blink_error_messages"},
33  fhicl::Comment{"Whether to print error messages with blinking text"}, false};
35  fhicl::Atom<std::string> errorColor=fhicl::Atom<std::string>{fhicl::Name{"error_ansi_color"}, fhicl::Comment{"ANSI Color string for Error Messages"}, "\033[1m\033[91m"};
37  fhicl::Atom<std::string> warningColor = fhicl::Atom<std::string>{
38  fhicl::Name{"warning_ansi_color"}, fhicl::Comment{"ANSI Color string for Warning Messages"}, "\033[1m\033[93m"};
40  fhicl::Atom<std::string> infoColor = fhicl::Atom<std::string>{
41  fhicl::Name{"info_ansi_color"}, fhicl::Comment{"ANSI Color string for Info Messages"}, "\033[92m"};
43  fhicl::Atom<std::string> debugColor = fhicl::Atom<std::string>{
44  fhicl::Name{"debug_ansi_color"},
45  fhicl::Comment{"ANSI Color string for Debug Messages"}, "\033[39m"};
46  };
48  using Parameters = fhicl::WrappedTable<Config>;
49 
50  public:
55  ELANSI(Parameters const& pset);
56 
62  virtual void routePayload(const std::ostringstream& o, const ErrorObj& e) override;
63 
64  private:
65  bool bellError_;
66  bool blinkError_;
67  std::string errorColor_;
68  std::string warningColor_;
69  std::string infoColor_;
70  std::string debugColor_;
71 };
72 
73 // END DECLARATION
74 //======================================================================
75 // BEGIN IMPLEMENTATION
76 
77 //======================================================================
78 // ELANSI c'tor
79 //======================================================================
80 
82  : ELdestination(pset().elDestConfig()),
83  bellError_(pset().bellOnError()),
84  blinkError_(pset().blinkOnError()),
85  errorColor_(pset().errorColor()),
86  warningColor_(pset().warningColor()),
87  infoColor_(pset().infoColor()),
88  debugColor_(pset().debugColor()) {
89  // std::cout << "ANSI Plugin configured with ParameterSet: " << pset.to_string() << std::endl;
90 }
91 
92 //======================================================================
93 // Message router ( overriddes ELdestination::routePayload )
94 //======================================================================
95 void ELANSI::routePayload(const std::ostringstream& oss, const ErrorObj& msg) {
96  const auto& xid = msg.xid();
97  auto level = xid.severity().getLevel();
98 
99  switch (level) {
100  case mf::ELseverityLevel::ELsev_success:
101  case mf::ELseverityLevel::ELsev_zeroSeverity:
102  case mf::ELseverityLevel::ELsev_unspecified:
103  std::cout << debugColor_;
104  break;
105 
106  case mf::ELseverityLevel::ELsev_info:
107  std::cout << infoColor_;
108  break;
109 
110  case mf::ELseverityLevel::ELsev_warning:
111  std::cout << warningColor_;
112  break;
113 
114  case mf::ELseverityLevel::ELsev_error:
115  case mf::ELseverityLevel::ELsev_severe:
116  case mf::ELseverityLevel::ELsev_highestSeverity:
117  if (bellError_) {
118  std::cout << "\007";
119  }
120  if (blinkError_) {
121  std::cout << "\033[5m";
122  }
123  std::cout << errorColor_;
124  break;
125 
126  default:
127  break;
128  }
129  std::cout << oss.str();
130  std::cout << "\033[0m" << std::endl;
131 }
132 } // end namespace mfplugins
133 
134 //======================================================================
135 //
136 // makePlugin function
137 //
138 //======================================================================
139 
140 #ifndef EXTERN_C_FUNC_DECLARE_START
141 #define EXTERN_C_FUNC_DECLARE_START extern "C" {
142 #endif
143 
144 EXTERN_C_FUNC_DECLARE_START
145 auto makePlugin(const std::string&, const fhicl::ParameterSet& pset) {
146  return std::make_unique<mfplugins::ELANSI>(pset);
147 }
148 }
149 
150 DEFINE_BASIC_PLUGINTYPE_FUNC(mf::service::ELdestination)
ELANSI(Parameters const &pset)
ELANSI Constructor
Configuration parameters for ELANSI.
virtual void routePayload(const std::ostringstream &o, const ErrorObj &e) override
Serialize a MessageFacility message to the output.
fhicl::Atom< std::string > debugColor
&quot;debug_ansi_color&quot; (Default: &quot;\033[39m&quot;): ANSI Color string for ErrDebugor Messages ...
fhicl::Atom< std::string > errorColor
&quot;error_ansi_color&quot; (Default: &quot;\033[1m\033[91m&quot;): ANSI Color string for Error Messages ...
fhicl::Atom< bool > bellOnError
&quot;bell_on_error&quot; (Default: true): Whether to ring the system bell on error messages ...
fhicl::TableFragment< ELdestination::Config > elDestConfig
ELdestination common config parameters.
Message Facility destination which colorizes the console output
fhicl::Atom< bool > blinkOnError
&quot;blink_error_messages&quot; (Default: false): Whether to print error messages with blinking text ...
fhicl::Atom< std::string > infoColor
&quot;info_ansi_color&quot; (Default: &quot;\033[92m&quot;): ANSI Color string for Info Messages
fhicl::Atom< std::string > warningColor
&quot;warning_ansi_color&quot; (Default: &quot;\033[1m\033[93m&quot;): ANSI Color string for Warning Messages ...
fhicl::WrappedTable< Config > Parameters
Used for ParameterSet validation.