Changeset 2018659 in nscp for service/NSClient++.cpp


Ignore:
Timestamp:
01/31/10 11:45:02 (3 years ago)
Author:
Michael Medin <michael@…>
Branches:
master, 0.4.0, 0.4.1, 0.4.2
Children:
920626f
Parents:
c4d4219
Message:

Added protocol buffers for internal channels (only command as of now) this means this builds lacks "performance data" (as it has yet to be re-added) as well as requires changes to plugins as the API is NEW!

File:
1 edited

Legend:

Unmodified
Added
Removed
  • service/NSClient++.cpp

    r50a5db2 r2018659  
    3939#include "settings_client.hpp" 
    4040#include "service_manager.hpp" 
     41 
     42#include "../proto/plugin.pb.h" 
    4143 
    4244NSClient mainClient(SZSERVICENAME); // Global core instance. 
     
    373375        args += argv[i]; 
    374376      } 
    375       nRetCode = mainClient.inject(command, args, L' ', true, msg, perf); 
     377      nRetCode = mainClient.inject(command, args, msg, perf); 
    376378      std::wcout << msg << _T("|") << perf << std::endl; 
    377379      mainClient.exitCore(true); 
     
    10221024} 
    10231025 
    1024 NSCAPI::nagiosReturn NSClientT::inject(std::wstring command, std::wstring arguments, wchar_t splitter, bool escape, std::wstring &msg, std::wstring & perf) { 
     1026NSCAPI::nagiosReturn NSClientT::inject(std::wstring command, std::wstring arguments, std::wstring &msg, std::wstring & perf) { 
    10251027  /*if (shared_client_.get() != NULL && shared_client_->hasMaster()) { 
    10261028    try { 
     
    10341036    } 
    10351037  } else */{ 
    1036     unsigned int aLen = 0; 
    1037     wchar_t ** aBuf = arrayBuffer::split2arrayBuffer(arguments, splitter, aLen, escape); 
    1038     unsigned int buf_len = getBufferLength(); 
    1039     wchar_t * mBuf = new wchar_t[buf_len+1]; mBuf[0] = '\0'; 
    1040     wchar_t * pBuf = new wchar_t[buf_len+1]; pBuf[0] = '\0'; 
    1041     NSCAPI::nagiosReturn ret = injectRAW(command.c_str(), aLen, aBuf, mBuf, buf_len, pBuf, buf_len); 
    1042     arrayBuffer::destroyArrayBuffer(aBuf, aLen); 
     1038    PluginCommand::RequestMessage message; 
     1039    PluginCommand::Header *hdr = message.mutable_header(); 
     1040    hdr->set_type(PluginCommand::Header_Type_REQUEST); 
     1041    hdr->set_version(PluginCommand::Header_Version_VERSION_1); 
     1042 
     1043    PluginCommand::Request *req = message.add_payload(); 
     1044    req->set_command(to_string(command)); 
     1045    req->set_version(PluginCommand::Request_Version_VERSION_1); 
     1046 
     1047    std::string args = to_string(arguments); 
     1048    boost::tokenizer<boost::escaped_list_separator<char> > tok(args, boost::escaped_list_separator<char>('\\', ' ', '\"')); 
     1049    BOOST_FOREACH(string s, tok) 
     1050      req->add_arguments(s); 
     1051 
     1052    std::string request, response; 
     1053    message.SerializeToString(&request); 
     1054 
     1055 
     1056 
     1057    NSCAPI::nagiosReturn ret = injectRAW(command.c_str(), request, response); 
     1058    if (response.empty()) { 
     1059      LOG_ERROR(_T("No data retutned from command")); 
     1060      return NSCAPI::returnUNKNOWN; 
     1061    } 
     1062 
     1063    PluginCommand::ResponseMessage rsp_msg; 
     1064    rsp_msg.ParseFromString(response); 
     1065    if (rsp_msg.payload_size() != 1) { 
     1066      LOG_ERROR_STD(_T("Failed to extract return message not 1 payload: ") + strEx::itos(rsp_msg.payload_size())); 
     1067      return NSCAPI::returnUNKNOWN; 
     1068    } 
     1069    msg = to_wstring(rsp_msg.payload(0).message()); 
    10431070    if ( (ret == NSCAPI::returnInvalidBufferLen) || (ret == NSCAPI::returnIgnored) ) { 
    1044       delete [] mBuf; 
    1045       delete [] pBuf; 
    10461071      return ret; 
    10471072    } 
    1048     msg = mBuf; 
    1049     perf = pBuf; 
    1050     delete [] mBuf; 
    1051     delete [] pBuf; 
    10521073    return ret; 
    10531074  } 
     
    10661087 * @return The command status 
    10671088 */ 
    1068 NSCAPI::nagiosReturn NSClientT::injectRAW(const wchar_t* command, const unsigned int argLen, wchar_t **argument, wchar_t *returnMessageBuffer, unsigned int returnMessageBufferLen, wchar_t *returnPerfBuffer, unsigned int returnPerfBufferLen) { 
     1089NSCAPI::nagiosReturn NSClientT::injectRAW(const wchar_t* command, std::string &request, std::string &response) { 
    10691090  if (logDebug()) { 
    1070     LOG_DEBUG_STD(_T("Injecting: ") + (std::wstring) command + _T(": ") + arrayBuffer::arrayBuffer2string(argument, argLen, _T(", "))); 
     1091    LOG_DEBUG_STD(_T("Injecting: ") + std::wstring(command) + _T(": {{{") + strEx::strip_hex(to_wstring(request)) + _T("}}}")); 
    10711092  } 
    10721093  /*if (shared_client_.get() != NULL && shared_client_->hasMaster()) { 
     
    10931114    for (pluginList::size_type i = 0; i < commandHandlers_.size(); i++) { 
    10941115      try { 
    1095         NSCAPI::nagiosReturn c = commandHandlers_[i]->handleCommand(command, argLen, argument, returnMessageBuffer, returnMessageBufferLen, returnPerfBuffer, returnPerfBufferLen); 
     1116        NSCAPI::nagiosReturn c = commandHandlers_[i]->handleCommand(command, request, response); 
    10961117        switch (c) { 
    10971118          case NSCAPI::returnInvalidBufferLen: 
     
    11041125          case NSCAPI::returnCRIT: 
    11051126          case NSCAPI::returnUNKNOWN: 
    1106             LOG_DEBUG_STD(_T("Injected Result: ") + NSCHelper::translateReturn(c) + _T(" '") + (std::wstring)(returnMessageBuffer) + _T("'")); 
    1107             LOG_DEBUG_STD(_T("Injected Performance Result: '") +(std::wstring)(returnPerfBuffer) + _T("'")); 
     1127            LOG_DEBUG_STD(_T("Result ") + std::wstring(command) + _T(": ") + NSCHelper::translateReturn(c) + _T(" {{{") + strEx::strip_hex(to_wstring(response)) + _T("}}}")); 
    11081128            return c; 
    11091129          default: 
Note: See TracChangeset for help on using the changeset viewer.