Changeset 3ece2bd in nscp for modules/CheckWMI/CheckWMI.cpp


Ignore:
Timestamp:
11/08/07 21:54:39 (6 years ago)
Author:
Michael Medin <michael@…>
Branches:
master, 0.4.0, 0.4.1, 0.4.2, stable
Children:
e46ad71
Parents:
22d2739
Message:

2007-11-08 MickeM

+ Added CheckWMIValue to check result-values from a WMI Query

  • Changed so performance values are "collapsed" ie 75362115584 = 70.0G (#89)

If anyone dont want this let me know and I will make an option for it.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • modules/CheckWMI/CheckWMI.cpp

    r22d2739 r3ece2bd  
    143143 
    144144NSCAPI::nagiosReturn CheckWMI::CheckSimpleWMIValue(const unsigned int argLen, char **char_args, std::string &message, std::string &perf) { 
    145   message = "Not yet implemented :("; 
    146   return NSCAPI::returnCRIT; 
     145  typedef checkHolders::CheckConatiner<checkHolders::MaxMinBounds<checkHolders::NumericBounds<long long, checkHolders::int64_handler> > > WMIConatiner; 
     146  std::list<std::string> stl_args = arrayBuffer::arrayBuffer2list(argLen, char_args); 
     147  if (stl_args.empty()) { 
     148    message = "ERROR: Missing argument exception."; 
     149    return NSCAPI::returnUNKNOWN; 
     150  } 
     151  std::list<WMIConatiner> list; 
     152  NSCAPI::nagiosReturn returnCode = NSCAPI::returnOK; 
     153  WMIConatiner tmpObject; 
     154  bool bPerfData = true; 
     155  unsigned int truncate = 0; 
     156  std::string query; 
     157 
     158  // Query=Select ... MaxWarn=5 MaxCrit=12 Check=Col1 --(later)-- Match==test Check=Col2 
     159  // MaxWarnNumeric:ID=>5 
     160  try { 
     161    MAP_OPTIONS_BEGIN(stl_args) 
     162      MAP_OPTIONS_SHOWALL(tmpObject) 
     163      MAP_OPTIONS_NUMERIC_ALL(tmpObject, "") 
     164      MAP_OPTIONS_STR("Alias", tmpObject.data) 
     165      MAP_OPTIONS_STR("Query", query) 
     166      MAP_OPTIONS_BOOL_FALSE(IGNORE_PERFDATA, bPerfData) 
     167      MAP_OPTIONS_STR_AND("Check", tmpObject.data, list.push_back(tmpObject)) 
     168      MAP_OPTIONS_STR("Alias", tmpObject.data) 
     169      MAP_OPTIONS_SECONDARY_BEGIN(":", p2) 
     170        MAP_OPTIONS_SECONDARY_STR_AND(p2,"Check", tmpObject.data, tmpObject.alias, list.push_back(tmpObject)) 
     171        MAP_OPTIONS_MISSING_EX(p2, message, "Unknown argument: ") 
     172      MAP_OPTIONS_SECONDARY_END() 
     173      MAP_OPTIONS_MISSING(message, "Unknown argument: ") 
     174    MAP_OPTIONS_END() 
     175 
     176  } catch (filters::parse_exception e) { 
     177    message = "WMIQuery failed: " + e.getMessage(); 
     178    return NSCAPI::returnCRIT; 
     179  } 
     180 
     181  WMIQuery::result_type rows; 
     182  try { 
     183    rows = wmiQuery.execute(query); 
     184  } catch (WMIException e) { 
     185    message = "WMIQuery failed: " + e.getMessage(); 
     186    return NSCAPI::returnCRIT; 
     187  } 
     188  int hit_count = 0; 
     189 
     190  for (std::list<WMIConatiner>::const_iterator it = list.begin(); it != list.end(); ++it) { 
     191    WMIConatiner itm = (*it); 
     192    itm.setDefault(tmpObject); 
     193    itm.perfData = bPerfData; 
     194    if (itm.data == "*") { 
     195      for (WMIQuery::result_type::const_iterator citRow = rows.begin(); citRow != rows.end(); ++citRow) { 
     196        for (WMIQuery::wmi_row::list_type::const_iterator citCol = (*citRow).results.begin(); citCol != (*citRow).results.end(); ++citCol) { 
     197          long long value = (*citCol).second.numeric; 
     198          itm.runCheck(value, returnCode, message, perf); 
     199        } 
     200      } 
     201    } else { 
     202      for (WMIQuery::result_type::const_iterator citRow = rows.begin(); citRow != rows.end(); ++citRow) { 
     203        bool found = false; 
     204        for (WMIQuery::wmi_row::list_type::const_iterator citCol = (*citRow).results.begin(); citCol != (*citRow).results.end(); ++citCol) { 
     205          if ((*citCol).first == itm.data) { 
     206            found = true; 
     207            long long value = (*citCol).second.numeric; 
     208            itm.runCheck(value, returnCode, message, perf); 
     209          } 
     210        } 
     211        if (!found) { 
     212          NSC_LOG_ERROR_STD("Column: " + itm.data + " was not found!"); 
     213        } 
     214      } 
     215    } 
     216  } 
     217 
     218  if ((truncate > 0) && (message.length() > (truncate-4))) 
     219    message = message.substr(0, truncate-4) + "..."; 
     220  if (message.empty()) 
     221    message = "OK: WMI Query returned no results."; 
     222  return returnCode; 
    147223} 
    148224 
     
    168244  } 
    169245  std::vector<int> widths; 
    170   for (WMIQuery::result_type::iterator citRow = rows.begin(); citRow != rows.end(); ++citRow) { 
     246  for (WMIQuery::result_type::const_iterator citRow = rows.begin(); citRow != rows.end(); ++citRow) { 
    171247    const WMIQuery::wmi_row vals = *citRow; 
    172248    if (citRow == rows.begin()) { 
Note: See TracChangeset for help on using the changeset viewer.