socketref,再见!高德

https://github.com/adoggie

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  246 Posts :: 4 Stories :: 312 Comments :: 0 Trackbacks

常用链接

留言簿(54)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

  1 /**
  2 2005.10.13        scott 
  3     1. GetCommunity()完成对象分配回收
  4 
  5 
  6 */
  7 
  8 
  9 #ifdef WIN32
 10 #pragma  warning(disable:4786)
 11 #endif
 12 
 13 #include "flowvis.h"
 14 #include "util.h"
 15 #include "mrtg.h"
 16 #include <stdio.h>
 17 #include <stdlib.h>
 18 #include <math.h>
 19 #include "encrypt.h"
 20 
 21 
 22 
 23 MrtgInfo FlowVis::MRTG ;
 24 
 25 
 26 
 27 FlowVis::FlowVis(){
 28     
 29 }
 30 
 31 FlowVis::~FlowVis(){
 32 }
 33 
 34 bool FlowVis::ReloadConfig(){
 35     char  buff[1024];    
 36     _sconf.Lock();    
 37     SetMRTGInfo();
 38     //-- run time params set 
 39     if( get_conf_val("ENABLE",buff,sizeof(buff))){
 40         _sconf.rtParam.enable = (int) atoi(ValidString(buff).c_str());
 41     }
 42 
 43     if( get_conf_val("ALARM_VALUE",buff,sizeof(buff))){
 44         _sconf.rtParam.alarm_val = (int) atoi(ValidString(buff).c_str());
 45     }
 46 
 47     if( get_conf_val("LINK_SENSITIVE",buff,sizeof(buff))){
 48         _sconf.rtParam.link_sensitive = (int) atoi(ValidString(buff).c_str());
 49     }
 50     MainLog(NVLog::LOG_DEBUG,"灵敏度:%d",_sconf.rtParam.link_sensitive);
 51     if( get_conf_val("SHOW_TYPE",buff,sizeof(buff))){
 52         _sconf.rtParam.show_type = (int) atoi(ValidString(buff).c_str());
 53     }
 54     
 55     // -- 
 56     if( get_conf_val("DEBUG_HOST",buff,sizeof(buff))){
 57         _sconf.debug_host = ValidString(buff);
 58     }
 59     if( get_conf_val("DEBUG_PORT",buff,sizeof(buff))){
 60         _sconf.debug_port = (unsigned short)atoi(ValidString(buff).c_str());
 61     }
 62     if( get_conf_val("LOG_LEVEL",buff,sizeof(buff))){
 63         _sconf.log_level  = (unsigned int)atoi(ValidString(buff).c_str());
 64     }
 65     if( get_conf_val("USERLOG_PORT",buff,sizeof(buff))){
 66         _sconf.userlog_port  = (unsigned int)atoi(ValidString(buff).c_str());
 67     }    
 68     if( get_conf_val("JAVA_APP",buff,sizeof(buff))){
 69         MRTG.java  = ValidString(buff);
 70     }
 71     if( get_conf_val("PERL_APP",buff,sizeof(buff))){
 72         MRTG.perl  = ValidString(buff);
 73     }
 74     if( get_conf_val("SHOWLINK_INTERVAL",buff,sizeof(buff))){
 75         _sconf.showlink_interval  = (unsigned int)atoi(ValidString(buff).c_str());
 76     }
 77     if( get_conf_val("UNCHECK_LICENSE",buff,sizeof(buff))){
 78         _sconf.check_license  = false;
 79     }
 80     if( get_conf_val("LOGWIN_STARTUP_SHOW",buff,sizeof(buff))){
 81         _sconf.logwin_startup_show = true;
 82     }
 83     _sconf.Unlock();
 84     return true;
 85 }
 86 
 87 bool    FlowVis::Initial(const char * confile){
 88     int ret;
 89     chdir(GetExeFileDir().c_str());    
 90     #ifdef WIN32
 91         WORD wVersionRequested;
 92         WSADATA wsaData;
 93         int err; 
 94         wVersionRequested = MAKEWORD( 2,2 );
 95         err = WSAStartup( wVersionRequested, &wsaData );
 96         if ( err != 0 ) {
 97             return false;
 98         }
 99     #endif
100 
101     #ifdef FLOWVIS_SHOW
102         NVLog::RegFileWriter * fw = new NVLog::RegFileWriter("./show.log");
103     #else
104         NVLog::RegFileWriter * fw = new NVLog::RegFileWriter("./order.log");
105     #endif
106     fw->Open();
107     _log.SetWriter(fw);
108     
109 
110     //-- 加载配置文件
111     if!ReloadConfig() ){
112         MainLog(NVLog::LOG_ERROR,"reload config failed!");
113         return false;
114     }
115 
116 
117     if( _sconf.check_license ){
118         std::string msg="";
119         bool show;
120         
121         if(!GetLicensNumber(msg,show)){        
122     #ifdef FLOWVIS_ORDER
123         //    printf("\nget license failed ,%s",msg.c_str());
124             PopMessage(MSG_WARNING,msg.c_str());
125             MainLog(NVLog::LOG_ERROR,msg.c_str());
126             
127     #endif
128             return false;        
129         }else{
130             if( show ){
131     #ifdef FLOWVIS_ORDER
132             //    printf(msg.c_str());
133                 PopMessage(MSG_INFORMATION,msg.c_str());            
134                 MainLog(NVLog::LOG_MESSAGE,msg.c_str());
135     #endif
136             }
137             //printf("check license ok");
138         }
139     }
140 
141 
142 
143 
144     //-- license check end
145     if!CheckEnvironment() ){
146         MainLog(NVLog::LOG_ERROR,"检测系统运行环境条件失败");
147         return false;
148     }
149 #ifdef WIN32 
150     NVLog::WindowWriter * ww = new NVLog::WindowWriter("flowvis");
151     ww->Open();
152     _log.SetWriter(ww);
153     //-- for userlog
154     _userlog.SetFormat("<TIME>\t<MESSAGE>\n");
155     NVLog::WindowWriter * wwul = new NVLog::WindowWriter(USERLOG_WIN_TITLE,true);
156     wwul->Open();
157     _userlog.SetWriter(wwul);
158 #endif
159 
160 #ifdef _UNIX
161     //-- for userlog
162     _userlog.SetFormat("<TIME>\t<MESSAGE>\n");
163     
164     #ifdef FLOWVIS_SHOW
165         NVLog::UdpWriter *uw = new NVLog::UdpWriter(_sconf.debug_host.c_str(),_sconf.debug_port);
166     #else
167         NVLog::UdpWriter *uw = new NVLog::UdpWriter(_sconf.debug_host.c_str(),_sconf.debug_port+1);
168     #endif
169     uw->Open();
170     _log.SetWriter(uw);
171     
172 #ifdef FLOWVIS_ORDER
173     for(int n=0;n< 1000; n++){
174         if( Util_TryBindUpdAddr("127.0.0.1",n+_sconf.userlog_port) ){
175             _sconf.userlog_port+=n;
176             break;
177         }
178     }
179     MainLog(NVLog::LOG_DEBUG,"bind udp port :%d",    _sconf.userlog_port);
180     if( _sconf.logwin_startup_show ){
181         ShowUserLogWindow();    //add on 05.10.13 scott
182     }
183     uw = new NVLog::UdpWriter("127.0.0.1",_sconf.userlog_port);    
184     uw->Open();
185     _userlog.SetWriter(uw);
186 #endif    
187 #endif
188 
189     ret = OVwInit();
190     if( ret ){
191         MainLog(NVLog::LOG_ERROR,"system start error: OVwInit failed!");
192         return false;
193     }
194     LoadFlowVisObjectList();    
195 
196 #ifdef FLOWVIS_SHOW
197         //--清除进程号
198         FILE *fp ;
199         char buff[32];        
200         unsigned int pid ;
201         Util_DelFile("./fvshow.pid");
202         Util_DelFile("./del.f");
203         //--创建进程号,并写入进程文件
204         fp = fopen("./fvshow.pid","w");
205 
206 #ifdef WIN32
207         pid = GetCurrentProcessId();
208 #else
209         pid = (unsigned int)getpid();
210 #endif
211         sprintf(buff,"%u",pid);
212         fwrite(buff,1,strlen(buff),fp);
213         fclose(fp);
214 #endif
215 
216 #ifdef FLOWVIS_ORDER    // -- to create fields
217 /*
218     OVwFieldId fid = OVwDbFieldNameToFieldId(OVW_FIELD_ISFLOWVIS_SET);
219     OVwDbDeleteField(fid);
220     fid = OVwDbCreateField(OVW_FIELD_ISFLOWVIS_SET, ovwBooleanField, ovwLocateField|ovwGeneralField);
221     if( fid == ovwNullFieldId){
222         if( OVwError() != OVw_FIELD_EXISTS){
223             MainLog(NVLog::LOG_ERROR,"创建Field :%s 失败!",OVW_FIELD_ISFLOWVIS_SET);
224         }
225     }else{
226         MainLog(NVLog::LOG_ERROR,"创建Field :%s 成功!",OVW_FIELD_ISFLOWVIS_SET);
227     }*/
228 #endif
229     return true;
230 }
231 
232 
233 bool    FlowVis::LoadTaskObject(const char * base,const char * file){
234     FILE * fp;
235     char * ret;
236     char * sep = "#";
237     char line[1024];
238     unsigned int objid;
239     char *tok;
240     fvObject *obj;
241     FVSTRING ip,index,ifspeed;
242     FVSTRING path;
243     
244     path = base;
245     path = path+file;
246     MainLog(FVLOG::LOG_DEBUG," To LoadTaskObject %s/",path.c_str());
247     fp = fopen(path.c_str(),"r");
248     if(!fp){
249         return false;
250     }
251     objid = atoi(file);
252     if( objid == 0){
253         return false;
254     }
255 
256     ret = fgets(line,sizeof(line),fp);
257     if(!ret){
258         return false;
259     }
260     MainLog(FVLOG::LOG_DEBUG,"Read Line:%s",line);
261     tok = strtok(line,sep);
262         if( tok ){                        
263             ip = tok;
264             tok = strtok(NULL,sep);
265             if( tok ){
266                 index = tok;
267                 obj = new fvObject;
268                 obj->objid = objid;
269                 obj->ip = ip;
270                 obj->status = fvObject::CONFIRM;
271                 obj->index = atol(index.c_str());
272                 obj->subnet = CalcSubnet(obj->ip.c_str(),"");
273                 _speedneed.push_back(obj);
274                 MainLog(FVLOG::LOG_DEBUG,"加载任务对象:objid:%d,ip:%s,index:%u,subnet:%s",objid,ip.c_str(),obj->index,obj->subnet.c_str());
275             }                            
276         }    
277     fclose(fp);
278     return true;
279 }
280 /*
281     name:    LoadFlowVisObjectList
282     desc:    flowvis启动时,将设置过的对象从文件加载上来
283             <objectid#ip#index#speed>
284     param:
285     ret:    
286 */
287 void FlowVis::LoadFlowVisObjectList(){
288     std::vector<FVSTRING> filist;
289     FVSTRING path;
290 
291     std::vector<FVSTRING>::iterator itr;
292     
293     fvObject_List::iterator itrobj;
294     fvObject * obj;
295     for(itrobj= _obj_list.begin();itrobj!=_obj_list.end();itrobj++){
296         obj = *itrobj;
297         delete obj;
298     }
299     _speedneed.erase(_speedneed.begin(),_speedneed.end());
300     Util_EnumFile(DIR_INTERFACE,filist);
301     for(itr = filist.begin();itr!=filist.end();itr++){
302         path = DIR_INTERFACE;
303         path = path + "/";
304         LoadTaskObject(path.c_str(),(*itr).c_str());
305     }
306     
307 #ifdef FLOWVIS_ORDER
308     /*
309     OVwFieldId fid;
310     for(itrobj= _obj_list.begin();itrobj!=_obj_list.end();itrobj++){
311         obj = *itrobj;
312         fid= OVwDbFieldNameToFieldId(OVW_FIELD_ISFLOWVIS_SET);
313         OVwDbSetFieldBooleanValue(obj->objid,fid,TRUE);
314     }*/
315 #endif
316     
317 }
318 
319 void    FlowVis::Clearup(){
320 
321 }
322 
323 void FlowVis::OnMapClose(void *userData, OVwEventType event){
324     FlowVis * f = (FlowVis*)userData;    
325     MainLog(NVLog::LOG_MESSAGE,"OnMapClose");
326     
327     //-- restore sense    
328     f->_sample_lock.Lock();
329     fvObject_List::iterator itr;
330     fvObject * obj;
331 //    OVwFieldId fid;
332     for(itr = f->_sample_list.begin();itr!=f->_sample_list.end();itr++){
333         obj = *itr;
334         if( obj->status == fvObject::CONFIRM){
335             f->RestoreObjectBehavior(obj);    
336             /*
337             fid= OVwDbFieldNameToFieldId(OVW_FIELD_ISFLOWVIS_SET);
338             OVwDbSetFieldBooleanValue(obj->objid,fid,FALSE);*/
339         }
340     }
341     f->_sample_lock.Unlock();
342     MainLog(NVLog::LOG_MESSAGE,"准备恢复符号初始状态!");    
343     OVwMapInfo * map;
344     map = OVwGetMapInfo();
345     OVwAckMapClose(map,time(0));
346     //FlowVis::SystemExit(userData,event);
347 }
348 
349 void FlowVis::OnMapOpen(void *userData, OVwEventType event){
350     FlowVis * f = (FlowVis*)userData;    
351     MainLog(NVLog::LOG_MESSAGE,"OnMapOpen");
352     static int _do =0;
353     if!_do){
354         f->ShowLink();
355     }
356 }
357 
358 
359 void FlowVis::SystemExit(void *user, OVwEventType event,OVwBoolean normalEnd){
360     FlowVis * f = (FlowVis*)user;    
361     
362     MainLog(NVLog::LOG_MESSAGE,"On SystemExit,normalEnd:%d",normalEnd);
363 #ifdef FLOWVIS_ORDER
364     //-- to kill buddy : fvshow
365     //--清除进程号
366     /*
367     FILE *fp ;
368     char buff[32];                
369     unsigned int pid;
370     fp = fopen("./fvshow.pid","r");
371     if(fp){
372         fgets(buff,sizeof(buff),fp);
373         pid = (unsigned int)atol(buff);    
374         fclose(fp);            
375         if( pid ){
376             f->KillProcess(pid);
377         }
378     }*/        
379     Util_DelFile("./fvshow.pid");
380 #endif
381     
382     MainLog(NVLog::LOG_MESSAGE,"已经恢复符号初始状态! 系统退出");
383     //MainUserLog(NVLog::LOG_ERROR,"FLOWVIS::EXIT");
384 //    OVwDone();
385     exit(0);
386 }
387 
388 bool    FlowVis::MainLoop(){
389 #ifdef FLOWVIS_SHOW
390     MrtgSampling();
391 #endif
392 #ifdef FLOWVIS_ORDER
393     OVwAddActionCallback((char *)("SetObject"), (OVwActionCallbackProc)SetObject, (void*)this);
394     OVwAddActionCallback((char *)("CancelObject"), (OVwActionCallbackProc)CancelObject, (void*)this);
395     OVwAddActionCallback((char *)("ShowReport"), (OVwActionCallbackProc)ShowReport, (void*)this);
396     OVwAddCallback(ovwMapClose, NULL,(OVwCallbackProc) FlowVis::OnMapClose,(void*)this);
397     #ifdef WIN32
398         OVwAddCallback(ovwEndSession, NULL,(OVwCallbackProc) FlowVis::SystemExit,(void*)this);
399     #endif
400         OVwMainLoop();    
401     #ifdef _UNIX
402         FlowVis::SystemExit((void*)this,1,1);
403     #endif
404     MainLog(NVLog::LOG_DEBUG,"after OVwMainLoop()");
405 #endif
406     
407     return true;
408 }
409 
410 #define READ_SAMPLE_EXIT fclose(fp);return false;
411 
412 bool    FlowVis::ReadObjectInfo(fvObject* obj){
413     //j->    
414     char buff[1024];
415     FILE * fp;
416     FVSTRING str;
417     char * ret;
418     sprintf(buff,"%s/%s_%u",MRTG_DIR_OUTPUT,obj->ip.c_str(),obj->index);
419     unsigned int out,in;
420     float outr,inr;
421     MainLog(NVLog::LOG_DEBUG,"ReadObjectInfo::试图读取 %s",buff);
422     fp = fopen(buff,"r");
423     if!fp ){
424         MainLog(NVLog::LOG_DEBUG,"试图读取MRTG数据失败,文件打开失败%s",buff);
425         return false;
426     }
427     ret = fgets(buff,sizeof(buff),fp);    // -- out bytes;
428     if(!ret){
429         READ_SAMPLE_EXIT
430     }
431     str = ValidString(buff);
432     out = atol(str.c_str());
433     //--
434     ret = fgets(buff,sizeof(buff),fp);    // -- out bytes;
435     if(!ret){
436         MainLog(NVLog::LOG_DEBUG,"试图读取MRTG数据失败,数据可能未采集!");
437         READ_SAMPLE_EXIT
438     }
439     str = ValidString(buff);
440     in = atol(str.c_str());
441     //--
442     ret = fgets(buff,sizeof(buff),fp);    // -- out bytes;
443     if(!ret){
444         READ_SAMPLE_EXIT
445     }
446     str = ValidString(buff);
447     outr = atof(str.c_str());
448     //--
449     ret = fgets(buff,sizeof(buff),fp);    // -- out bytes;
450     if(!ret){
451         READ_SAMPLE_EXIT
452     }
453     str = ValidString(buff);
454     inr = atof(str.c_str());
455     // -- end read
456     fclose(fp);    
457     //--
458     MainLog(NVLog::LOG_DEBUG,"读取MRTG数据成功!");
459     obj->flow_val =        in + out;
460     obj->using_rate = inr+outr;
461     MainLog(NVLog::LOG_DEBUG,"读取MRTG数据成功 obj->flow_val:%d,obj->using_rate:%f",obj->flow_val,obj->using_rate);
462     return true;
463 }
464 
465 /*
466     MRTG采集数据的显示
467 */
468 void    FlowVis::ShowLink(){
469     fvObject_List::iterator itr;
470     _sample_lock.Lock();
471     for(itr = _sample_list.begin();itr!=_sample_list.end();itr++){
472         fvObject *obj;
473         obj = *itr;
474         if( obj->status == fvObject::PENDING){
475             continue;
476         }
477         #ifdef _UNIX
478             #ifdef FLOWVIS_SHOW
479                 FILE * fp ;
480                 fp = fopen("./del.f","r");
481                 if( fp ){
482                     fclose(fp);    
483                     Util_DelFile("./del.f");
484                     MainLog(NVLog::LOG_DEBUG,"监测到对象被取消设置,停止显示对象信息");
485                     break;
486                 }                
487             #endif
488         #endif
489         if!_sconf.rtParam.enable ){    // current flowvis is disabled
490             RestoreObjectBehavior(obj);    // 还原符号原有的信息
491             continue;
492         }
493         if( ReadObjectInfo(obj)){            
494             //-- format string
495             char buff[1024];
496             if( _sconf.rtParam.show_type == 1){     // using_rate
497                 if(obj->flow_val<1000){    //^^2005.09.19 scott            
498                     sprintf(buff,REPRESENT_FORMAT_FLOW_RATE,obj->flow_val);
499                 }else{
500                     sprintf(buff,REPRESENT_FORMAT_FLOW_RATE_KB,obj->flow_val/1000);
501                 }
502             }else{
503                 sprintf(buff,REPRESENT_FORMAT_USING_RATE,obj->using_rate);
504             }
505             obj->text = buff;
506             MainLog(NVLog::LOG_MESSAGE,"读取采样数据:%d,%f,Text:%s",obj->flow_val,obj->using_rate,buff);
507         
508             if( _sconf.rtParam.show_type == 1 )    { // 流速
509                 CalcSymbolWidth(obj->flow_val,obj->symbol_type);
510                 MainLog(NVLog::LOG_DEBUG," after CalcSymbolWidth ,current:%d,symbol_type:%s",obj->flow_val,obj->symbol_type.c_str());
511             }else{
512                 CalcSymbolWidthByPercent(obj->using_rate,obj->symbol_type);
513                 MainLog(NVLog::LOG_DEBUG," after CalcSymbolWidthByPercent ,percent:%f,symbol_type:%s",obj->using_rate,obj->symbol_type.c_str());
514             }            
515         }else{
516             obj->text = TEXT_MRTG_PREPARE;
517             obj->symbol_type = "Connection:Generic";
518         }        
519         RepresentObjectBehavior(obj);
520     }
521     _sample_lock.Unlock();
522 }
523 
524 void FlowVis::MrtgSampling(){
525     while(1){
526         ShowLink();
527         for(int n=0;n<     _sconf.showlink_interval ;n++){
528             if( n==30){
529                 ReloadConfig();                
530             }
531             SLEEP_SEC(1);
532             
533             OVwMapInfo *map=OVwGetMapInfo();
534             //MainLog(NVLog::LOG_DEBUG,"to OVwGetMapInfo()!");
535             if!map){        
536                 MainLog(NVLog::LOG_DEBUG,"OVwGetMapInfo failed,fvshow will exit!");
537                 if( OVwError() == OVw_CONNECTION_LOST){
538                     exit(1);
539                 }
540             }else{
541                 OVwFreeMapInfo(map);
542             }
543             
544         }    
545         LoadFlowVisObjectList();    // -- n 时间之后重新加载链路信息
546     }
547     //MainLog(NVLog::LOG_MESSAGE,"ThreadMrtgSample exit");
548 }
549 
550 //-- save object list to interface.list
551 // objectid#ip#index#subnet
552 bool    FlowVis::SaveObjectList2File(){
553     char buff[1024];
554     FILE * fp;
555     fvObject_List::iterator itr;
556     fvObject * obj;
557     MainLog(FVLOG::LOG_MESSAGE,"对象将被记录interface");
558     return true;
559     fp = fopen(FILE_INTERFACE,"w");
560 
561     _obj_lock.Lock();
562     for( itr = _obj_list.begin();itr!=_obj_list.end();itr++){    
563         obj = *itr;
564         sprintf(buff,"%u#%s#%d#%s\n",obj->objid,obj->ip.c_str(),obj->index,obj->subnet.c_str());
565         fputs(buff,fp);
566         MainLog(FVLOG::LOG_MESSAGE,"对象已被记录到interface.list: %s",buff);
567     }
568     _obj_lock.Unlock();
569     fclose(fp);
570     return true;
571 }
572 
573 bool FlowVis::MrtgPrepare(fvObject * obj){
574         //- to mrtg processs        
575         ShowUserLogWindow();    
576         MainUserLog(FVLOG::LOG_DEBUG,"链路[%s]正在设置",Util_GetOVwSelectionName(obj->objid).c_str());
577         if(SaveTask("",obj)){            
578             obj->text = TEXT_MRTG_PREPARE;    
579             MainLog(FVLOG::LOG_DEBUG,"to representobjectBehavior() after savetask");
580             RepresentObjectBehavior(obj);
581             obj->status = fvObject::CONFIRM;    //switch status
582             MainLog(FVLOG::LOG_DEBUG,"启动MRTG采集成功 ip:%s,index:%d",obj->ip.c_str(),obj->index);
583             MainUserLog(FVLOG::LOG_DEBUG,"链路[%s]设置完毕",Util_GetOVwSelectionName(obj->objid).c_str());
584         }else{
585             MainLog(FVLOG::LOG_ERROR,"启动MRTG采集失败 ip:%s,index:%d",obj->ip.c_str(),obj->index);
586             MainUserLog(FVLOG::LOG_ERROR,"链路[%s]设置失败,"
587                 "原因可能是链路所在的设备Community不正确或设备无法访问"
588                 ",及链路的属性不符合设置条件",Util_GetOVwSelectionName(obj->objid).c_str());            
589             delete obj;
590             return false;
591         }//-- end  if
592         _obj_lock.Lock();
593         _obj_list.push_back(obj);        // -- sucess task executed will be pushed into queue
594         _obj_lock.Unlock();
595         return true;
596     //MainLog(NVLog::LOG_MESSAGE,"Thread Ifspeed exit");
597 }
598 
599 
600 
601 bool    FlowVis::CheckEnvironment(){
602     // 检测 if,mc,mrtg,flowvis.t,flowvis.conf
603     FILE * fp;
604     if( (fp=fopen(CONFILE,"r")) == NULL ){
605         MainLog(NVLog::LOG_ERROR,"flowvis.conf missed");
606         return false;
607     }
608     fclose(fp);
609     if( NULL == (fp = fopen(MRTG_FILE_CFG_TEMPLATE,"r"))){
610         MainLog(NVLog::LOG_ERROR,"flowvis.t missed");
611         return false;
612     }
613     fclose(fp);
614     Util_MkDir(DIR_INTERFACE);
615     Util_MkDir(MRTG_DIR_WORK);
616     
617     return true;
618 }
619 
620 
621 void    FlowVis::SetMRTGInfo(){
622     MRTG.cfgmake =    MRTG_FILE_CFGMAKER ;
623     MRTG.cfgT =        MRTG_FILE_CFG_TEMPLATE;
624     MRTG.mrtg =        MRTG_FILE_MAINAPP;
625     MRTG.perl =        PERL_APP;
626     MRTG.workdir =    MRTG_DIR_WORK;
627     MRTG.java = JAVA_APP;
628 }
629 
630 
631 
632 
633 bool FlowVis::CalcSymbolWidth(unsigned int v,std::string &connection){
634     double sensitive;
635     long tempUint;
636     char buff[128];
637     
638     sensitive = _sconf.rtParam.link_sensitive;
639     
640 #ifdef _HPUX
641     tempUint=(long)((logf(v)/logf(sensitive))*2.0-3);    
642 #else
643     tempUint=(long)((log(v)/log(sensitive))*2.0-3);
644 #endif
645     if(tempUint==0||tempUint<0){
646         connection = "SCarrier:S1Carrier";
647     }else if(tempUint>40){
648         connection = "SCarrier:S40Carrier";    
649     }else{
650         sprintf(buff,"SCarrier:S%dCarrier",tempUint);
651         connection = buff;    
652     }
653     MainLog(NVLog::LOG_DEBUG,"CalcSymbolWidth() 流量:%d,灵敏度:%f,计算结果:%d",v,sensitive,tempUint);
654     return true;
655 }
656 
657 
658 bool FlowVis::CalcSymbolWidthByPercent(float percent,std::string & connection){
659     unsigned int ret;
660     ret = (unsigned int)(percent*0.4);
661     ret = ret ==0 ? 1 : ret;
662     ret = ret >40? 40 :ret;
663     char buff[128];
664     sprintf(buff,"SCarrier:S%dCarrier",ret);
665     connection = buff;        
666     MainLog(NVLog::LOG_DEBUG,"CalcSymbolWidth() 流量percent:%f,计算结果:%d",percent,ret);
667     return true;
668 }
669 
670 void  FlowVis::GetCommunity(const char *IP,FVSTRING &Community)
671 {
672 #ifdef FLOWVIS
673     //根据IP地址取出Community    
674     OVsnmpConfDest *Dest;
675     OVsnmpConfOpen(SNMP_CONF_OPEN_RDONLY);
676     Dest=OVsnmpConfResolveDest(IP,SNMP_CONF_FORCE_RESOLVE);
677     if(Dest){        
678         Community = Dest->confEntry->community;
679         OVsnmpConfFreeDest( Dest);
680     }
681 #endif
682 }
683 
684 
685 

 1 
 2 
 3 
 4 #include <string.h>
 5 #include <stdlib.h>
 6 #include <sys/types.h>
 7 #include <OV/ov_types.h>
 8 #include <fcntl.h>
 9 #include <stdio.h>
