Add option to ignore net interfaces that match a regex pattern.

This commit is contained in:
Bill Wilson 2016-06-08 11:44:01 -05:00
parent b58ea9d699
commit 4e6a811b44
4 changed files with 149 additions and 18 deletions

View File

@ -90,7 +90,7 @@ BINMODE = 755
#GTOP_LIBS_D = -L$(GTOP_PREFIX)/lib -lgtop -lgtop_common -lgtop_sysdeps #GTOP_LIBS_D = -L$(GTOP_PREFIX)/lib -lgtop -lgtop_common -lgtop_sysdeps
#export GTOP_INCLUDE GTOP_LIBS GTOP_LIBS_D #export GTOP_INCLUDE GTOP_LIBS GTOP_LIBS_D
VERSION = 2.3.7 VERSION = 2.3.8-pre1
INSTALLROOT ?= $(DESTDIR)$(PREFIX) INSTALLROOT ?= $(DESTDIR)$(PREFIX)

View File

@ -108,8 +108,8 @@
*/ */
#define GKRELLMD_VERSION_MAJOR 2 #define GKRELLMD_VERSION_MAJOR 2
#define GKRELLMD_VERSION_MINOR 3 #define GKRELLMD_VERSION_MINOR 3
#define GKRELLMD_VERSION_REV 7 #define GKRELLMD_VERSION_REV 8
#define GKRELLMD_EXTRAVERSION "" #define GKRELLMD_EXTRAVERSION "-pre1"
#define GKRELLMD_CHECK_VERSION(major,minor,rev) \ #define GKRELLMD_CHECK_VERSION(major,minor,rev) \
(GKRELLMD_VERSION_MAJOR > (major) || \ (GKRELLMD_VERSION_MAJOR > (major) || \

View File

@ -108,8 +108,8 @@
*/ */
#define GKRELLM_VERSION_MAJOR 2 #define GKRELLM_VERSION_MAJOR 2
#define GKRELLM_VERSION_MINOR 3 #define GKRELLM_VERSION_MINOR 3
#define GKRELLM_VERSION_REV 7 #define GKRELLM_VERSION_REV 8
#define GKRELLM_EXTRAVERSION "" #define GKRELLM_EXTRAVERSION "-pre1"
#define GKRELLM_CHECK_VERSION(major,minor,rev) \ #define GKRELLM_CHECK_VERSION(major,minor,rev) \
(GKRELLM_VERSION_MAJOR > (major) || \ (GKRELLM_VERSION_MAJOR > (major) || \

143
src/net.c
View File

@ -91,6 +91,7 @@ typedef struct
GkrellmChartconfig *chart_config; GkrellmChartconfig *chart_config;
gboolean enabled, gboolean enabled,
ignore,
chart_labels, chart_labels,
force_up, force_up,
real; real;
@ -155,6 +156,7 @@ static GList *net_mon_sys_list;
static GList *timer_defaults_list; static GList *timer_defaults_list;
static gchar *lock_directory; static gchar *lock_directory;
static gchar *net_data_dir; static gchar *net_data_dir;
static gchar *net_ignore_patterns;
static void (*read_net_data)(); static void (*read_net_data)();
static void (*check_net_routes)(); static void (*check_net_routes)();
@ -168,6 +170,7 @@ static gint reset_mday;
static gboolean net_enabled_as_default; static gboolean net_enabled_as_default;
static GtkWidget *net_enabled_as_default_button; static GtkWidget *net_enabled_as_default_button;
static gint static gint
strcmp_net_name(NetMon *net1, NetMon *net2) strcmp_net_name(NetMon *net1, NetMon *net2)
{ {
@ -193,6 +196,39 @@ strcmp_net_name(NetMon *net1, NetMon *net2)
return n; return n;
} }
static gboolean
net_ignore_match(gchar *name)
{
GMatchInfo *match_info;
GRegex *regex;
gchar *s, buf[128];
for (s = net_ignore_patterns; *s; )
{
while (*s == ' ')
++s;
if (sscanf(s, "%s", buf) == 1)
{
regex = g_regex_new(buf, G_REGEX_ANCHORED, 0, NULL);
if (regex)
{
g_regex_match(regex, name, 0, &match_info);
if (g_match_info_matches(match_info))
{
g_match_info_free(match_info);
g_regex_unref(regex);
return TRUE;
}
g_match_info_free(match_info);
g_regex_unref(regex);
}
}
while (*s != ' ' && *s != '\0')
++s;
}
return FALSE;
}
static NetMon * static NetMon *
new_net(gchar *name) new_net(gchar *name)
{ {
@ -202,7 +238,11 @@ new_net(gchar *name)
net->name = g_strdup(name); net->name = g_strdup(name);
if (strcmp(name, "lo")) /* lo is disabled by default */ if (strcmp(name, "lo")) /* lo is disabled by default */
net->enabled = net_enabled_as_default; /* All others are enabled unless unset in configuration */ net->enabled = net_enabled_as_default; /* All others are enabled unless unset in configuration */
if (net_ignore_match(name))
{
net->ignore = TRUE;
net->enabled = FALSE;
}
net->chart_labels = TRUE; net->chart_labels = TRUE;
net->label = g_strdup(""); net->label = g_strdup("");
net->launch.command = g_strdup(""); net->launch.command = g_strdup("");
@ -303,6 +343,9 @@ gkrellm_net_routed_event(gchar *name, gboolean routed)
return; return;
if ((net = lookup_net(name)) == NULL) if ((net = lookup_net(name)) == NULL)
net = new_net(name); net = new_net(name);
if (!net)
return;
if (routed) if (routed)
net->up_event = TRUE; net->up_event = TRUE;
else else
@ -318,6 +361,9 @@ gkrellm_net_assign_data(gchar *name, gulong rx, gulong tx)
if ((net = lookup_net(name)) == NULL) if ((net = lookup_net(name)) == NULL)
net = new_net(name); net = new_net(name);
if (!net || net->ignore)
return;
if (GK.second_tick && !net_use_routed) if (GK.second_tick && !net_use_routed)
net->up = TRUE; net->up = TRUE;
net->rx = rx; net->rx = rx;
@ -2075,6 +2121,8 @@ update_net(void)
for (list = net_mon_list; list; list = list->next) for (list = net_mon_list; list; list = list->next)
{ {
net = (NetMon *) list->data; net = (NetMon *) list->data;
if (net->ignore)
continue;
net->up_prev = net->up; net->up_prev = net->up;
net->up = FALSE; net->up = FALSE;
} }
@ -2088,6 +2136,8 @@ update_net(void)
for (list = net_mon_list; list; list = list->next) for (list = net_mon_list; list; list = list->next)
{ {
net = (NetMon *) list->data; net = (NetMon *) list->data;
if (net->ignore)
continue;
if (net->up && !net->up_prev) if (net->up && !net->up_prev)
net->up_event = TRUE; net->up_event = TRUE;
else if (!net->up && net->up_prev) else if (!net->up && net->up_prev)
@ -2097,7 +2147,7 @@ update_net(void)
for (list = net_mon_list; list; list = list->next) for (list = net_mon_list; list; list = list->next)
{ {
net = (NetMon *) list->data; net = (NetMon *) list->data;
if (!net->chart) if (!net->chart || net->ignore)
continue; continue;
p = net->chart->panel; p = net->chart->panel;
if (net->up || net->force_up) if (net->up || net->force_up)
@ -2175,6 +2225,8 @@ update_net(void)
for (list = net_mon_list; list; list = list->next) for (list = net_mon_list; list; list = list->next)
{ {
net = (NetMon *) list->data; net = (NetMon *) list->data;
if (net->ignore)
continue;
if (!net->locked) if (!net->locked)
{ {
if (net->up_event && !net->chart && net->enabled) if (net->up_event && !net->chart && net->enabled)
@ -2440,7 +2492,7 @@ save_net_config(FILE *f)
for (list = net_mon_list; list; list = list->next) for (list = net_mon_list; list; list = list->next)
{ {
net = (NetMon *) list->data; net = (NetMon *) list->data;
if (!net->enabled && !net->real) if ((!net->enabled && !net->real) || net->ignore)
continue; continue;
fprintf(f, "%s enables %s %d %d %d\n", NET_CONFIG_KEYWORD, net->name, fprintf(f, "%s enables %s %d %d %d\n", NET_CONFIG_KEYWORD, net->name,
net->enabled, net->chart_labels, net->force_up); net->enabled, net->chart_labels, net->force_up);
@ -2465,6 +2517,9 @@ save_net_config(FILE *f)
} }
} }
if (*net_ignore_patterns)
fprintf(f, "%s ignore_patterns %s\n", NET_CONFIG_KEYWORD, net_ignore_patterns);
if (!_GK.client_mode || timer_button_type != TIMER_TYPE_SERVER) if (!_GK.client_mode || timer_button_type != TIMER_TYPE_SERVER)
fprintf(f, "%s timer_enabled %d\n", NET_CONFIG_KEYWORD, fprintf(f, "%s timer_enabled %d\n", NET_CONFIG_KEYWORD,
timer_button_enabled); timer_button_enabled);
@ -2474,6 +2529,7 @@ save_net_config(FILE *f)
timer_button_iface); timer_button_iface);
fprintf(f, "%s timer_on %s\n", NET_CONFIG_KEYWORD, timer_on_command); fprintf(f, "%s timer_on %s\n", NET_CONFIG_KEYWORD, timer_on_command);
fprintf(f, "%s timer_off %s\n", NET_CONFIG_KEYWORD, timer_off_command); fprintf(f, "%s timer_off %s\n", NET_CONFIG_KEYWORD, timer_off_command);
if (*text_format)
fprintf(f, "%s text_format %s\n", NET_CONFIG_KEYWORD, text_format); fprintf(f, "%s text_format %s\n", NET_CONFIG_KEYWORD, text_format);
fprintf(f, "%s reset_mday %d\n", NET_CONFIG_KEYWORD, reset_mday); fprintf(f, "%s reset_mday %d\n", NET_CONFIG_KEYWORD, reset_mday);
fprintf(f, "%s net_enabled_as_default %d\n", NET_CONFIG_KEYWORD, net_enabled_as_default); fprintf(f, "%s net_enabled_as_default %d\n", NET_CONFIG_KEYWORD, net_enabled_as_default);
@ -2519,6 +2575,8 @@ load_net_config(gchar *arg)
gkrellm_dup_string(&timer_off_command, item); gkrellm_dup_string(&timer_off_command, item);
else if (!strcmp(config, "text_format")) else if (!strcmp(config, "text_format"))
gkrellm_locale_dup_string(&text_format, item, &text_format_locale); gkrellm_locale_dup_string(&text_format, item, &text_format_locale);
else if (!strcmp(config, "ignore_patterns"))
gkrellm_dup_string(&net_ignore_patterns, item);
else if (sscanf(item, "%31s %[^\n]", name, item1) == 2) else if (sscanf(item, "%31s %[^\n]", name, item1) == 2)
{ {
if (!strcmp(config, "iface")) /* Hack to get some of 1.0 config */ if (!strcmp(config, "iface")) /* Hack to get some of 1.0 config */
@ -2533,13 +2591,16 @@ load_net_config(gchar *arg)
{ {
if ((net = lookup_net(name)) == NULL) if ((net = lookup_net(name)) == NULL)
net = new_net(name); net = new_net(name);
if (net && !net->ignore)
{
sscanf(item1, "%d %d %d", &net->enabled, &net->chart_labels, sscanf(item1, "%d %d %d", &net->enabled, &net->chart_labels,
&net->force_up); &net->force_up);
if (!net_use_routed) if (!net_use_routed)
net->force_up = FALSE; net->force_up = FALSE;
}
return; return;
} }
if ((net = lookup_net(name)) == NULL) if ((net = lookup_net(name)) == NULL || net->ignore)
return; return;
if (!strcmp(config, GKRELLM_CHARTCONFIG_KEYWORD)) if (!strcmp(config, GKRELLM_CHARTCONFIG_KEYWORD))
gkrellm_load_chartconfig(&net->chart_config, item1, 2); gkrellm_load_chartconfig(&net->chart_config, item1, 2);
@ -2567,6 +2628,7 @@ load_net_config(gchar *arg)
static GtkWidget *pon_entry, static GtkWidget *pon_entry,
*poff_entry, *poff_entry,
*net_ignore_entry,
*timer_iface_combo_box, *timer_iface_combo_box,
*text_format_combo_box; *text_format_combo_box;
@ -2792,7 +2854,7 @@ cb_timer_iface(GtkWidget *widget, gpointer data)
entry = gtk_bin_get_child(GTK_BIN(timer_iface_combo_box)); entry = gtk_bin_get_child(GTK_BIN(timer_iface_combo_box));
s = gkrellm_gtk_entry_get_text(&entry); s = gkrellm_gtk_entry_get_text(&entry);
if (*s == '\0' || strcmp(s, _("none")) == 0) if (*s == '\0' || strcmp(s, _("none")) == 0 || net_ignore_match(s))
s = "none"; s = "none";
if (gkrellm_dup_string(&timer_button_iface, s)) if (gkrellm_dup_string(&timer_button_iface, s))
{ {
@ -2888,6 +2950,51 @@ cb_net_enabled_as_default(GtkWidget *button, gpointer data)
net_enabled_as_default = GTK_TOGGLE_BUTTON(button)->active; net_enabled_as_default = GTK_TOGGLE_BUTTON(button)->active;
} }
static void
net_ignore_entry_cb(GtkWidget *widget, gpointer data)
{
NetMon *net;
GList *list;
gchar *str = gkrellm_gtk_entry_get_text(&net_ignore_entry);
gboolean prev_ignore;
gkrellm_dup_string(&net_ignore_patterns, str);
for (list = net_mon_list; list; list = list->next)
{
net = (NetMon *) list->data;
prev_ignore = net->ignore;
net->ignore = net_ignore_match(net->name);
if (net->ignore && !prev_ignore)
{
net->enabled = FALSE;
sync_chart(net);
net_spacer_visibility();
}
else if (!net->ignore && prev_ignore)
{
net->enabled = net_enabled_as_default;
sync_chart(net);
net_spacer_visibility();
}
if (net->force_button)
{
if (net->enabled)
gtk_widget_set_sensitive(net->force_button, TRUE);
else
{
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(net->force_button),
FALSE);
gtk_widget_set_sensitive(net->force_button, FALSE);
net->force_up = FALSE;
}
}
if (net->alert_button)
gtk_widget_set_sensitive(net->alert_button, net->enabled);
if (net == net_timed && !net->enabled && timer_iface_combo_box)
gtk_combo_box_set_active(GTK_COMBO_BOX(timer_iface_combo_box), 0);
}
}
#if !defined(WIN32) #if !defined(WIN32)
static gchar *net_info_text0[] = static gchar *net_info_text0[] =
{ {
@ -3032,7 +3139,12 @@ create_net_tab(GtkWidget *tab_vbox)
for (list = net_mon_list; list; list = list->next) for (list = net_mon_list; list; list = list->next)
{ {
net = (NetMon *) list->data; net = (NetMon *) list->data;
if (net->ignore)
{
net->alert_button = NULL;
net->force_button = NULL;
continue;
}
vbox = gkrellm_gtk_framed_notebook_page(tabs, net->name); vbox = gkrellm_gtk_framed_notebook_page(tabs, net->name);
snprintf(buf, sizeof(buf), _("Enable %s"), net->name); snprintf(buf, sizeof(buf), _("Enable %s"), net->name);
@ -3107,6 +3219,24 @@ create_net_tab(GtkWidget *tab_vbox)
g_signal_connect(G_OBJECT(GTK_COMBO_BOX(text_format_combo_box)), "changed", g_signal_connect(G_OBJECT(GTK_COMBO_BOX(text_format_combo_box)), "changed",
G_CALLBACK(cb_text_format), NULL); G_CALLBACK(cb_text_format), NULL);
vbox1 = gkrellm_gtk_category_vbox(vbox,
_("Ignore Net Interfaces"),
4, 0, TRUE);
label = gtk_label_new(_("Space separated list of patterns.\n"));
gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox1), hbox, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox1), hbox, FALSE, FALSE, 0);
net_ignore_entry = gtk_entry_new();
snprintf(buf, sizeof(buf), "%s", net_ignore_patterns);
gtk_entry_set_text(GTK_ENTRY(net_ignore_entry), buf);
gtk_box_pack_start(GTK_BOX(hbox), net_ignore_entry, FALSE, FALSE, 0);
g_signal_connect(G_OBJECT(net_ignore_entry), "changed",
G_CALLBACK(net_ignore_entry_cb), NULL);
gkrellm_gtk_spin_button(vbox, NULL, (gfloat) reset_mday, gkrellm_gtk_spin_button(vbox, NULL, (gfloat) reset_mday,
1.0, 31.0, 1.0, 1.0, 0, 55, 1.0, 31.0, 1.0, 1.0, 0, 55,
cb_reset_mday, NULL, FALSE, cb_reset_mday, NULL, FALSE,
@ -3186,6 +3316,7 @@ gkrellm_init_net_monitor(void)
gkrellm_locale_dup_string(&text_format, DEFAULT_TEXT_FORMAT, gkrellm_locale_dup_string(&text_format, DEFAULT_TEXT_FORMAT,
&text_format_locale); &text_format_locale);
gkrellm_dup_string(&net_ignore_patterns, "");
net_stats_window_height = 200; net_stats_window_height = 200;