LCOV - code coverage report
Current view: top level - /opt/artdaq/srcs/artdaq-mfextensions/ErrorHandler/MessageAnalyzer - ma_rule.h (source / functions) Coverage Total Hit
Test: artdaq.info.cleaned Lines: 0.0 % 12 0
Test Date: 2025-09-04 00:45:34 Functions: 0.0 % 8 0

            Line data    Source code
       1              : #ifndef ERROR_HANDLER_MA_RULE_H
       2              : #define ERROR_HANDLER_MA_RULE_H
       3              : 
       4              : // from novadaq
       5              : #include "ErrorHandler/MessageAnalyzer/ma_action.h"
       6              : #include "ErrorHandler/MessageAnalyzer/ma_boolean_expr.h"
       7              : #include "ErrorHandler/MessageAnalyzer/ma_condition.h"
       8              : #include "ErrorHandler/MessageAnalyzer/ma_domain_expr.h"
       9              : #include "ErrorHandler/MessageAnalyzer/ma_richmsg.h"
      10              : #include "ErrorHandler/MessageAnalyzer/ma_utils.h"
      11              : 
      12              : // from ups
      13              : #include <fhiclcpp/ParameterSet.h>
      14              : #include <boost/shared_ptr.hpp>
      15              : 
      16              : // sys headers
      17              : #include <sys/time.h>
      18              : #include <map>
      19              : 
      20              : namespace novadaq {
      21              : namespace errorhandler {
      22              : 
      23              : // MsgAnalyzer Rule
      24              : class ma_rule
      25              : {
      26              : public:
      27              :         // c'tor
      28              :         ma_rule(std::string const& name, std::string const& desc, bool repeat, int holdoff_time = 0);
      29              : 
      30              :         // ----------------------------------------------------------------
      31              :         //
      32              : 
      33              :         // public method, call to initialze the rule
      34              :         void
      35              :         parse(std::string const& cond_expr, std::string const& alarm_message, fhicl::ParameterSet const& actions, cond_map_t* cond_map_ptr);
      36              : 
      37              :         // public method, call to evaluate the domain expression
      38              :         void
      39              :         evaluate_domain();
      40              : 
      41              :         // public method, call to evaluate the boolean expression
      42              :         bool
      43              :         evaluate();
      44              : 
      45              :         // carry out actions
      46              :         int
      47              :         act();
      48              : 
      49              :         // public method, get the alarm
      50              :         ma_domain const&
      51              :         get_alarm() const;
      52              : 
      53              :         // public method, get the alarm message
      54              :         std::string
      55              :         get_alarm_message();
      56              : 
      57              :         // number of alarms. if the repeatable alarm flag is true, it is the
      58              :         // number of total alarms; otherwise it is the number of distinguishable
      59              :         // alarms (one domain only alarms once)
      60              :         int
      61            0 :         get_alarm_count() const { return alarm_count; }
      62              : 
      63              :         // get fields
      64            0 :         const std::string& name() const { return name_; }
      65            0 :         const std::string& description() const { return description_; }
      66            0 :         const std::string& cond_expr() const { return condition_expr; }
      67              :         const std::string& alarm_message() const { return alarm_msg.plain_message(); }
      68              : 
      69            0 :         const std::vector<std::string>& cond_names() const { return cond_names_; }
      70              : 
      71              :         // enable/disable the rule
      72              :         void
      73            0 :         enable(bool flag) { enabled = flag; }
      74              : 
      75              :         // reset the rule to its ground state ( reset alarms and domains )
      76              :         void
      77              :         reset();
      78              : 
      79              :         // ----------------------------------------------------------------
      80              :         //
      81              : 
      82              :         // called by the parser to set the boolean expression
      83            0 :         void set_boolean_expr(ma_boolean_expr const& expr)
      84              :         {
      85            0 :                 boolean_expr = expr;
      86            0 :         }
      87              : 
      88              :         // called by the parser to set the domain expression
      89            0 :         void set_domain_expr(ma_domain_expr const& expr)
      90              :         {
      91            0 :                 domain_expr = expr;
      92            0 :         }
      93              : 
      94              :         // called by the parser to push a cond_ptr to the container
      95              :         cond_idx_t
      96              :         insert_condition_ptr(std::string const& name, bool primitive);
      97              : 
      98              :         // ----------------------------------------------------------------
      99              :         //
     100              :         // get condition index and pointer given a name
     101              :         cond_idx_t
     102              :         get_cond_idx(std::string const& name) const;
     103              : 
     104              :         // get pointer to the condition
     105              :         ma_condition*
     106              :         get_cond(std::string const& name) const;
     107              : 
     108              :         // get index to the condition
     109              :         size_t
     110              :         get_idx(std::string const& name) const;
     111              : 
     112              :         // get the size of condition container
     113              :         size_t
     114              :         get_cond_size() const;
     115              : 
     116              :         // update the "notify_on_source" or "notify_on_target" list
     117              :         // for corresponding conditions
     118              :         void
     119              :         update_notify_list(std::string const& name, arg_t arg);
     120              : 
     121              : public:
     122              :         cond_vec_t conditions;
     123              :         idx_t conditions_idx;
     124              :         std::vector<bool> primitive_cond;
     125              : 
     126              : private:
     127              :         // recursive evaluation function
     128              :         //   value:  specific value set in the given domain
     129              :         //   domain: the input domain where values are allowed
     130              :         //   n:      depth of the recursion
     131              :         //   return: true if new alarm found
     132              :         bool
     133              :         recursive_evaluate(ma_domain& value, ma_domain& alarm, ma_domain const& domain, size_t n);
     134              : 
     135              :         // evaluate the boolean expression with a given set of inputs
     136              :         //   value:  the input values for each condition
     137              :         bool
     138              :         boolean_evaluate(ma_domain& value, ma_domain& alarm, ma_domain const& domain);
     139              : 
     140              :         bool
     141              :         parse_alarm_message(std::string const& s);
     142              : 
     143              :         bool
     144              :         parse_alarm_ref(std::string const& s);
     145              : 
     146              : private:
     147              :         // a pointer to the condition container containing all conditions in the app
     148              :         // the original container is hold in the ma_rule_engine class
     149              :         cond_map_t* cond_map;
     150              : 
     151              :         std::string name_;
     152              :         std::string description_;
     153              :         std::string condition_expr;
     154              :         int alarm_count;
     155              : 
     156              :         std::vector<std::string> cond_names_;  // vector of strings holding the cond name list
     157              : 
     158              :         ma_richmsg alarm_msg;
     159              : 
     160              :         ma_boolean_expr boolean_expr;
     161              :         ma_domain_expr domain_expr;
     162              : 
     163              :         ma_domains domains;
     164              : 
     165              :         std::map<ma_domain, timeval> alarms;
     166              :         std::map<ma_domain, timeval>::const_iterator itor_last_alarm;
     167              : 
     168              :         bool repeat_alarm;
     169              :         int holdoff;
     170              : 
     171              :         bool initialized;
     172              :         bool enabled;
     173              : 
     174              :         ma_actions actions;
     175              : };
     176              : 
     177              : typedef boost::shared_ptr<ma_rule> rule_sp;
     178              : typedef std::map<std::string, ma_rule> rule_map_t;
     179              : 
     180              : }  // end of namespace errorhandler
     181              : }  // end of namespace novadaq
     182              : 
     183              : #endif
        

Generated by: LCOV version 2.0-1