vect

/*************************************************************************************
* Retaltec Information System
* Copyright (C) 2007 Regaltec Corporation
* All rights reserved.
* service@regaltec.com.cn
**************************************************************************************/
/// /file NMITAlarmPerfJobUpdate.cpp
/// /brief 存放 NMITAlarmPerfJobUpdate 类
/// /details 无
/// /author 周勇沂
/// /date 20080305
/// /history    author         time        desc
///
///     luzuofeng    20080305    初始版本
///
///     luzuofeng    20080305    添加调用存储过程
/*************************************************************************************/
/// /class  NMITAlarmPerfJobUpdate
/// /brief 预先处理告警消息的动作
/// /details 本模块实现告警消息的预先处理动作,提供给relis服务器的lib_cmd_parser的event.msg_deal_adv流程调用
///
///
/*************************************************************************************/

#include "NMITAlarmPerfJobUpdate.h"

ACE_SVC_FACTORY_DEFINE (NMITAlarmPerfJobUpdate);

/// /brief 构造函数
/// /details 告警消息的预先处理动作类
/// /complexity  low -
NMITAlarmPerfJobUpdate::NMITAlarmPerfJobUpdate(void)
{
 m_libActionName=string("LibAction").append("NMITPerfJobUpdate");
 m_libActionProjectName="lib_action_nmit_alarm_perf_job_update";
}

/// /brief 析构函数
/// /details 释放资源
/// /complexity  low -
/// @see SzAlarmPreParser()
NMITAlarmPerfJobUpdate::~NMITAlarmPerfJobUpdate(void)
{
}

/// /brief ace初始化入口
/// /details ace初始化入口
/// /complexity  low -
int NMITAlarmPerfJobUpdate::init(int argc, ACE_TCHAR* argv[])
{
 if(argc == 100)
 {
  ExecutionContext* f= (ExecutionContext*)argv[0];
  cout<<"NMITPerfJobUpdate "<<" begin "<<endl;
  execute(f);
  cout<<"NMITPerfJobUpdate"<<" end "<<endl;
 }
 else
 {
  ACE_DEBUG ( ( LM_INFO, ACE_TEXT ( "(%P|%t)%s%s:%s %s %s/n" ), ACE_TEXT ( "relis_ok_" ), ACE_TEXT (m_libActionProjectName.c_str()), ACE_TEXT ("Init lib action"),ACE_TEXT (m_libActionName.c_str()),  ACE_TEXT ("ok !")) );
 }
 return 0;
}

int NMITAlarmPerfJobUpdate::info(ACE_TCHAR** strp, size_t length)
{
 return 0;
}

int NMITAlarmPerfJobUpdate::fini(void)
{
 ACE_DEBUG ( ( LM_INFO, ACE_TEXT ( " (%P|%t) %s%s:%s %s %s/n" ), ACE_TEXT ( "relis_ok" ), ACE_TEXT ("Dynamic remove lib action"),ACE_TEXT (m_libActionName.c_str()),  ACE_TEXT ("ok !")) );
 return 0;
}

int NMITAlarmPerfJobUpdate::resume(void)
{
 return 0;
}

int NMITAlarmPerfJobUpdate::suspend(void)
{
 return 0;
}

