Ignore:
Timestamp:
12/05/11 08:05:14 (18 months ago)
Author:
Michael Medin <michael@…>
Branches:
master, 0.4.0, 0.4.1, 0.4.2
Children:
9c06054
Parents:
9853bc3
Message:
  • Changed so Client interfaces no longer use "simple" interface meaning correct targets are now propagated (ie. calling NRPE -> NSCA will get correct host set automatically) (havent tested this yet, but now it builds at least, will test to night)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • modules/NRPEClient/NRPEClient.cpp

    r9853bc3 rf33c12f  
    5454 
    5555bool NRPEClient::loadModuleEx(std::wstring alias, NSCAPI::moduleLoadMode mode) { 
    56   std::map<std::wstring,std::wstring> commands; 
    5756 
    5857  std::wstring certificate; 
     
    187186} 
    188187 
    189 NSCAPI::nagiosReturn NRPEClient::handleCommand(const std::wstring &target, const std::wstring &command, std::list<std::wstring> &arguments, std::wstring &message, std::wstring &perf) { 
    190   std::wstring cmd = client::command_line_parser::parse_command(command, _T("nrpe")); 
    191  
     188NSCAPI::nagiosReturn NRPEClient::handleRAWCommand(const wchar_t* char_command, const std::string &request, std::string &result) { 
     189  nscapi::functions::decoded_simple_command_data data = nscapi::functions::parse_simple_query_request(char_command, request); 
     190  std::wstring cmd = client::command_line_parser::parse_command(data.command, _T("syslog")); 
    192191  client::configuration config; 
    193192  setup(config); 
    194   if (cmd == _T("query")) 
    195     return client::command_line_parser::query(config, cmd, arguments, message, perf); 
    196   if (cmd == _T("submit")) { 
    197     boost::tuple<int,std::wstring> result = client::command_line_parser::simple_submit(config, cmd, arguments); 
    198     message = result.get<1>(); 
    199     return result.get<0>(); 
    200   } 
    201   if (cmd == _T("exec")) { 
    202     return client::command_line_parser::exec(config, cmd, arguments, message); 
    203   } 
    204   return commands.exec_simple(config, target, command, arguments, message, perf); 
    205 } 
    206  
    207 int NRPEClient::commandLineExec(const std::wstring &command, std::list<std::wstring> &arguments, std::wstring &result) { 
    208   std::wstring cmd = client::command_line_parser::parse_command(command, _T("nrpe")); 
     193  if (!client::command_line_parser::is_command(cmd)) 
     194    return client::command_line_parser::do_execute_command_as_query(config, cmd, data.args, result); 
     195  return commands.exec_simple(config, data.target, char_command, data.args, result); 
     196} 
     197 
     198NSCAPI::nagiosReturn NRPEClient::commandRAWLineExec(const wchar_t* char_command, const std::string &request, std::string &result) { 
     199  nscapi::functions::decoded_simple_command_data data = nscapi::functions::parse_simple_exec_request(char_command, request); 
     200  std::wstring cmd = client::command_line_parser::parse_command(char_command, _T("syslog")); 
    209201  if (!client::command_line_parser::is_command(cmd)) 
    210202    return NSCAPI::returnIgnored; 
    211  
    212203  client::configuration config; 
    213204  setup(config); 
    214   return client::command_line_parser::commandLineExec(config, cmd, arguments, result); 
    215 } 
    216  
    217 NSCAPI::nagiosReturn NRPEClient::handleRAWNotification(const wchar_t* channel, std::string request, std::string &response) { 
    218   try { 
    219     client::configuration config; 
    220     setup(config); 
    221  
    222     if (!client::command_line_parser::relay_submit(config, request, response)) { 
    223       NSC_LOG_ERROR_STD(_T("Failed to submit message...")); 
    224       return NSCAPI::hasFailed; 
    225     } 
    226     return NSCAPI::isSuccess; 
    227   } catch (std::exception &e) { 
    228     NSC_LOG_ERROR_STD(_T("Failed to send data: ") + utf8::to_unicode(e.what())); 
    229     return NSCAPI::hasFailed; 
    230   } catch (...) { 
    231     NSC_LOG_ERROR_STD(_T("Failed to send data: UNKNOWN")); 
    232     return NSCAPI::hasFailed; 
    233   } 
     205  return client::command_line_parser::do_execute_command_as_exec(config, cmd, data.args, result); 
     206} 
     207 
     208NSCAPI::nagiosReturn NRPEClient::handleRAWNotification(const wchar_t* channel, std::string request, std::string &result) { 
     209  client::configuration config; 
     210  setup(config); 
     211  return client::command_line_parser::do_relay_submit(config, request, result); 
    234212} 
    235213 
     
    292270 
    293271int NRPEClient::clp_handler_impl::query(client::configuration::data_type data, ::Plugin::Common_Header* header, const std::string &request, std::string &reply) { 
    294   NSCAPI::nagiosReturn ret = NSCAPI::returnOK; 
    295   try { 
    296     Plugin::QueryRequestMessage request_message; 
    297     request_message.ParseFromString(request); 
    298     connection_data con = parse_header(*header); 
    299  
    300     Plugin::QueryResponseMessage response_message; 
    301     nscapi::functions::create_simple_header(response_message.mutable_header()); // TODO copy request header (inverted) 
    302  
    303     for (int i=0;i<request_message.payload_size();i++) { 
    304       std::string command = get_command(request_message.payload(i).alias(), request_message.payload(i).command()); 
    305       std::string data = command; 
    306       for (int a=0;a<request_message.payload(i).arguments_size();a++) { 
    307         data += "!" + request_message.payload(i).arguments(a); 
    308       } 
    309       boost::tuple<int,std::wstring> ret = instance->send(con, data); 
    310       std::pair<std::wstring,std::wstring> rdata = strEx::split(ret.get<1>(), _T("|")); 
    311       nscapi::functions::append_simple_query_response_payload(response_message.add_payload(), utf8::cvt<std::wstring>(command), ret.get<0>(), rdata.first, rdata.second); 
    312     } 
    313     response_message.SerializeToString(&reply); 
    314     return NSCAPI::isSuccess; 
    315   } catch (std::exception &e) { 
    316     NSC_LOG_ERROR_STD(_T("Exception: ") + utf8::to_unicode(e.what())); 
    317     nscapi::functions::create_simple_query_response(_T("command"), NSCAPI::returnUNKNOWN, _T("Exception: ") + utf8::to_unicode(e.what()), _T(""), reply); 
    318     return NSCAPI::returnUNKNOWN; 
    319   } 
     272  Plugin::QueryRequestMessage request_message; 
     273  request_message.ParseFromString(request); 
     274  connection_data con = parse_header(*header); 
     275 
     276  Plugin::QueryResponseMessage response_message; 
     277  nscapi::functions::make_return_header(response_message.mutable_header(), *header); 
     278 
     279  for (int i=0;i<request_message.payload_size();i++) { 
     280    std::string command = get_command(request_message.payload(i).alias(), request_message.payload(i).command()); 
     281    std::string data = command; 
     282    for (int a=0;a<request_message.payload(i).arguments_size();a++) { 
     283      data += "!" + request_message.payload(i).arguments(a); 
     284    } 
     285    boost::tuple<int,std::wstring> ret = instance->send(con, data); 
     286    std::pair<std::wstring,std::wstring> rdata = strEx::split(ret.get<1>(), std::wstring(_T("|"))); 
     287    nscapi::functions::append_simple_query_response_payload(response_message.add_payload(), utf8::cvt<std::wstring>(command), ret.get<0>(), rdata.first, rdata.second); 
     288  } 
     289  response_message.SerializeToString(&reply); 
     290  return NSCAPI::isSuccess; 
    320291} 
    321292 
    322293int NRPEClient::clp_handler_impl::submit(client::configuration::data_type data, ::Plugin::Common_Header* header, const std::string &request, std::string &reply) { 
    323   std::wstring channel; 
    324   try { 
    325     Plugin::SubmitRequestMessage message; 
    326     message.ParseFromString(request); 
    327     connection_data con = parse_header(*header); 
    328     channel = utf8::cvt<std::wstring>(message.channel()); 
    329      
    330     for (int i=0;i<message.payload_size();++i) { 
    331       std::string command = get_command(message.payload(i).alias(), message.payload(i).command()); 
    332       std::string data = command; 
    333       for (int a=0;a<message.payload(i).arguments_size();a++) { 
    334         data += "!" + message.payload(i).arguments(i); 
    335       } 
    336       boost::tuple<int,std::wstring> ret = instance->send(con, data); 
    337       // TODO: Change this to append! 
    338       nscapi::functions::create_simple_submit_response(channel, utf8::cvt<std::wstring>(command), ret.get<0>(), _T("Message submitted successfully: ") + ret.get<1>(), reply); 
    339       return NSCAPI::isSuccess; 
    340     } 
    341     nscapi::functions::create_simple_submit_response(channel, _T("UNKNOWN"), NSCAPI::returnUNKNOWN, _T("Empty message was submitted"), reply); 
    342     return NSCAPI::isSuccess; 
    343   } catch (std::exception &e) { 
    344     NSC_LOG_ERROR_STD(_T("Exception: ") + utf8::to_unicode(e.what())); 
    345     nscapi::functions::create_simple_submit_response(channel, _T("UNKNOWN"), NSCAPI::returnUNKNOWN, utf8::to_unicode(e.what()), reply); 
    346     return NSCAPI::hasFailed; 
    347   }  
     294  Plugin::SubmitRequestMessage request_message; 
     295  request_message.ParseFromString(request); 
     296  connection_data con = parse_header(*header); 
     297  std::wstring channel = utf8::cvt<std::wstring>(request_message.channel()); 
     298   
     299  Plugin::SubmitResponseMessage response_message; 
     300  nscapi::functions::make_return_header(response_message.mutable_header(), *header); 
     301 
     302  for (int i=0;i<request_message.payload_size();++i) { 
     303    std::string command = get_command(request_message.payload(i).alias(), request_message.payload(i).command()); 
     304    std::string data = command; 
     305    for (int a=0;a<request_message.payload(i).arguments_size();a++) { 
     306      data += "!" + request_message.payload(i).arguments(i); 
     307    } 
     308    boost::tuple<int,std::wstring> ret = instance->send(con, data); 
     309    nscapi::functions::append_simple_submit_response_payload(response_message.add_payload(), command, ret.get<0>(), utf8::cvt<std::string>(ret.get<1>())); 
     310  } 
     311  response_message.SerializeToString(&reply); 
     312  return NSCAPI::isSuccess; 
    348313} 
    349314 
    350315int NRPEClient::clp_handler_impl::exec(client::configuration::data_type data, ::Plugin::Common_Header* header, const std::string &request, std::string &reply) { 
    351   NSCAPI::nagiosReturn ret = NSCAPI::returnOK; 
    352   try { 
    353     Plugin::ExecuteRequestMessage request_message; 
    354     request_message.ParseFromString(request); 
    355     connection_data con = parse_header(*header); 
    356  
    357     for (int i=0;i<request_message.payload_size();i++) { 
    358       std::string command = get_command(request_message.payload(i).command()); 
    359       std::string data = command; 
    360       for (int a=0;a<request_message.payload(i).arguments_size();a++) { 
    361         data += "!" + request_message.payload(i).arguments(a); 
    362       } 
    363       boost::tuple<int,std::wstring> ret = instance->send(con, data); 
    364       nscapi::functions::create_simple_exec_response(utf8::cvt<std::wstring>(command), ret.get<0>(), ret.get<1>(), reply); 
    365     } 
    366     return NSCAPI::isSuccess; 
    367   } catch (std::exception &e) { 
    368     NSC_LOG_ERROR_STD(_T("Exception: ") + utf8::to_unicode(e.what())); 
    369     nscapi::functions::create_simple_exec_response(_T("command"), NSCAPI::returnUNKNOWN, _T("Exception: ") + utf8::to_unicode(e.what()), reply); 
    370     return NSCAPI::hasFailed; 
    371   } 
     316  Plugin::ExecuteRequestMessage request_message; 
     317  request_message.ParseFromString(request); 
     318  connection_data con = parse_header(*header); 
     319 
     320  Plugin::ExecuteResponseMessage response_message; 
     321  nscapi::functions::make_return_header(response_message.mutable_header(), *header); 
     322 
     323  for (int i=0;i<request_message.payload_size();i++) { 
     324    std::string command = get_command(request_message.payload(i).command()); 
     325    std::string data = command; 
     326    for (int a=0;a<request_message.payload(i).arguments_size();a++) 
     327      data += "!" + request_message.payload(i).arguments(a); 
     328    boost::tuple<int,std::wstring> ret = instance->send(con, data); 
     329    nscapi::functions::append_simple_exec_response_payload(response_message.add_payload(), command, ret.get<0>(), utf8::cvt<std::string>(ret.get<1>())); 
     330  } 
     331  response_message.SerializeToString(&reply); 
     332  return NSCAPI::isSuccess; 
    372333} 
    373334 
Note: See TracChangeset for help on using the changeset viewer.