Example #1
0
static int read_sysfs_capacity(char const *dir, /* {{{ */
                               char const *power_supply,
                               char const *plugin_instance) {
  gauge_t capacity_charged = NAN;
  gauge_t capacity_full = NAN;
  gauge_t capacity_design = NAN;
  int status;

  status =
      sysfs_file_to_gauge(dir, power_supply, "energy_now", &capacity_charged);
  if (status != 0)
    return (status);

  status =
      sysfs_file_to_gauge(dir, power_supply, "energy_full", &capacity_full);
  if (status != 0)
    return (status);

  status = sysfs_file_to_gauge(dir, power_supply, "energy_full_design",
                               &capacity_design);
  if (status != 0)
    return (status);

  submit_capacity(plugin_instance, capacity_charged * SYSFS_FACTOR,
                  capacity_full * SYSFS_FACTOR, capacity_design * SYSFS_FACTOR);
  return (0);
} /* }}} int read_sysfs_capacity */
Example #2
0
static int read_sysfs_callback (char const *dir, /* {{{ */
		char const *power_supply,
		void *user_data)
{
	int *battery_index = user_data;

	char const *plugin_instance;
	char buffer[32];
	gauge_t v = NAN;
	_Bool discharging = 0;
	int status;

	/* Ignore non-battery directories, such as AC power. */
	status = sysfs_file_to_buffer (dir, power_supply, "type", buffer, sizeof (buffer));
	if (status != 0)
		return (0);
	if (strcasecmp ("Battery", buffer) != 0)
		return (0);

	(void) sysfs_file_to_buffer (dir, power_supply, "status", buffer, sizeof (buffer));
	if (strcasecmp ("Discharging", buffer) == 0)
		discharging = 1;

	/* FIXME: This is a dirty hack for backwards compatibility: The battery
	 * plugin, for a very long time, has had the plugin_instance
	 * hard-coded to "0". So, to keep backwards compatibility, we'll use
	 * "0" for the first battery we find and the power_supply name for all
	 * following. This should be reverted in a future major version. */
	plugin_instance = (*battery_index == 0) ? "0" : power_supply;
	(*battery_index)++;

	read_sysfs_capacity (dir, power_supply, plugin_instance);

	if (sysfs_file_to_gauge (dir, power_supply, "power_now", &v) == 0)
	{
		if (discharging)
			v *= -1.0;
		battery_submit (plugin_instance, "power", v * SYSFS_FACTOR);
	}
	if (sysfs_file_to_gauge (dir, power_supply, "current_now", &v) == 0)
	{
		if (discharging)
			v *= -1.0;
		battery_submit (plugin_instance, "current", v * SYSFS_FACTOR);
	}

	if (sysfs_file_to_gauge (dir, power_supply, "voltage_now", &v) == 0)
		battery_submit (plugin_instance, "voltage", v * SYSFS_FACTOR);

	return (0);
} /* }}} int read_sysfs_callback */