| 262 | | switch(vars->type) { |
|---|
| 263 | | case ASN_OCTET_STR: |
|---|
| 264 | | sp = malloc(1 + vars->val_len); |
|---|
| 265 | | memcpy(sp, vars->val.string, vars->val_len); |
|---|
| 266 | | sp[vars->val_len] = '\0'; |
|---|
| 267 | | SETM(METRIC_STRING, sp); |
|---|
| 268 | | free(sp); |
|---|
| 269 | | break; |
|---|
| 270 | | case ASN_INTEGER: |
|---|
| 271 | | case ASN_GAUGE: |
|---|
| 272 | | SETM(METRIC_INT32, vars->val.integer); |
|---|
| 273 | | break; |
|---|
| 274 | | case ASN_TIMETICKS: |
|---|
| 275 | | case ASN_COUNTER: |
|---|
| 276 | | SETM(METRIC_UINT32, vars->val.integer); |
|---|
| 277 | | break; |
|---|
| 278 | | case ASN_INTEGER64: |
|---|
| 279 | | printI64(varbuff, vars->val.counter64); |
|---|
| 280 | | i64 = strtoll(varbuff, &endptr, 10); |
|---|
| 281 | | SETM(METRIC_INT64, (varbuff == endptr) ? NULL : &i64); |
|---|
| 282 | | break; |
|---|
| 283 | | case ASN_COUNTER64: |
|---|
| 284 | | printU64(varbuff, vars->val.counter64); |
|---|
| 285 | | u64 = strtoull(varbuff, &endptr, 10); |
|---|
| 286 | | SETM(METRIC_UINT64, (varbuff == endptr) ? NULL : &u64); |
|---|
| 287 | | break; |
|---|
| 288 | | case ASN_FLOAT: |
|---|
| 289 | | if(vars->val.floatVal) float_conv = *(vars->val.floatVal); |
|---|
| 290 | | SETM(METRIC_DOUBLE, vars->val.floatVal ? &float_conv : NULL); |
|---|
| 291 | | break; |
|---|
| 292 | | case ASN_DOUBLE: |
|---|
| 293 | | SETM(METRIC_DOUBLE, vars->val.doubleVal); |
|---|
| 294 | | break; |
|---|
| 295 | | case SNMP_NOSUCHOBJECT: |
|---|
| 296 | | case SNMP_NOSUCHINSTANCE: |
|---|
| 297 | | SETM(METRIC_STRING, NULL); |
|---|
| 298 | | break; |
|---|
| 299 | | default: |
|---|
| 300 | | snprint_variable(varbuff, sizeof(varbuff), vars->name, vars->name_length, vars); |
|---|
| 301 | | /* Advance passed the first space and use that unless there |
|---|
| 302 | | * is no space or we have no more string left. |
|---|
| 303 | | */ |
|---|
| 304 | | sp = strchr(varbuff, ' '); |
|---|
| 305 | | if(sp) sp++; |
|---|
| 306 | | SETM(METRIC_STRING, (sp && *sp) ? sp : NULL); |
|---|
| | 264 | if(info->oids[oid_idx].type_should_override) { |
|---|
| | 265 | snprint_value(varbuff, sizeof(varbuff), vars->name, vars->name_length, vars); |
|---|
| | 266 | sp = strchr(varbuff, ' '); |
|---|
| | 267 | if(sp) sp++; |
|---|
| | 268 | noit_stats_set_metric_coerce(¤t, info->oids[oid_idx].confname, |
|---|
| | 269 | info->oids[oid_idx].type_override, |
|---|
| | 270 | sp); |
|---|
| | 271 | } |
|---|
| | 272 | else { |
|---|
| | 273 | switch(vars->type) { |
|---|
| | 274 | case ASN_OCTET_STR: |
|---|
| | 275 | sp = malloc(1 + vars->val_len); |
|---|
| | 276 | memcpy(sp, vars->val.string, vars->val_len); |
|---|
| | 277 | sp[vars->val_len] = '\0'; |
|---|
| | 278 | SETM(METRIC_STRING, sp); |
|---|
| | 279 | free(sp); |
|---|
| | 280 | break; |
|---|
| | 281 | case ASN_INTEGER: |
|---|
| | 282 | case ASN_GAUGE: |
|---|
| | 283 | SETM(METRIC_INT32, vars->val.integer); |
|---|
| | 284 | break; |
|---|
| | 285 | case ASN_TIMETICKS: |
|---|
| | 286 | case ASN_COUNTER: |
|---|
| | 287 | SETM(METRIC_UINT32, vars->val.integer); |
|---|
| | 288 | break; |
|---|
| | 289 | case ASN_INTEGER64: |
|---|
| | 290 | printI64(varbuff, vars->val.counter64); |
|---|
| | 291 | i64 = strtoll(varbuff, &endptr, 10); |
|---|
| | 292 | SETM(METRIC_INT64, (varbuff == endptr) ? NULL : &i64); |
|---|
| | 293 | break; |
|---|
| | 294 | case ASN_COUNTER64: |
|---|
| | 295 | printU64(varbuff, vars->val.counter64); |
|---|
| | 296 | u64 = strtoull(varbuff, &endptr, 10); |
|---|
| | 297 | SETM(METRIC_UINT64, (varbuff == endptr) ? NULL : &u64); |
|---|
| | 298 | break; |
|---|
| | 299 | case ASN_FLOAT: |
|---|
| | 300 | if(vars->val.floatVal) float_conv = *(vars->val.floatVal); |
|---|
| | 301 | SETM(METRIC_DOUBLE, vars->val.floatVal ? &float_conv : NULL); |
|---|
| | 302 | break; |
|---|
| | 303 | case ASN_DOUBLE: |
|---|
| | 304 | SETM(METRIC_DOUBLE, vars->val.doubleVal); |
|---|
| | 305 | break; |
|---|
| | 306 | case SNMP_NOSUCHOBJECT: |
|---|
| | 307 | case SNMP_NOSUCHINSTANCE: |
|---|
| | 308 | SETM(METRIC_STRING, NULL); |
|---|
| | 309 | break; |
|---|
| | 310 | default: |
|---|
| | 311 | snprint_variable(varbuff, sizeof(varbuff), vars->name, vars->name_length, vars); |
|---|
| | 312 | /* Advance passed the first space and use that unless there |
|---|
| | 313 | * is no space or we have no more string left. |
|---|
| | 314 | */ |
|---|
| | 315 | sp = strchr(varbuff, ' '); |
|---|
| | 316 | if(sp) sp++; |
|---|
| | 317 | SETM(METRIC_STRING, (sp && *sp) ? sp : NULL); |
|---|
| | 318 | } |
|---|
| | 883 | snprintf(typestr, sizeof(typestr), "type_%s", name); |
|---|
| | 884 | if(noit_hash_retr_str(check->config, typestr, strlen(typestr), |
|---|
| | 885 | &type_override)) { |
|---|
| | 886 | int type_enum_fake = *type_override; |
|---|
| | 887 | |
|---|
| | 888 | if(!strcasecmp(type_override, "guess")) |
|---|
| | 889 | type_enum_fake = METRIC_GUESS; |
|---|
| | 890 | else if(!strcasecmp(type_override, "int32")) |
|---|
| | 891 | type_enum_fake = METRIC_INT32; |
|---|
| | 892 | else if(!strcasecmp(type_override, "uint32")) |
|---|
| | 893 | type_enum_fake = METRIC_UINT32; |
|---|
| | 894 | else if(!strcasecmp(type_override, "int64")) |
|---|
| | 895 | type_enum_fake = METRIC_INT64; |
|---|
| | 896 | else if(!strcasecmp(type_override, "uint64")) |
|---|
| | 897 | type_enum_fake = METRIC_UINT64; |
|---|
| | 898 | else if(!strcasecmp(type_override, "double")) |
|---|
| | 899 | type_enum_fake = METRIC_DOUBLE; |
|---|
| | 900 | else if(!strcasecmp(type_override, "string")) |
|---|
| | 901 | type_enum_fake = METRIC_STRING; |
|---|
| | 902 | |
|---|
| | 903 | switch(type_enum_fake) { |
|---|
| | 904 | case METRIC_GUESS: |
|---|
| | 905 | case METRIC_INT32: case METRIC_UINT32: |
|---|
| | 906 | case METRIC_INT64: case METRIC_UINT64: |
|---|
| | 907 | case METRIC_DOUBLE: case METRIC_STRING: |
|---|
| | 908 | info->oids[i].type_override = *type_override; |
|---|
| | 909 | info->oids[i].type_should_override = noit_true; |
|---|
| | 910 | default: break; |
|---|
| | 911 | } |
|---|
| | 912 | } |
|---|