青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

socketref,再見!高德

https://github.com/adoggie

  C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  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,"檢測系統(tǒng)運行環(huán)境條件失敗");
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         //--創(chuàng)建進程號,并寫入進程文件
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,"創(chuàng)建Field :%s 失敗!",OVW_FIELD_ISFLOWVIS_SET);
224         }
225     }else{
226         MainLog(NVLog::LOG_ERROR,"創(chuàng)建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,"加載任務(wù)對象: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啟動時,將設(shè)置過的對象從文件加載上來
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,"準備恢復(fù)符號初始狀態(tài)!");    
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,"已經(jīng)恢復(fù)符號初始狀態(tài)! 系統(tǒng)退出");
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數(shù)據(jù)失敗,文件打開失敗%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數(shù)據(jù)失敗,數(shù)據(jù)可能未采集!");
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數(shù)據(jù)成功!");
459     obj->flow_val =        in + out;
460     obj->using_rate = inr+outr;
461     MainLog(NVLog::LOG_DEBUG,"讀取MRTG數(shù)據(jù)成功 obj->flow_val:%d,obj->using_rate:%f",obj->flow_val,obj->using_rate);
462     return true;
463 }
464 
465 /*
466     MRTG采集數(shù)據(jù)的顯示
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,"監(jiān)測到對象被取消設(shè)置,停止顯示對象信息");
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,"讀取采樣數(shù)據(jù):%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]正在設(shè)置",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]設(shè)置完畢",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]設(shè)置失敗,"
587                 "原因可能是鏈路所在的設(shè)備Community不正確或設(shè)備無法訪問"
588                 ",及鏈路的屬性不符合設(shè)置條件",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,計算結(jié)果:%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,計算結(jié)果:%d",percent,ret);
667     return true;
668 }
669 
670 void  FlowVis::GetCommunity(const char *IP,FVSTRING &Community)
671 {
672 #ifdef FLOWVIS
673     //根據(jù)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 放屁阿狗 閱讀(778) 評論(0)  編輯 收藏 引用 所屬分類: hp openview/snmpOpenSource開源工程

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品久久网站| 久久se精品一区二区| 久久综合久久久久88| 亚洲视频导航| 欧美h视频在线| 国内免费精品永久在线视频| 亚洲免费在线精品一区| 亚洲国产欧美一区| 久久久999国产| 国产精品色一区二区三区| 夜夜嗨一区二区| 欧美激情在线免费观看| 久久精品视频va| 国产日产精品一区二区三区四区的观看方式 | 亚洲大胆av| 久久久久综合| 欧美一区二区三区的| 国产精品乱人伦一区二区| 一区二区三区免费观看| 亚洲黄色尤物视频| 免费观看一级特黄欧美大片| 精品成人乱色一区二区| 久久久综合网| 欧美在线视频免费播放| 国产视频一区欧美| 久久国产66| 西西人体一区二区| 国产精品一区二区久久国产| 亚洲一区二区网站| 一个色综合导航| 欧美三区在线视频| 亚洲午夜羞羞片| 日韩天堂在线观看| 欧美日韩亚洲三区| 亚洲天堂av电影| 一本色道久久88亚洲综合88| 欧美日韩一区二区三区在线视频| 夜久久久久久| 日韩一级大片| 国产精品二区在线| 欧美亚洲尤物久久| 午夜精品一区二区三区四区| 国产日韩在线视频| 久久久精品tv| 久久久久久亚洲综合影院红桃| 一色屋精品视频免费看| 牛牛影视久久网| 欧美大片国产精品| 一区二区免费在线观看| 一区二区三区欧美亚洲| 国产精品永久入口久久久| 久久精品视频在线播放| 久久国内精品视频| 亚洲黄色天堂| 亚洲美女尤物影院| 国产精品亚洲成人| 久久综合五月天婷婷伊人| 美女久久一区| 中日韩高清电影网| 亚洲欧美日韩国产综合精品二区| 国产亚洲毛片| 亚洲成色777777女色窝| 欧美日韩国产综合在线| 欧美亚洲在线播放| 久久精品视频网| 亚洲欧洲中文日韩久久av乱码| 亚洲精品女av网站| 欧美视频一二三区| 久久精品国产免费看久久精品| 久久免费精品日本久久中文字幕| 91久久久久久久久久久久久| aa日韩免费精品视频一| 国产一区二区| 亚洲国产毛片完整版| 国产精品青草久久| 久久在线播放| 欧美日韩另类丝袜其他| 久久精品国产2020观看福利| 美国成人毛片| 亚洲欧美日韩国产中文| 久久久精品2019中文字幕神马| 亚洲久色影视| 午夜精品成人在线| 亚洲免费av电影| 午夜激情亚洲| 亚洲美女av在线播放| 午夜激情一区| 亚洲精品三级| 香蕉成人伊视频在线观看| 亚洲精品国产精品国自产在线| 亚洲无玛一区| 亚洲激情视频网站| 亚洲欧美99| 日韩一区二区精品在线观看| 欧美一级片在线播放| 一区二区精品| 久热精品视频在线| 欧美一区二区视频免费观看| 欧美v亚洲v综合ⅴ国产v| 香蕉久久精品日日躁夜夜躁| 免费试看一区| 久久久精品一区| 欧美三日本三级三级在线播放| 麻豆精品在线视频| 国产精品伦一区| 亚洲黄色免费电影| 韩国av一区二区三区四区| 99精品视频网| 亚洲人成网站在线观看播放| 性色av一区二区三区在线观看| 一区二区三区免费网站| 久久一区中文字幕| 久久精品国产精品亚洲精品| 欧美日韩在线播| 亚洲国产精品一区二区www| 国产亚洲一区在线| 亚洲色诱最新| 一本色道久久综合狠狠躁篇的优点 | 亚洲精品国产精品乱码不99按摩| 国内免费精品永久在线视频| 亚洲无毛电影| 一本色道久久88亚洲综合88| 看欧美日韩国产| 久久精品视频在线看| 国产精品白丝jk黑袜喷水| 亚洲第一在线综合网站| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲男人第一网站| 亚洲免费影视第一页| 欧美日韩一区二区视频在线观看| 亚洲第一网站| 在线观看欧美成人| 久久激情综合网| 久久精品在线免费观看| 国产乱码精品一区二区三区忘忧草| 亚洲伦理久久| 夜色激情一区二区| 欧美激情亚洲激情| 亚洲国产裸拍裸体视频在线观看乱了中文 | 久久综合九色综合久99| 国产亚洲一区二区三区在线观看| 亚洲一区二区少妇| 午夜久久福利| 国产精品麻豆欧美日韩ww| 在线视频亚洲一区| 亚洲一区二区精品在线| 欧美视频第二页| 99riav国产精品| 亚洲午夜在线| 国产精品国产a级| 一区二区三区色| 亚洲欧美www| 国产精品一区二区三区免费观看| 亚洲一区二区三区色| 性欧美长视频| 国产视频一区在线观看| 欧美一区二区成人6969| 久久婷婷麻豆| 在线观看成人小视频| 美女国产一区| 亚洲国产一区视频| 99亚洲一区二区| 欧美色图首页| 亚洲一区久久| 久久精品一区二区三区四区| 激情文学一区| 男人的天堂亚洲在线| 亚洲激情六月丁香| 中文av字幕一区| 国产精品久久久久久亚洲毛片| 亚洲影视在线播放| 久久久久国产精品一区三寸 | 亚洲欧美日韩高清| 国产伦精品一区二区三区| 欧美亚洲免费在线| 免费视频一区二区三区在线观看| 91久久久久久久久| 欧美日韩视频在线一区二区观看视频 | 亚洲韩国青草视频| 欧美另类99xxxxx| 99热免费精品| 欧美一区二区视频免费观看| 韩国女主播一区| 欧美福利精品| 亚洲视频在线免费观看| 久久精品日韩| 亚洲人体一区| 国产精品久久7| 久久国产精品一区二区三区四区 | 精品二区久久| 欧美激情一区二区三区在线视频观看 | 欧美日韩免费高清一区色橹橹| 亚洲伊人色欲综合网| 麻豆久久婷婷| 一区二区三区色| 国内不卡一区二区三区| 欧美精品一区二区在线观看 | 亚洲精品乱码久久久久| 国产精品久久激情| 久久青草欧美一区二区三区|