bool NMITAlarmPerfJobUpdate::addTask(ostringstream& ostrTips, oracle::otl_connect* db, const string& objid)
{
 string sqlstr;
 string taskid;
 xmlChar* xmlbuff;
 int buffersize;
 vector< subObject* > vecsubobjs;
 vector<string> veccmdids;
 vector<pair<string, string> > vecMeParams;
 char jobid[39];
 char driverid[101];
 char colldrivername[51];
 char collsubdrivername[257];
  char paratypeid[5];
 char span[39];
    char starttime[20];
    char endtime[20];
    char weeks[51];
    char type[2];
    char periods[513];
 char params[1025];
 char collectorid[33];
 char collector_ip[16];
 char collector_port[11];
 char dev_type_id[11];
    char crontab[1025];
    char parameters[2049];
 try
 {
cout << "NMITAlarmPerfJobUpdate::addTask() 1 begin)" << endl;
  sqlstr = "SELECT t1.subobjid, TO_CHAR(t1.commandid), t1.parameters, "
     "t2.user_label, TO_CHAR(t2.dev_type_id) "
     "FROM nm_coll_item t1, t_res_device t2 "
     "WHERE t1.commandid IS NOT NULL AND t1.subobjid IS NOT NULL "
     "AND t1.enable='1' AND t2.user_label IS NOT NULL AND t1.subobjid = t2.id "
     "AND t1.taskstatus='1' and t1.collable='1'   AND t1.objid = :objid<char[33]>";
  oracle::otl_stream os;
  os.open(1, sqlstr.c_str(), *db);
  os << objid.c_str();
  if(os.eof())
  {
   ostrTips.str("");
   ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "<<" It's a null record of /""<< sqlstr.c_str() << "/""
    << "/nMay be your object is shielded.";
   return false;
  }
  for(;!os.eof();)
  {
   char subobjid[33];char commandid[39];char collectorParameters[1025];char user_label[201];
   memset(subobjid,0,33);memset(commandid,0,39);memset(collectorParameters,0,1025);memset(user_label,0,201);
   memset(dev_type_id ,0 ,11);
   os >> subobjid >> commandid >> collectorParameters >> user_label >> dev_type_id;
   subObject* psubobject = new subObject;
   psubobject->subobjid = subobjid;
   psubobject->commandid = commandid;
   psubobject->collectorParameters = collectorParameters;
   psubobject->user_label = user_label;
   vecsubobjs.push_back(psubobject);

cout << "subobjid:" << subobjid << endl;
cout << "commandid:" << commandid << endl;
cout << "collectorParameters:" << collectorParameters << endl;
cout << "user_label:" << user_label << endl;
cout << "dev_type_id:" << dev_type_id << endl;

   if(string(psubobject->commandid) != "")
   {
    vector< string >:: iterator it;
    it = find(veccmdids.begin(),veccmdids.end(),psubobject->commandid);
    if(it != veccmdids.end()) continue;
    veccmdids.push_back(psubobject->commandid);
   }
  }
 }
 catch(oracle::otl_exception& p)
 {
  ostrTips.str("");
  ostrTips<<"relis_error_"<<m_libActionProjectName<<":error on"
   << ":outer db execute sql "<<"error :/n"<< p.msg<< p.stm_text<< p.sqlstate <<p.var_info ;
  return false;
 }

 for(vector< string >::iterator it = veccmdids.begin(); it != veccmdids.end(); it++)
 {
cout << "NMITAlarmPerfJobUpdate::addTask()2::for() " << endl;
  vecMeParams.clear();

  memset(driverid ,0 ,101); memset(jobid ,0 ,39);
        memset(parameters,0,2049);
  try
  {
cout << "NMITAlarmPerfJobUpdate::addTask()2::for() 1 " << endl;
   sqlstr = "SELECT t.driverid, TO_CHAR(t.jobid),t.PARAMETERS FROM nm_obj_driver t "
      "WHERE t.jobid IS NOT NULL AND t.driverid IS NOT NULL "
      "AND t.objid = :objid<char[33]> AND t.commandid = :commandid<char[39]>" ;
   oracle::otl_stream os;
   os.open(1, sqlstr.c_str(), *db);
   os << objid.c_str() << (*it).c_str();
   if(os.eof()) continue;
   else os >> driverid >> jobid>>parameters;
cout << "driverid:" << driverid << endl;
cout << "jobid:" << jobid << endl;
cout << "parameters =" << parameters <<endl;
           
  }
  catch(oracle::otl_exception& p)
  {
   ostrTips.str("");
   ostrTips<<"relis_error_"<<m_libActionProjectName<<":error on"
    << ":outer db execute sql "<<"error :/n"<< p.msg<< p.stm_text<< p.sqlstate <<p.var_info ;

   return false;
  }

  memset (paratypeid ,0 ,5);memset(colldrivername ,0 ,51); memset(collsubdrivername ,0 ,257);
  try
  {
cout << "NMITAlarmPerfJobUpdate::addTask()2::for() 2 " << endl;
   sqlstr = "SELECT TO_CHAR(t.paratypeid), t.colldrivername, t.collsubdrivername "
      "FROM nm_driver_info t "
      "WHERE t.paratypeid IS NOT NULL AND t.colldrivername IS NOT NULL "
      "AND t.id = :driverid<char[101]>" ;
   oracle::otl_stream os;
   os.open(1, sqlstr.c_str(), *db);
   os << driverid;
   if(os.eof()) continue;
   else os >> paratypeid >> colldrivername >> collsubdrivername;
cout << "paratypeid:" << paratypeid << endl;
cout << "colldrivername:" << colldrivername << endl;
cout << "collsubdrivername:" << collsubdrivername << endl;
  }
  catch(oracle::otl_exception& p)
  {
   ostrTips.str("");
   ostrTips<<"relis_error_"<<m_libActionProjectName<<":error on"
    << ":outer db execute sql "<<"error :/n"<< p.msg<< p.stm_text<< p.sqlstate <<p.var_info ;
   return false;
  }
  taskid = objid + "-" + (*it) + "-" + string(colldrivername);
cout << "NMITAlarmPerfJobUpdate::addTask()2::for() 2:taskid: " << taskid << endl;

  try
  {
cout << "NMITAlarmPerfJobUpdate::addTask()2::for() 3 " << endl;
   sqlstr = "SELECT t.* FROM nm_coll_task t "
      "WHERE t.taskid = :taskid<char[101]>" ;
   oracle::otl_stream os;
   os.open(1, sqlstr.c_str(), *db);
   os << taskid.c_str();
   if(!os.eof())
   {
   ostrTips.str("");
   ostrTips<<"relis_error_"<<m_libActionProjectName<<":error on"
    <<  "Task /"" << taskid.c_str() << "/" already exists,can not add";
cout << ostrTips.str() << endl;
    continue;
   }
  }
  catch(oracle::otl_exception& p)
  {
   ostrTips.str("");
   ostrTips<<"relis_error_"<<m_libActionProjectName<<":error on"
    << ":outer db execute sql "<<"error :/n"<< p.msg<< p.stm_text<< p.sqlstate <<p.var_info ;
   return false;
  }

 memset (span ,0 ,5);
    memset( starttime , 0 ,20);
    memset( endtime , 0 ,20);
    memset( weeks , 0 ,51);
    memset( type , 0 ,2);
    memset( periods , 0 ,513);
    memset( crontab,0,1025);
  try
  {
cout << "NMITAlarmPerfJobUpdate::addTask()2::for() 4 " << endl;
   sqlstr = "SELECT TO_CHAR(t.span), to_char(t.starttime,'yyyy-mm-dd hh24:mi:ss'),to_char(t.endtime, 'yyyy-mm-dd hh24:mi:ss'),t.weeks,t.type,t.periods,CORBTAB FROM nm_coll_job t "
      "WHERE t.id = :jobid<char[39]>" ;
   oracle::otl_stream os;
   os.open(1, sqlstr.c_str(), *db);
   os << jobid;
   if(os.eof()) continue;
   else os >> span >>starttime >>endtime>>weeks>>type>>periods>>crontab;
            cout << "span:" << span << endl;
  }
  catch(oracle::otl_exception& p)
  {
   ostrTips.str("");
   ostrTips<<"relis_error_"<<m_libActionProjectName<<":error on"
    << ":outer db execute sql "<<"error :/n"<< p.msg<< p.stm_text<< p.sqlstate <<p.var_info ;
   return false;
  }

  memset (params ,0 ,1025);
  try
  {
cout << "NMITAlarmPerfJobUpdate::addTask()2::for() 5 " << endl;
   sqlstr = "SELECT t.params "
      "FROM nm_obj_parameter t "
      "WHERE t.objid = :objid<char[33]> AND t.paramtypeid = :paramtypeid<char[5]>" ;
   oracle::otl_stream os;
   os.open(1, sqlstr.c_str(), *db);
   os << objid.c_str() << paratypeid;
   if(os.eof()) continue;
   else os >> params;
cout << "params:" << params << endl;
  }
  catch(oracle::otl_exception& p)
  {
   ostrTips.str("");
   ostrTips<<"relis_error_"<<m_libActionProjectName<<":error on"
    << ":outer db execute sql "<<"error :/n"<< p.msg<< p.stm_text<< p.sqlstate <<p.var_info ;
   return false;
  }

  xmlDocPtr doc = xmlNewDoc(BAD_CAST"1.0");
  xmlNodePtr root = xmlNewNode(NULL,BAD_CAST"root");
  xmlDocSetRootElement(doc, root);

  xmlNodePtr root_node_task = xmlNewNode(NULL,BAD_CAST"task");
  xmlAddChild(root, root_node_task);
  xmlNewProp(root_node_task,BAD_CAST"id",BAD_CAST taskid.c_str());
  xmlNewProp(root_node_task,BAD_CAST"name",BAD_CAST "perfJobUpdate_add");
  xmlNewProp(root_node_task,BAD_CAST"version",BAD_CAST "1.0");

  xmlNodePtr node_destination = xmlNewNode(NULL,BAD_CAST"destination");
  xmlAddChild(root_node_task,node_destination);
  xmlNewProp(node_destination,BAD_CAST"id",BAD_CAST "1");//暂时为空
  xmlNewProp(node_destination,BAD_CAST"name",BAD_CAST "1");//暂时为空

  xmlNodePtr node_config = xmlNewNode(NULL,BAD_CAST"config");
  xmlAddChild(root_node_task,node_config);
  xmlNewProp(node_config,BAD_CAST"interval",BAD_CAST span);
        xmlNewProp(node_config,BAD_CAST"crontab",BAD_CAST crontab);
  xmlNewProp(node_config,BAD_CAST"validfrom",BAD_CAST starttime);
  xmlNewProp(node_config,BAD_CAST"validto",BAD_CAST endtime);
        xmlNewProp(node_config,BAD_CAST"jobweeks",BAD_CAST weeks);
        xmlNewProp(node_config,BAD_CAST"jobtype",BAD_CAST type);
        xmlNewProp(node_config,BAD_CAST"jobperiods",BAD_CAST periods);
  xmlNewProp(node_config,BAD_CAST"driver",BAD_CAST colldrivername);

  vector<string> vectTemp; vector<string> vectTempInner;
  vectTemp.clear(); vectTempInner.clear();
  string paramsTemp = &(params[0]);
  boost::split(vectTemp,paramsTemp, boost::is_any_of(";"));       //table  or space
  if(vectTemp.size()>0)
  {
   for (vector<string>::iterator iter = vectTemp.begin(); iter != vectTemp.end(); iter++)
   {
    if (!boost::all(*iter, boost::is_space()))
    {
     boost::trim(*iter);
     vectTempInner.clear();
     boost::split(vectTempInner, *iter, boost::is_any_of("="));
     if(vectTempInner.size()>1)
     {
      string param, values;
      param=vectTempInner[0]; values=vectTempInner[1];
      xmlNodePtr node_parameter = xmlNewNode(NULL, BAD_CAST "parameter");
      xmlNewProp(node_parameter,BAD_CAST"name",BAD_CAST param.c_str());
      xmlNodePtr node_parameter_text = xmlNewText(BAD_CAST values.c_str());
      xmlAddChild(node_parameter, node_parameter_text);
      xmlAddChild(node_config, node_parameter);
     }
    }
   }
  }

  for(vector< subObject* >::iterator it2 = vecsubobjs.begin();
    it2 != vecsubobjs.end(); it2++)
  {
cout << "NMITAlarmPerfJobUpdate::addTask()2::for() 6::for() " << endl;
   if(string((*it2)->commandid) != (*it)) continue;
   xmlNodePtr node_me = xmlNewNode(NULL,BAD_CAST"me");
   xmlAddChild(node_destination,node_me);
   xmlNewProp(node_me,BAD_CAST"id",BAD_CAST (*it2)->subobjid.c_str());
   xmlNewProp(node_me,BAD_CAST"name",BAD_CAST (*it2)->user_label.c_str());
   xmlNewProp(node_me,BAD_CAST"driverName",BAD_CAST collsubdrivername);
   //6-1 collfieldname
   char collfieldname[101];
   try
   {
cout << "NMITAlarmPerfJobUpdate::addTask()2::for() 6::for() 1" << endl;
    sqlstr = "SELECT t.collfieldname "
       "FROM nm_coll_field t "
       "WHERE t.commandid = :commandid<char[39]> "
       "ORDER BY t.seqnum ";
    oracle::otl_stream os;
    os.open(1, sqlstr.c_str(), *db);
    os << (*it).c_str();
    if(os.eof()) continue;
    xmlNodePtr node_parameters = xmlNewNode(NULL,BAD_CAST"parameters");
    xmlAddChild(node_me,node_parameters);
    for(;!os.eof();)
    {
     memset (collfieldname ,0 ,101);
     os >> collfieldname;
cout << "collfieldname:" << collfieldname << endl;
     vecMeParams.push_back(pair<string, string>(string(collfieldname), string((*it2)->user_label)));
     xmlNodePtr node_parameter = xmlNewNode(NULL,BAD_CAST"parameter");
     xmlAddChild(node_parameters,node_parameter);
     xmlNewProp(node_parameter,BAD_CAST"name",BAD_CAST collfieldname);
    }
   }
   catch(oracle::otl_exception& p)
   {
    ostrTips.str("");
    ostrTips<<"relis_error_"<<m_libActionProjectName<<":error on"
     << ":outer db execute sql "<<"error :/n"<< p.msg<< p.stm_text<< p.sqlstate <<p.var_info ;
    return false;
   }
   //6-2 collectorparameters
cout << "NMITAlarmPerfJobUpdate::addTask()2::for() 6::for() 2" << endl;
   xmlNodePtr node_collectorParameters = xmlNewNode(NULL, BAD_CAST "collectorParameters");
   xmlAddChild(node_me, node_collectorParameters);
   vector<string> vectTemp; vector<string> vectTempInner;
   vectTemp.clear(); vectTempInner.clear();
           
   string paramsTemp = &((*it2)->collectorParameters[0]);
            paramsTemp += parameters;
   boost::split(vectTemp,paramsTemp, boost::is_any_of(";"));       //table  or space
   if(vectTemp.size()>0)
   {
    for (vector<string>::iterator iter = vectTemp.begin(); iter != vectTemp.end(); iter++)
    {
     if (!boost::all(*iter, boost::is_space()))
     {
      boost::trim(*iter);
      vectTempInner.clear();
      boost::split(vectTempInner, *iter, boost::is_any_of("="));
      if(vectTempInner.size()>1)
      {
       string key, value;
       key=vectTempInner[0]; value=vectTempInner[1];
       xmlNodePtr node_parameter = xmlNewNode(NULL, BAD_CAST "parameter");
       xmlNewProp(node_parameter,BAD_CAST"key",BAD_CAST key.c_str());
       xmlNodePtr node_parameter_text = xmlNewText(BAD_CAST value.c_str());
       xmlAddChild(node_parameter, node_parameter_text);
       xmlAddChild(node_collectorParameters, node_parameter);
      }
     }
    }
   }
  }//end of 6 <me>s

  xmlDocDumpMemoryEnc(doc, &xmlbuff, &buffersize, "UTF-8");
  xmlFreeDoc(doc);
  doc = NULL;
cout << "addTask XML buff: "<< endl;
cout << (char*)xmlbuff << endl;

  try
  {
cout << "NMITAlarmPerfJobUpdate::addTask()2::for() 7 " << endl;
   if(string(dev_type_id) == "600001")
   {
    sqlstr ="SELECT t2.collectorid, nvl( t1.routeip,t1.ip) AS ip, "
       "nvl( t1.routeport,t1.port) AS port "
       "FROM nm_collector_info t1, nm_dev_info t2 "
       "WHERE t1.id=t2.collectorid "
       "AND t2.id=:m_OBJID<char[33]> ";
   }
   else if(string(dev_type_id) == "600002")
   {
    sqlstr ="SELECT t2.collectorid, nvl( t1.routeip,t1.ip) AS ip, nvl( t1.routeport,t1.port) AS port "
       " FROM nm_collector_info t1, nm_dev_info t2, nm_basapp_info t3 "
       " WHERE t2.id=t3.devid "
       " AND t1.id=t2.collectorid "
       " AND t3.id=:m_OBJID<char[33]> ";
   }
   else if(string(dev_type_id) == "600003")
   {
    sqlstr ="SELECT t2.collectorid, nvl( t1.routeip,t1.ip) AS ip, "
       "nvl( t1.routeport,t1.port) AS port "
       "FROM nm_collector_info t1, nm_dev_info t2,nm_servapp_info t3 "
       "WHERE t2.id=t3.devid "
       "AND t1.id=t2.collectorid "
       "AND t3.id=:m_OBJID<char[33]> ";
   }
   else if(string(dev_type_id) == "600004")
   {
    sqlstr ="SELECT t2.collectorid, nvl( t1.routeip,t1.ip) AS ip, "
       "nvl( t1.routeport,t1.port) AS port "
       "FROM nm_collector_info t1, nm_serv_info t2 "
       "WHERE t1.id=t2.collectorid "
       "AND t2.id=:m_OBJID<char[33]> ";
   }
   else
   {
    ostrTips.str("");
    ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "
      <<" wrong dev_type_id.";
    return false;
   }
   oracle::otl_stream si(1,sqlstr.c_str(),*db);
   si<<objid.c_str();
   if(si.eof())
   {
    ostrTips.str("");
    ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "
      <<" no result of execute sql --------" << sqlstr ;
    return false;
   }
   while(!si.eof())
   {
    memset(collector_ip,0,16);
    memset(collector_port,0,11);
    si>>collectorid>>collector_ip>>collector_port;
cout << "collectorid:" << collectorid << endl;
cout << "collector_ip:" << collector_ip << endl;
cout << "collector_port:" << collector_port << endl;
   }
  }
  catch(oracle::otl_exception& p)
  {
   ostrTips.str("");
   ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "
     <<" outer db execute sql "<<"--------"<<sqlstr<<"--------" << p.msg<<"--------" << p.stm_text<< p.sqlstate<<"--------"  <<p.var_info ;
   return false;
  }

  try
  {
cout << "NMITAlarmPerfJobUpdate::addTask()2::for() 8 " << endl;
   ostringstream streamServerUrl ( ostringstream::out );
   streamServerUrl << "http://" <<collector_ip<< ":" << collector_port<< "/xmlrpc";
   string const serverUrl ( streamServerUrl.str() );
   string const methodName ( "NmaXMLRPCServerMethod.call" );
   xmlrpc_c::clientSimple myClient;
   xmlrpc_c::value result;
   myClient.call ( serverUrl, methodName, "sss", &result, "addTask", (char *)xmlbuff, "");
   string const resultString= xmlrpc_c::value_string ( result );
cout << "Add Result of xmlrpc = /n" << resultString.c_str() << endl;
   if(!analyzeXMLRPCResult(ostrTips, resultString))
   {
    continue;
   }
  }
  catch ( exception const & e )
  {
   ostrTips.str("");
   ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "
    <<" Result of collector server ="<<"--" << e.what();
   return false;
  }
  catch ( ... )
  {
   ostrTips.str("");
   ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "
    <<" Send msg to analyse unit "<<" -- " <<" unit unknown error";
   return false;
  }

cout << "NMITAlarmPerfJobUpdate::addTask()2::for() 9 " << endl;
  for(vector<pair<string,string> >::iterator it2 = vecMeParams.begin();
   it2 != vecMeParams.end(); it2++)
  {
   try
   {
    sqlstr = "INSERT INTO nm_coll_task VALUES( "
       ":ObjectID<char[33]>,"
       "TO_NUMBER(:CommandID<char[39]>),"
       ":DriverID<char[101]>,"
       "TO_NUMBER(:JobID<char[39]>),"
       ":CollFieldName<char[51]>,"
       ":CollDriverName<char[51]>,"
       ":TaskID<char[101]>,"
       ":CollectorID<char[33]>,"
       ":UserLabel<char[201]>"
       ")";
    oracle::otl_stream os;
    os.open(1, sqlstr.c_str(), *db);
    os << objid.c_str() << (*it).c_str() << driverid << jobid
     << (*it2).first.c_str() << colldrivername << taskid.c_str() << collectorid << (*it2).second.c_str();
   }
   catch(oracle::otl_exception& p)
   {
    ostrTips.str("");
    ostrTips<<"relis_error_"<<m_libActionProjectName<<":error on"
     << ":outer db execute sql "<<"error :/n"<< p.msg<< p.stm_text<< p.sqlstate <<p.var_info ;
    return false;
   }
  }
  sleep(1);
 }//end of 根据commandid生成不同的task任务
 return true;
}

