• <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>

            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 放屁阿狗 閱讀(763) 評論(0)  編輯 收藏 引用 所屬分類: hp openview/snmpOpenSource開源工程
            亚洲人成网亚洲欧洲无码久久| 久久91精品久久91综合| 久久成人国产精品| 久久亚洲电影| 精品久久久久久国产潘金莲| 久久久精品久久久久特色影视| 久久一日本道色综合久久| 久久久久亚洲av毛片大| 人妻无码αv中文字幕久久| 久久天天日天天操综合伊人av | 天天综合久久久网| 久久婷婷人人澡人人爽人人爱| 久久99精品久久久久久不卡| 精品久久久久久无码专区不卡| 久久久高清免费视频| 久久久精品国产Sm最大网站| 嫩草影院久久国产精品| 国内精品伊人久久久久AV影院| 中文字幕人妻色偷偷久久| 亚洲欧美久久久久9999 | 9久久9久久精品| 国内精品久久久久影院薰衣草| 欧美粉嫩小泬久久久久久久| 91精品日韩人妻无码久久不卡 | 精品一二三区久久aaa片| 一本久道久久综合狠狠躁AV| 久久久久成人精品无码| 久久久久久久亚洲精品| 国产精品免费久久久久影院 | 久久精品视屏| 国产成人香蕉久久久久| 国产成人精品久久| 精品久久久久久无码中文字幕| 亚洲国产成人久久综合碰碰动漫3d | yellow中文字幕久久网| 国产激情久久久久影院| 国产福利电影一区二区三区久久久久成人精品综合 | 久久精品国产精品亚洲毛片| 久久精品毛片免费观看| 国内精品伊人久久久久AV影院| a高清免费毛片久久|