gauge_t ratio = us->rate / cpu_rate;
value_t v = {0};
int status = rate_to_value(&v, ratio, &us->to_count,
- METRIC_TYPE_FPCOUNTER, u->time);
+ METRIC_TYPE_COUNTER_FP, u->time);
if (status == 0) {
- us->count = v.fpcounter;
+ us->count = v.counter_fp;
us->has_count = true;
}
us->count = NAN;
if (!us->has_rate) {
/* Ensure that us->to_count is initialized. */
- rate_to_value(&(value_t){0}, 0.0, &us->to_count, METRIC_TYPE_FPCOUNTER,
+ rate_to_value(&(value_t){0}, 0.0, &us->to_count, METRIC_TYPE_COUNTER_FP,
u->time);
continue;
}
value_t v = {0};
int status = rate_to_value(&v, state_ratio[s], &us->to_count,
- METRIC_TYPE_FPCOUNTER, u->time);
+ METRIC_TYPE_COUNTER_FP, u->time);
if (status == 0) {
- us->count = v.fpcounter;
+ us->count = v.counter_fp;
us->has_count = true;
}
}
.name = "system.cpu.time",
.help = "Microseconds each logical CPU spent in each state",
.unit = "s",
- .type = METRIC_TYPE_FPCOUNTER,
+ .type = METRIC_TYPE_COUNTER_FP,
};
metric_t m = {0};
continue;
}
metric_family_append(&fam, label_state, cpu_state_names[state],
- (value_t){.fpcounter = usage}, &m);
+ (value_t){.counter_fp = usage}, &m);
}
} else {
fpcounter_t usage = usage_count(u, cpu_num, STATE_ACTIVE);
if (!isnan(usage)) {
metric_family_append(&fam, label_state, cpu_state_names[STATE_ACTIVE],
- (value_t){.fpcounter = usage}, &m);
+ (value_t){.counter_fp = usage}, &m);
}
}
return strbuf_printf(buf, GAUGE_FORMAT, v.gauge);
case METRIC_TYPE_COUNTER:
return strbuf_printf(buf, "%" PRIu64, v.counter);
- case METRIC_TYPE_FPCOUNTER:
- return strbuf_printf(buf, GAUGE_FORMAT, v.fpcounter);
+ case METRIC_TYPE_COUNTER_FP:
+ return strbuf_printf(buf, GAUGE_FORMAT, v.counter_fp);
case METRIC_TYPE_UP_DOWN:
return strbuf_printf(buf, "%" PRId64, v.up_down);
case METRIC_TYPE_UP_DOWN_FP:
// METRIC_TYPE_COUNTER are monotonically increasing integer counts. The rate
// of change is meaningful, the absolute value is not.
METRIC_TYPE_COUNTER = METRIC_ATTR_CUMULATIVE | METRIC_ATTR_MONOTONIC,
- // METRIC_TYPE_FPCOUNTER are monotonically increasing floating point counts.
+ // METRIC_TYPE_COUNTER_FP are monotonically increasing floating point counts.
// The rate of change is meaningful, the absolute value is not.
- METRIC_TYPE_FPCOUNTER =
+ METRIC_TYPE_COUNTER_FP =
METRIC_ATTR_DOUBLE | METRIC_ATTR_CUMULATIVE | METRIC_ATTR_MONOTONIC,
// METRIC_TYPE_UP_DOWN are absolute integer metrics that can
// (meaningfully) be summed up. Examples are filesystem space used and
#define METRIC_TYPE_TO_STRING(t) \
(t == METRIC_TYPE_GAUGE) ? "gauge" \
: (t == METRIC_TYPE_COUNTER) ? "counter" \
- : (t == METRIC_TYPE_FPCOUNTER) ? "fpcounter" \
+ : (t == METRIC_TYPE_COUNTER_FP) ? "counter_fp" \
: (t == METRIC_TYPE_UP_DOWN) ? "up_down" \
: (t == METRIC_TYPE_UP_DOWN_FP) ? "up_down_fp" \
: "unknown"
union value_u {
gauge_t gauge;
counter_t counter;
- fpcounter_t fpcounter;
+ fpcounter_t counter_fp;
up_down_counter_t up_down;
up_down_counter_fp_t up_down_fp;
// For collectd 5 compatiblity. Treated the same as up_down.
return 0;
}
- case METRIC_TYPE_FPCOUNTER: {
+ case METRIC_TYPE_COUNTER_FP: {
// For floating point counters, the logic is slightly different from
// integer counters. Floating point counters don't have a (meaningful)
// overflow, and we will always assume a counter reset.
- if (ce->last_value.fpcounter > m->value.fpcounter) {
+ if (ce->last_value.counter_fp > m->value.counter_fp) {
// counter reset
ce->first_time = m->time;
ce->first_value = m->value;
ce->values_gauge = NAN;
return 0;
}
- gauge_t diff = m->value.fpcounter - ce->last_value.fpcounter;
+ gauge_t diff = m->value.counter_fp - ce->last_value.counter_fp;
ce->values_gauge = diff / CDTIME_T_TO_DOUBLE(m->time - ce->last_time);
return 0;
}
*ret = m->value.gauge;
return 0;
case METRIC_TYPE_COUNTER:
- case METRIC_TYPE_FPCOUNTER:
+ case METRIC_TYPE_COUNTER_FP:
break;
case METRIC_TYPE_UP_DOWN:
*ret = (gauge_t)m->value.up_down;
} uc_first_metric_result_t;
/* uc_first_metric returns the first observed metric value and time.
- * For cumulative metrics (METRIC_TYPE_COUNTER and METRIC_TYPE_FPCOUNTER),
+ * For cumulative metrics (METRIC_TYPE_COUNTER and METRIC_TYPE_COUNTER_FP),
* counter resets and counter overflows will reset the value. */
uc_first_metric_result_t uc_first_metric(metric_t const *m);
.want = (23. + 18. + 1.) / (110. - 100.),
},
{
- .name = "fpcounter",
- .first_value = (value_t){.fpcounter = 4.2},
- .second_value = (value_t){.fpcounter = 10.2},
+ .name = "counter_fp",
+ .first_value = (value_t){.counter_fp = 4.2},
+ .second_value = (value_t){.counter_fp = 10.2},
.first_time = TIME_T_TO_CDTIME_T(100),
.second_time = TIME_T_TO_CDTIME_T(110),
- .type = METRIC_TYPE_FPCOUNTER,
+ .type = METRIC_TYPE_COUNTER_FP,
.want = (10.2 - 4.2) / (110 - 100),
},
{
- .name = "fpcounter with reset",
- .first_value = (value_t){.fpcounter = 100000.0},
- .second_value = (value_t){.fpcounter = 0.2},
+ .name = "counter_fp with reset",
+ .first_value = (value_t){.counter_fp = 100000.0},
+ .second_value = (value_t){.counter_fp = 0.2},
.first_time = TIME_T_TO_CDTIME_T(100),
.second_time = TIME_T_TO_CDTIME_T(110),
- .type = METRIC_TYPE_FPCOUNTER,
+ .type = METRIC_TYPE_COUNTER_FP,
.want = NAN,
},
{
.name = "system.disk.operation_time",
.help = "Sum of the time each operation took to complete",
.unit = "s",
- .type = METRIC_TYPE_FPCOUNTER,
+ .type = METRIC_TYPE_COUNTER_FP,
};
metric_family_t fam_merged = {
.name = "system.disk.merged",
.name = "system.disk.io_time",
.help = "Time disk spent activated",
.unit = "s",
- .type = METRIC_TYPE_FPCOUNTER,
+ .type = METRIC_TYPE_COUNTER_FP,
};
metric_family_t fam_disk_io_weighted_time = {
.name = "system.disk.weighted_io_time",
"this field. This can provide an easy measure of both I/O "
"completion time and the backlog that may be accumulating.",
.unit = "s",
- .type = METRIC_TYPE_FPCOUNTER,
+ .type = METRIC_TYPE_COUNTER_FP,
};
metric_family_t fam_disk_pending_operations = {
.name = "system.disk.pending_operations",
if ((read_time_ns != -1LL) || (write_time_ns != -1LL)) {
metric_family_append(
&fam_ops_time, direction_label, read_direction,
- (value_t){.fpcounter = ((fpcounter_t)read_time_ns) / 1e9}, &m);
+ (value_t){.counter_fp = ((fpcounter_t)read_time_ns) / 1e9}, &m);
metric_family_append(
&fam_ops_time, direction_label, write_direction,
- (value_t){.fpcounter = ((fpcounter_t)write_time_ns) / 1e9}, &m);
+ (value_t){.counter_fp = ((fpcounter_t)write_time_ns) / 1e9}, &m);
}
metric_reset(&m);
}
devstat_compute_etime(&snap_iter->duration[DEVSTAT_WRITE], NULL);
if ((read_time_s != 0) || (write_time_s != 0)) {
metric_family_append(&fam_ops_time, direction_label, read_direction,
- (value_t){.fpcounter = (fpcounter_t)read_time_s},
+ (value_t){.counter_fp = (fpcounter_t)read_time_s},
&m);
metric_family_append(&fam_ops_time, direction_label, write_direction,
- (value_t){.fpcounter = (fpcounter_t)write_time_s},
+ (value_t){.counter_fp = (fpcounter_t)write_time_s},
&m);
}
DSM_QUEUE_LENGTH, &queue_length, DSM_NONE) != 0) {
WARNING("%s", devstat_errbuf);
} else {
- m.value.fpcounter = (fpcounter_t)busy_time;
+ m.value.counter_fp = (fpcounter_t)busy_time;
metric_family_metric_append(&fam_disk_io_time, m);
m.value.gauge = (gauge_t)utilization;
metric_family_metric_append(&fam_utilization, m);
- m.value.fpcounter = (fpcounter_t)total_duration_s;
+ m.value.counter_fp = (fpcounter_t)total_duration_s;
metric_family_metric_append(&fam_disk_io_weighted_time, m);
m.value.gauge = (gauge_t)queue_length;
if ((read_time_ms != 0) || (write_time_ms != 0)) {
metric_family_append(
&fam_ops_time, direction_label, read_direction,
- (value_t){.fpcounter = ((fpcounter_t)read_time_ms) / 1000}, &m);
+ (value_t){.counter_fp = ((fpcounter_t)read_time_ms) / 1000}, &m);
metric_family_append(
&fam_ops_time, direction_label, write_direction,
- (value_t){.fpcounter = ((fpcounter_t)write_time_ms) / 1000}, &m);
+ (value_t){.counter_fp = ((fpcounter_t)write_time_ms) / 1000}, &m);
}
if (read_merged != 0 || write_merged != 0) {
}
if (io_time_ms != 0) {
- m.value.fpcounter = ((fpcounter_t)io_time_ms) / 1000.0;
+ m.value.counter_fp = ((fpcounter_t)io_time_ms) / 1000.0;
metric_family_metric_append(&fam_disk_io_time, m);
}
if (weighted_time_ms != 0) {
- m.value.fpcounter = ((fpcounter_t)weighted_time_ms) / 1000.0;
+ m.value.counter_fp = ((fpcounter_t)weighted_time_ms) / 1000.0;
metric_family_metric_append(&fam_disk_io_weighted_time, m);
}
if (strncmp(ksp[i]->ks_class, "disk", strlen("disk")) == 0) {
hrtime_t run_time_ns = kio.rtime;
- m.value.fpcounter = ((fpcounter_t)run_time_ns) / 1e9;
+ m.value.counter_fp = ((fpcounter_t)run_time_ns) / 1e9;
metric_family_metric_append(&fam_disk_io_time, m);
hrtime_t weighted_io_time_ns = kio.rlentime;
- m.value.fpcounter = ((fpcounter_t)weighted_io_time_ns) / 1e9;
+ m.value.counter_fp = ((fpcounter_t)weighted_io_time_ns) / 1e9;
metric_family_metric_append(&fam_disk_io_weighted_time, m);
uint_t ops_waiting = kio.wcnt;
_system_configuration.Xfrac;
metric_family_append(
&fam_ops_time, direction_label, read_direction,
- (value_t){.fpcounter = ((fpcounter_t)read_time_ns) / 1e9}, &m);
+ (value_t){.counter_fp = ((fpcounter_t)read_time_ns) / 1e9}, &m);
metric_family_append(
&fam_ops_time, direction_label, write_direction,
- (value_t){.fpcounter = ((fpcounter_t)write_time_ns) / 1e9}, &m);
+ (value_t){.counter_fp = ((fpcounter_t)write_time_ns) / 1e9}, &m);
metric_reset(&m);
}
metric_family_append(&fam_ops, direction_label, write_direction,
(value_t){.counter = drives[i].wxfer}, &m);
- m.value.fpcounter = ((fpcounter_t)drives[i].time_sec) +
- ((fpcounter_t)drives[i].time_usec) / 1e6;
+ m.value.counter_fp = ((fpcounter_t)drives[i].time_sec) +
+ ((fpcounter_t)drives[i].time_usec) / 1e6;
metric_family_metric_append(&fam_disk_io_time, m);
metric_reset(&m);
switch (dp.value_case()) {
case NumberDataPoint::kAsDouble:
if (is_cumulative) {
- fam->type = METRIC_TYPE_FPCOUNTER;
- m.value.fpcounter = dp.as_double();
+ fam->type = METRIC_TYPE_COUNTER_FP;
+ m.value.counter_fp = dp.as_double();
break;
}
m.value.gauge = dp.as_double();
} else if (strcasecmp("COUNTER", value) == 0) {
m->family->type = METRIC_TYPE_COUNTER;
} else if (strcasecmp("FPCOUNTER", value) == 0) {
- m->family->type = METRIC_TYPE_FPCOUNTER;
+ m->family->type = METRIC_TYPE_COUNTER_FP;
} else if (strcasecmp("UP_DOWN_COUNTER", value) == 0) {
m->family->type = METRIC_TYPE_UP_DOWN;
} else if (strcasecmp("UP_DOWN_COUNTER_FP", value) == 0) {
case METRIC_TYPE_COUNTER:
strbuf_print(buf, " type=COUNTER");
break;
- case METRIC_TYPE_FPCOUNTER:
+ case METRIC_TYPE_COUNTER_FP:
strbuf_print(buf, " type=FPCOUNTER");
break;
case METRIC_TYPE_GAUGE:
ret_value->counter = (counter_t)strtoull(value, &endptr, 0);
break;
- case METRIC_TYPE_FPCOUNTER:
- ret_value->fpcounter = (fpcounter_t)strtod(value, &endptr);
+ case METRIC_TYPE_COUNTER_FP:
+ ret_value->counter_fp = (fpcounter_t)strtod(value, &endptr);
break;
case METRIC_TYPE_UP_DOWN:
/* Counter can't handle negative rates. Reset "last time" to zero, so that
* the next valid rate will re-initialize the structure. */
if ((rate < 0.0) &&
- (type == METRIC_TYPE_COUNTER || type == METRIC_TYPE_FPCOUNTER)) {
+ (type == METRIC_TYPE_COUNTER || type == METRIC_TYPE_COUNTER_FP)) {
memset(state, 0, sizeof(*state));
return EINVAL;
}
state->last_value.counter = (counter_t)rate;
state->residual = rate - ((gauge_t)state->last_value.counter);
break;
- case METRIC_TYPE_FPCOUNTER:
- state->last_value.fpcounter = (fpcounter_t)rate;
+ case METRIC_TYPE_COUNTER_FP:
+ state->last_value.counter_fp = (fpcounter_t)rate;
state->residual = 0;
break;
case METRIC_TYPE_UP_DOWN:
state->residual = delta_gauge - ((gauge_t)delta);
break;
}
- case METRIC_TYPE_FPCOUNTER: {
+ case METRIC_TYPE_COUNTER_FP: {
fpcounter_t delta = (fpcounter_t)delta_gauge;
- state->last_value.fpcounter += delta;
+ state->last_value.counter_fp += delta;
state->residual = 0;
break;
}
*ret_rate = ((gauge_t)diff) / ((gauge_t)interval);
return 0;
}
- case METRIC_TYPE_FPCOUNTER: {
- if (state->last_value.fpcounter > value.fpcounter) {
+ case METRIC_TYPE_COUNTER_FP: {
+ if (state->last_value.counter_fp > value.counter_fp) {
*ret_rate = NAN;
return EAGAIN;
}
- fpcounter_t diff = value.fpcounter - state->last_value.fpcounter;
+ fpcounter_t diff = value.counter_fp - state->last_value.counter_fp;
*ret_rate = ((gauge_t)diff) / ((gauge_t)interval);
return 0;
}
.want_residual = 0.001,
},
{
- .name = "fpcounter",
+ .name = "counter_fp",
.rate = 1.234,
.state =
{
- .last_value = {.fpcounter = 1000},
+ .last_value = {.counter_fp = 1000},
.last_time = TIME_T_TO_CDTIME_T(10),
.residual = 0,
},
- .type = METRIC_TYPE_FPCOUNTER,
+ .type = METRIC_TYPE_COUNTER_FP,
.time = TIME_T_TO_CDTIME_T(20),
- .want = {.fpcounter = 1012.34},
+ .want = {.counter_fp = 1012.34},
},
{
.name = "derive",
EXPECT_EQ_UINT64(cases[i].want.counter, got.counter);
EXPECT_EQ_UINT64(cases[i].want.counter, state.last_value.counter);
break;
- case METRIC_TYPE_FPCOUNTER:
- EXPECT_EQ_DOUBLE(cases[i].want.fpcounter, got.fpcounter);
- EXPECT_EQ_UINT64(cases[i].want.fpcounter, state.last_value.fpcounter);
+ case METRIC_TYPE_COUNTER_FP:
+ EXPECT_EQ_DOUBLE(cases[i].want.counter_fp, got.counter_fp);
+ EXPECT_EQ_UINT64(cases[i].want.counter_fp, state.last_value.counter_fp);
break;
case METRIC_TYPE_UP_DOWN:
EXPECT_EQ_UINT64(cases[i].want.up_down, got.up_down);
.name = "fpcounter_t init",
.t0 = 0,
.t1 = 10,
- .type = METRIC_TYPE_FPCOUNTER,
- .v0 = {.fpcounter = 0.},
- .v1 = {.fpcounter = 10.},
+ .type = METRIC_TYPE_COUNTER_FP,
+ .v0 = {.counter_fp = 0.},
+ .v1 = {.counter_fp = 10.},
.want_err = EAGAIN,
},
{
.name = "fpcounter_t increase",
.t0 = 10,
.t1 = 20,
- .type = METRIC_TYPE_FPCOUNTER,
- .v0 = {.fpcounter = 10.},
- .v1 = {.fpcounter = 50.5},
+ .type = METRIC_TYPE_COUNTER_FP,
+ .v0 = {.counter_fp = 10.},
+ .v1 = {.counter_fp = 50.5},
.want = (50.5 - 10.) / (20. - 10.),
},
{
.name = "fpcounter_t reset",
.t0 = 20,
.t1 = 30,
- .type = METRIC_TYPE_FPCOUNTER,
- .v0 = {.fpcounter = 100.0},
- .v1 = {.fpcounter = 20.0},
+ .type = METRIC_TYPE_COUNTER_FP,
+ .v0 = {.counter_fp = 100.0},
+ .v1 = {.counter_fp = 20.0},
.want_err = EAGAIN,
},
};
return "GAUGE";
case METRIC_TYPE_COUNTER:
return "COUNTER";
- case METRIC_TYPE_FPCOUNTER:
+ case METRIC_TYPE_COUNTER_FP:
return "FPCOUNTER";
case METRIC_TYPE_UP_DOWN:
return "UP_DOWN_COUNTER";
CHECK(json_add_string(g, "asInt"));
CHECK(yajl_gen_integer(g, (long long int)m->value.counter));
break;
- case METRIC_TYPE_FPCOUNTER:
+ case METRIC_TYPE_COUNTER_FP:
CHECK(json_add_string(g, "asDouble"));
- CHECK(yajl_gen_double(g, m->value.fpcounter));
+ CHECK(yajl_gen_double(g, m->value.counter_fp));
break;
case METRIC_TYPE_UP_DOWN:
CHECK(json_add_string(g, "asInt"));
CHECK(gauge(g, fam));
break;
case METRIC_TYPE_COUNTER:
- case METRIC_TYPE_FPCOUNTER:
+ case METRIC_TYPE_COUNTER_FP:
case METRIC_TYPE_UP_DOWN:
case METRIC_TYPE_UP_DOWN_FP:
CHECK(json_add_string(g, "sum"));
case METRIC_TYPE_COUNTER:
CHECK(yajl_gen_integer(g, (long long int)m->value.counter));
return 0;
- case METRIC_TYPE_FPCOUNTER:
- CHECK(yajl_gen_double(g, m->value.fpcounter));
+ case METRIC_TYPE_COUNTER_FP:
+ CHECK(yajl_gen_double(g, m->value.counter_fp));
return 0;
case METRIC_TYPE_UP_DOWN:
CHECK(yajl_gen_integer(g, (long long int)m->value.up_down));
case METRIC_TYPE_UP_DOWN:
dp->set_as_int((int64_t)m->value.up_down);
return;
- case METRIC_TYPE_FPCOUNTER:
- dp->set_as_double(m->value.fpcounter);
+ case METRIC_TYPE_COUNTER_FP:
+ dp->set_as_double(m->value.counter_fp);
return;
case METRIC_TYPE_UP_DOWN_FP:
dp->set_as_double(m->value.up_down_fp);
set_gauge(m, fam);
return;
case METRIC_TYPE_COUNTER:
- case METRIC_TYPE_FPCOUNTER:
+ case METRIC_TYPE_COUNTER_FP:
case METRIC_TYPE_UP_DOWN:
case METRIC_TYPE_UP_DOWN_FP:
set_sum(m, fam);
}
break;
}
- case METRIC_TYPE_FPCOUNTER: {
+ case METRIC_TYPE_COUNTER_FP: {
/* Counter resets are handled in format_time_series(). */
- assert(m->value.fpcounter >= start_value.fpcounter);
+ assert(m->value.counter_fp >= start_value.counter_fp);
- fpcounter_t diff = m->value.fpcounter - start_value.fpcounter;
+ fpcounter_t diff = m->value.counter_fp - start_value.counter_fp;
int status = json_string(gen, "doubleValue") || yajl_gen_double(gen, diff);
if (status != 0) {
return status;
case METRIC_TYPE_UP_DOWN_FP:
return json_string(gen, "GAUGE");
case METRIC_TYPE_COUNTER:
- case METRIC_TYPE_FPCOUNTER:
+ case METRIC_TYPE_COUNTER_FP:
return json_string(gen, "CUMULATIVE");
case METRIC_TYPE_UNTYPED:
break;
static int format_value_type(yajl_gen gen, metric_t const *m) {
switch (m->family->type) {
case METRIC_TYPE_GAUGE:
- case METRIC_TYPE_FPCOUNTER:
+ case METRIC_TYPE_COUNTER_FP:
case METRIC_TYPE_UP_DOWN_FP:
return json_string(gen, "DOUBLE");
case METRIC_TYPE_UP_DOWN:
}
break;
case METRIC_TYPE_COUNTER:
- case METRIC_TYPE_FPCOUNTER:
+ case METRIC_TYPE_COUNTER_FP:
// for cumulative metrics the interval must not be zero.
if (start.time == m->time) {
return EAGAIN;
},
{
.name = "fpcounter_metric",
- .type = METRIC_TYPE_FPCOUNTER,
+ .type = METRIC_TYPE_COUNTER_FP,
.want = "{\"type\":\"custom.googleapis.com/collectd/"
"fpcounter_metric\",\"metricKind\":\"CUMULATIVE\","
"\"valueType\":\"DOUBLE\",\"labels\":[]}",
type = "gauge";
break;
case METRIC_TYPE_COUNTER:
- case METRIC_TYPE_FPCOUNTER:
+ case METRIC_TYPE_COUNTER_FP:
type = "counter";
break;
case METRIC_TYPE_UNTYPED:
// clang-format on
},
{
- .name = "METRIC_TYPE_FPCOUNTER",
+ .name = "METRIC_TYPE_COUNTER_FP",
.pfam =
{
.name = "unit_test",
- .type = METRIC_TYPE_FPCOUNTER,
+ .type = METRIC_TYPE_COUNTER_FP,
.metrics =
(prometheus_metric_t[]){
- {.value.fpcounter = 42.0},
+ {.value.counter_fp = 42.0},
},
.metrics_num = 1,
},