Ignore:
Timestamp:
03/08/10 22:02:22 (2 years ago)
Author:
mickem
Message:

+ Added new option append-filter-<key>=<value> to CheckEventLog to allow "and" of filter rules.

CheckEventLog file=application file=system filter=out MaxWarn=1 MaxCrit=1 filter-eventID=ne:1 filter-eventID=eq:1 append-filter-eventSource==SecurityCenter? truncate=1023 unique descriptions "syntax=%source%: %id% (%count%)"

+ Added debug option to CheckEventLog (to allow settingdebug on per-check)
+ Added obfuscated_password to NSCA section
+ Added so "global" ([Settings] password=...) passwords are read from the NSCA module

Also various changes to make it build with latest version of boost build.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/stable/modules/CheckEventLog/CheckEventLog.cpp

    r228 r261  
    2323#include "CheckEventLog.h" 
    2424#include <filter_framework.hpp> 
     25#include <boost/foreach.hpp> 
    2526 
    2627#include <strEx.h> 
     
    446447      timeWritten.hasFilter() || timeGenerated.hasFilter(); 
    447448  } 
    448   std::wstring getValue() const { 
    449     if (eventSource.hasFilter()) 
    450       return _T("event-source: ") + eventSource.getValue(); 
    451     if (eventType.hasFilter()) 
    452       return _T("event-type: ") + eventType.getValue(); 
    453     if (eventSeverity.hasFilter()) 
    454       return _T("severity: ") + eventSeverity.getValue(); 
    455     if (eventID.hasFilter()) 
    456       return _T("event-id: ") + eventID.getValue(); 
    457     if (message.hasFilter()) 
    458       return _T("message: ") + message.getValue(); 
    459     if (timeWritten.hasFilter()) 
    460       return _T("time-written: ") + timeWritten.getValue(); 
    461     if (timeGenerated.hasFilter()) 
    462       return _T("time-generated: ") + timeGenerated.getValue(); 
    463     return _T("UNknown..."); 
     449 
     450#define NSCP_EL_DEBUG(key) if (key.hasFilter()) strEx::append_list(str, std::wstring(_T( # key )) + _T(" ") + key.to_string(), _T(",")); 
     451  std::wstring to_string() const { 
     452    std::wstring str; 
     453    NSCP_EL_DEBUG(eventSource); 
     454    NSCP_EL_DEBUG(eventType); 
     455    NSCP_EL_DEBUG(eventSeverity); 
     456    NSCP_EL_DEBUG(eventID); 
     457    NSCP_EL_DEBUG(message); 
     458    NSCP_EL_DEBUG(timeWritten); 
     459    NSCP_EL_DEBUG(timeGenerated); 
     460    return str; 
    464461  } 
    465462  bool matchFilter(const EventLogRecord &value) const { 
     463    bool ret = false; 
    466464    if ((eventSource.hasFilter())&&(eventSource.matchFilter(value.eventSource()))) 
    467       return true; 
     465      ret = true; 
     466    else if (eventSource.hasFilter()) 
     467      return false; 
    468468    else if ((eventType.hasFilter())&&(eventType.matchFilter(value.eventType()))) 
    469       return true; 
     469      ret = true; 
     470    else if (eventType.hasFilter()) 
     471      return false; 
    470472    else if ((eventSeverity.hasFilter())&&(eventSeverity.matchFilter(value.severity()))) 
    471       return true; 
     473      ret = true; 
     474    else if (eventSeverity.hasFilter()) 
     475      return false; 
    472476    else if ((eventID.hasFilter())&&(eventID.matchFilter(value.eventID())))  
    473       return true; 
     477      ret = true; 
     478    else if (eventID.hasFilter()) 
     479      return false; 
    474480    else if ((message.hasFilter())&&(message.matchFilter(value.enumStrings()))) 
    475       return true; 
     481      ret = true; 
     482    else if (message.hasFilter()) 
     483      return false; 
    476484    else if ((timeWritten.hasFilter())&&(timeWritten.matchFilter(value.timeWritten()))) 
    477       return true; 
     485      ret = true; 
     486    else if (timeWritten.hasFilter()) 
     487      return false; 
    478488    else if ((timeGenerated.hasFilter())&&(timeGenerated.matchFilter(value.timeGenerated()))) 
    479       return true; 
    480     return false; 
     489      ret = true; 
     490    else if (timeGenerated.hasFilter()) 
     491      return false; 
     492    return ret; 
    481493  } 
    482494}; 
     
    484496 
    485497#define MAP_FILTER(value, obj, filtermode) \ 
    486       else if (p__.first == value) { eventlog_filter filter; filter.obj = p__.second; filter_chain.push_back(filteritem_type(filtermode, filter)); } 
     498      else if (p__.first == value) { filter.obj = p__.second; if (bPush) { filter_chain.push_back(filteritem_type(filtermode, filter)); filter = eventlog_filter(); } } 
     499#define MAP_FILTER_LAST(value, obj) \ 
     500      else if (p__.first == value) { filter_chain.front().second.obj = p__.second; } 
    487501 
    488502struct event_log_buffer { 
     
    532546  const int filter_compat = 3; 
    533547  event_log_buffer buffer(buffer_length_); 
     548  bool bPush = true; 
     549  bool bDebug = debug_; 
     550  eventlog_filter filter; 
    534551  /* 
    535552  try { 
     
    553570      MAP_OPTIONS_BOOL_EX(_T("filter"), bFilterIn, _T("in"), _T("out")) 
    554571      MAP_OPTIONS_BOOL_EX(_T("filter"), bFilterAll, _T("all"), _T("any")) 
     572      MAP_OPTIONS_BOOL_EX(_T("auto-push"), bPush, _T("true"), _T("false")) 
     573      MAP_OPTIONS_BOOL_EX(_T("debug"), bDebug, _T("true"), _T("false")) 
    555574      MAP_OPTIONS_STR(_T("syntax"), syntax) 
    556575      /* 
     
    587606      MAP_FILTER(_T("filter-message"), message, filter_minus) 
    588607 
     608      MAP_FILTER_LAST(_T("append-filter-eventType"), eventType) 
     609      MAP_FILTER_LAST(_T("append-filter-severity"), eventSeverity) 
     610      MAP_FILTER_LAST(_T("append-filter-eventID"), eventID) 
     611      MAP_FILTER_LAST(_T("append-filter-eventSource"), eventSource) 
     612      MAP_FILTER_LAST(_T("append-filter-generated"), timeGenerated) 
     613      MAP_FILTER_LAST(_T("append-filter-written"), timeWritten) 
     614      MAP_FILTER_LAST(_T("append-filter-message"), message) 
     615 
     616 
    589617      MAP_OPTIONS_MISSING(message, _T("Unknown argument: ")) 
    590618      MAP_OPTIONS_END() 
     
    609637  } 
    610638  bool buffer_error_reported = false; 
    611  
     639  if (bDebug) { 
     640    std::wstring str; 
     641    BOOST_FOREACH(filteritem_type item, filter_chain) { 
     642      if (item.first == filter_normal) 
     643        str += _T(". {"); 
     644      else if (item.first == filter_plus) 
     645        str += _T("+ {"); 
     646      else if (item.first == filter_minus) 
     647        str += _T("- {"); 
     648      else  
     649        str += _T("? {"); 
     650 
     651      str += item.second.to_string() + _T(" }"); 
     652    } 
     653    NSC_DEBUG_MSG_STD(_T("Filter: ") + str); 
     654  } 
     655 
     656  bDebug = false; 
    612657  for (std::list<std::wstring>::const_iterator cit2 = files.begin(); cit2 != files.end(); ++cit2) { 
    613658    std::wstring name = *cit2; 
     
    684729            if ((mode == filter_minus)&&(bTmpMatched)) { 
    685730              // a -<filter> hit so thrash item and bail out! 
    686               if (debug_) 
    687                 NSC_DEBUG_MSG_STD(_T("Matched: - ") + (*cit3).second.getValue() + _T(" for: ") + record.render(bShowDescriptions, syntax)); 
     731              if (bDebug) 
     732                NSC_DEBUG_MSG_STD(_T("Matched: - ") + (*cit3).second.to_string() + _T(" for: ") + record.render(bShowDescriptions, syntax)); 
    688733              bMatch = false; 
    689734              break; 
    690735            } else if ((mode == filter_plus)&&(!bTmpMatched)) { 
    691736              // a +<filter> missed hit so thrash item and bail out! 
    692               if (debug_) 
    693                 NSC_DEBUG_MSG_STD(_T("Matched: + ") + (*cit3).second.getValue() + _T(" for: ") + record.render(bShowDescriptions, syntax)); 
     737              if (bDebug) 
     738                NSC_DEBUG_MSG_STD(_T("Matched: + ") + (*cit3).second.to_string() + _T(" for: ") + record.render(bShowDescriptions, syntax)); 
    694739              bMatch = false; 
    695740              break; 
    696741            } else if (bTmpMatched) { 
    697               if (debug_) 
    698                 NSC_DEBUG_MSG_STD(_T("Matched: . (contiunue): ") + (*cit3).second.getValue() + _T(" for: ") + record.render(bShowDescriptions, syntax)); 
     742              if (bDebug) 
     743                NSC_DEBUG_MSG_STD(_T("Matched: . (contiunue): ") + (*cit3).second.to_string() + _T(" for: ") + record.render(bShowDescriptions, syntax)); 
    699744              bMatch = true; 
    700745            } 
Note: See TracChangeset for help on using the changeset viewer.