10 #include <signal.h>
11 #include <time.h>
12 #include <errno.h>
13 
14 
15 
16 #ifdef _UNIX
17     #include <unistd.h>
18 #endif
19 
20 #ifdef WIN32
21     #include <winsock.h>
22     #pragma comment(lib,"ws2_32.lib")
23     typedef unsigned short mode_t;
24 #endif
25 
26 #include <OV/OVsPMD.h>
27 #include  <OVPath.h>
28 
29 
30 int ovspmdSocket = -1;    
31 fd_set rdmask;          /* read mask for select */
32 OVsCodeType code;       /* response code for OVsResponse */
33 OVsPMDCommand ovspmdCommand;  
34 
35 bool spmd_init(){
36     if (OVsInit(&ovspmdSocket) < 0){        
37         return false;
38     }
39     code = OVS_RSP_SUCCESS;
40     if (OVsInitComplete(code, "Initialization complete!"< 0){
41         return false;
42     }    
43     return true;
44 }
45 
46 
47 void spmd_process(){
48     int selectRC;
49     for (;;){
50         FD_ZERO(&rdmask);
51         FD_SET(ovspmdSocket, &rdmask);
52         selectRC = select(ovspmdSocket + 1, (fd_set *)&rdmask,0,0,0);        
53         if (selectRC <= 0 ){
54             break;
55         }
56         if (FD_ISSET(ovspmdSocket, &rdmask)){
57             if (OVsReceive(&ovspmdCommand) < 0){
58                 // 致命错误
59                 break;    
60             }
61             switch (ovspmdCommand.code){
62                 case OVS_CMD_EXIT:
63                     goto __exit;
64                 case OVS_CMD_NOOP:
65                 case OVS_CMD_PAUSE:
66                 case OVS_CMD_RESUME:
67                     // send NACK back to ovspmd
68                     //code = OVS_RSP_RESUME_NACK;
69                     if (OVsResponse(code, "ignore message"< 0){
70                         break;
71                     }
72                     break;
73                 default:                        
74                     break;                
75             }
76         }
77     }
78 __exit:
79     OVsDone("flowvis loader exit");
80 //    rplog->Print(1,"PMD Command Exit!");
81 }
82 
83 
84 
85 
86 
posted on 2008-07-04 01:50 放屁阿狗 阅读(732) 评论(0)  编辑 收藏 引用 所属分类: hp openview/snmpOpenSource开源工程

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理