socketref,再见!高德

https://github.com/adoggie

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

常用链接

留言簿(54)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

solid数据可能听说过的人不多,可是很多unix软件很多都采用此数据库,其儿紧凑,也是不大常见所以也能操持其稳定吧
当初为了操作这个东东也是费了好些时候,主要是要申请到solid的sdk包 libsolidsa.a
有了当然好办了,当然没有的可以联系我

  1 /*
  2     nnm_event_downup detail dump
  3     2005.11.07    zhangbin    created
  4 
  5 */
  6 
  7 #include <iostream>
  8 #include <string>
  9 #include <vector>
 10 #include <stdio.h>
 11 #include <unistd.h>
 12 
 13 #include <c.h>
 14 #include <sscapi.h>
 15 #include <sa.h>
 16 
 17 
 18 SaRetT         dbrc;
 19 SaConnectT    *dbscon;
 20 
 21 
 22 typedef std::string RPSTRING;
 23 extern char *optarg;
 24 extern int optind, optopt;
 25 
 26 
 27 struct TableEventDownUp{
 28     int TRAPSOURCE;
 29     int APPLICATION_ID;
 30     int PID;
 31     int CATEGORY;
 32     int SEVERITY;
 33     int EVENT_TIMESTAMP;
 34     int NUMBER_VARBINDS;
 35     int IFNUMBER;
 36     RPSTRING TRAP_NAME;
 37     RPSTRING FORWARD_ADDRESS;
 38     RPSTRING EVENT_SOURCE;
 39     RPSTRING EVENT_TIME;
 40     RPSTRING EVENT_UUID;
 41     RPSTRING NODENAME;
 42     RPSTRING MESSAGE;
 43     RPSTRING EVENT_OID;
 44     RPSTRING OV_OBJECTID;
 45     RPSTRING PROTOCOL;
 46     RPSTRING EVENT_TYPE;
 47     RPSTRING IP_ADDRESS;
 48     //char * fs[18];
 49     
 50 };
 51 
 52 typedef struct _sysconf{
 53     RPSTRING        solid_host;
 54     unsigned short  solid_port;
 55     RPSTRING        solid_user;
 56     RPSTRING        solid_passwd;
 57     RPSTRING        dump_file;
 58     RPSTRING        pattern;    
 59     FILE         *     file;
 60     std::vector<RPSTRING>    fields;        
 61     _sysconf(){
 62         solid_host    =    "127.0.0.1";
 63         solid_port  =    2690;
 64         solid_user    =    "ovdb";
 65         solid_passwd =    "ovdb";
 66         dump_file    = "./event.dump";
 67         pattern     ="";
 68         
 69         
 70     }
 71 }SysConf; 
 72  
 73 void usage(){
 74     char * msg="usage:"
 75         "\n-h  solid db host"
 76         "\n-p  solid db port     "
 77         "\n-U  solid user name    "
 78         "\n-P  solid passwd    "
 79         "\n-f  dump file        "
 80         "\n-l  like pattern    "
 81         "\n";
 82     printf("%s",msg);    
 83 }
 84 
 85 
 86  
 87 
 88 void INT_STRING(SysConf * conf,const char *field,RPSTRING &str,int intv){    
 89     char buff[32];
 90     if( std::find(conf->fields.begin(),conf->fields.end(),RPSTRING(field)+"\n")!=conf->fields.end()){
 91         sprintf(buff,"\t%u",intv);
 92         str+=buff;
 93     }
 94 }
 95     
 96 void STRING_STRING(SysConf * conf,const char* field,RPSTRING &str,RPSTRING str2){
 97     if( std::find(conf->fields.begin(),conf->fields.end(),RPSTRING(field)+"\n")!=conf->fields.end()){
 98         str+="\t"+str2;
 99     }
100 }
101         
102 void  write_file(SysConf * conf,TableEventDownUp row){
103     RPSTRING str = " ";
104 
105     INT_STRING(conf,"TRAPSOURCE",str,row.TRAPSOURCE);
106     INT_STRING(conf,"APPLICATION_ID",str,row.APPLICATION_ID);
107     INT_STRING(conf,"PID",str,row.PID);
108     INT_STRING(conf,"CATEGORY",str,row.CATEGORY);
109     INT_STRING(conf,"SEVERITY",str,row.SEVERITY);
110     INT_STRING(conf,"EVENT_TIMESTAMP",str,row.EVENT_TIMESTAMP);
111     INT_STRING(conf,"NUMBER_VARBINDS",str,row.NUMBER_VARBINDS);
112     INT_STRING(conf,"IFNUMBER",str,row.IFNUMBER);
113     STRING_STRING(conf,"TRAP_NAME",str,row.TRAP_NAME);
114     str+="\t";
115     STRING_STRING(conf,"FORWARD_ADDRESS",str,row.FORWARD_ADDRESS);
116     STRING_STRING(conf,"EVENT_SOURCE",str,row.EVENT_SOURCE);
117     STRING_STRING(conf,"EVENT_TIME",str,row.EVENT_TIME);
118     STRING_STRING(conf,"EVENT_UUID",str,row.EVENT_UUID);
119     STRING_STRING(conf,"NODENAME",str,row.NODENAME);
120     STRING_STRING(conf,"MESSAGE",str,row.MESSAGE);
121     STRING_STRING(conf,"EVENT_OID",str,row.EVENT_OID);
122     STRING_STRING(conf,"OV_OBJECTID",str,row.OV_OBJECTID);
123     STRING_STRING(conf,"PROTOCOL",str,row.PROTOCOL);
124     STRING_STRING(conf,"EVENT_TYPE",str,row.EVENT_TYPE);
125     STRING_STRING(conf,"IP_ADDRESS",str,row.IP_ADDRESS);
126     //-- rid of "LR"
127     std::replace(str.begin(),str.end(),'\n',' ');
128     str+="\n";
129     //printf("\nrow==>%s",str.c_str());
130     //return;
131     fputs(str.c_str(),conf->file);    
132 }   
133     
134     
135 void dump(SysConf *conf){
136     TableEventDownUp    reload;
137     SaRetT            rc;
138     SaCursorT    *    scur;
139     char *    EVENT_UUID;
140     int        EVENT_TIMESTAMP;
141     int        CATEGORY;
142     char *    NODENAME;
143     int        APPLICATION_ID;
144     char *    MESSAGE;
145     int        SEVERITY;
146     char *    EVENT_OID;
147     char *    OV_OBJECTID;
148     char *    PROTOCOL;
149     char *    EVENT_TYPE;
150     char *    IP_ADDRESS;
151     int        TRAPSOURCE;
152     char *    TRAP_NAME;
153     int        PID;
154     char *    FORWARD_ADDRESS;
155     char *    EVENT_SOURCE;
156     char *    EVENT_TIME;
157     int        NUMBER_VARBINDS;
158     int        IFNUMBER;
159 
160         EVENT_TIME = (char*)conf->pattern.c_str();
161         scur = SaCursorCreate(dbscon,"NNM_EVENT_DOWNUP");
162         rc = SaCursorColStr(scur,"EVENT_UUID",&EVENT_UUID);
163         rc = SaCursorColInt(scur,"EVENT_TIMESTAMP",&EVENT_TIMESTAMP);
164         rc = SaCursorColInt(scur,"CATEGORY",&CATEGORY);
165         rc = SaCursorColStr(scur,"NODENAME",&NODENAME);
166         rc = SaCursorColInt(scur,"APPLICATION_ID",&APPLICATION_ID);
167         rc = SaCursorColStr(scur,"MESSAGE",&MESSAGE);
168         rc = SaCursorColInt(scur,"SEVERITY",&SEVERITY);
169         rc = SaCursorColStr(scur,"EVENT_OID",&EVENT_OID);
170         rc = SaCursorColStr(scur,"OV_OBJECTID",&OV_OBJECTID);
171         rc = SaCursorColStr(scur,"PROTOCOL",&PROTOCOL);
172         rc = SaCursorColStr(scur,"EVENT_TYPE",&EVENT_TYPE);
173         rc = SaCursorColStr(scur,"IP_ADDRESS",&IP_ADDRESS);
174         rc = SaCursorColInt(scur,"TRAPSOURCE",&TRAPSOURCE);    
175         rc = SaCursorColStr(scur,"TRAP_NAME",&TRAP_NAME);
176         rc = SaCursorColInt(scur,"PID",&PID);    
177         rc = SaCursorColStr(scur,"FORWARD_ADDRESS",&FORWARD_ADDRESS);
178         rc = SaCursorColStr(scur,"EVENT_SOURCE",&EVENT_SOURCE);
179         rc = SaCursorColStr(scur,"EVENT_TIME",&EVENT_TIME);        
180         rc = SaCursorColInt(scur,"NUMBER_VARBINDS",&NUMBER_VARBINDS);    
181         rc = SaCursorColInt(scur,"IFNUMBER",&IFNUMBER);    
182         //-- bind variables from F1..F18
183         
184 
185         rc = SaCursorOpen(scur);        
186         rc = SaCursorLike(scur,"EVENT_TIME",conf->pattern.size());        
187         rc = SaCursorDescending(scur,"EVENT_TIMESTAMP");
188         rc = SaCursorSearch(scur);
189         while( SaCursorNext(scur)==SA_RC_SUCC){
190             reload.TRAPSOURCE        =TRAPSOURCE  ;
191             reload.APPLICATION_ID  =APPLICATION_ID ;
192             reload.PID             =PID            ;
193             reload.CATEGORY        =CATEGORY       ;
194             reload.SEVERITY        =SEVERITY       ;
195             reload.EVENT_TIMESTAMP =EVENT_TIMESTAMP;
196             reload.NUMBER_VARBINDS =NUMBER_VARBINDS;
197             reload.IFNUMBER        =IFNUMBER       ;
198             reload.TRAP_NAME       =TRAP_NAME      ;
199             reload.FORWARD_ADDRESS =FORWARD_ADDRESS;
200             reload.EVENT_SOURCE    =EVENT_SOURCE   ;
201             reload.EVENT_TIME      =EVENT_TIME     ;
202             reload.EVENT_UUID      =EVENT_UUID     ;
203             reload.NODENAME        =NODENAME       ;
204             reload.MESSAGE         =MESSAGE        ;
205             reload.EVENT_OID       =EVENT_OID      ;
206             reload.OV_OBJECTID     =OV_OBJECTID    ;
207             reload.PROTOCOL        =PROTOCOL       ;
208             reload.EVENT_TYPE      =EVENT_TYPE     ;
209             reload.IP_ADDRESS      =IP_ADDRESS     ;
210             write_file(conf,reload);
211         }
212         SaCursorFree(scur);
213 }
214 
215 void filter_field(SysConf *conf){
216     FILE * file;
217     file = fopen("./dump.conf","r");
218     char  line[1024];
219     if!file){
220         return ;
221     }
222     while( fgets(line,sizeof(line),file) ){
223         conf->fields.push_back(RPSTRING(line));
224     }
225     
226     fclose(file);
227 }
228  
229 int main(int argc, char* argv[]){
230     char c;
231     SysConf conf;
232     RPSTRING    stime,etime;
233     SaRetT         dbrc;
234     SaRetT            rc;
235     
236     SaCursorT    *    scur;
237     char         buff[1024];
238     filter_field(&conf);
239     
240     while ((c = getopt(argc, argv, ":h:p:U:P:f:l:")) != -1){
241            
242            switch(c) {
243            case 'h':
244             conf.solid_host = optarg;                
245                break;
246        case 'p':
247                conf.solid_port = (unsigned short) atoi(optarg);
248                break;
249         case 'U':
250             conf.solid_user = optarg;
251             break;
252         case 'P':
253             conf.solid_passwd = optarg;
254             break;
255         case 'f':
256             conf.dump_file = optarg;
257             break;
258         case 'l':
259             conf.pattern = optarg;
260             //printf("\n pattern:%s",optarg);        
261             break;
262         default:
263             usage();
264             exit(1);
265         }
266     }
267     if(  conf.pattern == ""){        
268         usage();
269         exit(1);
270     }    
271 
272     
273     sprintf(buff,"tcp %s %d",conf.solid_host.c_str(),conf.solid_port);    
274     dbscon = SaConnect(buff,(char*)conf.solid_user.c_str(),(char*)conf.solid_passwd.c_str());
275     if (!dbscon) {
276         printf("\nconnect solid DB failed!");
277         exit(1);
278     }
279     conf.file = fopen(conf.dump_file.c_str(),"w");    
280     if( conf.file == NULL){
281         printf("\n cann't open file:%s\n",conf.dump_file.c_str());
282         exit(1);
283     }
284     dump(&conf);
285     fclose(conf.file);
286     printf("that's ok,to see dump file :%s\n",conf.dump_file.c_str());
287     
288     return 0;
289 }
290 

 1 
 2 #include "glodef.h"
 3 
 4 #include <stdio.h>
 5 #include <c.h>
 6 #include <sscapi.h>
 7 #include <sa.h>
 8 
 9 