bool NMITAlarmPerfJobUpdate::delTask(ostringstream& ostrTips, oracle::otl_connect* db, const string& objid)
{
 string sqlstr;
 char taskid[101];
 char collector_ip[16];
 char collector_port[11];
///******************************************************************************************
 try
 {
  sqlstr = "SELECT DISTINCT t1.taskid,nvl( t2.routeip,t2.ip) AS ip,nvl( t2.routeport,t2.port) AS port "
      "FROM nm_coll_task t1,nm_collector_info t2 "
      "WHERE t1.collectorid = t2.id "
      "AND t1.objectid = :objectid<char[33]>";
  oracle::otl_stream os;
  os.open(1, sqlstr.c_str(), *db);
  os << objid.c_str();
  if(os.eof())
  {
   ostrTips.str("");
   ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "<<" It's a null record of /""<< sqlstr.c_str() << "/"";
   return false;
  }
  for(;!os.eof();)
  {
   memset(taskid,0,101);
   memset(collector_ip,0,16);
   memset(collector_port,0,11);
   os >> taskid >> collector_ip >> collector_port;
cout << "NMITAlarmPerfJobUpdate::delTask():taskid" << taskid << endl;
cout << "NMITAlarmPerfJobUpdate::delTask():collector_ip" << taskid << endl;
cout << "NMITAlarmPerfJobUpdate::delTask():collector_port" << taskid << endl;

   xmlChar* xmlbuff;int buffersize;
   {
    xmlDocPtr doc = xmlNewDoc(BAD_CAST"1.0");
    xmlNodePtr root = xmlNewNode(NULL,BAD_CAST"root");
    xmlNodePtr root_node_task = xmlNewNode(NULL,BAD_CAST"task");
    xmlAddChild(root, root_node_task);
    xmlDocSetRootElement(doc, root);
    xmlNewProp(root_node_task,BAD_CAST"id",BAD_CAST taskid);
    xmlNewProp(root_node_task,BAD_CAST"name",BAD_CAST "perfJobUpdate_delete");
    xmlNewProp(root_node_task,BAD_CAST"version",BAD_CAST "1.0");
    xmlDocDumpMemoryEnc(doc, &xmlbuff, &buffersize, "UTF-8");
    xmlFreeDoc(doc);
    doc = NULL;
   }
cout << "NMITAlarmPerfJobUpdate::delTask() 2::for() 4 ::DelTask xmlbuff:"  << endl;
cout << (char*)xmlbuff << endl;

   {
    ostringstream streamServerUrl ( ostringstream::out );
    streamServerUrl << "http://" <<collector_ip<< ":" << collector_port<< "/xmlrpc";
    cout << xmlbuff << endl;
    string const serverUrl ( streamServerUrl.str() );
    string const methodName ( "NmaXMLRPCServerMethod.call" );
    xmlrpc_c::clientSimple myClient;
    xmlrpc_c::value result;
    myClient.call ( serverUrl, methodName, "sss", &result, "delTask", (char *)xmlbuff, "");
    string const resultString= xmlrpc_c::value_string ( result );
    if(!analyzeXMLRPCResult(ostrTips, resultString))
    {
     //continue;
    }
   }

   {
    sqlstr = "DELETE FROM nm_coll_task t WHERE t.taskid = :t_TASKID<char[101]>";
    oracle::otl_stream os1;
    os1.open(1, sqlstr.c_str(), *db);
    os1 << taskid;
   }

  }
 }
 catch(oracle::otl_exception& p)
 {
  ostrTips.str("");
  ostrTips<<"relis_error_"<<m_libActionProjectName<<":error on"
   << ":outer db execute sql "<<"error :/n"<< p.msg<< p.stm_text<< p.sqlstate <<p.var_info ;
  return false;
 }
 catch ( exception const & e )
 {
  ostrTips.str("");
  ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "
   <<" Result of rule engine server ="<<"--" << e.what();
  return false;
 }
 catch ( ... )
 {
  ostrTips.str("");
  ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "
   <<" Send msg to analyse unit "<<" -- " <<" unit unknown error";
  return false;
 }
///******************************************************************************************

//  vector< subObject* > vecsubobjs;
//  vector<string> veccmdids;
//  char jobid[39];char driverid[101];char collector_ip[16];char collector_port[11];char colldrivername[51];
//  char collsubdrivername[257];char paratypeid[5];char dev_type_id[11];
//  try
//  {
// cout << "NMITAlarmPerfJobUpdate::delTask() 1" << endl;
//   sqlstr = "SELECT t1.subobjid, TO_CHAR(t1.commandid), t1.parameters, "
//      "t2.user_label, TO_CHAR(t2.dev_type_id) "
//      "FROM nm_coll_item t1, t_res_device t2 "
//      "WHERE t1.commandid IS NOT NULL AND t1.subobjid IS NOT NULL "
//      "AND t2.user_label IS NOT NULL AND t1.subobjid = t2.id "
//      "AND t1.objid = :objid<char[33]>";
//   oracle::otl_stream os;
//   os.open(1, sqlstr.c_str(), *db);
//   os << objid.c_str();
//   if(os.eof())
//   {
//    ostrTips.str("");
//    ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "<<" It's a null record of /""<< sqlstr.c_str() << "/"";
//    return false;
//   }
//   for(;!os.eof();)
//   {
//    char subobjid[33];char commandid[39];char collectorParameters[1025];char user_label[201];
//    memset(subobjid,0,33);memset(commandid,0,39);memset(collectorParameters,0,1025);memset(user_label,0,201);memset(dev_type_id ,0 ,11);
//    os >> subobjid >> commandid >> collectorParameters >> user_label >> dev_type_id;
//
//    subObject* psubobject = new subObject;
//    psubobject->subobjid = subobjid;
//    psubobject->commandid = commandid;
//    psubobject->collectorParameters = collectorParameters;
//    psubobject->user_label = user_label;
//    vecsubobjs.push_back(psubobject);
//
//    if(psubobject->commandid != "")
//    {
//     vector< string >:: iterator it;
//     it = find(veccmdids.begin(),veccmdids.end(),psubobject->commandid);
//     if(it != veccmdids.end()) continue;
//     veccmdids.push_back(psubobject->commandid);
//    }
//   }
// cout << "vector< subObject* > #############################" << endl;
//   for(vector< subObject* >::iterator it=vecsubobjs.begin();it!=vecsubobjs.end();it++)
//   {
// cout << "subobjid:" << (*it)->subobjid << endl;
// cout << "commandid:" << (*it)->commandid << endl;
// cout << "collectorParameters:" << (*it)->collectorParameters << endl;
// cout << "user_label:" << (*it)->user_label << endl;
// cout << endl;
//   }
// cout << "vector< subObject* > #############################/n" << endl;
//  }
//  catch(oracle::otl_exception& p)
//  {
//   ostrTips.str("");
//   ostrTips<<"relis_error_"<<m_libActionProjectName<<":error on"
//    << ":outer db execute sql "<<"error :/n"<< p.msg<< p.stm_text<< p.sqlstate <<p.var_info ;
//   return false;
//  }
//
//  for(vector< string >::iterator it = veccmdids.begin(); it != veccmdids.end(); it++)
//  {
// cout << "NMITAlarmPerfJobUpdate::delTask() 2::for()" << endl;
//   memset(driverid ,0 ,101); memset(jobid ,0 ,39);
//   try
//   {
// cout << "NMITAlarmPerfJobUpdate::delTask() 2::for() 1" << endl;
//    sqlstr = "SELECT t.driverid, TO_CHAR(t.jobid) FROM nm_obj_driver t "
//       "WHERE t.jobid IS NOT NULL AND t.driverid IS NOT NULL "
//       "AND t.objid = :objid<char[33]> AND t.commandid = :commandid<char[39]>" ;
//    oracle::otl_stream os;
// cout << "objid.c_str():" << objid.c_str() << endl;
// cout << "(*it).c_str():" << (*it).c_str() << endl;
//    os.open(1, sqlstr.c_str(), *db);
//    os << objid.c_str() << (*it).c_str();
//    if(os.eof()) continue;
//    else os >> driverid >> jobid;
// cout << "driverid:" << driverid << endl;
// cout << "jobid:" << jobid << endl;
// cout << endl;
//   }
//   catch(oracle::otl_exception& p)
//   {
//    ostrTips.str("");
//    ostrTips<<"relis_error_"<<m_libActionProjectName<<":error on"
//     << ":outer db execute sql "<<"error :/n"<< p.msg<< p.stm_text<< p.sqlstate <<p.var_info ;
//    continue;
//   }
//
//   memset (paratypeid ,0 ,5);memset(colldrivername ,0 ,51); memset(collsubdrivername ,0 ,257);
//   try
//   {
// cout << "NMITAlarmPerfJobUpdate::delTask() 2::for() 2" << endl;
//    sqlstr = "SELECT TO_CHAR(t.paratypeid), t.colldrivername, t.collsubdrivername "
//       "FROM nm_driver_info t "
//       "WHERE t.paratypeid IS NOT NULL AND t.colldrivername IS NOT NULL "
//       "AND t.id = :driverid<char[101]>" ;
//    oracle::otl_stream os;
//    os.open(1, sqlstr.c_str(), *db);
//    os << driverid;
//    if(os.eof()) continue;
//    else os >> paratypeid >> colldrivername >> collsubdrivername;
// cout << "paratypeid:" << paratypeid << endl;
// cout << "colldrivername:" << colldrivername << endl;
// cout << "collsubdrivername:" << collsubdrivername << endl;
//   }
//   catch(oracle::otl_exception& p)
//   {
//    ostrTips.str("");
//    ostrTips<<"relis_error_"<<m_libActionProjectName<<":error on"
//     << ":outer db execute sql "<<"error :/n"<< p.msg<< p.stm_text<< p.sqlstate <<p.var_info ;
//    continue;
//   }
//   taskid = objid + "-" + (*it) + "-" + string(colldrivername);
//
//   try
//   {
// cout << "NMITAlarmPerfJobUpdate::delTask() 2::for() 3" << endl;
//    sqlstr = "SELECT t.* FROM nm_coll_task t "
//       "WHERE t.taskid = :taskid<char[101]>" ;
//    oracle::otl_stream os;
//    os.open(1, sqlstr.c_str(), *db);
//    os << taskid.c_str();
//    if(os.eof())
//    {
//     ostrTips.str("");
//     ostrTips<<"relis_error_"<<m_libActionProjectName<<":error on"
//      << "Task /"" << taskid.c_str() << "/" doesn't exist,can not delete";
// cout << "Task /"" << taskid.c_str() << "/" doesn't exist,can not delete" << endl;
//     continue;
//    }
//   }
//   catch(oracle::otl_exception& p)
//   {
//    ostrTips.str("");
//    ostrTips<<"relis_error_"<<m_libActionProjectName<<":error on"
//     << ":outer db execute sql "<<"error :/n"<< p.msg<< p.stm_text<< p.sqlstate <<p.var_info ;
//    continue;
//   }
//
//   xmlDocPtr doc = xmlNewDoc(BAD_CAST"1.0");
//   xmlNodePtr root = xmlNewNode(NULL,BAD_CAST"root");
//   xmlNodePtr root_node_task = xmlNewNode(NULL,BAD_CAST"task");
//   xmlAddChild(root, root_node_task);
//   xmlDocSetRootElement(doc, root);
//   xmlNewProp(root_node_task,BAD_CAST"id",BAD_CAST taskid.c_str());
//   xmlNewProp(root_node_task,BAD_CAST"name",BAD_CAST "perfJobUpdate_delete");
//   xmlNewProp(root_node_task,BAD_CAST"version",BAD_CAST "1.0");
//   xmlDocDumpMemoryEnc(doc, &xmlbuff, &buffersize, "UTF-8");
//   xmlFreeDoc(doc);
//   doc = NULL;
// cout << "NMITAlarmPerfJobUpdate::delTask() 2::for() 4 ::DelTask xmlbuff:"  << endl;
// cout << (char*)xmlbuff << endl;
//
//   try
//   {
// cout << "NMITAlarmPerfJobUpdate::delTask() 2::for() 5" << endl;
//    if(string(dev_type_id) == "600001")
//    {
//     sqlstr ="SELECT nvl( t1.routeip,t1.ip) AS ip, "
//        "nvl( t1.routeport,t1.port) AS port "
//        "FROM nm_collector_info t1, nm_dev_info t2 "
//        "WHERE t1.id=t2.collectorid "
//        "AND t2.id=:m_OBJID<char[33]> ";
//    }
//    else if(string(dev_type_id) == "600002")
//    {
//     sqlstr ="SELECT nvl( t1.routeip,t1.ip) AS ip, nvl( t1.routeport,t1.port) AS port "
//        " FROM nm_collector_info t1, nm_dev_info t2, nm_basapp_info t3 "
//        " WHERE t2.id=t3.devid "
//        " AND t1.id=t2.collectorid "
//        " AND t3.id=:m_OBJID<char[33]> ";
//    }
//    else if(string(dev_type_id) == "600003")
//    {
//     sqlstr ="SELECT nvl( t1.routeip,t1.ip) AS ip, "
//        "nvl( t1.routeport,t1.port) AS port "
//        "FROM nm_collector_info t1, nm_dev_info t2,nm_servapp_info t3 "
//        "WHERE t2.id=t3.devid "
//        "AND t1.id=t2.collectorid "
//        "AND t3.id=:m_OBJID<char[33]> ";
//    }
//    else  if(string(dev_type_id) == "600004")//600004
//    {
//     sqlstr ="SELECT nvl( t1.routeip,t1.ip) AS ip, "
//        "nvl( t1.routeport,t1.port) AS port "
//        "FROM nm_collector_info t1, nm_serv_info t2 "
//        "WHERE t1.id=t2.collectorid "
//        "AND t2.id=:m_OBJID<char[33]> ";
//    }
//    else
//    {
//     ostrTips.str("");
//     ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "
//       <<" wrong dev_type_id";
//     continue;
//    }
//    oracle::otl_stream si(1,sqlstr.c_str(),*db);
//    si<<objid.c_str();
//    if(si.eof())
//    {
//     ostrTips.str("");
//     ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "
//       <<" no result of execute sql --------" << sqlstr ;
//     continue;
//    }
//    while(!si.eof())
//    {
//     memset(collector_ip,0,16);
//     memset(collector_port,0,11);
//     si>>collector_ip>>collector_port;
// cout << "collector_ip:" << collector_ip << endl;
// cout << "collector_port:" << collector_port << endl;
//    }
//   }
//   catch(oracle::otl_exception& p)
//   {
//    ostrTips.str("");
//    ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "
//      <<" outer db execute sql "<<"--------"<<sqlstr<<"--------" << p.msg<<"--------" << p.stm_text<< p.sqlstate<<"--------"  <<p.var_info ;
//    continue;
//   }
//
//   try
//   {
// cout << "NMITAlarmPerfJobUpdate::delTask() 2::for() 6" << endl;
//    ostringstream streamServerUrl ( ostringstream::out );
//    streamServerUrl << "http://" <<collector_ip<< ":" << collector_port<< "/xmlrpc";
//    cout << xmlbuff << endl;
//    string const serverUrl ( streamServerUrl.str() );
//    string const methodName ( "NmaXMLRPCServerMethod.call" );
//    xmlrpc_c::clientSimple myClient;
//    xmlrpc_c::value result;
//    myClient.call ( serverUrl, methodName, "sss", &result, "delTask", (char *)xmlbuff, "");
//    string const resultString= xmlrpc_c::value_string ( result );
// cout << "NMITAlarmPerfJobUpdate::delTask() 2::for() 6::Del Result of xmlrpc = /n" << resultString.c_str() << endl;
//    if(!analyzeXMLRPCResult(ostrTips, resultString))
//    {
//     //continue;
//    }
//   }
//   catch ( exception const & e )
//   {
//    ostrTips.str("");
//    ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "
//     <<" Result of rule engine server ="<<"--" << e.what();
//    continue;
//   }
//   catch ( ... )
//   {
//    ostrTips.str("");
//    ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "
//     <<" Send msg to analyse unit "<<" -- " <<" unit unknown error";
//    continue;
//   }
//
//   try
//   {
//    sqlstr = "DELETE FROM nm_coll_task t WHERE t.taskid = :t_TASKID<char[101]>";
//    oracle::otl_stream os;
//    os.open(1, sqlstr.c_str(), *db);
//    os << taskid.c_str();
//   }
//   catch(oracle::otl_exception& p)
//   {
//    ostrTips.str("");
//    ostrTips<<"relis_error_"<<m_libActionProjectName<<":error on"
//     << ":outer db execute sql "<<"error :/n"<< p.msg<< p.stm_text<< p.sqlstate <<p.var_info ;
//    continue;
//   }
//   sleep(1);
// }

// cout << "NMITAlarmPerfJobUpdate::delTask() will now return true." << endl;
//  return true;
}

