示例#1
0
/* cannot be static, is referred to from battery.c */
int battery_read_statefs(void) {
  value_t v;
  int success = 0;

  if (parse_value_file(STATEFS_ROOT "ChargePercentage", &v, DS_TYPE_GAUGE) ==
      0) {
    battery_submit("charge", v.gauge, NULL);
    success++;
  } else if (parse_value_file(STATEFS_ROOT "Capacity", &v, DS_TYPE_GAUGE) ==
             0) {
    // Use capacity as a charge estimate if ChargePercentage is not available
    battery_submit("charge", v.gauge, NULL);
    success++;
  } else {
    WARNING("battery plugin: Neither \"" STATEFS_ROOT "ChargePercentage\" "
            "nor \"" STATEFS_ROOT "Capacity\" could be read.");
  }

  struct {
    const char *path;
    const char *type;
    const char *type_instance;
    gauge_t factor;
  } metrics[] = {
      {STATEFS_ROOT "Current", "current", NULL, 1e-6},        // from uA to A
      {STATEFS_ROOT "Energy", "energy_wh", NULL, 1e-6},       // from uWh to Wh
      {STATEFS_ROOT "Power", "power", NULL, 1e-6},            // from uW to W
      {STATEFS_ROOT "Temperature", "temperature", NULL, 0.1}, // from 10xC to C
      {STATEFS_ROOT "TimeUntilFull", "duration", "full", 1.0},
      {STATEFS_ROOT "TimeUntilLow", "duration", "low", 1.0},
      {STATEFS_ROOT "Voltage", "voltage", NULL, 1e-6}, // from uV to V
  };

  for (size_t i = 0; i < STATIC_ARRAY_SIZE(metrics); i++) {
    if (parse_value_file(metrics[i].path, &v, DS_TYPE_GAUGE) != 0) {
      WARNING("battery plugin: Reading \"%s\" failed.", metrics[i].path);
      continue;
    }

    battery_submit(metrics[i].type, v.gauge * metrics[i].factor,
                   metrics[i].type_instance);
    success++;
  }

  if (success == 0) {
    ERROR("battery plugin: statefs backend: none of the statistics are "
          "available");
    return -1;
  }

  return 0;
}
示例#2
0
static int entropy_read(void) {
  value_t v;
  if (parse_value_file(ENTROPY_FILE, &v, DS_TYPE_GAUGE) != 0) {
    ERROR("entropy plugin: Reading \"" ENTROPY_FILE "\" failed.");
    return -1;
  }

  entropy_submit(v);
  return 0;
}