Changeset 27 for trunk/src/renetcolAgg.c

Show
Ignore:
Timestamp:
04/05/07 18:10:36 (16 years ago)
Author:
andreu
Message:

explicite output to find wrong definition bug - memory leak in renetcolAgg find

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/renetcolAgg.c

    r26 r27  
    2424 */ 
    2525 
     26/* 
     27 * In this file, I use directly the C rrd librairy to create and update 
     28 * the rrd files which contain the statistique for each subnet. 
     29 * When your system (CPU+MEM+HD) is too fast and the number of your subnet too big 
     30 * (> 1024), the create and update process can be too fast and before the  
     31 * creation end the maximum number of files which can be opened for one process 
     32 * in the same time is reached. So we must temporize. 
     33 */ 
     34 
    2635#include "renetcolAgg.h" 
    2736 
     
    3241{ 
    3342  int shmid; 
    34   int i, index; 
     43  int i, j, index; 
     44  int rrd_update_er_ct = 0; 
     45  int rrd_update_ok_ct = 0; 
     46  int rrd_already_created_ct = 0; 
     47  int rrd_create_er_ct = 0; 
     48  int rrd_create_ok_ct = 0; 
     49  int rrd_ct = 0; 
    3550  key_t key; 
    3651  static char buf[2048]; 
     
    3853  static char ipStr[20]; 
    3954  static char createstr[2048]; 
     55  char *opt[27]; 
     56  char *optUpdate[3]; 
    4057  int res_rrd = 0; 
    4158  FILE *fp; 
    42   static time_t now; 
    43  
     59  static time_t now, now2; 
     60   
    4461  key = 8765; 
    4562  if ((shmid = shmget(key, SHMSIZE, 0666)) < 0) { 
     
    7592        buf[0] = '\0'; 
    7693        strcat(name, RRD_LOCATION); 
    77         sprintf(ipStr, "%lu", shmForAgg->prefixV4Tab[index][i].beginning);  
     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                );  
    78101        strcat(name, ipStr); 
    79102        /*      strcat(name, SAMPLING_HERE); */ 
    80103        strcat(name, RRD_EXTENSION); 
    81         fprintf(stderr, "%s\n", name); 
    82104        if ( (fp=fopen(name,"r")) == NULL ){ 
    83           strcat(createstr, name); 
    84           strcat(createstr, END_RRD_CREATE); 
    85           fprintf(stderr, "%s\n", createstr); 
    86           res_rrd = wrap_rrd_create(createstr); 
    87         }else{ 
     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++; 
     166          } 
     167          for ( j=0; j<27; j++) { 
     168            free(opt[j]); 
     169            opt[j] = NULL; 
     170          } 
     171        }else{  
    88172          fclose(fp); 
    89         } 
    90      
    91         snprintf(buf, 2048, "%s%s%s %lu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu",  
    92                  RRD_LOCATION,  
    93                  ipStr, 
    94                  RRD_EXTENSION,  
    95                  now-300,  /* or ctime(&now) with %s */ 
    96                  shmForAgg->prefixV4Tab[index][i].flowNbIN,  /* 1  */ 
    97                  shmForAgg->prefixV4Tab[index][i].flowNbOUT, 
    98                  shmForAgg->prefixV4Tab[index][i].bytesNbIN, 
    99                  shmForAgg->prefixV4Tab[index][i].bytesNbOUT, 
    100                  shmForAgg->prefixV4Tab[index][i].pktsNbIN,  /* 5 */ 
    101                  shmForAgg->prefixV4Tab[index][i].pktsNbOUT, 
    102                  shmForAgg->prefixV4Tab[index][i].udpPktsNbIN, 
    103                  shmForAgg->prefixV4Tab[index][i].udpPktsNbOUT, 
    104                  shmForAgg->prefixV4Tab[index][i].tcpPktsNbIN, 
    105                  shmForAgg->prefixV4Tab[index][i].tcpPktsNbOUT, /* 10 */ 
    106                  shmForAgg->prefixV4Tab[index][i].icmpPktsNbIN, 
    107                  shmForAgg->prefixV4Tab[index][i].icmpPktsNbOUT, 
    108                  shmForAgg->prefixV4Tab[index][i].othersPktsNbIN, 
    109                  shmForAgg->prefixV4Tab[index][i].othersPktsNbOUT, 
    110                  shmForAgg->prefixV4Tab[index][i].udpBytesNbIN,  /* 15 */ 
    111                  shmForAgg->prefixV4Tab[index][i].udpBytesNbOUT, 
    112                  shmForAgg->prefixV4Tab[index][i].tcpBytesNbIN, 
    113                  shmForAgg->prefixV4Tab[index][i].tcpBytesNbOUT, 
    114                  shmForAgg->prefixV4Tab[index][i].icmpBytesNbIN, 
    115                  shmForAgg->prefixV4Tab[index][i].icmpBytesNbOUT,  /*  20 */ 
    116                  shmForAgg->prefixV4Tab[index][i].othersBytesNbIN, 
    117                  shmForAgg->prefixV4Tab[index][i].othersBytesNbOUT, 
    118                  shmForAgg->prefixV4Tab[index][i].udpFlowNbIN, 
    119                  shmForAgg->prefixV4Tab[index][i].udpFlowNbOUT, 
    120                  shmForAgg->prefixV4Tab[index][i].tcpFlowNbIN, /* 25 */ 
    121                  shmForAgg->prefixV4Tab[index][i].tcpFlowNbOUT, 
    122                  shmForAgg->prefixV4Tab[index][i].icmpFlowNbIN, 
    123                  shmForAgg->prefixV4Tab[index][i].icmpFlowNbOUT, 
    124                  shmForAgg->prefixV4Tab[index][i].othersFlowNbIN, 
    125                  shmForAgg->prefixV4Tab[index][i].othersFlowNbOUT  /* 30 */ 
    126                  ); 
    127         printf("\n%s\n", buf);  
    128         if ( (res_rrd = wrap_rrd_update(buf)) < 0 ) {  
    129           syslog(LOG_ERR, "wrap_rrd_update return : %d, param were : %s", res_rrd, buf); 
     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          } 
    130211        } 
    131212        /* Reinit the shared table */ 
     
    133214        shmForAgg->prefixV4Tab[index][i].bytesNbIN = 0; 
    134215        shmForAgg->prefixV4Tab[index][i].pktsNbIN = 0; 
    135         shmForAgg->prefixV4Tab[index][i].udpPktsNbIN = 0; 
    136         shmForAgg->prefixV4Tab[index][i].tcpPktsNbIN = 0; 
    137         shmForAgg->prefixV4Tab[index][i].icmpPktsNbIN = 0; 
    138         shmForAgg->prefixV4Tab[index][i].othersPktsNbIN = 0; 
    139         shmForAgg->prefixV4Tab[index][i].udpBytesNbIN = 0; 
    140         shmForAgg->prefixV4Tab[index][i].tcpBytesNbIN = 0; 
    141         shmForAgg->prefixV4Tab[index][i].icmpBytesNbIN = 0; 
    142         shmForAgg->prefixV4Tab[index][i].othersBytesNbIN = 0; 
    143         shmForAgg->prefixV4Tab[index][i].udpFlowNbIN = 0; 
    144         shmForAgg->prefixV4Tab[index][i].tcpFlowNbIN = 0; 
    145         shmForAgg->prefixV4Tab[index][i].icmpFlowNbIN = 0; 
    146         shmForAgg->prefixV4Tab[index][i].othersFlowNbIN = 0; 
    147216        shmForAgg->prefixV4Tab[index][i].flowNbOUT = 0; 
    148217        shmForAgg->prefixV4Tab[index][i].bytesNbOUT = 0; 
    149218        shmForAgg->prefixV4Tab[index][i].pktsNbOUT = 0; 
    150         shmForAgg->prefixV4Tab[index][i].udpPktsNbOUT = 0; 
    151         shmForAgg->prefixV4Tab[index][i].tcpPktsNbOUT = 0; 
    152         shmForAgg->prefixV4Tab[index][i].icmpPktsNbOUT = 0; 
    153         shmForAgg->prefixV4Tab[index][i].othersPktsNbOUT = 0; 
    154         shmForAgg->prefixV4Tab[index][i].udpBytesNbOUT = 0; 
    155         shmForAgg->prefixV4Tab[index][i].tcpBytesNbOUT = 0; 
    156         shmForAgg->prefixV4Tab[index][i].icmpBytesNbOUT = 0; 
    157         shmForAgg->prefixV4Tab[index][i].othersBytesNbOUT = 0; 
    158         shmForAgg->prefixV4Tab[index][i].udpFlowNbOUT = 0; 
    159         shmForAgg->prefixV4Tab[index][i].tcpFlowNbOUT = 0; 
    160         shmForAgg->prefixV4Tab[index][i].icmpFlowNbOUT = 0; 
    161         shmForAgg->prefixV4Tab[index][i].othersFlowNbOUT = 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; 
    162227      } 
     228      now2 = time((time_t *)NULL); 
     229      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", 
     230              now2-now, 
     231              rrd_update_ok_ct, 
     232              rrd_update_er_ct, 
     233              rrd_update_ok_ct+rrd_update_er_ct, 
     234              rrd_already_created_ct, 
     235              rrd_create_er_ct, 
     236              rrd_create_ok_ct); 
     237      rrd_update_ok_ct = 0; 
     238      rrd_update_er_ct = 0; 
     239      rrd_already_created_ct = 0; 
     240      rrd_create_er_ct = 0; 
     241      rrd_create_ok_ct = 0; 
     242      rrd_clear_error(); 
    163243    } 
    164244    sleep(5);