/// /brief 实现具体动作
/// /details 实现告警消息的预先处理动作
/// /complexity  hight +
/// /param[in] executionContext 流程引擎环境参数指针
void NMITAlarmPerfJobUpdate::execute(ExecutionContext* executionContext)
{
 ostringstream ostrTips(ostringstream::out);
 bool blnRet;
 bool blnSafeExit=false;
 string ClientID = "";
 string ModuleID = "";
 string CommandType = "";
 string CommandID = "";
 string errorReturnDesc = "";
 ContextInstance *contextInstance;
 mapValues* tk;
 mapValues::iterator it;
 EnvSession* tranEnvSession;
 unsigned int dbInstanceIndex = 2;
 oracle::otl_connect*  outerdb;

 CmdPerfJobUpdate* p_objCmdPerfJobUpdate = NULL;
 string tmpOBJID, tmpFLAG;
 bool isErrorBreak = false;

 contextInstance = executionContext->getContextInstance();
 if(NULL==contextInstance)
 {
  ostrTips.str("");
  ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "
   <<"Get Env instance "<<" -- " <<"executionContext->getContextInstance()";
  ACE_DEBUG ( ( LM_ERROR, ACE_TEXT ( "%t %s/n" ), ACE_TEXT ( ostrTips.str().c_str() )) );
  return;
 }
 tk = contextInstance->getAllValues();
 if(NULL==tk)
 {
  ostrTips.str("");
  ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "
   <<"Get EnvSession context  "<<" -- " <<"contextInstance->getAllValues()";
  ACE_DEBUG ( ( LM_ERROR, ACE_TEXT ( "%t %s/n" ), ACE_TEXT ( ostrTips.str().c_str() )) );
  contextInstance->setIsActionState(-1);
  return;
 }
 it = tk->begin();
 tranEnvSession= (EnvSession*)it->second;

 outerdb=(oracle::otl_connect *) DBConnPool::instance()->GetDBConn(dbInstanceIndex,  ACE_Thread::self());
 if(outerdb==NULL)
 {
  ostrTips.str("");
  ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "
         <<"can't get   relis_db_instance_" <<dbInstanceIndex<<"'s connection "<<" -- "<<"DBConnPool::instance()->GetDBCon ";
  goto errorReturn;
 }

 blnRet=tranEnvSession->GetEnvVar("objNMITCommand",(ObjectBase*&)p_objCmdPerfJobUpdate);
 if(false==blnRet)
 {
  ostrTips.str("");
  ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "
   <<" get  env parameter "<<"--" <<" GetEnvVar(/"objNMITCommand/",/"(ObjectBase*)p_objCmdPerfJobUpdate/")";
  goto errorReturn;
 }

 if(!p_objCmdPerfJobUpdate)
 {
  ostrTips.str("");
  ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "
   <<" get  env parameter "<<"--" <<" GetEnvVar(/"objNMITCommand/",/"(ObjectBase*)p_objCmdPerfJobUpdate/")";
  goto errorReturn;
 }

 CommandType = p_objCmdPerfJobUpdate->m_TYPE;
 if(CommandType.compare("perfJobUpdate")==0)
 {
  ClientID = p_objCmdPerfJobUpdate->m_CLIENTID;
  ModuleID = p_objCmdPerfJobUpdate->m_MODULEID;
 }
 else
 {
  ostrTips.str("");
  ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "
   <<" wrong CommandType: "<<CommandType.c_str();
  goto errorReturn;
 }
///test ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
cout << "p_NMITCommand->m_TYPE: " << p_objCmdPerfJobUpdate->m_TYPE << endl;
cout << "p_NMITCommand->m_OPERID: " << p_objCmdPerfJobUpdate->m_OPERID << endl;
cout << "p_NMITCommand->m_CLIENTID: " << p_objCmdPerfJobUpdate->m_CLIENTID << endl;
cout << "p_NMITCommand->m_MODULEID: " << p_objCmdPerfJobUpdate->m_MODULEID << endl;
for(vector<PerfJobUpdateItems*>::iterator it_pju = p_objCmdPerfJobUpdate->vec_items.begin();
   it_pju != p_objCmdPerfJobUpdate->vec_items.end() ; it_pju++)
{
 cout << "item  OBJID: " << (*it_pju)->OBJID  << ", FLAG: " << (*it_pju)->FLAG << endl;
}
///test ok////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 for(vector<PerfJobUpdateItems*>::iterator it=p_objCmdPerfJobUpdate->vec_items.begin();
    it!=p_objCmdPerfJobUpdate->vec_items.end(); it++)
 {
cout << "NMITAlarmPerfJobUpdate::execute()::for() " << endl;
  if(NULL == (*it))
   continue;
  tmpOBJID = "";  tmpFLAG = "";
  tmpOBJID = (*it)->OBJID;  tmpFLAG = (*it)->FLAG;
  if(tmpFLAG.compare("add") == 0 || tmpFLAG.compare("ADD") == 0)
  {
cout << "NMITAlarmPerfJobUpdate::execute()::for()::add" << endl;
   if( !addTask(ostrTips, outerdb, tmpOBJID) )
   {
    errorReturnDesc = ostrTips.str();
    isErrorBreak = true;
    break;
   }
  }
  else if(tmpFLAG.compare("delete") == 0 || tmpFLAG.compare("DELETE") == 0)
  {
cout << "NMITAlarmPerfJobUpdate::execute()::for()::delete" << endl;
   if( !delTask(ostrTips, outerdb, tmpOBJID) )
   {
    errorReturnDesc = ostrTips.str();
//     isErrorBreak = true;
//     break;
   }
  }
  else
  {
cout << "NMITAlarmPerfJobUpdate::execute()::for()::other" << endl;
   continue;
  }
 }
 tranEnvSession->SetResult ("ok");

 blnSafeExit=true;
