Changeset 5724

Show
Ignore:
Timestamp:
05/13/09 18:13:41 (4 years ago)
Author:
andy
Message:

sensord: Refactoring of the rrdInit() function.

* Fix deep indentation levels
* Return with unique error code (-1)
* Rename buffer for struct stat from tmp to sb.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lm-sensors/trunk/prog/sensord/rrd.c

    r5719 r5724  
    243243int rrdInit(void) 
    244244{ 
    245         int ret = 0; 
    246         struct stat tmp; 
     245        int ret; 
     246        struct stat sb; 
     247        char stepBuff[STEP_BUFF], rraBuff[RRA_BUFF]; 
     248        int argc = 4, num; 
     249        const char *argv[6 + MAX_RRD_SENSORS] = { 
     250                "sensord", sensord_args.rrdFile, "-s", stepBuff 
     251        }; 
    247252 
    248253        sensorLog(LOG_DEBUG, "sensor RRD init"); 
    249         if (stat(sensord_args.rrdFile, &tmp)) { 
    250                 if (errno == ENOENT) { 
    251                         char stepBuff[STEP_BUFF], rraBuff[RRA_BUFF]; 
    252                         int argc = 4, num; 
    253                         const char *argv[6 + MAX_RRD_SENSORS] = { 
    254                                 "sensord", sensord_args.rrdFile, "-s", stepBuff 
    255                         }; 
    256  
    257                         sensorLog(LOG_INFO, "creating round robin database"); 
    258                         num = rrdGetSensors(argv + argc); 
    259                         if (num == 0) { 
    260                                 sensorLog(LOG_ERR, 
    261                                           "Error creating RRD: %s: %s", 
    262                                           sensord_args.rrdFile, 
    263                                           "No sensors detected"); 
    264                                 ret = 2; 
    265                         } else if (num < 0) { 
    266                                 ret = -num; 
    267                         } else { 
    268                                 sprintf(stepBuff, "%d", sensord_args.rrdTime); 
    269                                 sprintf(rraBuff, "RRA:%s:%f:%d:%d", 
    270                                         sensord_args.rrdNoAverage ? "LAST" : 
    271                                         "AVERAGE", 
    272                                         0.5 /* fraction of non-unknown samples needed per entry */, 
    273                                         1 /* samples per entry */, 
    274                                         7 * 24 * 60 * 60 / 
    275                                         sensord_args.rrdTime /* 1 week */); 
    276  
    277                                 argc += num; 
    278                                 argv[argc ++] = rraBuff; 
    279                                 argv[argc] = NULL; 
    280                                 if ((ret = rrd_create(argc, 
    281                                                       (char **) /* WEAK */ argv))) { 
    282                                         sensorLog(LOG_ERR, 
    283                                                   "Error creating RRD file: %s: %s", 
    284                                                   sensord_args.rrdFile, 
    285                                                   rrd_get_error()); 
    286                                 } 
    287                         } 
    288                 } else { 
    289                         sensorLog(LOG_ERR, "Error stat()ing RRD: %s: %s", 
    290                                   sensord_args.rrdFile, strerror(errno)); 
    291                         ret = 1; 
    292                 } 
    293         } 
    294         sensorLog(LOG_DEBUG, "sensor RRD inited"); 
    295  
    296         return ret; 
     254 
     255        /* Create RRD if it does not exist. */ 
     256        if (stat(sensord_args.rrdFile, &sb)) { 
     257                if (errno != ENOENT) { 
     258                        sensorLog(LOG_ERR, "Could not stat rrd file: %s\n", 
     259                                  sensord_args.rrdFile); 
     260                        return -1; 
     261                } 
     262                sensorLog(LOG_INFO, "Creating round robin database"); 
     263 
     264                num = rrdGetSensors(argv + argc); 
     265                if (num < 1) { 
     266                        sensorLog(LOG_ERR, "Error creating RRD: %s: %s", 
     267                                  sensord_args.rrdFile, "No sensors detected"); 
     268                        return -1; 
     269                } 
     270 
     271                sprintf(stepBuff, "%d", sensord_args.rrdTime); 
     272                sprintf(rraBuff, "RRA:%s:%f:%d:%d", 
     273                        sensord_args.rrdNoAverage ? "LAST" :"AVERAGE", 
     274                        0.5, 1, 7 * 24 * 60 * 60 / sensord_args.rrdTime); 
     275 
     276                argc += num; 
     277                argv[argc++] = rraBuff; 
     278                argv[argc] = NULL; 
     279 
     280                ret = rrd_create(argc, (char**) argv); 
     281                if (ret == -1) { 
     282                        sensorLog(LOG_ERR, "Error creating RRD file: %s: %s", 
     283                                  sensord_args.rrdFile, rrd_get_error()); 
     284                        return -1; 
     285                } 
     286        } 
     287 
     288        sensorLog(LOG_DEBUG, "sensor RRD initialized"); 
     289        return 0; 
    297290} 
    298291