Changeset 5719
- Timestamp:
- 05/13/09 18:04:51 (4 years ago)
- Location:
- lm-sensors/trunk/prog/sensord
- Files:
-
- 5 modified
Legend:
- Unmodified
- Added
- Removed
-
lm-sensors/trunk/prog/sensord/args.c
r5718 r5719 28 28 #include <syslog.h> 29 29 30 #include "args.h" 30 31 #include "sensord.h" 31 32 #include "lib/error.h" 32 33 #include "version.h" 33 34 34 #define MAX_CHIP_NAMES 32 35 36 int isDaemon = 0; 37 const char *sensorsCfgFile = NULL; 38 const char *pidFile = "/var/run/sensord.pid"; 39 const char *rrdFile = NULL; 40 const char *cgiDir = NULL; 41 int scanTime = 60; 42 int logTime = 30 * 60; 43 int rrdTime = 5 * 60; 44 int rrdNoAverage = 0; 45 int syslogFacility = LOG_LOCAL4; 46 int doCGI = 0; 47 int doLoad = 0; 48 int debug = 0; 49 sensors_chip_name chipNames[MAX_CHIP_NAMES]; 50 int numChipNames = 0; 35 struct sensord_arguments sensord_args = { 36 .pidFile = "/var/run/sensord.pid", 37 .scanTime = 60, 38 .logTime = 30 * 60, 39 .rrdTime = 5 * 60, 40 .syslogFacility = LOG_LOCAL4, 41 }; 51 42 52 43 static int parseTime(char *arg) … … 149 140 int c; 150 141 151 isDaemon = (argv[0][strlen (argv[0]) - 1] == 'd');152 if (! isDaemon) {142 sensord_args.isDaemon = (argv[0][strlen (argv[0]) - 1] == 'd'); 143 if (!sensord_args.isDaemon) { 153 144 fprintf(stderr, "Sensord no longer runs as an commandline" 154 145 " application.\n"); 155 146 return -1; 156 }147 } 157 148 158 149 while ((c = getopt_long(argc, argv, shortOptions, longOptions, NULL)) … … 160 151 switch(c) { 161 152 case 'i': 162 if ((s canTime = parseTime(optarg)) < 0)153 if ((sensord_args.scanTime = parseTime(optarg)) < 0) 163 154 return -1; 164 155 break; 165 156 case 'l': 166 if (( logTime = parseTime(optarg)) < 0)157 if ((sensord_args.logTime = parseTime(optarg)) < 0) 167 158 return -1; 168 159 break; 169 160 case 't': 170 if (( rrdTime = parseTime(optarg)) < 0)161 if ((sensord_args.rrdTime = parseTime(optarg)) < 0) 171 162 return -1; 172 163 break; 173 164 case 'T': 174 rrdNoAverage = 1;165 sensord_args.rrdNoAverage = 1; 175 166 break; 176 167 case 'f': 177 if ((syslogFacility = parseFacility(optarg)) < 0) 168 sensord_args.syslogFacility = parseFacility(optarg); 169 if (sensord_args.syslogFacility < 0) 178 170 return -1; 179 171 break; 180 172 case 'a': 181 doLoad = 1;173 sensord_args.doLoad = 1; 182 174 break; 183 175 case 'c': 184 sensor sCfgFile = optarg;176 sensord_args.cfgFile = optarg; 185 177 break; 186 178 case 'p': 187 pidFile = optarg;179 sensord_args.pidFile = optarg; 188 180 break; 189 181 case 'r': 190 rrdFile = optarg;182 sensord_args.rrdFile = optarg; 191 183 break; 192 184 case 'd': 193 debug = 1;185 sensord_args.debug = 1; 194 186 break; 195 187 case 'g': 196 doCGI = 1;197 cgiDir = optarg;188 sensord_args.doCGI = 1; 189 sensord_args.cgiDir = optarg; 198 190 break; 199 191 case 'v': … … 220 212 } 221 213 222 if ( doCGI && !rrdFile) {214 if (sensord_args.doCGI && !sensord_args.rrdFile) { 223 215 fprintf(stderr, 224 216 "Error: Incompatible --rrd-cgi without --rrd-file.\n"); … … 226 218 } 227 219 228 if ( rrdFile && !rrdTime) {220 if (sensord_args.rrdFile && !sensord_args.rrdTime) { 229 221 fprintf(stderr, 230 222 "Error: Incompatible --rrd-file without --rrd-interval.\n"); … … 232 224 } 233 225 234 if (!logTime && !scanTime && !rrdFile) { 226 if (!sensord_args.logTime && !sensord_args.scanTime && 227 !sensord_args.rrdFile) { 235 228 fprintf(stderr, 236 229 "Error: No logging, alarm or RRD scanning.\n"); … … 244 237 { 245 238 if (optind == argc) { 246 chipNames[0].prefix = SENSORS_CHIP_NAME_PREFIX_ANY; 247 chipNames[0].bus.type = SENSORS_BUS_TYPE_ANY; 248 chipNames[0].bus.nr = SENSORS_BUS_NR_ANY; 249 chipNames[0].addr = SENSORS_CHIP_NAME_ADDR_ANY; 250 numChipNames = 1; 239 sensord_args.chipNames[0].prefix = 240 SENSORS_CHIP_NAME_PREFIX_ANY; 241 sensord_args.chipNames[0].bus.type = SENSORS_BUS_TYPE_ANY; 242 sensord_args.chipNames[0].bus.nr = SENSORS_BUS_NR_ANY; 243 sensord_args.chipNames[0].addr = SENSORS_CHIP_NAME_ADDR_ANY; 244 sensord_args.numChipNames = 1; 251 245 } else { 252 246 int i, n = argc - optind, err; … … 257 251 for (i = 0; i < n; ++ i) { 258 252 char *arg = argv[optind + i]; 259 if ((err = sensors_parse_chip_name(arg, 260 chipNames + i))) { 253 254 err = sensors_parse_chip_name(arg, 255 sensord_args.chipNames + 256 i); 257 if (err) { 261 258 fprintf(stderr, 262 259 "Invalid chip name `%s': %s\n", arg, … … 265 262 } 266 263 } 267 numChipNames = n;264 sensord_args.numChipNames = n; 268 265 } 269 266 return 0; -
lm-sensors/trunk/prog/sensord/rrd.c
r5679 r5719 44 44 #include <rrd.h> 45 45 46 #include "args.h" 46 47 #include "sensord.h" 47 48 … … 142 143 int i, j, ret = 0, num = 0; 143 144 144 for (j = 0; (ret == 0) && (j < numChipNames); ++ j) {145 for (j = 0; (ret == 0) && (j < sensord_args.numChipNames); ++ j) { 145 146 i = 0; 146 while ((ret == 0) && ((chip = sensors_get_detected_chips(& chipNames[j], &i)) != NULL)) {147 while ((ret == 0) && ((chip = sensors_get_detected_chips(&sensord_args.chipNames[j], &i)) != NULL)) { 147 148 int index0, chipindex = -1; 148 149 … … 224 225 * instead of unknown 225 226 */ 226 sprintf(ptr, "DS:%s:GAUGE:%d:%s:%s", rawLabel, 5 * rrdTime,227 min, max);227 sprintf(ptr, "DS:%s:GAUGE:%d:%s:%s", rawLabel, 5 * 228 sensord_args.rrdTime, min, max); 228 229 } 229 230 return 0; … … 235 236 struct ds data = { 0, argv}; 236 237 ret = applyToFeatures(rrdGetSensors_DS, &data); 237 if (!ret && doLoad)238 if (!ret && sensord_args.doLoad) 238 239 ret = rrdGetSensors_DS(&data, LOADAVG, LOAD_AVERAGE, NULL); 239 240 return ret ? -1 : data.num; … … 246 247 247 248 sensorLog(LOG_DEBUG, "sensor RRD init"); 248 if (stat( rrdFile, &tmp)) {249 if (stat(sensord_args.rrdFile, &tmp)) { 249 250 if (errno == ENOENT) { 250 251 char stepBuff[STEP_BUFF], rraBuff[RRA_BUFF]; 251 252 int argc = 4, num; 252 253 const char *argv[6 + MAX_RRD_SENSORS] = { 253 "sensord", rrdFile, "-s", stepBuff254 "sensord", sensord_args.rrdFile, "-s", stepBuff 254 255 }; 255 256 … … 259 260 sensorLog(LOG_ERR, 260 261 "Error creating RRD: %s: %s", 261 rrdFile, "No sensors detected"); 262 sensord_args.rrdFile, 263 "No sensors detected"); 262 264 ret = 2; 263 265 } else if (num < 0) { 264 266 ret = -num; 265 267 } else { 266 sprintf(stepBuff, "%d", rrdTime);268 sprintf(stepBuff, "%d", sensord_args.rrdTime); 267 269 sprintf(rraBuff, "RRA:%s:%f:%d:%d", 268 rrdNoAverage?"LAST":"AVERAGE", 270 sensord_args.rrdNoAverage ? "LAST" : 271 "AVERAGE", 269 272 0.5 /* fraction of non-unknown samples needed per entry */, 270 273 1 /* samples per entry */, 271 7 * 24 * 60 * 60 / rrdTime /* 1 week */); 274 7 * 24 * 60 * 60 / 275 sensord_args.rrdTime /* 1 week */); 276 272 277 argc += num; 273 278 argv[argc ++] = rraBuff; … … 277 282 sensorLog(LOG_ERR, 278 283 "Error creating RRD file: %s: %s", 279 rrdFile, rrd_get_error()); 284 sensord_args.rrdFile, 285 rrd_get_error()); 280 286 } 281 287 } 282 288 } else { 283 289 sensorLog(LOG_ERR, "Error stat()ing RRD: %s: %s", 284 rrdFile, strerror(errno));290 sensord_args.rrdFile, strerror(errno)); 285 291 ret = 1; 286 292 } … … 311 317 (void) label; /* no warning */ 312 318 if (!feature || (feature->rrd && (feature->type == data->type))) 313 printf("\n\tDEF:%s=%s:%s:AVERAGE", rawLabel, rrdFile,314 rawLabel);319 printf("\n\tDEF:%s=%s:%s:AVERAGE", rawLabel, 320 sensord_args.rrdFile, rawLabel); 315 321 return 0; 316 322 } … … 421 427 { 422 428 int ret = rrdChips (); 423 if (!ret && doLoad) { 429 430 if (!ret && sensord_args.doLoad) { 424 431 FILE *loadavg; 425 432 if (!(loadavg = fopen("/proc/loadavg", "r"))) { … … 443 450 if (!ret) { 444 451 const char *argv[] = { 445 "sensord", rrdFile, rrdBuff, NULL452 "sensord", sensord_args.rrdFile, rrdBuff, NULL 446 453 }; 447 454 if ((ret = rrd_update(3, (char **) /* WEAK */ argv))) { 448 455 sensorLog(LOG_ERR, "Error updating RRD file: %s: %s", 449 rrdFile, rrd_get_error());456 sensord_args.rrdFile, rrd_get_error()); 450 457 } 451 458 } … … 464 471 printf("<H2>%s</H2>\n", graph->h2); 465 472 printf("<P>\n<RRD::GRAPH %s/%s.png\n\t--imginfo '<IMG SRC=" WWWDIR "/%%s WIDTH=%%lu HEIGHT=%%lu>'\n\t-a PNG\n\t-h 200 -w 800\n", 466 cgiDir, graph->image);473 sensord_args.cgiDir, graph->image); 467 474 printf("\t--lazy\n\t-v '%s'\n\t-t '%s'\n\t-x '%s'\n\t%s", 468 475 graph->axisTitle, graph->title, graph->axisDefn, … … 470 477 if (!ret) 471 478 ret = applyToFeatures(rrdCGI_DEF, graph); 472 if (!ret && doLoad && graph->loadAvg)479 if (!ret && sensord_args.doLoad && graph->loadAvg) 473 480 ret = rrdCGI_DEF(graph, LOADAVG, LOAD_AVERAGE, NULL); 474 481 if (!ret) 475 482 ret = applyToFeatures(rrdCGI_LINE, graph); 476 if (!ret && doLoad && graph->loadAvg)483 if (!ret && sensord_args.doLoad && graph->loadAvg) 477 484 ret = rrdCGI_LINE(graph, LOADAVG, LOAD_AVERAGE, NULL); 478 485 printf (">\n</P>\n"); -
lm-sensors/trunk/prog/sensord/sense.c
r5678 r5719 27 27 #include <syslog.h> 28 28 29 #include "args.h" 29 30 #include "sensord.h" 30 31 #include "lib/error.h" … … 190 191 int i, j, ret = 0; 191 192 192 for (j = 0; (ret == 0) && (j < numChipNames); ++ j) {193 for (j = 0; (ret == 0) && (j < sensord_args.numChipNames); ++ j) { 193 194 i = 0; 194 195 while ((ret == 0) && 195 ((chip = sensors_get_detected_chips(&chipNames[j], &i)) 196 != NULL)) { 196 ((chip = sensors_get_detected_chips(&sensord_args.chipNames[j], &i)) != NULL)) { 197 197 ret = doChip(chip, action); 198 198 } -
lm-sensors/trunk/prog/sensord/sensord.c
r5718 r5719 34 34 #include <sys/stat.h> 35 35 36 #include "args.h" 36 37 #include "sensord.h" 37 38 … … 53 54 buffer[LOG_BUFFER] = '\0'; 54 55 va_end(ap); 55 if ( debug || (priority < LOG_DEBUG)) {56 if (sensord_args.debug || (priority < LOG_DEBUG)) { 56 57 if (logOpened) { 57 58 syslog(priority, "%s", buffer); … … 84 85 * one timeslot updated twice on restart for example. 85 86 */ 86 int rrdValue = rrdTime - time(NULL) % rrdTime; 87 int rrdValue = sensord_args.rrdTime - time(NULL) % 88 sensord_args.rrdTime; 87 89 88 90 sensorLog(LOG_INFO, "sensord started"); … … 90 92 while (!done) { 91 93 if (reload) { 92 ret = reloadLib(sensor sCfgFile);94 ret = reloadLib(sensord_args.cfgFile); 93 95 if (ret) 94 96 sensorLog(LOG_NOTICE, … … 96 98 reload = 0; 97 99 } 98 if (s canTime && (scanValue <= 0)) {100 if (sensord_args.scanTime && (scanValue <= 0)) { 99 101 if ((ret = scanChips())) 100 102 sensorLog(LOG_NOTICE, 101 103 "sensor scan error (%d)", ret); 102 scanValue += s canTime;103 } 104 if ( logTime && (logValue <= 0)) {104 scanValue += sensord_args.scanTime; 105 } 106 if (sensord_args.logTime && (logValue <= 0)) { 105 107 if ((ret = readChips())) 106 108 sensorLog(LOG_NOTICE, 107 109 "sensor read error (%d)", ret); 108 logValue += logTime; 109 } 110 if (rrdTime && rrdFile && (rrdValue <= 0)) { 110 logValue += sensord_args.logTime; 111 } 112 if (sensord_args.rrdTime && sensord_args.rrdFile && 113 (rrdValue <= 0)) { 111 114 if ((ret = rrdUpdate())) 112 115 sensorLog(LOG_NOTICE, … … 117 120 * interval. 118 121 */ 119 rrdValue = rrdTime - time(NULL) % rrdTime; 122 rrdValue = sensord_args.rrdTime - time(NULL) % 123 sensord_args.rrdTime; 120 124 } 121 125 if (!done) { 122 int a = logTime ? logValue : INT_MAX; 123 int b = scanTime ? scanValue : INT_MAX; 124 int c = (rrdTime && rrdFile) ? rrdValue : INT_MAX; 126 int a = sensord_args.logTime ? logValue : INT_MAX; 127 int b = sensord_args.scanTime ? scanValue : INT_MAX; 128 int c = (sensord_args.rrdTime && sensord_args.rrdFile) 129 ? rrdValue : INT_MAX; 125 130 int sleepTime = (a < b) ? ((a < c) ? a : c) : 126 131 ((b < c) ? b : c); … … 139 144 static void openLog(void) 140 145 { 141 openlog("sensord", 0, s yslogFacility);146 openlog("sensord", 0, sensord_args.syslogFacility); 142 147 logOpened = 1; 143 148 } … … 154 159 } 155 160 156 if (!(stat( pidFile, &fileStat)) &&161 if (!(stat(sensord_args.pidFile, &fileStat)) && 157 162 ((!S_ISREG(fileStat.st_mode)) || (fileStat.st_size > 11))) { 158 163 fprintf(stderr, 159 164 "Error: PID file `%s' already exists and looks suspicious.\n", 160 pidFile);161 exit(EXIT_FAILURE); 162 } 163 164 if (!(file = fopen( pidFile, "w"))) {165 fprintf(stderr, "fopen(\"%s\"): %s\n", pidFile,165 sensord_args.pidFile); 166 exit(EXIT_FAILURE); 167 } 168 169 if (!(file = fopen(sensord_args.pidFile, "w"))) { 170 fprintf(stderr, "fopen(\"%s\"): %s\n", sensord_args.pidFile, 166 171 strerror(errno)); 167 172 exit(EXIT_FAILURE); … … 198 203 static void undaemonize(void) 199 204 { 200 unlink( pidFile);205 unlink(sensord_args.pidFile); 201 206 closelog(); 202 207 } … … 210 215 exit(EXIT_FAILURE); 211 216 212 if (loadLib(sensor sCfgFile))217 if (loadLib(sensord_args.cfgFile)) 213 218 exit(EXIT_FAILURE); 214 219 215 220 openLog(); 216 221 217 if ( rrdFile) {222 if (sensord_args.rrdFile) { 218 223 ret = rrdInit(); 219 224 if (ret) … … 221 226 } 222 227 223 if ( doCGI) {228 if (sensord_args.doCGI) { 224 229 ret = rrdCGI(); 225 230 } else { -
lm-sensors/trunk/prog/sensord/sensord.h
r5718 r5719 27 27 28 28 /* from args.c */ 29 30 extern int isDaemon;31 extern const char *sensorsCfgFile;32 extern const char *pidFile;33 extern const char *rrdFile;34 extern const char *cgiDir;35 extern int scanTime;36 extern int logTime;37 extern int rrdTime;38 extern int rrdNoAverage;39 extern int syslogFacility;40 extern int doCGI;41 extern int doLoad;42 extern int debug;43 extern sensors_chip_name chipNames[];44 extern int numChipNames;45 29 46 30 extern int parseArgs(int argc, char **argv);