errorReturn:
 if(!blnSafeExit || isErrorBreak)
 {
  errorReturnDesc = ostrTips.str();
  ACE_DEBUG ( ( LM_ERROR, ACE_TEXT ( "%t %s/n" ), ACE_TEXT ( ostrTips.str().c_str() )) );
  contextInstance->setIsActionState(-1);

  xmlDocPtr doc = xmlNewDoc(BAD_CAST"1.0");
  xmlNodePtr root = xmlNewNode(NULL,BAD_CAST"root");
     xmlDocSetRootElement(doc,root);
  xmlNewTextChild(root, NULL, BAD_CAST "TYPE",BAD_CAST "cmdResult");
  xmlNewTextChild(root, NULL, BAD_CAST "CLIENTID",BAD_CAST ClientID.c_str());
  xmlNewTextChild(root, NULL, BAD_CAST "MODULEID",BAD_CAST ModuleID.c_str());
  xmlNewTextChild(root, NULL, BAD_CAST "COMMANDTYPE",BAD_CAST CommandType.c_str());
  xmlNewTextChild(root, NULL, BAD_CAST "COMMANDID",BAD_CAST CommandID.c_str());
  xmlNewTextChild(root, NULL, BAD_CAST "SUCCFLAG",BAD_CAST "false");
  xmlNewTextChild(root, NULL, BAD_CAST "DESC",BAD_CAST errorReturnDesc.c_str());
  xmlChar *xmlbuff;
  int buffersize;
  xmlDocDumpMemoryEnc(doc, &xmlbuff, &buffersize, "UTF-8");
  tranEnvSession->SetResult ((char*)xmlbuff);
  xmlFreeDoc(doc);
  doc = NULL;
 }
 delete tk;
 tk = NULL;
}

