Changeset 7b927621aa1d1fb7e9e915e74ab2a86ce90f73ac
- Timestamp:
- 02/19/08 23:18:15
(5 years ago)
- Author:
- Theo Schlossnagle <jesus@omniti.com>
- git-committer:
- Theo Schlossnagle <jesus@omniti.com> 1203463095 +0000
- git-parent:
[ab565fae806825018d27c990172e58aa9e999c17]
- git-author:
- Theo Schlossnagle <jesus@omniti.com> 1203463095 +0000
- Message:
make the metrics stuff more flexible, setup check/status/metrics logging.
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| ra7f575a |
r7b92762 |
|
| 27 | 27 | OBJS=noitd.o noit_listener.o \ |
|---|
| 28 | 28 | noit_console.o noit_console_state.o noit_console_telnet.o \ |
|---|
| 29 | | noit_check.o \ |
|---|
| | 29 | noit_check.o noit_check_log.o \ |
|---|
| 30 | 30 | noit_module.o noit_conf.o noit_tokenizer.o |
|---|
| 31 | 31 | |
|---|
| r646e6d2 |
r7b92762 |
|
| 55 | 55 | typedef struct buf_t { |
|---|
| 56 | 56 | char *b; |
|---|
| 57 | | int l; |
|---|
| | 57 | int32_t l; |
|---|
| 58 | 58 | } buf_t; |
|---|
| 59 | 59 | |
|---|
| … | … | |
| 177 | 177 | current.status = human_buffer; |
|---|
| 178 | 178 | if(current.available == NP_AVAILABLE) { |
|---|
| 179 | | noit_stats_set_metric_string(¤t, "code", ci->status.code?code:NULL); |
|---|
| 180 | | noit_stats_set_metric_int(¤t, "bytes", &ci->body.l); |
|---|
| | 179 | noit_stats_set_metric(¤t, "code", |
|---|
| | 180 | METRIC_STRING, ci->status.code?code:NULL); |
|---|
| | 181 | noit_stats_set_metric(¤t, "bytes", |
|---|
| | 182 | METRIC_INT32, &ci->body.l); |
|---|
| 181 | 183 | } |
|---|
| 182 | 184 | else { |
|---|
| 183 | | noit_stats_set_metric_int(¤t, "code", NULL); |
|---|
| 184 | | noit_stats_set_metric_int(¤t, "bytes", NULL); |
|---|
| | 185 | noit_stats_set_metric(¤t, "code", METRIC_STRING, NULL); |
|---|
| | 186 | noit_stats_set_metric(¤t, "bytes", METRIC_INT32, NULL); |
|---|
| 185 | 187 | } |
|---|
| 186 | 188 | noit_check_set_stats(self, check, ¤t); |
|---|
| … | … | |
| 241 | 243 | struct timeval duration; |
|---|
| 242 | 244 | stats_t current; |
|---|
| 243 | | int services = 0; |
|---|
| | 245 | int32_t services = 0; |
|---|
| 244 | 246 | char human_buffer[256], rt[14]; |
|---|
| 245 | 247 | xmlDocPtr resmon_results = NULL; |
|---|
| … | … | |
| 290 | 292 | current.status = human_buffer; |
|---|
| 291 | 293 | |
|---|
| 292 | | noit_stats_set_metric_int(¤t, "services", &services); |
|---|
| | 294 | noit_stats_set_metric(¤t, "services", METRIC_INT32, &services); |
|---|
| 293 | 295 | if(services) { |
|---|
| 294 | 296 | int i; |
|---|
| … | … | |
| 311 | 313 | |
|---|
| 312 | 314 | for(a=0; a<3; a++) { |
|---|
| 313 | | int intval; |
|---|
| | 315 | int32_t intval; |
|---|
| 314 | 316 | sobj = xmlXPathEval((xmlChar *)attrs[a], xpath_ctxt); |
|---|
| 315 | 317 | attrnode = xmlXPathNodeSetItem(sobj->nodesetval, 0); |
|---|
| … | … | |
| 321 | 323 | /* The first is integer */ |
|---|
| 322 | 324 | intval = (int)(atof(value) * 1000.0); |
|---|
| 323 | | noit_stats_set_metric_int(¤t, attr, &intval); |
|---|
| | 325 | noit_stats_set_metric(¤t, attr, METRIC_INT32, &intval); |
|---|
| 324 | 326 | break; |
|---|
| 325 | 327 | case 1: |
|---|
| | 328 | noit_stats_set_metric(¤t, attr, METRIC_STRING, value); |
|---|
| | 329 | break; |
|---|
| 326 | 330 | case 2: |
|---|
| 327 | | noit_stats_set_metric_string(¤t, attr, (char *)value); |
|---|
| | 331 | noit_stats_set_metric(¤t, attr, METRIC_GUESS, value); |
|---|
| 328 | 332 | break; |
|---|
| 329 | 333 | } |
|---|
| r646e6d2 |
r7b92762 |
|
| 31 | 31 | int check_seq_no; |
|---|
| 32 | 32 | int seq; |
|---|
| 33 | | int expected_count; |
|---|
| | 33 | int32_t expected_count; |
|---|
| 34 | 34 | float *turnaround; |
|---|
| 35 | 35 | eventer_t timeout_event; |
|---|
| … | … | |
| 76 | 76 | static void ping_icmp_log_results(noit_module_t *self, noit_check_t *check) { |
|---|
| 77 | 77 | struct check_info *data; |
|---|
| 78 | | float avail, min = MAXFLOAT, max = 0.0, avg = 0.0, cnt; |
|---|
| | 78 | double avail, min = MAXFLOAT, max = 0.0, avg = 0.0, cnt; |
|---|
| 79 | 79 | int i, points = 0; |
|---|
| 80 | 80 | char human_buffer[256]; |
|---|
| … | … | |
| 112 | 112 | current.state = (avail < 1.0) ? NP_BAD : NP_GOOD; |
|---|
| 113 | 113 | current.status = human_buffer; |
|---|
| 114 | | noit_stats_set_metric_int(¤t, "count", &data->expected_count); |
|---|
| | 114 | noit_stats_set_metric(¤t, "count", |
|---|
| | 115 | METRIC_INT32, &data->expected_count); |
|---|
| 115 | 116 | avail *= 100.0; |
|---|
| 116 | | noit_stats_set_metric_float(¤t, "available", &avail); |
|---|
| 117 | | noit_stats_set_metric_float(¤t, "minimum", avail > 0.0 ? &min : NULL); |
|---|
| 118 | | noit_stats_set_metric_float(¤t, "maximum", avail > 0.0 ? &max : NULL); |
|---|
| 119 | | noit_stats_set_metric_float(¤t, "average", avail > 0.0 ? &avg : NULL); |
|---|
| | 117 | noit_stats_set_metric(¤t, "available", METRIC_DOUBLE, &avail); |
|---|
| | 118 | noit_stats_set_metric(¤t, "minimum", |
|---|
| | 119 | METRIC_DOUBLE, avail > 0.0 ? &min : NULL); |
|---|
| | 120 | noit_stats_set_metric(¤t, "maximum", |
|---|
| | 121 | METRIC_DOUBLE, avail > 0.0 ? &max : NULL); |
|---|
| | 122 | noit_stats_set_metric(¤t, "average", |
|---|
| | 123 | METRIC_DOUBLE, avail > 0.0 ? &avg : NULL); |
|---|
| 120 | 124 | noit_check_set_stats(self, check, ¤t); |
|---|
| 121 | 125 | } |
|---|
| r646e6d2 |
r7b92762 |
|
| 378 | 378 | new_check->flags |= NP_DISABLED; |
|---|
| 379 | 379 | } |
|---|
| | 380 | noit_check_log_check(new_check); |
|---|
| 380 | 381 | return 0; |
|---|
| 381 | 382 | } |
|---|
| … | … | |
| 490 | 491 | } |
|---|
| 491 | 492 | |
|---|
| 492 | | void |
|---|
| 493 | | noit_stats_set_metric_int(stats_t *newstate, char *name, int *value) { |
|---|
| 494 | | metric_t *m = calloc(1, sizeof(*m)); |
|---|
| | 493 | static size_t |
|---|
| | 494 | noit_metric_sizes(metric_type_t type, void *value) { |
|---|
| | 495 | switch(type) { |
|---|
| | 496 | case METRIC_INT32: |
|---|
| | 497 | case METRIC_UINT32: |
|---|
| | 498 | return sizeof(int32_t); |
|---|
| | 499 | case METRIC_INT64: |
|---|
| | 500 | case METRIC_UINT64: |
|---|
| | 501 | return sizeof(int64_t); |
|---|
| | 502 | case METRIC_DOUBLE: |
|---|
| | 503 | return sizeof(double); |
|---|
| | 504 | case METRIC_STRING: |
|---|
| | 505 | return strlen((char *)value) + 1; |
|---|
| | 506 | case METRIC_GUESS: |
|---|
| | 507 | break; |
|---|
| | 508 | } |
|---|
| | 509 | assert(type != type); |
|---|
| | 510 | return 0; |
|---|
| | 511 | } |
|---|
| | 512 | static metric_type_t |
|---|
| | 513 | noit_metric_guess_type(const char *s) { |
|---|
| | 514 | if(!s) return METRIC_GUESS; |
|---|
| | 515 | return METRIC_STRING; |
|---|
| | 516 | } |
|---|
| | 517 | void |
|---|
| | 518 | noit_stats_set_metric(stats_t *newstate, char *name, metric_type_t type, |
|---|
| | 519 | void *value) { |
|---|
| | 520 | metric_t *m; |
|---|
| | 521 | if(type == METRIC_GUESS) type = noit_metric_guess_type((char *)value); |
|---|
| | 522 | if(type == METRIC_GUESS) return; |
|---|
| | 523 | |
|---|
| | 524 | m = calloc(1, sizeof(*m)); |
|---|
| 495 | 525 | m->metric_name = strdup(name); |
|---|
| 496 | | m->metric_type = METRIC_INT; |
|---|
| | 526 | m->metric_type = type; |
|---|
| 497 | 527 | if(value) { |
|---|
| 498 | | m->metric_value.i = malloc(sizeof(*value)); |
|---|
| 499 | | *(m->metric_value.i) = *value; |
|---|
| 500 | | } |
|---|
| 501 | | __stats_add_metric(newstate, m); |
|---|
| 502 | | } |
|---|
| 503 | | |
|---|
| 504 | | void |
|---|
| 505 | | noit_stats_set_metric_float(stats_t *newstate, char *name, float *value) { |
|---|
| 506 | | metric_t *m = calloc(1, sizeof(*m)); |
|---|
| 507 | | m->metric_name = strdup(name); |
|---|
| 508 | | m->metric_type = METRIC_FLOAT; |
|---|
| 509 | | if(value) { |
|---|
| 510 | | m->metric_value.f = malloc(sizeof(*value)); |
|---|
| 511 | | *(m->metric_value.f) = *value; |
|---|
| 512 | | } |
|---|
| 513 | | __stats_add_metric(newstate, m); |
|---|
| 514 | | } |
|---|
| 515 | | |
|---|
| 516 | | void |
|---|
| 517 | | noit_stats_set_metric_string(stats_t *newstate, char *name, char *value) { |
|---|
| 518 | | metric_t *m = calloc(1, sizeof(*m)); |
|---|
| 519 | | m->metric_name = strdup(name); |
|---|
| 520 | | m->metric_type = METRIC_STRING; |
|---|
| 521 | | m->metric_value.s = value ? strdup(value) : NULL; |
|---|
| | 528 | size_t len; |
|---|
| | 529 | len = noit_metric_sizes(type, value); |
|---|
| | 530 | m->metric_value.vp = calloc(1, len); |
|---|
| | 531 | memcpy(m->metric_value.vp, value, len); |
|---|
| | 532 | } |
|---|
| 522 | 533 | __stats_add_metric(newstate, m); |
|---|
| 523 | 534 | } |
|---|
| … | … | |
| 554 | 565 | __noit_check_state_string(check->stats.current.state)); |
|---|
| 555 | 566 | } |
|---|
| | 567 | |
|---|
| | 568 | /* Write out our status */ |
|---|
| | 569 | noit_check_log_status(check); |
|---|
| | 570 | /* Write out all metrics */ |
|---|
| | 571 | noit_check_log_metrics(check); |
|---|
| | 572 | |
|---|
| 556 | 573 | for(dep = check->causal_checks; dep; dep = dep->next) { |
|---|
| 557 | 574 | noit_module_t *mod; |
|---|
| r646e6d2 |
r7b92762 |
|
| 45 | 45 | #define NP_GOOD 'G' /* stats_t.state */ |
|---|
| 46 | 46 | |
|---|
| | 47 | typedef enum { |
|---|
| | 48 | METRIC_GUESS = '0', |
|---|
| | 49 | METRIC_INT32 = 'i', |
|---|
| | 50 | METRIC_UINT32 = 'I', |
|---|
| | 51 | METRIC_INT64 = 'l', |
|---|
| | 52 | METRIC_UINT64 = 'L', |
|---|
| | 53 | METRIC_DOUBLE = 'n', |
|---|
| | 54 | METRIC_STRING = 's' |
|---|
| | 55 | } metric_type_t; |
|---|
| | 56 | |
|---|
| 47 | 57 | typedef struct { |
|---|
| 48 | 58 | char *metric_name; |
|---|
| 49 | | enum { METRIC_INT, METRIC_FLOAT, METRIC_STRING } metric_type; |
|---|
| | 59 | metric_type_t metric_type; |
|---|
| 50 | 60 | union { |
|---|
| 51 | | float *f; |
|---|
| 52 | | int *i; |
|---|
| | 61 | double *n; |
|---|
| | 62 | int32_t *i; |
|---|
| | 63 | u_int32_t *I; |
|---|
| | 64 | int64_t *l; |
|---|
| | 65 | u_int64_t *L; |
|---|
| 53 | 66 | char *s; |
|---|
| | 67 | void *vp; /* used for clever assignments */ |
|---|
| 54 | 68 | } metric_value; |
|---|
| 55 | 69 | } metric_t; |
|---|
| … | … | |
| 152 | 166 | |
|---|
| 153 | 167 | API_EXPORT(void) |
|---|
| 154 | | noit_stats_set_metric_int(stats_t *newstate, char *name, int *value); |
|---|
| 155 | | API_EXPORT(void) |
|---|
| 156 | | noit_stats_set_metric_float(stats_t *newstate, char *name, float *value); |
|---|
| 157 | | API_EXPORT(void) |
|---|
| 158 | | noit_stats_set_metric_string(stats_t *newstate, char *name, char *value); |
|---|
| | 168 | noit_stats_set_metric(stats_t *, char *, metric_type_t, void *); |
|---|
| | 169 | |
|---|
| | 170 | /* These are from noit_check_log.c */ |
|---|
| | 171 | API_EXPORT(void) noit_check_log_check(noit_check_t *check); |
|---|
| | 172 | API_EXPORT(void) noit_check_log_status(noit_check_t *check); |
|---|
| | 173 | API_EXPORT(void) noit_check_log_metrics(noit_check_t *check); |
|---|
| 159 | 174 | |
|---|
| 160 | 175 | #endif |
|---|
| r1648bed |
r7b92762 |
|
| 13 | 13 | <log name="debug" disabled="true"> |
|---|
| 14 | 14 | <outlet name="stderr" /> |
|---|
| | 15 | </log> |
|---|
| | 16 | <!--<log name="feed" type="jlog" path="/var/log/noitd.feed" />--> |
|---|
| | 17 | <log name="feed"><outlet name="stderr"/></log> |
|---|
| | 18 | <log name="check"> |
|---|
| | 19 | <outlet name="feed" /> |
|---|
| | 20 | </log> |
|---|
| | 21 | <log name="status"> |
|---|
| | 22 | <outlet name="feed" /> |
|---|
| | 23 | </log> |
|---|
| | 24 | <log name="metrics"> |
|---|
| | 25 | <outlet name="feed" /> |
|---|
| 15 | 26 | </log> |
|---|
| 16 | 27 | </logs> |
|---|