Changeset 59 for trunk/src/renetcolAgg.c

Show
Ignore:
Timestamp:
10/18/07 11:41:05 (15 years ago)
Author:
andreu
Message:

new aggregation method, based on SNMP index. New parameters in renetcolParam.h and new compilation options in configure.in.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/renetcolAgg.c

    r58 r59  
    8787      now = time((time_t *)NULL); 
    8888      if (isFirstUpdate == 0) { 
    89         /* SUBNET ACCOUNTING */ 
     89        /* RRD ACCOUNTING for prefixV4Tab */ 
    9090        for (i=0; i<shmForAgg->v4PrefixNb; i++){ 
    9191          /* HERE create or update RRD FILE */ 
     
    214214              } 
    215215            } 
    216             /* Reinit the shared table */ 
     216            /* Reinit the shared tables */ 
    217217            shmForAgg->prefixV4Tab[index][i].flowNbIN = 0; 
    218218            shmForAgg->prefixV4Tab[index][i].bytesNbIN = 0; 
     
    228228            shmForAgg->prefixV4Tab[index][i].secondCoSOUT = 0; 
    229229            shmForAgg->prefixV4Tab[index][i].thirdCoSOUT = 0; 
    230             shmForAgg->prefixV4Tab[index][i].fourthCoSOUT = 0;  
     230            shmForAgg->prefixV4Tab[index][i].fourthCoSOUT = 0; 
    231231          } 
    232232        } 
     233        /* ACCOUNTING for prefixV4SubnetTab */ 
     234        for (i=0; i<shmForAgg->v4PrefixNb; i++){ 
     235          /* HERE create or update RRD FILE */ 
     236          if (shmForAgg->prefixV4SubnetTab[index][i].sampling != 0) { 
     237            for (j=0; j<strlen(name); j++) {name[j] = '\0';} 
     238            for (j=0; j<strlen(createstr); j++) {createstr[j] = '\0';} 
     239            for (j=0; j<strlen(ipStr); j++) {ipStr[j] = '\0';} 
     240            for (j=0; j<strlen(buf); j++) {buf[j] = '\0';} 
     241            strcat(name, PREFIX_RRD_LOCATION); 
     242            sprintf(ipStr, "%lu_%lu_%lu_%lu_%hu_%lu",  
     243                    shmForAgg->prefixV4SubnetTab[index][i].beginning>>24, 
     244                    shmForAgg->prefixV4SubnetTab[index][i].beginning<<8>>24, 
     245                    shmForAgg->prefixV4SubnetTab[index][i].beginning<<16>>24, 
     246                    shmForAgg->prefixV4SubnetTab[index][i].beginning<<24>>24, 
     247                    shmForAgg->prefixV4SubnetTab[index][i].mask, 
     248                    shmForAgg->prefixV4SubnetTab[index][i].sampling 
     249                    );  
     250            strcat(name, ipStr); 
     251            strcat(name, RRD_EXTENSION); 
     252            if ( (fp=fopen(name,"r")) == NULL ){ 
     253              opt[0]= (char *) malloc((strlen(RRD_PARAM_PREFIX_0) + 1) * sizeof(char)); 
     254              strcpy(opt[0], RRD_PARAM_PREFIX_0); 
     255              opt[1]= (char *) malloc((strlen(name) + 1) * sizeof(char)); 
     256              strcpy(opt[1], name); 
     257              opt[2]= (char *) malloc((strlen(RRD_PARAM_PREFIX_1) + 1) * sizeof(char)); 
     258              strcpy(opt[2], RRD_PARAM_PREFIX_1); 
     259              opt[3]= (char *) malloc((strlen(RRD_PARAM_PREFIX_2) + 1) * sizeof(char)); 
     260              strcpy(opt[3], RRD_PARAM_PREFIX_2); 
     261              opt[4]= (char *) malloc((strlen(RRD_PARAM_PREFIX_3) + 1) * sizeof(char)); 
     262              strcpy(opt[4], RRD_PARAM_PREFIX_3); 
     263              opt[5]= (char *) malloc((strlen(RRD_PARAM_PREFIX_4) + 1) * sizeof(char)); 
     264              strcpy(opt[5], RRD_PARAM_PREFIX_4); 
     265              opt[6]= (char *) malloc((strlen(RRD_PARAM_PREFIX_5) + 1) * sizeof(char)); 
     266              strcpy(opt[6], RRD_PARAM_PREFIX_5); 
     267              opt[7]= (char *) malloc((strlen(RRD_PARAM_PREFIX_6) + 1) * sizeof(char)); 
     268              strcpy(opt[7], RRD_PARAM_PREFIX_6); 
     269              opt[8]= (char *) malloc((strlen(RRD_PARAM_PREFIX_7) + 1) * sizeof(char)); 
     270              strcpy(opt[8], RRD_PARAM_PREFIX_7); 
     271              opt[9]= (char *) malloc((strlen(RRD_PARAM_PREFIX_8) + 1) * sizeof(char)); 
     272              strcpy(opt[9], RRD_PARAM_PREFIX_8); 
     273              opt[10]= (char *) malloc((strlen(RRD_PARAM_PREFIX_9) + 1) * sizeof(char)); 
     274              strcpy(opt[10], RRD_PARAM_PREFIX_9); 
     275              opt[11]= (char *) malloc((strlen(RRD_PARAM_PREFIX_10) + 1) * sizeof(char)); 
     276              strcpy(opt[11], RRD_PARAM_PREFIX_10); 
     277              opt[12]= (char *) malloc((strlen(RRD_PARAM_PREFIX_11) + 1) * sizeof(char)); 
     278              strcpy(opt[12], RRD_PARAM_PREFIX_11); 
     279              opt[13]= (char *) malloc((strlen(RRD_PARAM_PREFIX_12) + 1) * sizeof(char)); 
     280              strcpy(opt[13], RRD_PARAM_PREFIX_12); 
     281              opt[14]= (char *) malloc((strlen(RRD_PARAM_PREFIX_13) + 1) * sizeof(char)); 
     282              strcpy(opt[14], RRD_PARAM_PREFIX_13); 
     283              opt[15]= (char *) malloc((strlen(RRD_PARAM_PREFIX_14) + 1) * sizeof(char)); 
     284              strcpy(opt[15], RRD_PARAM_PREFIX_14); 
     285              opt[16]= (char *) malloc((strlen(RRD_PARAM_PREFIX_15) + 1) * sizeof(char)); 
     286              strcpy(opt[16], RRD_PARAM_PREFIX_15); 
     287              opt[17]= (char *) malloc((strlen(RRD_PARAM_PREFIX_16) + 1) * sizeof(char)); 
     288              strcpy(opt[17], RRD_PARAM_PREFIX_16); 
     289              opt[18]= (char *) malloc((strlen(RRD_PARAM_PREFIX_17) + 1) * sizeof(char)); 
     290              strcpy(opt[18], RRD_PARAM_PREFIX_17); 
     291              opt[19]= (char *) malloc((strlen(RRD_PARAM_PREFIX_18) + 1) * sizeof(char)); 
     292              strcpy(opt[19], RRD_PARAM_PREFIX_18); 
     293              opt[20]= (char *) malloc((strlen(RRD_PARAM_PREFIX_19) + 1) * sizeof(char)); 
     294              strcpy(opt[20], RRD_PARAM_PREFIX_19); 
     295              opt[21]= (char *) malloc((strlen(RRD_PARAM_PREFIX_20) + 1) * sizeof(char)); 
     296              strcpy(opt[21], RRD_PARAM_PREFIX_20); 
     297              opt[22]= (char *) malloc((strlen(RRD_PARAM_PREFIX_21) + 1) * sizeof(char)); 
     298              strcpy(opt[22], RRD_PARAM_PREFIX_21); 
     299              opt[23]= (char *) malloc((strlen(RRD_PARAM_PREFIX_22) + 1) * sizeof(char)); 
     300              strcpy(opt[23], RRD_PARAM_PREFIX_22); 
     301              opt[24]= (char *) malloc((strlen(RRD_PARAM_PREFIX_23) + 1) * sizeof(char)); 
     302              strcpy(opt[24], RRD_PARAM_PREFIX_23); 
     303              opt[25]= (char *) malloc((strlen(RRD_PARAM_PREFIX_24) + 1) * sizeof(char)); 
     304              strcpy(opt[25], RRD_PARAM_PREFIX_24); 
     305              opt[26]= (char *) malloc((strlen(RRD_PARAM_PREFIX_25) + 1) * sizeof(char)); 
     306              strcpy(opt[26], RRD_PARAM_PREFIX_25); 
     307              optind = opterr = 0; 
     308              rrd_clear_error(); 
     309              if ( rrd_create(27,opt) < 0) { 
     310                syslog(LOG_ERR, "RRD create file %s, error: %s\n", name, rrd_get_error()); 
     311                rrd_create_er_ct++; 
     312              } else { 
     313                rrd_create_ok_ct++; 
     314              } 
     315              for ( j=0; j<27; j++) { 
     316                free(opt[j]); 
     317                opt[j] = NULL; 
     318              } 
     319            }else{  
     320              fclose(fp); 
     321              rrd_already_created_ct++; 
     322              snprintf(buf,  
     323                       2048,  
     324                       "%lu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu",   
     325                       now-300,  /* or ctime(&now) with %s */ 
     326                       shmForAgg->prefixV4SubnetTab[index][i].flowNbIN,  /* 1 */ 
     327                       shmForAgg->prefixV4SubnetTab[index][i].flowNbOUT, 
     328                       shmForAgg->prefixV4SubnetTab[index][i].bytesNbIN, 
     329                       shmForAgg->prefixV4SubnetTab[index][i].bytesNbOUT, 
     330                       shmForAgg->prefixV4SubnetTab[index][i].pktsNbIN,  /* 5 */ 
     331                       shmForAgg->prefixV4SubnetTab[index][i].pktsNbOUT, 
     332                       shmForAgg->prefixV4SubnetTab[index][i].firstCoSIN, 
     333                       shmForAgg->prefixV4SubnetTab[index][i].firstCoSOUT, 
     334                       shmForAgg->prefixV4SubnetTab[index][i].secondCoSIN, 
     335                       shmForAgg->prefixV4SubnetTab[index][i].secondCoSOUT, 
     336                       shmForAgg->prefixV4SubnetTab[index][i].thirdCoSIN, 
     337                       shmForAgg->prefixV4SubnetTab[index][i].thirdCoSOUT, 
     338                       shmForAgg->prefixV4SubnetTab[index][i].fourthCoSIN, 
     339                       shmForAgg->prefixV4SubnetTab[index][i].fourthCoSOUT 
     340                       ); 
     341              optUpdate[0]= (char *) malloc((strlen(RRD_UPDATE_0) + 1) * sizeof(char)); 
     342              strcpy(optUpdate[0], RRD_UPDATE_0); 
     343              optUpdate[1]= (char *) malloc((strlen(name) + 1) * sizeof(char)); 
     344              strcpy(optUpdate[1], name); 
     345              optUpdate[2]= (char *) malloc((strlen(buf) + 1) * sizeof(char)); 
     346              strcpy(optUpdate[2], buf); 
     347              optind = opterr = 0;  
     348              rrd_clear_error(); 
     349              if ( rrd_update(3, optUpdate) < 0 ) {  
     350                syslog(LOG_ERR, "RRD update file %s, error: %s\n", name, rrd_get_error()); 
     351                rrd_update_er_ct++; 
     352              } else { 
     353                rrd_update_ok_ct++; 
     354              } 
     355              for ( j=0; j<3; j++) { 
     356                free(optUpdate[j]); 
     357                optUpdate[j] = NULL; 
     358              } 
     359            } 
     360            /* Reinit the shared tables */ 
     361            shmForAgg->prefixV4SubnetTab[index][i].flowNbIN = 0; 
     362            shmForAgg->prefixV4SubnetTab[index][i].bytesNbIN = 0; 
     363            shmForAgg->prefixV4SubnetTab[index][i].pktsNbIN = 0; 
     364            shmForAgg->prefixV4SubnetTab[index][i].flowNbOUT = 0; 
     365            shmForAgg->prefixV4SubnetTab[index][i].bytesNbOUT = 0; 
     366            shmForAgg->prefixV4SubnetTab[index][i].pktsNbOUT = 0; 
     367            shmForAgg->prefixV4SubnetTab[index][i].firstCoSIN = 0; 
     368            shmForAgg->prefixV4SubnetTab[index][i].secondCoSIN = 0; 
     369            shmForAgg->prefixV4SubnetTab[index][i].thirdCoSIN = 0; 
     370            shmForAgg->prefixV4SubnetTab[index][i].fourthCoSIN = 0; 
     371            shmForAgg->prefixV4SubnetTab[index][i].firstCoSOUT = 0; 
     372            shmForAgg->prefixV4SubnetTab[index][i].secondCoSOUT = 0; 
     373            shmForAgg->prefixV4SubnetTab[index][i].thirdCoSOUT = 0; 
     374            shmForAgg->prefixV4SubnetTab[index][i].fourthCoSOUT = 0; 
     375          } 
     376        } 
     377#if defined(MATRIX) && defined(IPV4AGGIDR) 
    233378        /* MATRIX INTER POP ACCOUNTING */ 
    234379        /* rrd */ 
     
    334479        } 
    335480        /* END MATRIX INTER POP ACC */ 
     481#endif /* MATRIX */ 
    336482        now2 = time((time_t *)NULL); 
    337483#ifdef DEBUGAGG 
     
    369515          shmForAgg->prefixV4Tab[index][i].thirdCoSOUT = 0; 
    370516          shmForAgg->prefixV4Tab[index][i].fourthCoSOUT = 0;  
     517 
     518          shmForAgg->prefixV4SubnetTab[index][i].flowNbIN = 0; 
     519          shmForAgg->prefixV4SubnetTab[index][i].bytesNbIN = 0; 
     520          shmForAgg->prefixV4SubnetTab[index][i].pktsNbIN = 0; 
     521          shmForAgg->prefixV4SubnetTab[index][i].flowNbOUT = 0; 
     522          shmForAgg->prefixV4SubnetTab[index][i].bytesNbOUT = 0; 
     523          shmForAgg->prefixV4SubnetTab[index][i].pktsNbOUT = 0; 
     524          shmForAgg->prefixV4SubnetTab[index][i].firstCoSIN = 0; 
     525          shmForAgg->prefixV4SubnetTab[index][i].secondCoSIN = 0; 
     526          shmForAgg->prefixV4SubnetTab[index][i].thirdCoSIN = 0; 
     527          shmForAgg->prefixV4SubnetTab[index][i].fourthCoSIN = 0; 
     528          shmForAgg->prefixV4SubnetTab[index][i].firstCoSOUT = 0; 
     529          shmForAgg->prefixV4SubnetTab[index][i].secondCoSOUT = 0; 
     530          shmForAgg->prefixV4SubnetTab[index][i].thirdCoSOUT = 0; 
     531          shmForAgg->prefixV4SubnetTab[index][i].fourthCoSOUT = 0;  
    371532        } 
    372533        /* reinit */ 
     534#ifdef MATRIX 
    373535        for (i=0; i<ROUTER_INDEX_MAX; i++){ 
    374536          for (j=0; j<ROUTER_INDEX_MAX; j++) { 
     
    378540          } 
    379541        } 
     542#endif 
    380543      } /* end is first update */  
    381544    } /* end read ok */