bool NMITAlarmPerfJobUpdate::analyzeXMLRPCResult(ostringstream& ostrTips, const string& result)
{
cout << "analyzeXMLRPCResult begin:" << endl;
 int size = strlen(result.c_str());
 vector<XML_NODE*> resultNodes;
 XML_NODE *dr = NULL;
 dr = XMLParser::XMLLoadFromMemory(result.c_str(), size);
 if (NULL!=dr)
 {
  resultNodes.clear();
  resultNodes = XMLParser::XMLFindSameNameNodes(dr, "//result");
  if(resultNodes.empty())
  {
  ostrTips.str("");
  ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "
   << "Can't analyze the result from xmlrpc";
   return false;
  }
  vector<XML_NODE*>::iterator it = resultNodes.begin();
  char* type;
  if(!(XMLParser::XMLQueryAttributeValue(*it, "type", type, size)))
  {
cout << "analyzeXMLRPCResult type:" << type << endl;
   ostrTips.str("");
   ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "
    << "Can't analyze the result from xmlrpc";
   return false;
  }
  if(string(type) == "error")
  {
   bool isCDATA;
   char* errorDesc;
   XMLParser::XMLQueryValueCDATA(*it, "//result//error//errorDescribe","",errorDesc,size,isCDATA);
cout << "analyzeXMLRPCResult errorDesc:" << errorDesc << endl;
   ostrTips.str("");
   ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "
    << errorDesc;
   return false;
  }
  else
   return true;
 }
 else
 {
  ostrTips.str("");
  ostrTips<<"relis_error_"<<m_libActionProjectName<<": error on "
   << result ;
 }
 return true;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值