Changeset 29 for trunk/src/renetcolAgg.c

Show
Ignore:
Timestamp:
04/13/07 17:40:49 (16 years ago)
Author:
andreu
Message:

sampling information in rrd filename - optional template first step

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/renetcolAgg.c

    r28 r29  
    4848  int rrd_create_ok_ct = 0; 
    4949  int rrd_ct = 0; 
     50  int isFirstUpdate = 1; 
    5051  key_t key; 
    5152  static char buf[2048]; 
    5253  static char name[2048]; 
    53   static char ipStr[20]; 
     54  static char ipStr[24]; 
    5455  static char createstr[2048]; 
    5556  char *opt[27]; 
     
    5859  FILE *fp; 
    5960  static time_t now, now2; 
     61  struct shmid_ds shminfo; 
    6062   
    6163  key = 8765; 
     
    6870    exit(1); 
    6971  } 
    70  
     72   
    7173  fprintf(stderr, "renetcolAgg: I become a deamon, next messages via syslogd. By.\n"); 
    7274  if (fork () != 0) 
     
    8587      } 
    8688      now = time((time_t *)NULL); 
    87       for (i=0; i<shmForAgg->v4PrefixNb; i++){ 
    88         /* HERE Put in RRD FILE */ 
    89         name[0] = '\0'; 
    90         createstr[0] = '\0'; 
    91         ipStr[0] = '\0'; 
    92         buf[0] = '\0'; 
    93         strcat(name, RRD_LOCATION); 
    94         sprintf(ipStr, "%lu_%lu_%lu_%lu_%hu",  
    95                 shmForAgg->prefixV4Tab[index][i].beginning>>24, 
    96                 shmForAgg->prefixV4Tab[index][i].beginning<<8>>24, 
    97                 shmForAgg->prefixV4Tab[index][i].beginning<<16>>24, 
    98                 shmForAgg->prefixV4Tab[index][i].beginning<<24>>24, 
    99                 shmForAgg->prefixV4Tab[index][i].mask 
    100                 );  
    101         strcat(name, ipStr); 
    102         /*      strcat(name, SAMPLING_HERE); */ 
    103         strcat(name, RRD_EXTENSION); 
    104         if ( (fp=fopen(name,"r")) == NULL ){ 
    105           opt[0]= (char *) malloc((strlen(RRD_PARAM_0) + 1) * sizeof(char)); 
    106           strcpy(opt[0], RRD_PARAM_0); 
    107           opt[1]= (char *) malloc((strlen(name) + 1) * sizeof(char)); 
    108           strcpy(opt[1], name); 
    109           opt[2]= (char *) malloc((strlen(RRD_PARAM_1) + 1) * sizeof(char)); 
    110           strcpy(opt[2], RRD_PARAM_1); 
    111           opt[3]= (char *) malloc((strlen(RRD_PARAM_2) + 1) * sizeof(char)); 
    112           strcpy(opt[3], RRD_PARAM_2); 
    113           opt[4]= (char *) malloc((strlen(RRD_PARAM_3) + 1) * sizeof(char)); 
    114           strcpy(opt[4], RRD_PARAM_3); 
    115           opt[5]= (char *) malloc((strlen(RRD_PARAM_4) + 1) * sizeof(char)); 
    116           strcpy(opt[5], RRD_PARAM_4); 
    117           opt[6]= (char *) malloc((strlen(RRD_PARAM_5) + 1) * sizeof(char)); 
    118           strcpy(opt[6], RRD_PARAM_5); 
    119           opt[7]= (char *) malloc((strlen(RRD_PARAM_6) + 1) * sizeof(char)); 
    120           strcpy(opt[7], RRD_PARAM_6); 
    121           opt[8]= (char *) malloc((strlen(RRD_PARAM_7) + 1) * sizeof(char)); 
    122           strcpy(opt[8], RRD_PARAM_7); 
    123           opt[9]= (char *) malloc((strlen(RRD_PARAM_8) + 1) * sizeof(char)); 
    124           strcpy(opt[9], RRD_PARAM_8); 
    125           opt[10]= (char *) malloc((strlen(RRD_PARAM_9) + 1) * sizeof(char)); 
    126           strcpy(opt[10], RRD_PARAM_9); 
    127           opt[12]= (char *) malloc((strlen(RRD_PARAM_10) + 1) * sizeof(char)); 
    128           strcpy(opt[11], RRD_PARAM_10); 
    129           opt[12]= (char *) malloc((strlen(RRD_PARAM_11) + 1) * sizeof(char)); 
    130           strcpy(opt[12], RRD_PARAM_11); 
    131           opt[13]= (char *) malloc((strlen(RRD_PARAM_12) + 1) * sizeof(char)); 
    132           strcpy(opt[13], RRD_PARAM_12); 
    133           opt[14]= (char *) malloc((strlen(RRD_PARAM_13) + 1) * sizeof(char)); 
    134           strcpy(opt[14], RRD_PARAM_13); 
    135           opt[15]= (char *) malloc((strlen(RRD_PARAM_14) + 1) * sizeof(char)); 
    136           strcpy(opt[15], RRD_PARAM_14); 
    137           opt[16]= (char *) malloc((strlen(RRD_PARAM_15) + 1) * sizeof(char)); 
    138           strcpy(opt[16], RRD_PARAM_15); 
    139           opt[17]= (char *) malloc((strlen(RRD_PARAM_16) + 1) * sizeof(char)); 
    140           strcpy(opt[17], RRD_PARAM_16); 
    141           opt[18]= (char *) malloc((strlen(RRD_PARAM_17) + 1) * sizeof(char)); 
    142           strcpy(opt[18], RRD_PARAM_17); 
    143           opt[19]= (char *) malloc((strlen(RRD_PARAM_18) + 1) * sizeof(char)); 
    144           strcpy(opt[19], RRD_PARAM_18); 
    145           opt[20]= (char *) malloc((strlen(RRD_PARAM_19) + 1) * sizeof(char)); 
    146           strcpy(opt[20], RRD_PARAM_19); 
    147           opt[21]= (char *) malloc((strlen(RRD_PARAM_20) + 1) * sizeof(char)); 
    148           strcpy(opt[21], RRD_PARAM_20); 
    149           opt[22]= (char *) malloc((strlen(RRD_PARAM_21) + 1) * sizeof(char)); 
    150           strcpy(opt[22], RRD_PARAM_21); 
    151           opt[23]= (char *) malloc((strlen(RRD_PARAM_22) + 1) * sizeof(char)); 
    152           strcpy(opt[23], RRD_PARAM_22); 
    153           opt[24]= (char *) malloc((strlen(RRD_PARAM_23) + 1) * sizeof(char)); 
    154           strcpy(opt[24], RRD_PARAM_23); 
    155           opt[25]= (char *) malloc((strlen(RRD_PARAM_24) + 1) * sizeof(char)); 
    156           strcpy(opt[25], RRD_PARAM_24); 
    157           opt[26]= (char *) malloc((strlen(RRD_PARAM_25) + 1) * sizeof(char)); 
    158           strcpy(opt[26], RRD_PARAM_25); 
    159           optind = opterr = 0; 
    160           rrd_clear_error(); 
    161           if ( rrd_create(27,opt) < 0) { 
    162             syslog(LOG_ERR, "RRD create file %s, error: %s\n", name, rrd_get_error()); 
    163             rrd_create_er_ct++; 
    164           } else { 
    165             rrd_create_ok_ct++; 
     89      if (isFirstUpdate == 0) { 
     90        for (i=0; i<shmForAgg->v4PrefixNb; i++){ 
     91          /* HERE Put in RRD FILE */ 
     92          for (j=0; j<strlen(name); j++) {name[j] = '\0';} 
     93          for (j=0; j<strlen(createstr); j++) {createstr[j] = '\0';} 
     94          for (j=0; j<strlen(ipStr); j++) {ipStr[j] = '\0';} 
     95          for (j=0; j<strlen(buf); j++) {buf[j] = '\0';} 
     96          strcat(name, RRD_LOCATION); 
     97          fprintf(stderr," SPL : %lu\n ",shmForAgg->prefixV4Tab[index][i].sampling); 
     98          sprintf(ipStr, "%lu_%lu_%lu_%lu_%hu_%lu",  
     99                  shmForAgg->prefixV4Tab[index][i].beginning>>24, 
     100                  shmForAgg->prefixV4Tab[index][i].beginning<<8>>24, 
     101                  shmForAgg->prefixV4Tab[index][i].beginning<<16>>24, 
     102                  shmForAgg->prefixV4Tab[index][i].beginning<<24>>24, 
     103                  shmForAgg->prefixV4Tab[index][i].mask, 
     104                  shmForAgg->prefixV4Tab[index][i].sampling 
     105                  );  
     106          strcat(name, ipStr); 
     107          strcat(name, RRD_EXTENSION); 
     108          if ( (fp=fopen(name,"r")) == NULL ){ 
     109#ifdef DEBUGAGG 
     110            fprintf(stderr, "Creation %s ... ", name);  
     111#endif 
     112            opt[0]= (char *) malloc((strlen(RRD_PARAM_0) + 1) * sizeof(char)); 
     113            strcpy(opt[0], RRD_PARAM_0); 
     114            opt[1]= (char *) malloc((strlen(name) + 1) * sizeof(char)); 
     115            strcpy(opt[1], name); 
     116            opt[2]= (char *) malloc((strlen(RRD_PARAM_1) + 1) * sizeof(char)); 
     117            strcpy(opt[2], RRD_PARAM_1); 
     118            opt[3]= (char *) malloc((strlen(RRD_PARAM_2) + 1) * sizeof(char)); 
     119            strcpy(opt[3], RRD_PARAM_2); 
     120            opt[4]= (char *) malloc((strlen(RRD_PARAM_3) + 1) * sizeof(char)); 
     121            strcpy(opt[4], RRD_PARAM_3); 
     122            opt[5]= (char *) malloc((strlen(RRD_PARAM_4) + 1) * sizeof(char)); 
     123            strcpy(opt[5], RRD_PARAM_4); 
     124            opt[6]= (char *) malloc((strlen(RRD_PARAM_5) + 1) * sizeof(char)); 
     125            strcpy(opt[6], RRD_PARAM_5); 
     126            opt[7]= (char *) malloc((strlen(RRD_PARAM_6) + 1) * sizeof(char)); 
     127            strcpy(opt[7], RRD_PARAM_6); 
     128            opt[8]= (char *) malloc((strlen(RRD_PARAM_7) + 1) * sizeof(char)); 
     129            strcpy(opt[8], RRD_PARAM_7); 
     130            opt[9]= (char *) malloc((strlen(RRD_PARAM_8) + 1) * sizeof(char)); 
     131            strcpy(opt[9], RRD_PARAM_8); 
     132            opt[10]= (char *) malloc((strlen(RRD_PARAM_9) + 1) * sizeof(char)); 
     133            strcpy(opt[10], RRD_PARAM_9); 
     134            opt[11]= (char *) malloc((strlen(RRD_PARAM_10) + 1) * sizeof(char)); 
     135            strcpy(opt[11], RRD_PARAM_10); 
     136            opt[12]= (char *) malloc((strlen(RRD_PARAM_11) + 1) * sizeof(char)); 
     137            strcpy(opt[12], RRD_PARAM_11); 
     138            opt[13]= (char *) malloc((strlen(RRD_PARAM_12) + 1) * sizeof(char)); 
     139            strcpy(opt[13], RRD_PARAM_12); 
     140            opt[14]= (char *) malloc((strlen(RRD_PARAM_13) + 1) * sizeof(char)); 
     141            strcpy(opt[14], RRD_PARAM_13); 
     142            opt[15]= (char *) malloc((strlen(RRD_PARAM_14) + 1) * sizeof(char)); 
     143            strcpy(opt[15], RRD_PARAM_14); 
     144            opt[16]= (char *) malloc((strlen(RRD_PARAM_15) + 1) * sizeof(char)); 
     145            strcpy(opt[16], RRD_PARAM_15); 
     146            opt[17]= (char *) malloc((strlen(RRD_PARAM_16) + 1) * sizeof(char)); 
     147            strcpy(opt[17], RRD_PARAM_16); 
     148            opt[18]= (char *) malloc((strlen(RRD_PARAM_17) + 1) * sizeof(char)); 
     149            strcpy(opt[18], RRD_PARAM_17); 
     150            opt[19]= (char *) malloc((strlen(RRD_PARAM_18) + 1) * sizeof(char)); 
     151            strcpy(opt[19], RRD_PARAM_18); 
     152            opt[20]= (char *) malloc((strlen(RRD_PARAM_19) + 1) * sizeof(char)); 
     153            strcpy(opt[20], RRD_PARAM_19); 
     154            opt[21]= (char *) malloc((strlen(RRD_PARAM_20) + 1) * sizeof(char)); 
     155            strcpy(opt[21], RRD_PARAM_20); 
     156            opt[22]= (char *) malloc((strlen(RRD_PARAM_21) + 1) * sizeof(char)); 
     157            strcpy(opt[22], RRD_PARAM_21); 
     158            opt[23]= (char *) malloc((strlen(RRD_PARAM_22) + 1) * sizeof(char)); 
     159            strcpy(opt[23], RRD_PARAM_22); 
     160            opt[24]= (char *) malloc((strlen(RRD_PARAM_23) + 1) * sizeof(char)); 
     161            strcpy(opt[24], RRD_PARAM_23); 
     162            opt[25]= (char *) malloc((strlen(RRD_PARAM_24) + 1) * sizeof(char)); 
     163            strcpy(opt[25], RRD_PARAM_24); 
     164            opt[26]= (char *) malloc((strlen(RRD_PARAM_25) + 1) * sizeof(char)); 
     165            strcpy(opt[26], RRD_PARAM_25); 
     166            optind = opterr = 0; 
     167            rrd_clear_error(); 
     168            if ( rrd_create(27,opt) < 0) { 
     169              syslog(LOG_ERR, "RRD create file %s, error: %s\n", name, rrd_get_error()); 
     170              rrd_create_er_ct++; 
     171            } else { 
     172              rrd_create_ok_ct++; 
     173            } 
     174            for ( j=0; j<27; j++) { 
     175              free(opt[j]); 
     176              opt[j] = NULL; 
     177            } 
     178#ifdef DEBUGAGG 
     179            fprintf(stderr, "end creation \n", name);  
     180#endif 
     181          }else{  
     182            fclose(fp); 
     183#ifdef DEBUGAGG 
     184            fprintf(stderr, "Update %s \n", name);  
     185#endif 
     186            rrd_already_created_ct++; 
     187            snprintf(buf,  
     188                     2048,  
     189                     "%lu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu",   
     190                     now-300,  /* or ctime(&now) with %s */ 
     191                     shmForAgg->prefixV4Tab[index][i].flowNbIN,  /* 1 */ 
     192                     shmForAgg->prefixV4Tab[index][i].flowNbOUT, 
     193                     shmForAgg->prefixV4Tab[index][i].bytesNbIN, 
     194                     shmForAgg->prefixV4Tab[index][i].bytesNbOUT, 
     195                     shmForAgg->prefixV4Tab[index][i].pktsNbIN,  /* 5 */ 
     196                     shmForAgg->prefixV4Tab[index][i].pktsNbOUT, 
     197                     shmForAgg->prefixV4Tab[index][i].firstCoSIN, 
     198                     shmForAgg->prefixV4Tab[index][i].firstCoSOUT, 
     199                     shmForAgg->prefixV4Tab[index][i].secondCoSIN, 
     200                     shmForAgg->prefixV4Tab[index][i].secondCoSOUT, 
     201                     shmForAgg->prefixV4Tab[index][i].thirdCoSIN, 
     202                     shmForAgg->prefixV4Tab[index][i].thirdCoSOUT, 
     203                     shmForAgg->prefixV4Tab[index][i].fourthCoSIN, 
     204                     shmForAgg->prefixV4Tab[index][i].fourthCoSOUT 
     205                     ); 
     206            optUpdate[0]= (char *) malloc((strlen(RRD_UPDATE_0) + 1) * sizeof(char)); 
     207            strcpy(optUpdate[0], RRD_UPDATE_0); 
     208            optUpdate[1]= (char *) malloc((strlen(name) + 1) * sizeof(char)); 
     209            strcpy(optUpdate[1], name); 
     210            optUpdate[2]= (char *) malloc((strlen(buf) + 1) * sizeof(char)); 
     211            strcpy(optUpdate[2], buf); 
     212            optind = opterr = 0;  
     213            rrd_clear_error(); 
     214            if ( rrd_update(3, optUpdate) < 0 ) {  
     215              syslog(LOG_ERR, "RRD update file %s, error: %s\n", name, rrd_get_error()); 
     216              rrd_update_er_ct++; 
     217            } else { 
     218              rrd_update_ok_ct++; 
     219            } 
     220            for ( j=0; j<3; j++) { 
     221              free(optUpdate[j]); 
     222              optUpdate[j] = NULL; 
     223            } 
    166224          } 
    167           for ( j=0; j<27; j++) { 
    168             free(opt[j]); 
    169             opt[j] = NULL; 
    170           } 
    171         }else{  
    172           fclose(fp); 
    173           rrd_already_created_ct++; 
    174           snprintf(buf,  
    175                    2048,  
    176                    "%lu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu",   
    177                    now-300,  /* or ctime(&now) with %s */ 
    178                    shmForAgg->prefixV4Tab[index][i].flowNbIN,  /* 1 */ 
    179                    shmForAgg->prefixV4Tab[index][i].flowNbOUT, 
    180                    shmForAgg->prefixV4Tab[index][i].bytesNbIN, 
    181                    shmForAgg->prefixV4Tab[index][i].bytesNbOUT, 
    182                    shmForAgg->prefixV4Tab[index][i].pktsNbIN,  /* 5 */ 
    183                    shmForAgg->prefixV4Tab[index][i].pktsNbOUT, 
    184                    shmForAgg->prefixV4Tab[index][i].firstCoSIN, 
    185                    shmForAgg->prefixV4Tab[index][i].firstCoSOUT, 
    186                    shmForAgg->prefixV4Tab[index][i].secondCoSIN, 
    187                    shmForAgg->prefixV4Tab[index][i].secondCoSOUT, 
    188                    shmForAgg->prefixV4Tab[index][i].thirdCoSIN, 
    189                    shmForAgg->prefixV4Tab[index][i].thirdCoSOUT, 
    190                    shmForAgg->prefixV4Tab[index][i].fourthCoSIN, 
    191                    shmForAgg->prefixV4Tab[index][i].fourthCoSOUT 
    192                    ); 
    193           optUpdate[0]= (char *) malloc((strlen(RRD_UPDATE_0) + 1) * sizeof(char)); 
    194           strcpy(optUpdate[0], RRD_UPDATE_0); 
    195           optUpdate[1]= (char *) malloc((strlen(name) + 1) * sizeof(char)); 
    196           strcpy(optUpdate[1], name); 
    197           optUpdate[2]= (char *) malloc((strlen(buf) + 1) * sizeof(char)); 
    198           strcpy(optUpdate[2], buf); 
    199           optind = opterr = 0;  
    200           rrd_clear_error(); 
    201           if ( rrd_update(3, optUpdate) < 0 ) {  
    202             syslog(LOG_ERR, "RRD update file %s, error: %s\n", name, rrd_get_error()); 
    203             rrd_update_er_ct++; 
    204           } else { 
    205             rrd_update_ok_ct++; 
    206           } 
    207           for ( j=0; j<3; j++) { 
    208             free(optUpdate[j]); 
    209             optUpdate[j] = NULL; 
    210           } 
    211         } 
    212         /* Reinit the shared table */ 
    213         shmForAgg->prefixV4Tab[index][i].flowNbIN = 0; 
    214         shmForAgg->prefixV4Tab[index][i].bytesNbIN = 0; 
    215         shmForAgg->prefixV4Tab[index][i].pktsNbIN = 0; 
    216         shmForAgg->prefixV4Tab[index][i].flowNbOUT = 0; 
    217         shmForAgg->prefixV4Tab[index][i].bytesNbOUT = 0; 
    218         shmForAgg->prefixV4Tab[index][i].pktsNbOUT = 0; 
    219         shmForAgg->prefixV4Tab[index][i].firstCoSIN = 0; 
    220         shmForAgg->prefixV4Tab[index][i].secondCoSIN = 0; 
    221         shmForAgg->prefixV4Tab[index][i].thirdCoSIN = 0; 
    222         shmForAgg->prefixV4Tab[index][i].fourthCoSIN = 0; 
    223         shmForAgg->prefixV4Tab[index][i].firstCoSOUT = 0; 
    224         shmForAgg->prefixV4Tab[index][i].secondCoSOUT = 0; 
    225         shmForAgg->prefixV4Tab[index][i].thirdCoSOUT = 0; 
    226         shmForAgg->prefixV4Tab[index][i].fourthCoSOUT = 0; 
    227       } 
    228       now2 = time((time_t *)NULL); 
    229 #ifdef DEBUG 
    230       fprintf(stderr, "IPv4 subnet managment (rrd update) : \n %d sec, %d files updated, %d errors, total %d\n %d rrd file already created, %d errors in creation, %d new rrd file creations", 
    231               now2-now, 
    232               rrd_update_ok_ct, 
    233               rrd_update_er_ct, 
    234               rrd_update_ok_ct+rrd_update_er_ct, 
    235               rrd_already_created_ct, 
    236               rrd_create_er_ct, 
    237               rrd_create_ok_ct); 
    238 #endif 
    239       rrd_update_ok_ct = 0; 
    240       rrd_update_er_ct = 0; 
    241       rrd_already_created_ct = 0; 
    242       rrd_create_er_ct = 0; 
    243       rrd_create_ok_ct = 0; 
    244       rrd_clear_error(); 
    245     } 
    246     sleep(5); 
     225          /* Reinit the shared table */ 
     226          shmForAgg->prefixV4Tab[index][i].flowNbIN = 0; 
     227          shmForAgg->prefixV4Tab[index][i].bytesNbIN = 0; 
     228          shmForAgg->prefixV4Tab[index][i].pktsNbIN = 0; 
     229          shmForAgg->prefixV4Tab[index][i].flowNbOUT = 0; 
     230          shmForAgg->prefixV4Tab[index][i].bytesNbOUT = 0; 
     231          shmForAgg->prefixV4Tab[index][i].pktsNbOUT = 0; 
     232          shmForAgg->prefixV4Tab[index][i].firstCoSIN = 0; 
     233          shmForAgg->prefixV4Tab[index][i].secondCoSIN = 0; 
     234          shmForAgg->prefixV4Tab[index][i].thirdCoSIN = 0; 
     235          shmForAgg->prefixV4Tab[index][i].fourthCoSIN = 0; 
     236          shmForAgg->prefixV4Tab[index][i].firstCoSOUT = 0; 
     237          shmForAgg->prefixV4Tab[index][i].secondCoSOUT = 0; 
     238          shmForAgg->prefixV4Tab[index][i].thirdCoSOUT = 0; 
     239          shmForAgg->prefixV4Tab[index][i].fourthCoSOUT = 0;  
     240        }       
     241        now2 = time((time_t *)NULL); 
     242/* #ifdef DEBUGAGG */ 
     243        fprintf(stderr, "IPv4 subnet managment (rrd update) : \n %d sec, %d files updated, %d errors, total %d\n %d rrd file already created, %d errors in creation, %d new rrd file creations", 
     244                now2-now, 
     245                rrd_update_ok_ct, 
     246                rrd_update_er_ct, 
     247                rrd_update_ok_ct+rrd_update_er_ct, 
     248                rrd_already_created_ct, 
     249                rrd_create_er_ct, 
     250                rrd_create_ok_ct); 
     251/* #endif */ 
     252        rrd_update_ok_ct = 0; 
     253        rrd_update_er_ct = 0; 
     254        rrd_already_created_ct = 0; 
     255        rrd_create_er_ct = 0; 
     256        rrd_create_ok_ct = 0; 
     257        rrd_clear_error(); 
     258      } else { 
     259        isFirstUpdate = 0; 
     260      }   
     261    }  
     262    sleep(10); 
    247263  } while (1); 
    248  
    249264  exit(0); 
    250265}