10 SaRetT         dbrc;
11 SaConnectT    *dbscon;
12 
13 int connect_solid(SysConf * conf){    
14     char buff[128];
15     SaRetT            rc;
16 //    SaCursorT    *    scur;
17     
18     sprintf(buff,"tcp %s %d",conf->solid_host.c_str(),
19                     conf->solid_port);
20     dbscon = SaConnect(buff,(char*)conf->solid_user.c_str(),
21                     (char*)conf->solid_passwd.c_str());
22     if ( !dbscon) {
23         return false;
24     }
25     //-- check table
26     char * sql ="CREATE TABLE nnm_interfaces_extra\
27              (topo_id                   varchar NOT NULL PRIMARY KEY,\
28              ifspeed                    integer ,\
29              ifiextra1                                    integer ,\
30              ifiextra2                                    integer ,\
31              ifstrextra1                                varchar ,\
32              ifstrextra2                                varchar ,\
33              ifstrextra3                                varchar \
34           )";
35         rc = SaSQLExecDirect(dbscon,sql);        
36         rc = SaTransCommit(dbscon);
37         if( rc != SA_RC_SUCC){
38             rplog->Print(1,"Create Table[NNM_INTERFACES_EXTRA] Failed!");
39             return false;
40         }
41 
42     
43     sql = "CREATE TABLE nnm_event_downup\
44            (event_uuid        varchar   NOT NULL PRIMARY KEY,\
45         event_timestamp   integer   NOT NULL,\
46         category          integer   NOT NULL, \
47         nodename          varchar   NOT NULL,\
48         application_id    integer,\
49         message           varchar,\
50         severity          integer   NOT NULL,\
51         event_oid         varchar   NOT NULL,\
52         ov_objectid       varchar,\
53         protocol          varchar,\
54         event_type        varchar   NOT NULL,\
55         ip_address        varchar,\
56         trapsource        integer,\
57         trap_name         varchar,\
58         pid               integer,\
59         forward_address   varchar,\
60         event_source      varchar,\
61         event_time        varchar,\
62         number_varbinds   integer,\
63         ifnumber          integer\
64         )";
65 
66         rc = SaSQLExecDirect(dbscon,sql);        
67         rc = SaTransCommit(dbscon);
68         if( rc != SA_RC_SUCC){
69             rplog->Print(1,"Create Table[NNM_EVENT_DOWNUP] Failed!");
70             return false;
71         }
72     return true;
73 }
74 
75 void free_solid(){
76     
77 }
78 
  1 
  2 #ifdef WIN32
  3 #pragma  warning(disable: 4786)
  4 #endif
  5 
  6 #include "event.h"
  7 #include "snmpprint.h"
  8 #include "util.h"
  9 
 10 
 11 #include <stdio.h>
 12 #ifdef WIN32
 13 #include <ctype.h>
 14 #endif
 15 
 16 #include <OV/ovw.h>
 17 
 18 #include <stdio.h>
 19 #include <c.h>
 20 #include <sscapi.h>
 21 #include <sa.h>
 22 
 23 
 24 
 25 extern SaConnectT    *dbscon;
 26 OVsnmpVarBind* GetVarBindByIndex(int index,OVsnmpPdu *pdu);
 27 
 28 void GrabEvent::pdu_process(int type, OVsnmpSession *session, OVsnmpPdu *pdu){
 29     EventContext * ec;;
 30 //    char buff[1024*4];
 31 //    OVsnmpVarBind *var;
 32     if!pdu ){
 33         return ;
 34     }
 35     switch(pdu->specific_type ){
 36         case EVENT_NODE_DOWN_ID:
 37         case EVENT_NODE_UP_ID:
 38         case EVENT_IF_DOWN_ID:
 39         case EVENT_IF_UP_ID:
 40             break;
 41         default:
 42             return;
 43     }
 44     rplog->Print(1,"recive Event from NNM-ECS! %d",pdu->specific_type);
 45     /*
 46     var = pdu->variables;
 47     while(var){
 48         sprint_by_type(buff,sizeof(buff),var,TYPE_VAL);
 49         var = var->next_variable;
 50         rplog->Print(1,"VarBind Detail:\t%s",buff);
 51     }*/
 52     
 53 
 54     ec = new EventContext;
 55     ec->event = pdu->specific_type;
 56     ec->pdu = OVsnmpCopyPdu(pdu);    
 57     ec->check_time = _conf->up_status_check_interval + time(0);
 58     
 59     ec->rid = DoUpdate(ec);    
 60     if( pdu->specific_type == EVENT_NODE_DOWN_ID || 
 61         pdu->specific_type == EVENT_IF_DOWN_ID){        
 62         _evctx_lock.Lock();        
 63         
 64 #ifdef _DEBUG
 65 /*
 66         for(int n=0;n<50;n++){        
 67             printf("\7");
 68             Sleep(1);
 69         }*/
 70 #endif
 71         rplog->Print(1,"%s Occur,Be Push Into Queue To Be Processed!",
 72             pdu->specific_type==EVENT_NODE_DOWN_ID?"EVENT_NODE_DOWN_ID":"EVENT_IF_DOWN_ID");
 73         _evctx_list.push_back(ec);
 74         DumpDownEvent2File();
 75         _evctx_lock.Unlock();
 76     }else{
 77         delete ec;
 78     }
 79 }
 80 
 81 //--记录唯一的数据库编号,转存到本地文件
 82 void    GrabEvent::DumpDownEvent2File(){
 83     FILE * fp;
 84     EventContext_List::iterator itr;
 85     EventContext * ec;    
 86 
 87     fp = fopen(FILE_RELOAD,"w");
 88     if!fp )    return;
 89     rplog->Print(1,"DumpList size:%d",_evctx_list.size());
 90     for( itr = _evctx_list.begin() ;itr!= _evctx_list.end();itr++){
 91         ec = *itr;
 92         //rplog->Print(1,"Dump Record ID:%s",ec->rid.c_str());
 93         fwrite(ec->rid.c_str(),ec->rid.size(),1,fp);
 94         fwrite("\n",strlen("\n"),1,fp);
 95     }
 96     fclose(fp);
 97 }
 98 
 99 //--记录唯一的数据库编号,转存到本地文件
