* "rate", use the "sum" in the pair and assign that to the derive
* value. */
if (convert_special_metrics && (state->depth > 2) &&
+ state->stack[state->depth - 2] &&
(strcmp("filestore", state->stack[state->depth - 2]) == 0) &&
+ state->stack[state->depth - 1] &&
(strcmp("journal_wr_bytes", state->stack[state->depth - 1]) == 0) &&
(strcmp("avgcount", state->key) == 0)) {
DEBUG("ceph plugin: Skipping avgcount for filestore.JournalWrBytes");
# NotifySensorNotPresent false
# NotifyIPMIConnectionState false
# SELEnabled false
+# SELSensor "some_sensor"
+# SELSensor "another_one"
+# SELIgnoreSelected false
# SELClearEvent false
# </Instance>
# <Instance "remote">
# NotifySensorNotPresent false
# NotifyIPMIConnectionState false
# SELEnabled false
+# SELSensor "some_sensor"
+# SELSensor "another_one"
+# SELIgnoreSelected false
# SELClearEvent false
# </Instance>
#</Plugin>
If system event log (SEL) is enabled, plugin will listen for sensor threshold
and discrete events. When event is received the notification is sent.
+SEL event filtering can be configured using B<SELSensor> and B<SELIgnoreSelected>
+config options.
Defaults to B<false>.
+=item B<SELSensor> I<SELSensor>
+
+Selects sensors to get events from or to ignore, depending on B<SELIgnoreSelected>.
+
+See F</"IGNORELISTS"> for details.
+
+=item B<SELIgnoreSelected> I<true>|I<false>
+
+If no configuration is given, the B<ipmi> plugin will pass events from all
+sensors. This option enables you to do that: By setting B<SELIgnoreSelected>
+to I<true> the effect of B<SELSensor> is inverted: All events from selected
+sensors are ignored and all events from other sensors are passed.
+
=item B<SELClearEvent> I<true>|I<false>
If SEL clear event is enabled, plugin will delete event from SEL list after
DEBUG(RDT_PLUGIN ": Core Groups Dump");
DEBUG(RDT_PLUGIN ": groups count: %" PRIsz, g_rdt->num_groups);
- for (int i = 0; i < g_rdt->num_groups; i++) {
+ for (size_t i = 0; i < g_rdt->num_groups; i++) {
core_group_t *cgroup = g_rdt->cores.cgroups + i;
memset(cores, 0, sizeof(cores));
cgroup->cores[j]);
}
- DEBUG(RDT_PLUGIN ": group[%d]:", i);
+ DEBUG(RDT_PLUGIN ": group[%zu]:", i);
DEBUG(RDT_PLUGIN ": description: %s", cgroup->desc);
DEBUG(RDT_PLUGIN ": cores: %s", cores);
DEBUG(RDT_PLUGIN ": events: 0x%X", g_rdt->events[i]);
return num_cores;
}
-static int rdt_is_core_id_valid(int core_id) {
+static int rdt_is_core_id_valid(unsigned int core_id) {
- for (int i = 0; i < g_rdt->pqos_cpu->num_cores; i++)
+ for (unsigned int i = 0; i < g_rdt->pqos_cpu->num_cores; i++)
if (core_id == g_rdt->pqos_cpu->cores[i].lcore)
return 1;
for (size_t group_idx = 0; group_idx < n; group_idx++) {
core_group_t *cgroup = g_rdt->cores.cgroups + group_idx;
for (size_t core_idx = 0; core_idx < cgroup->num_cores; core_idx++) {
- if (!rdt_is_core_id_valid((int)cgroup->cores[core_idx])) {
- ERROR(RDT_PLUGIN ": Core group '%s' contains invalid core id '%d'",
- cgroup->desc, (int)cgroup->cores[core_idx]);
+ if (!rdt_is_core_id_valid(cgroup->cores[core_idx])) {
+ ERROR(RDT_PLUGIN ": Core group '%s' contains invalid core id '%u'",
+ cgroup->desc, cgroup->cores[core_idx]);
rdt_free_cgroups();
return -EINVAL;
}
}
/* Get all available events on this platform */
- for (int i = 0; i < g_rdt->cap_mon->u.mon->num_events; i++)
+ for (unsigned int i = 0; i < g_rdt->cap_mon->u.mon->num_events; i++)
events |= g_rdt->cap_mon->u.mon->events[i].type;
events &= ~(PQOS_PERF_EVENT_LLC_MISS);
rdt_dump_data();
#endif /* COLLECT_DEBUG */
- for (int i = 0; i < g_rdt->num_groups; i++) {
+ for (size_t i = 0; i < g_rdt->num_groups; i++) {
core_group_t *cgroup = g_rdt->cores.cgroups + i;
enum pqos_mon_event mbm_events =
return ret;
/* Start monitoring */
- for (int i = 0; i < g_rdt->num_groups; i++) {
+ for (size_t i = 0; i < g_rdt->num_groups; i++) {
core_group_t *cg = g_rdt->cores.cgroups + i;
ret = pqos_mon_start(cg->num_cores, cg->cores, g_rdt->events[i],
return 0;
/* Stop monitoring */
- for (int i = 0; i < g_rdt->num_groups; i++) {
+ for (size_t i = 0; i < g_rdt->num_groups; i++) {
pqos_mon_stop(g_rdt->pgroups[i]);
}
struct c_ipmi_instance_s {
char *name;
ignorelist_t *ignorelist;
+ ignorelist_t *sel_ignorelist;
bool notify_add;
bool notify_remove;
bool notify_notpresent;
return IPMI_EVENT_NOT_HANDLED;
} /* int sensor_discrete_event_handler */
+static int sel_list_add(c_ipmi_instance_t *st, ipmi_sensor_t *sensor) {
+ char sensor_name[DATA_MAX_NAME_LEN] = {0};
+ int status = 0;
+
+ /* Check if sensor on sel_ignorelist */
+ sensor_get_name(sensor, sensor_name, sizeof(sensor_name));
+ if (ignorelist_match(st->sel_ignorelist, sensor_name) != 0)
+ return 0;
+
+ /* register threshold event if threshold sensor support events */
+ if (ipmi_sensor_get_event_reading_type(sensor) ==
+ IPMI_EVENT_READING_TYPE_THRESHOLD)
+ status = ipmi_sensor_add_threshold_event_handler(
+ sensor, sensor_threshold_event_handler, st);
+ /* register discrete handler if discrete/specific sensor support events */
+ else if (ipmi_sensor_get_event_support(sensor) != IPMI_EVENT_SUPPORT_NONE)
+ status = ipmi_sensor_add_discrete_event_handler(
+ sensor, sensor_discrete_event_handler, st);
+
+ if (status)
+ ERROR("Unable to add sensor %s event handler, status: %d", sensor_name,
+ status);
+ return status;
+}
+
+static void sel_list_remove(c_ipmi_instance_t *st, ipmi_sensor_t *sensor) {
+ if (ipmi_sensor_get_event_reading_type(sensor) ==
+ IPMI_EVENT_READING_TYPE_THRESHOLD)
+ ipmi_sensor_remove_threshold_event_handler(
+ sensor, sensor_threshold_event_handler, st);
+ else
+ ipmi_sensor_remove_discrete_event_handler(
+ sensor, sensor_discrete_event_handler, st);
+}
/*
* Entity handlers
*/
if ((op == IPMI_ADDED) || (op == IPMI_CHANGED)) {
/* Will check for duplicate entries.. */
sensor_list_add(st, sensor);
-
- if (st->sel_enabled) {
- int status = 0;
- /* register threshold event handler */
- if (ipmi_sensor_get_event_reading_type(sensor) ==
- IPMI_EVENT_READING_TYPE_THRESHOLD)
- status = ipmi_sensor_add_threshold_event_handler(
- sensor, sensor_threshold_event_handler, st);
- /* register discrete handler if discrete/specific sensor support events */
- else if (ipmi_sensor_get_event_support(sensor) != IPMI_EVENT_SUPPORT_NONE)
- status = ipmi_sensor_add_discrete_event_handler(
- sensor, sensor_discrete_event_handler, st);
-
- if (status) {
- char buf[DATA_MAX_NAME_LEN] = {0};
- sensor_get_name(sensor, buf, sizeof(buf));
- ERROR("Unable to add sensor %s event handler, status: %d", buf, status);
- }
- }
+ if (st->sel_enabled)
+ sel_list_add(st, sensor);
} else if (op == IPMI_DELETED) {
sensor_list_remove(st, sensor);
-
- if (st->sel_enabled) {
- if (ipmi_sensor_get_event_reading_type(sensor) ==
- IPMI_EVENT_READING_TYPE_THRESHOLD)
- ipmi_sensor_remove_threshold_event_handler(
- sensor, sensor_threshold_event_handler, st);
- else
- ipmi_sensor_remove_discrete_event_handler(
- sensor, sensor_discrete_event_handler, st);
- }
+ if (st->sel_enabled)
+ sel_list_remove(st, sensor);
}
} /* void entity_sensor_update_handler */
return NULL;
}
+ st->sel_ignorelist = ignorelist_create(/* invert = */ 1);
+ if (st->sel_ignorelist == NULL) {
+ ignorelist_free(st->ignorelist);
+ sfree(st->name);
+ sfree(st);
+ ERROR("ipmi plugin: SEL ignorelist_create() failed.");
+ return NULL;
+ }
+
st->sensor_list = NULL;
pthread_mutex_init(&st->sensor_list_lock, /* attr = */ NULL);
sfree(st->username);
sfree(st->password);
+ ignorelist_free(st->sel_ignorelist);
ignorelist_free(st->ignorelist);
pthread_mutex_destroy(&st->sensor_list_lock);
sfree(st);
status = cf_util_get_boolean(child, &st->notify_remove);
} else if (strcasecmp("NotifySensorNotPresent", child->key) == 0) {
status = cf_util_get_boolean(child, &st->notify_notpresent);
+ } else if (strcasecmp("SELSensor", child->key) == 0) {
+ char *value = NULL;
+ status = cf_util_get_string(child, &value);
+ if (status != 0)
+ break;
+ ignorelist_add(st->sel_ignorelist, value);
+ sfree(value);
+ } else if (strcasecmp("SELIgnoreSelected", child->key) == 0) {
+ bool t;
+ status = cf_util_get_boolean(child, &t);
+ if (status != 0)
+ break;
+ ignorelist_set_invert(st->sel_ignorelist, /* invert = */ !t);
} else if (strcasecmp("SELEnabled", child->key) == 0) {
status = cf_util_get_boolean(child, &st->sel_enabled);
} else if (strcasecmp("SELClearEvent", child->key) == 0) {
ERROR(UTIL_NAME ": Missing closing bracket ] in option %s.", in);
return -EINVAL;
}
- if ((end - start) >= out_size) {
+ if ((size_t)(end - start) >= out_size) {
ERROR(UTIL_NAME ": Out buffer is too small.");
return -EINVAL;
}
struct core_group_s {
char *desc;
- unsigned *cores;
+ unsigned int *cores;
size_t num_cores;
};
typedef struct core_group_s core_group_t;
ret = ovs_db_destroy(pdb);
if (ret > 0)
goto failure;
+ else
+ return NULL;
}
/* init polling thread */
if (ret > 0) {
ovs_db_event_thread_data_destroy(pdb);
goto failure;
+ } else {
+ return NULL;
}
}
return pdb;
}
static void domain_state_submit_notif(virDomainPtr dom, int state, int reason) {
- if ((state < 0) || (state >= STATIC_ARRAY_SIZE(domain_states))) {
+ if ((state < 0) || ((size_t)state >= STATIC_ARRAY_SIZE(domain_states))) {
ERROR(PLUGIN_NAME ": Array index out of bounds: state=%d", state);
return;
}
char msg[DATA_MAX_NAME_LEN];
const char *state_str = domain_states[state];
#ifdef HAVE_DOM_REASON
- if ((reason < 0) || (reason >= STATIC_ARRAY_SIZE(domain_reasons[0]))) {
+ if ((reason < 0) || ((size_t)reason >= STATIC_ARRAY_SIZE(domain_reasons[0]))) {
ERROR(PLUGIN_NAME ": Array index out of bounds: reason=%d", reason);
return;
}
#define NM_ADD_STR_ITEMS(_items, _size) \
do { \
- for (int _i = 0; _i < _size; ++_i) { \
+ for (size_t _i = 0; _i < _size; ++_i) { \
DEBUG(PLUGIN_NAME \
" plugin: Adding notification metadata name=%s value=%s", \
_items[_i].name, _items[_i].value); \
{.name = "name", .value = fs_info->name},
{.name = "fstype", .value = fs_info->fstype}};
- for (int i = 0; i < fs_info->ndevAlias; ++i) {
+ for (size_t i = 0; i < fs_info->ndevAlias; ++i) {
fs_dev_alias[i].name = "devAlias";
fs_dev_alias[i].value = fs_info->devAlias[i];
}