/*************************************************************************************
* 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;
}