100 void    GrabEvent::DumpFile2DownEvent(){
101     FILE * fp;
102     RPSTRING str;
103     //EventContext * ec;    
104     char line[1024];
105     char * chars;
106 
107     fp = fopen(FILE_RELOAD,"r");
108     if!fp )    return;
109     
110     while( chars = fgets(line,sizeof(line),fp) ){
111         str = ValidString(chars);
112         LoadDBRecord(str);
113         //ec = new EventContext;
114         //ec->rid = str;
115         //_evctx_list.push_back(ec);
116     }
117     fclose(fp);
118 }
119 
120 
121 void GrabEvent::Run(void *){
122     struct fd_set     read_fds;
123     int             count, num_snmp_fds;
124     struct timeval     timeout;
125     rplog->Print(1,"GrabEvent Thread Enter!");
126     while (THREAD_CONTINUE_T) {
127         FD_ZERO(&read_fds);
128         num_snmp_fds = OVsnmpGetRetryInfo( &read_fds, &timeout );
129         if ( num_snmp_fds == 0 ) {
130             SLEEP_MSEC(200);
131             //fprintf(stderr, "testapp:  No SNMP Sessions open.  Goodbye.\n");
132             continue;
133         }
134         //rplog->Print(1,"Block to Select");
135         count = select(num_snmp_fds, &read_fds, NULL, NULL, NULL);
136         //rplog->Print(1,"Something Arrived,Select it");
137         if (count < 0) {
138             perror("select");
139             //OVsnmpClose(session);
140             break;
141         } else {
142             OVsnmpRead(&read_fds);
143         }
144     }
145     rplog->Print(1,"GrabEvent Thread will exit");
146     _update_thr->Terminate();
147     _update_thr->Wait();
148     rplog->Print(1,"GrabEvent has been exited!");
149 }
150 
151 int GrabEvent::Connect(SysConf * conf){    
152     const char *    filter = "{ALL} .*";
153     _conf = conf;
154     //-- parse trapd.conf
155     _ep_list.insert(EventDetail_List::value_type(EVENT_NODE_DOWN_ID,&_tp_node_down));
156     _ep_list.insert(EventDetail_List::value_type(EVENT_NODE_UP_ID,&_tp_node_up));
157     _ep_list.insert(EventDetail_List::value_type(EVENT_IF_DOWN_ID,&_tp_if_down));
158     _ep_list.insert(EventDetail_List::value_type(EVENT_IF_UP_ID,&_tp_if_up));
159     LoadEventDetail(EVENT_NODE_DOWN_ID,&_tp_node_down);
160     LoadEventDetail(EVENT_NODE_UP_ID,&_tp_node_up);
161     LoadEventDetail(EVENT_IF_DOWN_ID,&_tp_if_down);
162     LoadEventDetail(EVENT_IF_UP_ID,&_tp_if_up);
163     //--加载目前未up的信息
164     //MessageBox(0,"begin to dumpfile2downevent",0,MB_OK);
165     DumpFile2DownEvent();
166     //MessageBox(0,"after dumpfile2downevent",0,MB_OK);
167     
168     
169     //--
170     session = OVsnmpEventOpen(conf->nnm_host.c_str(),
171                     "report-patch "
172                     GrabThread::pdu_process_entry,
173                     (void *this,
174                     filter );
175     if (session == NULL) {        
176         return false;
177     }
178     _update_thr = new UpdateThread(this);
179     _update_thr->Create();
180     NVThread::Create();
181     return true;
182 }
183 
184 //-- add on 05.08.10 13:00
185 void GrabEvent::LoadDBRecord(RPSTRING & rid){
186     // first start  up
187 //    TableEventDownUp * downup;
188     SaRetT            rc;
189     SaCursorT    *    scur;
190     char *    EVENT_UUID;
191     int        EVENT_TIMESTAMP;
192     int        CATEGORY;
193     char *    NODENAME;
194     int        APPLICATION_ID;
195     char *    MESSAGE;
196     int        SEVERITY;
197     char *    EVENT_OID;
198     char *    OV_OBJECTID;
199     char *    PROTOCOL;
200     char *    EVENT_TYPE;
201     char *    IP_ADDRESS;
202     int        TRAPSOURCE;
203     char *    TRAP_NAME;
204     int        PID;
205     char *    FORWARD_ADDRESS;
206     char *    EVENT_SOURCE;
207     char *    EVENT_TIME;
208     int        NUMBER_VARBINDS;
209     int        IFNUMBER;
210 
211     char * fs[18];
212 //    char buff[128];
213     memset(fs,0,sizeof(char*)*18);
214     //--load downEvent from dump-file
215     EventContext * ec;
216     //EventContext_List::iterator itr;
217     //for( itr = _evctx_list.begin() ;itr!= _evctx_list.end();itr++){
218         //ec = *itr;
219         
220         EVENT_UUID = (char*)rid.c_str();
221         
222         scur = SaCursorCreate(dbscon,"NNM_EVENT_DOWNUP");
223         rc = SaCursorColStr(scur,"EVENT_UUID",&EVENT_UUID);
224         rc = SaCursorColInt(scur,"EVENT_TIMESTAMP",&EVENT_TIMESTAMP);
225         rc = SaCursorColInt(scur,"CATEGORY",&CATEGORY);
226         rc = SaCursorColStr(scur,"NODENAME",&NODENAME);
227         rc = SaCursorColInt(scur,"APPLICATION_ID",&APPLICATION_ID);
228         rc = SaCursorColStr(scur,"MESSAGE",&MESSAGE);
229         rc = SaCursorColInt(scur,"SEVERITY",&SEVERITY);
230         rc = SaCursorColStr(scur,"EVENT_OID",&EVENT_OID);
231         rc = SaCursorColStr(scur,"OV_OBJECTID",&OV_OBJECTID);
232         rc = SaCursorColStr(scur,"PROTOCOL",&PROTOCOL);
233         rc = SaCursorColStr(scur,"EVENT_TYPE",&EVENT_TYPE);
234         rc = SaCursorColStr(scur,"IP_ADDRESS",&IP_ADDRESS);
235         rc = SaCursorColInt(scur,"TRAPSOURCE",&TRAPSOURCE);    
236         rc = SaCursorColStr(scur,"TRAP_NAME",&TRAP_NAME);
237         rc = SaCursorColInt(scur,"PID",&PID);    
238         rc = SaCursorColStr(scur,"FORWARD_ADDRESS",&FORWARD_ADDRESS);
239         rc = SaCursorColStr(scur,"EVENT_SOURCE",&EVENT_SOURCE);
240         rc = SaCursorColStr(scur,"EVENT_TIME",&EVENT_TIME);        
241         rc = SaCursorColInt(scur,"NUMBER_VARBINDS",&NUMBER_VARBINDS);    
242         rc = SaCursorColInt(scur,"IFNUMBER",&IFNUMBER);    
243         //-- bind variables from F1..F18
244         /*
245         for( int n =0; n< 18; n++){
246             sprintf(buff,"F%d",n+1);
247             rc = SaCursorColStr(scur,buff,&fs[n]);
248         }*/
249         
250 
251         rc = SaCursorOpen(scur);
252         rc = SaCursorEqual(scur,"EVENT_UUID");        
253         rc = SaCursorSearch(scur);
254         if( SaCursorNext(scur)!=SA_RC_SUCC){
255             SaCursorFree(scur);
256             //continue;
257             return ;
258         }
259     
260         {
261             ec = new EventContext;
262             ec->rid = rid;
263             ec->reload = new TableEventDownUp;
264             ec->reload->TRAPSOURCE        =TRAPSOURCE  ;
265             ec->reload->APPLICATION_ID  =APPLICATION_ID ;
266             ec->reload->PID             =PID            ;
267             ec->reload->CATEGORY        =CATEGORY       ;
268             ec->reload->SEVERITY        =SEVERITY       ;
269             ec->reload->EVENT_TIMESTAMP =EVENT_TIMESTAMP;
270             ec->reload->NUMBER_VARBINDS =NUMBER_VARBINDS;
271             ec->reload->IFNUMBER        =IFNUMBER       ;
272             ec->reload->TRAP_NAME       =TRAP_NAME      ;
273             ec->reload->FORWARD_ADDRESS =FORWARD_ADDRESS;
274             ec->reload->EVENT_SOURCE    =EVENT_SOURCE   ;
275             ec->reload->EVENT_TIME      =EVENT_TIME     ;
276             ec->reload->EVENT_UUID      =EVENT_UUID     ;
277             ec->reload->NODENAME        =NODENAME       ;
278             ec->reload->MESSAGE         =MESSAGE        ;
279             ec->reload->EVENT_OID       =EVENT_OID      ;
280             ec->reload->OV_OBJECTID     =OV_OBJECTID    ;
281             ec->reload->PROTOCOL        =PROTOCOL       ;
282             ec->reload->EVENT_TYPE      =EVENT_TYPE     ;
283             ec->reload->IP_ADDRESS      =IP_ADDRESS     ;
284             //-=- load fields from F1..F18,data copy deeply
285             /*
286             for(int n=0;n<18;n++){
287                 strcpy(ec->reload->fs[n],fs[n]);
288             }*/
289             //-- have read out field's values
290         }
291         SaCursorFree(scur);
292         if( strcmp(EVENT_OID,"1.3.6.1.4.1.11.2.17.1.0.58916865")==0){
293             ec->event = EVENT_NODE_DOWN_ID;    
294         }else  if( strcmp(EVENT_OID,"1.3.6.1.4.1.11.2.17.1.0.58916867")==0 ){
295             ec->event = EVENT_IF_DOWN_ID;
296         }else{
297             delete ec;
298             return ;
299         }
300 
301         ec->pdu = NULL;
302         ec->check_time = _conf->up_status_check_interval + time(0);    
303         _evctx_lock.Lock();
304         _evctx_list.push_back(ec);
305         _evctx_lock.Unlock();
306     //}
307 }
308 
309 GrabEvent::GrabEvent(){
310     _starttime = time(0);
311     _evuuid = 0;
312 }
313 
314 
315 
316 RPSTRING    GrabEvent::DoUpdate(EventContext * ec){
317     SaRetT        rc ;
318     SaCursorT    *scur = NULL;
319     RPSTRING    ret;
320     char * EVENT_UUID;
321     int        EVENT_TIMESTAMP;
322     int        CATEGORY;
323     char *    NODENAME;
324     int        APPLICATION_ID;
325     char *    MESSAGE;
326     int        SEVERITY;
327     char *    EVENT_OID;
328     char *    OV_OBJECTID;
329     char *    PROTOCOL;
330     char *    EVENT_TYPE;
331     char *    IP_ADDRESS;
332     int        TRAPSOURCE;
333     char *    TRAP_NAME;
334     int        PID;
335     char *    FORWARD_ADDRESS;
336     char *    EVENT_SOURCE;
337     char *    EVENT_TIME;
338     int        NUMBER_VARBINDS;
339     int        IFNUMBER;
340     
341     scur = SaCursorCreate(dbscon,"NNM_EVENT_DOWNUP");
342 
343     rc = SaCursorColStr(scur,"EVENT_UUID",&EVENT_UUID);
344     rc = SaCursorColInt(scur,"EVENT_TIMESTAMP",&EVENT_TIMESTAMP);
345     rc = SaCursorColInt(scur,"CATEGORY",&CATEGORY);
346     rc = SaCursorColStr(scur,"NODENAME",&NODENAME);
347     rc = SaCursorColInt(scur,"APPLICATION_ID",&APPLICATION_ID);
348     rc = SaCursorColStr(scur,"MESSAGE",&MESSAGE);
349     rc = SaCursorColInt(scur,"SEVERITY",&SEVERITY);
350     rc = SaCursorColStr(scur,"EVENT_OID",&EVENT_OID);
351     rc = SaCursorColStr(scur,"OV_OBJECTID",&OV_OBJECTID);
352     rc = SaCursorColStr(scur,"PROTOCOL",&PROTOCOL);
353     rc = SaCursorColStr(scur,"EVENT_TYPE",&EVENT_TYPE);
354     rc = SaCursorColStr(scur,"IP_ADDRESS",&IP_ADDRESS);
355     rc = SaCursorColInt(scur,"TRAPSOURCE",&TRAPSOURCE);    
356     rc = SaCursorColStr(scur,"TRAP_NAME",&TRAP_NAME);
357     rc = SaCursorColInt(scur,"PID",&PID);    
358     rc = SaCursorColStr(scur,"FORWARD_ADDRESS",&FORWARD_ADDRESS);
359     rc = SaCursorColStr(scur,"EVENT_SOURCE",&EVENT_SOURCE);
360     rc = SaCursorColStr(scur,"EVENT_TIME",&EVENT_TIME);        
361     rc = SaCursorColInt(scur,"NUMBER_VARBINDS",&NUMBER_VARBINDS);    
362     rc = SaCursorColInt(scur,"IFNUMBER",&IFNUMBER);    
363 
364 
365     rc = SaCursorOpen(scur);
366     if ( rc != SA_RC_SUCC){
367         rplog->Print(1,"ReloadSpeedContext::SaCursorOpen Failed!");
368         return 0;
369     }
370     EVENT_TIMESTAMP = GetEventTimestamp(ec);
371     CATEGORY    = GetCategory(ec);
372     APPLICATION_ID = GetAppID(ec);
373     SEVERITY    = GetSeverity(ec);
374     TRAPSOURCE    = GetTrapSource(ec);
375     PID            = GetPID(ec);
376     NUMBER_VARBINDS    = GetNumVars(ec);
377     IFNUMBER        = GetIfNumber(ec);
378     EVENT_UUID = new char[FIELD_STRING_SIZE];    
379     strcpy(EVENT_UUID,GetEventUUID().c_str());    
380     NODENAME= new char[FIELD_STRING_SIZE];    
381     strcpy(NODENAME ,GetNodeName(ec).c_str());    
382     MESSAGE=new char[FIELD_STRING_SIZE];
383     strcpy(MESSAGE,GetMessage(ec).c_str());
384     EVENT_OID=new char[FIELD_STRING_SIZE];
385     strcpy(EVENT_OID,GetEvent_OID(ec).c_str());
386     OV_OBJECTID=new char[FIELD_STRING_SIZE];
387     strcpy(OV_OBJECTID,GetOVObjectID(ec).c_str());
388     PROTOCOL=new char[FIELD_STRING_SIZE];    
389     strcpy(PROTOCOL,GetProtocal(ec).c_str());
390     EVENT_TYPE=new char[FIELD_STRING_SIZE];    
391     strcpy(EVENT_TYPE,GetEventType(ec).c_str());
392     IP_ADDRESS=new char[FIELD_STRING_SIZE];    
393     strcpy(IP_ADDRESS,GetIpAddress(ec).c_str());
394     TRAP_NAME=new char[FIELD_STRING_SIZE];    
395     strcpy(TRAP_NAME,GetTrapName(ec).c_str());
396     FORWARD_ADDRESS=new char[FIELD_STRING_SIZE];
397     strcpy(FORWARD_ADDRESS,GetForwardAddress(ec).c_str());
398     EVENT_SOURCE=new char[FIELD_STRING_SIZE];    
399     strcpy(EVENT_SOURCE,GetEventSource(ec).c_str());
400     EVENT_TIME=new char[FIELD_STRING_SIZE];    
401     strcpy(EVENT_TIME,GetEventTimeString(ec).c_str());
402     
403     rc = SaCursorInsert(scur);
404     rc = SaTransCommit(dbscon);
405     SaCursorFree(scur);
406 
407     ret = EVENT_UUID;
408 
409     delete[] EVENT_UUID;        
410     delete[] NODENAME;        
411     delete[] MESSAGE;
412     delete[] EVENT_OID;
413     delete[] OV_OBJECTID;
414     delete[] PROTOCOL;    
415     delete[] EVENT_TYPE;    
416     delete[] IP_ADDRESS;    
417     delete[] TRAP_NAME;    
418     delete[] FORWARD_ADDRESS;
419     delete[] EVENT_SOURCE;    
420     delete[] EVENT_TIME;
421     /*
422     //--add on 2005.08.10
423     if( ec->reload == NULL){
424         //--写入pdu所有参数进表 F1..F18        
425         PduVars2DB(ec,ret.c_str());
426     }*/
427 
428     return ret;
429 }
430 
431 int    GrabEvent::PduVars2DB(EventContext* ec,const char * rid){
432     char *fs[18];
433     char buff[128];
434     int n;
435 
436     OVsnmpVarBind * var;
437     memset(fs,0,sizeof(char*)*18);
438 
439 
440     SaRetT            rc;
441     SaCursorT    *    scur;
442     
443     char *    pid;
444     pid = (char*)rid;
445     scur = SaCursorCreate(dbscon,"NNM_EVENT_DOWNUP");
446     rc = SaCursorColStr(scur,"EVENT_UUID",&pid);
447 
448     for( n=0;n<18;n++){
449         sprintf(buff,"F%d",n+1);
450         rc = SaCursorColStr(scur,buff,&fs[n]);        
451     }
452     rc = SaCursorOpen(scur);
453     rc = SaCursorEqual(scur,"EVENT_UUID");        
454     rc = SaCursorSearch(scur);
455     if( SaCursorNext(scur)!=SA_RC_SUCC){
456         SaCursorFree(scur);
457         return false;
458     }
459     for( n=0;n<18;n++){
460         fs[n]= new char[FIELD_STRING_SIZE];    
461         memset(fs[n],0,FIELD_STRING_SIZE);
462     }
463     n=0;
464     var = ec->pdu->variables;
465     while( var ){                
466         sprint_by_type(fs[n],FIELD_STRING_SIZE,var,VAL_ONLY);        
467         n++;
468         var = var->next_variable;
469     }
470     rc = SaCursorUpdate(scur);
471 
472     for( n=0;n<18;n++){
473         delete[] fs[n];
474     }
475     return true;
476 }
477 
478 //--明天做
479 void    GrabEvent::GetCategorySeverity(EventDetail* ed,char *line){
480     if( strstr(line,"LOGONLY")){
481         ed->cat.id = 1;
482     }else if( strstr(line,"Error Alarms")){
483         ed->cat.id = 2;
484     }else if( strstr(line,"Threshold Alarms")){
485         ed->cat.id = 3;
486     }else if( strstr(line,"Status Alarms")){
487         ed->cat.id = 4;
488     }else if( strstr(line,"Configuration Alarms")){
489         ed->cat.id = 5;
490     }else if( strstr(line,"Application Alert Alarms")){
491         ed->cat.id = 6;
492     }
493     //----
494     if( strstr(line,"Normal") ){
495         ed->seve.id = 1;
496     }else if( strstr(line,"Warning") ){
497         ed->seve.id = 2;
498     }else if( strstr(line,"Minor") ){
499         ed->seve.id = 3;
500     }else if( strstr(line,"Major") ){
501         ed->seve.id = 4;
502     }else if( strstr(line,"Critical") ){
503         ed->seve.id = 5;
504     }
505 }
506 
507 void    GrabEvent::LoadEventDetail(int ev,EventDetail * ed){
508     FILE * fp;
509     char line[1024];
510     char buff[1024];
511     char * occur;
512     char *s;//,*e;
513     char *= 0;
514     if( _conf->trapd==""){
515         printf("\n error: read trapd.conf failed!");
516         exit(2);
517     }
518     fp = fopen(_conf->trapd.c_str(),"r");
519     if!fp ){
520         printf("\n error: read trapd.conf fopen failed! %s",_conf->trapd.c_str());
521         exit(2);
522     }
523     while( occur = fgets(line,sizeof(line),fp)){
524         sprintf(buff,"%u",ev);
525         if( p = strstr(line,buff) ){
526             //-- deal with first line,grab category and severity
527             GetCategorySeverity(ed,line);
528             //-- get next line
529             occur = fgets(line,sizeof(line),fp);
530             if!occur){
531                 break;
532             }
533             //-- to parse parameters
534 
535             EventFormatSplitedPart *esp;
536             if( strstr(occur,"FORMAT") ){
537                 occur +=strlen("FORMAT")+1;
538             }
539             for(s =occur;*s!='\0';s++) {
540                 if*s=='$'){
541                     p = s;
542                     continue;
543                 }
544                 if( p && !isdigit(*s)&& (s-p)>1 ){
545                     {
546                         if( p-occur>0){
547                             esp = new EventFormatSplitedPart;
548                             esp->type = EventFormatSplitedPart::PROMPT;
549                             memset(buff,0,p-occur+1);
550                             memcpy(buff,occur,p-occur);
551                             esp->val = buff;
552                             ed->list.push_back(esp);
553                         }
554                     }                    
555                     {                    
556                         memset(buff,0,s-p);
557                         memcpy(buff,p+1,s-p-1);
558                         esp = new EventFormatSplitedPart;
559                         esp->type = EventFormatSplitedPart::PARAMETER;
560                         esp->val = buff;
561                         ed->list.push_back(esp);
562                         
563                         p = 0;
564                         if*=='$'){
565                             s--;
566                         }
567                     }
568                     occur = s;
569                 }//-- end if
570             }//-- end for
571             if( (strlen(line)+line) >occur){
572                 esp = new EventFormatSplitedPart;
573                 esp->type = EventFormatSplitedPart::PROMPT;
574                 esp->val = occur;
575                 ed->list.push_back(esp);                        
576             }
577         }
578     }
579     fclose(fp);
580 }
581 
582 RPSTRING GrabEvent::GetEventUUID(){
583     char buff[512];
584     sprintf(buff,"%x-%x-000d-71da-0f4e-c0a80e890000",_starttime,++_evuuid);
585     return RPSTRING(buff);
586 }
587 
588 int    GrabEvent::GetEventTimestamp(EventContext* ec){
589     int ret;
590 //    OVsnmpVarBind* var;
591 //    char buff[20];
592     ret = 0;
593     /*
594     memset(buff,0,sizeof(buff));
595     var = GetVarBindByIndex(5,ec->pdu);
596     if( var->type == ASN_OCTET_STR){
597         sprintf(buff,(char*)var->val.string,var->val_len);
598         ret = atoi(buff);
599     }*/
600     ret = time(0);
601     return ret;
602 }
603 
604 int    GrabEvent::GetCategory(EventContext* ec){
605     int ret;
606     ret = 0;
607     EventDetail * ed = _ep_list[ec->event];
608     if( ed ) ret = ed->cat.id;
609     return ret;
610 }
611 int    GrabEvent::GetAppID(EventContext* ec){
612     int ret = 0;
613     OVsnmpVarBind* var;    
614     if( ec->reload ){
615         return ec->reload->APPLICATION_ID;
616     }
617     var = GetVarBindByIndex(1,ec->pdu);
618     if( var )
619     ret = *var->val.integer;
620     return ret;
621 }
622 
623 int    GrabEvent::GetSeverity(EventContext* ec){
624     int ret = 0;
625     EventDetail * ed = _ep_list[ec->event];
626     if( ed ) ret = ed->seve.id;
627     return ret;
628 }
629 int    GrabEvent::GetTrapSource(EventContext* ec){
630     int ret=0;
631     return ret;
632 }
633 int    GrabEvent::GetPID(EventContext* ec){
634     int ret=0;
635     return ret;
636 }
637 
638 int    GrabEvent::GetNumVars(EventContext* ec){
639     int ret = 0;
640     OVsnmpVarBind * var;
641     int n;
642     n =0;
643     if( ec->reload){
644         return ec->reload->NUMBER_VARBINDS;
645     }
646     var = ec->pdu->variables;
647     while( var ){
648         n++;
649         var = var->next_variable;
650     }
651     ret = n;
652     return ret;
653 }
654 
655 int    GrabEvent::GetIfNumber(EventContext* ec){
656     OVwFieldId fid ;
657     OVwObjectId oid ;
658     RPSTRING ip;
659     OVsnmpVarBind* var;
660     OVwFieldValue* fv;
661     char buff[128];
662 
663     int ret=0;
664     
665     if( ec->reload){
666         return ec->reload->IFNUMBER;
667     }
668 
669     if( ec->event == EVENT_NODE_DOWN_ID || ec->event==EVENT_NODE_UP_ID){
670         ret = 0;
671     }else if( ec->event == EVENT_IF_DOWN_ID || ec->event == EVENT_IF_UP_ID){                
672         var = GetVarBindByIndex(6,ec->pdu);        
673         if!var ){
674             return false;
675         }
676         if( var->type == ASN_OCTET_STR){        
677             buff[var->val_len] ='\0';
678             memcpy(buff,var->val.string,var->val_len);
679             oid = atoi(buff);            
680         }else if(var->type == ASN_INTEGER){
681             oid = *var->val.integer;
682         }else{
683             return ret;
684         }
685         fid = OVwDbFieldNameToFieldId("SNMP ifIndex");        
686         fv  = OVwDbGetFieldValue(oid,fid);
687         if( fv) {
688             ret = fv->un.int_val;
689         }
690     }
691     return ret;
692 }
693     
694 RPSTRING    GrabEvent::GetNodeName(EventContext* ec){
695     RPSTRING ret="Unknow NodeName";
696     char buf[2048];
697     int buflen = sizeof(buf);    
698     OVsnmpVarBind* var;
699 
700     if( ec->reload){
701         return ec->reload->NODENAME;
702     }
703     var = GetVarBindByIndex(2,ec->pdu);
704     if( var )
705         sprint_by_type(buf, buflen, var, TYPE_VAL);
706     ret = buf;
707     return ret;
708 }
709 
710 RPSTRING    GrabEvent::GetMessage(EventContext* ec){
711     RPSTRING ret="";
712     char buf[2048];
713     OVsnmpVarBind* var;
714     int idx;
715     int n;
716     int buflen = sizeof(buf);    
717     EventDetail * ed = _ep_list[ec->event];
718     if( ec->reload ){
719         return ec->reload->MESSAGE;
720     }
721     
722     for(n=0;n<ed->list.size();n++){
723         if( ed->list.at(n)->type == EventFormatSplitedPart::PROMPT){
724             ret << ed->list.at(n)->val << " ";
725             continue;
726         }
727         idx = atoi(ed->list.at(n)->val.c_str());
728         var = GetVarBindByIndex(idx,ec->pdu);
729         if( var ){
730             sprint_by_type(buf,buflen,var,VAL_ONLY);
731             ret << RPSTRING(" ")<< buf;
732         }
733     }
734     return ret;
735 }
736 
737 RPSTRING    GrabEvent::GetEvent_OID(EventContext* ec){
738     RPSTRING ret;
739 
740     switch(ec->event){
741     case EVENT_NODE_DOWN_ID:
742         ret = "1.3.6.1.4.1.11.2.17.1.0.58916865";
743         break;
744     case EVENT_NODE_UP_ID:
745         ret = "1.3.6.1.4.1.11.2.17.1.0.58916864";
746         break;
747     case EVENT_IF_DOWN_ID:
748         ret = "1.3.6.1.4.1.11.2.17.1.0.58916867";
749         break;
750 
751     case EVENT_IF_UP_ID:
752         ret = "1.3.6.1.4.1.11.2.17.1.0.58916866";
753     }
754     return ret;
755 }
756 
757 RPSTRING    GrabEvent::GetOVObjectID(EventContext* ec){
758     RPSTRING ret="0";
759     char buff[1024];
760     OVsnmpVarBind* var;
761     if( ec->reload){
762         return ec->reload->OV_OBJECTID;
763     }
764     
765     if( ec->event == EVENT_NODE_DOWN_ID || ec->event==EVENT_NODE_UP_ID){
766         var = GetVarBindByIndex(3,ec->pdu);        
767     }else if( ec->event == EVENT_IF_DOWN_ID || ec->event == EVENT_IF_UP_ID){                
768         var = GetVarBindByIndex(6,ec->pdu);        
769     }
770     if!var ){
771         return ret;
772     }
773 
774     if( var->type == ASN_OCTET_STR){        
775         buff[var->val_len] ='\0';
776         memcpy(buff,var->val.string,var->val_len);
777         ret = buff;
778     }    
779     return ret;
780 }
781 
782 RPSTRING    GrabEvent::GetProtocal(EventContext* ec){
783     RPSTRING ret;
784     ret="Canonical(generic)-event";
785     return ret;
786 }
787 
788 RPSTRING GrabEvent::GetEventType(EventContext* ec){
789     RPSTRING ret;
790     ret << "." << GetEvent_OID(ec);
791     return ret;
792 }
793 
794 RPSTRING GrabEvent::GetIpAddress(EventContext* ec){
795     RPSTRING ret;
796     in_addr in;
797     if( ec->reload){
798         return ec->reload->IP_ADDRESS;
799     }
800     in.s_addr = ec->pdu->address.sin_addr.s_addr;
801     ret = inet_ntoa(in);
802     return ret;
803 }
804 
805 RPSTRING GrabEvent::GetTrapName(EventContext* ec){
806     RPSTRING ret="";
807     switch (ec->event){
808     case EVENT_NODE_DOWN_ID:
809         ret = "OV_Node_Down";
810         break;
811     case EVENT_NODE_UP_ID:
812         ret = "OV_Node_Up";
813         break;
814     case  EVENT_IF_DOWN_ID:
815         ret = "OV_IF_Down";
816         break;
817     case EVENT_IF_UP_ID:
818         ret = "OV_IF_Up";
819         break;
820     }
821     return ret;
822 }
823 
824 RPSTRING    GrabEvent::GetForwardAddress(EventContext* ec){
825     RPSTRING ret;
826     ret ="0.0.0.0";
827     return ret;
828 }
829 
830 RPSTRING GrabEvent::GetEventSource(EventContext* ec){
831     RPSTRING ret;
832     ret = "IP";
833     return ret;
834 }
835 
836 RPSTRING    GrabEvent::GetEventTimeString(EventContext* ec){
837     RPSTRING ret;
838     unsigned int t = GetEventTimestamp(ec);
839     char buff[100];        
840     tm *ptm;    
841     ptm =localtime((time_t*)&t);    
842     sprintf(buff,"%04d-%02d-%02d %02d:%02d:%02d",ptm->tm_year+1900 ,ptm->tm_mon+1,ptm->tm_mday,ptm->tm_hour,ptm->tm_min,ptm->tm_sec);
843     ret = buff;    
844     return ret;
845 }
846 
847 
848 int GrabEvent::IsUp(EventContext* ec){
849     // -- to do check ,monday work,eyes litte tired
850     //-- invoke ovw functions
851     
852     OVwFieldId fid ;
853     OVwObjectId oid ;
854     RPSTRING ip;
855     OVsnmpVarBind* var;
856     OVwFieldValue* fv;
857     char buff[128];
858 
859     if( ec->reload){    //--历史加载数据
860         oid = atoi(ec->reload->OV_OBJECTID.c_str());
861     }else{    
862         if( ec->event == EVENT_NODE_DOWN_ID){
863             var = GetVarBindByIndex(3,ec->pdu);
864         }else if( ec->event == EVENT_IF_DOWN_ID){
865             var = GetVarBindByIndex(6,ec->pdu);
866         }
867         if!var ){
868             return false;
869         }
870         buff[var->val_len] ='\0';
871         memcpy(buff,var->val.string,var->val_len);
872         oid = atoi(buff);
873     }
874     fid = OVwDbFieldNameToFieldId("IP Status");        
875     fv  = OVwDbGetFieldValue(oid,fid);
876     if( fv ){
877         if( fv->un.enum_val != 0 && fv->un.enum_val!=4){
878             rplog->Print(1,"[%s]OpenView ObjectID [%d] status is UP!",
879                 ec->event==EVENT_NODE_DOWN_ID?"EVENT_NODE_DOWN_ID":"EVENT_IF_DOWN_ID",
880                 oid);
881             return true;
882         }
883     }
884         /*
885         var = GetVarBindByIndex(2,ec->pdu){
886         if( var->type == ASN_OCTET_STR){
887             buff[var->val_len] ='\0';
888             memcpy(buff,var->val.string,var->val_len);
889             fid = OVwDbFieldNameToFieldId("IP Status");
890             oid = OVwDbHostnameToObjectId(buff);        
891             fv  = OVwDbGetFieldValue(oid,fid);    
892             rplog->Print(1,"Test Host Node[%s] Status ",buff);
893             if( fv ){
894                 if( fv->un.enum_val != 0 && fv->un.enum_val!=4){
895                     rplog->Print(1,"Node[%s] status is UP!",buff);
896                     return true;
897                 }
898             }
899         }*/        
900     return false;
901 }
902 
903 void GrabEvent::Close(){
904     _update_thr->Terminate();
905     _update_thr->Wait();
906     rplog->Print(1,"terminated upthread !");
907     OVsnmpClose(session);
908     Terminate();
909     Wait();
910 }
911 
912 RPSTRING GetDetectObjectName(EventContext * ec){
913     OVsnmpVarBind* var;
914     RPSTRING ret;
915     char buff[1024];
916     ret= "";
917     if( ec->reload ){
918         ret << ec->reload->NODENAME << ":IF=>" << ec->reload->IP_ADDRESS;
919         return ret;
920     }
921     var = GetVarBindByIndex(2,ec->pdu);
922     if!var){
923         return ret;
924     }
925     
926     buff[var->val_len]='\0';
927     memcpy(buff,var->val.string,var->val_len);        
928     ret = buff;
929 
930     if( ec->event == EVENT_NODE_DOWN_ID){
931         ;    
932     }else {
933         var = GetVarBindByIndex(7,ec->pdu);
934         if!var || var->type!=ASN_OCTET_STR){
935             ;
936         }else{
937             buff[var->val_len]='\0';
938             memcpy(buff,var->val.string,var->val_len);    
939             ret << "-(IF) ";
940             ret << buff;
941         }
942     }
943     return ret ;
944 }
945 //////////////////////////////////////////////////////////////////////////
946 //status detect thread 
947 void    UpdateThread::Run(void *){
948     EventContext_List::iterator itr;
949     while(    THREAD_CONTINUE_T  ){
950         SLEEP_MSEC(100);
951         _master->_evctx_lock.Lock();
952         for( itr = _master->_evctx_list.begin() ;itr!= _master->_evctx_list.end();
953             itr++){
954             EventContext * ec;
955             ec = *itr;
956             
957             time_t now = time(0);
958             if( now >= ec->check_time){ // should be checked                
959                 //-- check status 
960                 //rplog->Print(1,"准备检测状态,事件源:%s,对象:%s",ec->event==EVENT_NODE_DOWN_ID?
961                 //            "EVENT_NODE_DOWN_ID":"EVENT_IF_DOWN_ID",GetDetectObjectName(ec).c_str());
962                 if( _master->IsUp(ec) ){
963                     // modify event's status                     
964                     if( ec->event == EVENT_NODE_DOWN_ID){
965                         ec->event = EVENT_NODE_UP_ID;
966                     }
967                     if( ec->event == EVENT_IF_DOWN_ID){
968                         ec->event = EVENT_IF_UP_ID;
969                     }
970                     // time will be updated in GetEventTimeStamp()
971                     //rplog->Print(1,"设备[%s]已转化为UP状态,开始更新数据库",GetDetectObjectName(ec).c_str());
972                     ec->shift = true;
973                     _master->DoUpdate(ec);
974                     _master->_evctx_list.erase(itr);                    
975                     delete ec;
976                     _master->DumpDownEvent2File();    // rewrite event file for next-load
977                     rplog->Print(1,"残留轮训队列对象数:%d",_master->_evctx_list.size());
978                     break;// haha : lazy to jump out,wait next 
979                 }else{
980                     //rplog->Print(1,"设备[%s]没有转化为UP状态,继续等待超时",GetDetectObjectName(ec).c_str());
981                     ec->check_time = now + _master->_conf->up_status_check_interval;
982                 }
983             }
984         }
985         _master->_evctx_lock.Unlock();    
986     }
987     rplog->Print(1,"UpThread Exiting!");
988 }
989 
990 //////////////////////////////////////////////////////////////////////////
991 
992 void GrabThread::pdu_process_entry(int type, OVsnmpSession *session, OVsnmpPdu *pdu, void *data){
993     GrabThread * gt = (GrabThread*) data;
994     gt->pdu_process(type, session, pdu);
995 }
996 
997 
998 

Feedback

# re: 操作Solid 数据库代码[未登录] 2011-01-20 23:00 Li
兄弟,你操作的是Solid那个版本啊,3.7的行不?  回复  更多评论
  


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