char enabled_dropped;
char enabled_tokens;
char enabled_ctokens;
+ char enabled_all_classes;
RRDSET *st_bytes;
RRDSET *st_packets;
}
static inline void tc_device_commit(struct tc_device *d) {
- static int enable_new_interfaces = -1, enable_bytes = -1, enable_packets = -1, enable_dropped = -1, enable_tokens = -1, enable_ctokens = -1;
+ static int enable_new_interfaces = -1, enable_bytes = -1, enable_packets = -1, enable_dropped = -1, enable_tokens = -1, enable_ctokens = -1, enabled_all_classes = -1;
if(unlikely(enable_new_interfaces == -1)) {
enable_new_interfaces = config_get_boolean_ondemand("plugin:tc", "enable new interfaces detected at runtime", CONFIG_ONDEMAND_YES);
enable_dropped = config_get_boolean_ondemand("plugin:tc", "enable dropped charts for all interfaces", CONFIG_ONDEMAND_ONDEMAND);
enable_tokens = config_get_boolean_ondemand("plugin:tc", "enable tokens charts for all interfaces", CONFIG_ONDEMAND_NO);
enable_ctokens = config_get_boolean_ondemand("plugin:tc", "enable ctokens charts for all interfaces", CONFIG_ONDEMAND_NO);
+ enabled_all_classes = config_get_boolean_ondemand("plugin:tc", "enable show all classes for all interfaces", CONFIG_ONDEMAND_NO);
}
// we only need to add leaf classes
/*
if(unlikely(debug_flags & D_TC_LOOP)) {
for(c = d->classes ; c ; c = c->next) {
- if(c->isleaf && c->hasparent) debug(D_TC_LOOP, "TC: Device '%s', class %s, OK", d->name, c->id);
+ if((c->isleaf && c->hasparent) || d->enabled_all_classes) debug(D_TC_LOOP, "TC: Device '%s', class %s, OK", d->name, c->id);
else debug(D_TC_LOOP, "TC: Device '%s', class %s, IGNORE (isleaf: %d, hasparent: %d, parent: %s)", d->name?d->name:d->id, c->id, c->isleaf, c->hasparent, c->parentid?c->parentid:"(unset)");
}
}
// we need at least a class
for(c = d->classes ; c ; c = c->next) {
// debug(D_TC_LOOP, "TC: Device '%s', class '%s', isLeaf=%d, HasParent=%d, Seen=%d", d->name?d->name:d->id, c->name?c->name:c->id, c->isleaf, c->hasparent, c->seen);
- if(unlikely(c->updated && c->isleaf && c->hasparent)) {
+ if(unlikely(c->updated && ((c->isleaf && c->hasparent) || d->enabled_all_classes))) {
active_classes++;
bytes_sum += c->bytes;
packets_sum += c->packets;
if(unlikely(d->enabled == (char)-1)) {
char var_name[CONFIG_MAX_NAME + 1];
snprintfz(var_name, CONFIG_MAX_NAME, "qos for %s", d->id);
- d->enabled = (char)config_get_boolean_ondemand("plugin:tc", var_name, enable_new_interfaces);
+ d->enabled = (char)config_get_boolean_ondemand("plugin:tc", var_name, enable_new_interfaces);
snprintfz(var_name, CONFIG_MAX_NAME, "traffic chart for %s", d->id);
- d->enabled_bytes = (char)config_get_boolean_ondemand("plugin:tc", var_name, enable_bytes);
+ d->enabled_bytes = (char)config_get_boolean_ondemand("plugin:tc", var_name, enable_bytes);
snprintfz(var_name, CONFIG_MAX_NAME, "packets chart for %s", d->id);
- d->enabled_packets = (char)config_get_boolean_ondemand("plugin:tc", var_name, enable_packets);
+ d->enabled_packets = (char)config_get_boolean_ondemand("plugin:tc", var_name, enable_packets);
snprintfz(var_name, CONFIG_MAX_NAME, "dropped packets chart for %s", d->id);
- d->enabled_dropped = (char)config_get_boolean_ondemand("plugin:tc", var_name, enable_dropped);
+ d->enabled_dropped = (char)config_get_boolean_ondemand("plugin:tc", var_name, enable_dropped);
snprintfz(var_name, CONFIG_MAX_NAME, "tokens chart for %s", d->id);
- d->enabled_tokens = (char)config_get_boolean_ondemand("plugin:tc", var_name, enable_tokens);
+ d->enabled_tokens = (char)config_get_boolean_ondemand("plugin:tc", var_name, enable_tokens);
snprintfz(var_name, CONFIG_MAX_NAME, "ctokens chart for %s", d->id);
- d->enabled_ctokens = (char)config_get_boolean_ondemand("plugin:tc", var_name, enable_ctokens);
+ d->enabled_ctokens = (char)config_get_boolean_ondemand("plugin:tc", var_name, enable_ctokens);
+
+ snprintfz(var_name, CONFIG_MAX_NAME, "show all classes for %s", d->id);
+ d->enabled_all_classes = (char)config_get_boolean_ondemand("plugin:tc", var_name, enabled_all_classes);
}
debug(D_TC_LOOP, "TC: evaluating TC device '%s'. enabled = %d/%d (bytes: %d/%d, packets: %d/%d, dropped: %d/%d, tokens: %d/%d, ctokens: %d/%d), classes = %d (bytes = %llu, packets = %llu, dropped = %llu, tokens = %llu, ctokens = %llu).",
d->enabled_dropped, enable_dropped,
d->enabled_tokens, enable_tokens,
d->enabled_ctokens, enable_ctokens,
+ d->enabled_all_classes, enabled_all_classes,
active_classes,
bytes_sum,
packets_sum,
for(c = d->classes ; c ; c = c->next) {
if(unlikely(!c->updated)) continue;
- if(c->isleaf && c->hasparent) {
+ if((c->isleaf && c->hasparent) || d->enabled_all_classes) {
if(unlikely(!c->rd_bytes)) {
c->rd_bytes = rrddim_find(d->st_bytes, c->id);
if(unlikely(!c->rd_bytes)) {
for(c = d->classes ; c ; c = c->next) {
if(unlikely(!c->updated)) continue;
- if(c->isleaf && c->hasparent) {
+ if((c->isleaf && c->hasparent) || d->enabled_all_classes) {
if(unlikely(!c->rd_packets)) {
c->rd_packets = rrddim_find(d->st_packets, c->id);
if(unlikely(!c->rd_packets)) {
for(c = d->classes ; c ; c = c->next) {
if(unlikely(!c->updated)) continue;
- if(c->isleaf && c->hasparent) {
+ if((c->isleaf && c->hasparent) || d->enabled_all_classes) {
if(unlikely(!c->rd_dropped)) {
c->rd_dropped = rrddim_find(d->st_dropped, c->id);
if(unlikely(!c->rd_dropped)) {
for(c = d->classes ; c ; c = c->next) {
if(unlikely(!c->updated)) continue;
- if(c->isleaf && c->hasparent) {
+ if((c->isleaf && c->hasparent) || d->enabled_all_classes) {
if(unlikely(!c->rd_tokens)) {
c->rd_tokens = rrddim_find(d->st_tokens, c->id);
if(unlikely(!c->rd_tokens)) {
for(c = d->classes ; c ; c = c->next) {
if(unlikely(!c->updated)) continue;
- if(c->isleaf && c->hasparent) {
+ if((c->isleaf && c->hasparent) || d->enabled_all_classes) {
if(unlikely(!c->rd_ctokens)) {
c->rd_ctokens = rrddim_find(d->st_ctokens, c->id);
if(unlikely(!c->rd_ctokens)) {