artdaq_mfextensions  1.08.06
ANSI_mfPlugin.cc
1 #include "cetlib/PluginTypeDeducer.h"
2 #include "fhiclcpp/ParameterSet.h"
3 #include "fhiclcpp/types/ConfigurationTable.h"
4 
5 #include "messagefacility/MessageService/ELdestination.h"
6 #include "messagefacility/Utilities/ELseverityLevel.h"
7 #include "messagefacility/Utilities/exception.h"
8 //#include "messagefacility/Utilities/formatTime.h"
9 #include <iostream>
10 #include "cetlib/compiler_macros.h"
11 
12 namespace mfplugins {
13 using mf::ELseverityLevel;
14 using mf::ErrorObj;
15 using mf::service::ELdestination;
16 
20 class ELANSI : public ELdestination
21 {
22 public:
26  struct Config
27  {
29  fhicl::TableFragment<ELdestination::Config> elDestConfig;
31  fhicl::Atom<bool> bellOnError = fhicl::Atom<bool>{
32  fhicl::Name{"bell_on_error"}, fhicl::Comment{"Whether to ring the system bell on error messages"}, true};
34  fhicl::Atom<bool> blinkOnError =
35  fhicl::Atom<bool>{fhicl::Name{"blink_error_messages"},
36  fhicl::Comment{"Whether to print error messages with blinking text"}, false};
38  fhicl::Atom<std::string> errorColor = fhicl::Atom<std::string>{
39  fhicl::Name{"error_ansi_color"}, fhicl::Comment{"ANSI Color string for Error Messages"}, "\033[1m\033[91m"};
41  fhicl::Atom<std::string> warningColor = fhicl::Atom<std::string>{
42  fhicl::Name{"warning_ansi_color"}, fhicl::Comment{"ANSI Color string for Warning Messages"}, "\033[1m\033[93m"};
44  fhicl::Atom<std::string> infoColor = fhicl::Atom<std::string>{
45  fhicl::Name{"info_ansi_color"}, fhicl::Comment{"ANSI Color string for Info Messages"}, "\033[92m"};
47  fhicl::Atom<std::string> debugColor = fhicl::Atom<std::string>{
48  fhicl::Name{"debug_ansi_color"}, fhicl::Comment{"ANSI Color string for Debug Messages"}, "\033[39m"};
49  };
51  using Parameters = fhicl::WrappedTable<Config>;
52 
53 public:
58  ELANSI(Parameters const& pset);
59 
65  void routePayload(const std::ostringstream& o, const ErrorObj& msg) override;
66 
67 private:
68  bool bellError_;
69  bool blinkError_;
70  std::string errorColor_;
71  std::string warningColor_;
72  std::string infoColor_;
73  std::string debugColor_;
74 };
75 
76 // END DECLARATION
77 //======================================================================
78 // BEGIN IMPLEMENTATION
79 
80 //======================================================================
81 // ELANSI c'tor
82 //======================================================================
83 
85  : ELdestination(pset().elDestConfig()), bellError_(pset().bellOnError()), blinkError_(pset().blinkOnError()), errorColor_(pset().errorColor()), warningColor_(pset().warningColor()), infoColor_(pset().infoColor()), debugColor_(pset().debugColor())
86 {
87  // std::cout << "ANSI Plugin configured with ParameterSet: " << pset.to_string() << std::endl;
88 }
89 
90 //======================================================================
91 // Message router ( overriddes ELdestination::routePayload )
92 //======================================================================
93 void ELANSI::routePayload(const std::ostringstream& oss, const ErrorObj& msg)
94 {
95  const auto& xid = msg.xid();
96  auto level = xid.severity().getLevel();
97 
98  switch (level)
99  {
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  {
119  std::cout << "\007";
120  }
121  if (blinkError_)
122  {
123  std::cout << "\033[5m";
124  }
125  std::cout << errorColor_;
126  break;
127 
128  default:
129  break;
130  }
131  std::cout << oss.str();
132  std::cout << "\033[0m" << std::endl;
133 }
134 } // end namespace mfplugins
135 
136 //======================================================================
137 //
138 // makePlugin function
139 //
140 //======================================================================
141 
142 #ifndef EXTERN_C_FUNC_DECLARE_START
143 #define EXTERN_C_FUNC_DECLARE_START extern "C" {
144 #endif
145 
146 EXTERN_C_FUNC_DECLARE_START
147 auto makePlugin(const std::string& /*unused*/, const fhicl::ParameterSet& pset)
148 {
149  return std::make_unique<mfplugins::ELANSI>(pset);
150 }
151 }
152 
153 DEFINE_BASIC_PLUGINTYPE_FUNC(mf::service::ELdestination)
ELANSI(Parameters const &pset)
ELANSI Constructor
Configuration parameters for ELANSI.
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.
void routePayload(const std::ostringstream &o, const ErrorObj &msg) override
Serialize a MessageFacility message to the output.