rename and move container network interfaces to container section
Costa Tsaousis (ktsaou) committed
Jul 31, 2017 at 23:44 UTC
5f5c89de15429ccf101d5cfa11897904e6e98c9f
3 files changed
+292
-69
src/proc_net_dev.c
+245
-66
@@ -3,7 +3,7 @@
3
// ----------------------------------------------------------------------------
4
// netdev list
5
6
-struct netdev {
6
+static struct netdev {
7
char *name;
8
uint32_t hash;
9
size_t len;
@@ -29,10 +29,17 @@ struct netdev {
29
const char *chart_type_net_drops;
30
const char *chart_type_net_compressed;
31
32
+ const char *chart_id_net_bytes;
33
+ const char *chart_id_net_packets;
34
+ const char *chart_id_net_errors;
35
+ const char *chart_id_net_fifo;
36
+ const char *chart_id_net_events;
37
+ const char *chart_id_net_drops;
38
+ const char *chart_id_net_compressed;
39
+
40
const char *chart_family;
33
- const char *chart_name;
34
- const char *chart_id;
41
42
+ int flipped;
43
unsigned long priority;
44
45
// data collected
@@ -83,7 +90,77 @@ struct netdev {
90
RRDDIM *rd_tcompressed;
91
92
struct netdev *next;
86
-};
93
+} *netdev_root = NULL, *netdev_last_used = NULL;
94
+
95
+static size_t netdev_added = 0, netdev_found = 0;
96
+
97
+// ----------------------------------------------------------------------------
98
+
99
+static void netdev_charts_release(struct netdev *d) {
100
+ if(d->st_bandwidth) rrdset_is_obsolete(d->st_bandwidth);
101
+ if(d->st_packets) rrdset_is_obsolete(d->st_packets);
102
+ if(d->st_errors) rrdset_is_obsolete(d->st_errors);
103
+ if(d->st_drops) rrdset_is_obsolete(d->st_drops);
104
+ if(d->st_fifo) rrdset_is_obsolete(d->st_fifo);
105
+ if(d->st_compressed) rrdset_is_obsolete(d->st_compressed);
106
+ if(d->st_events) rrdset_is_obsolete(d->st_events);
107
+
108
+ d->st_bandwidth = NULL;
109
+ d->st_compressed = NULL;
110
+ d->st_drops = NULL;
111
+ d->st_errors = NULL;
112
+ d->st_events = NULL;
113
+ d->st_fifo = NULL;
114
+ d->st_packets = NULL;
115
+
116
+ d->rd_rbytes = NULL;
117
+ d->rd_rpackets = NULL;
118
+ d->rd_rerrors = NULL;
119
+ d->rd_rdrops = NULL;
120
+ d->rd_rfifo = NULL;
121
+ d->rd_rframe = NULL;
122
+ d->rd_rcompressed = NULL;
123
+ d->rd_rmulticast = NULL;
124
+
125
+ d->rd_tbytes = NULL;
126
+ d->rd_tpackets = NULL;
127
+ d->rd_terrors = NULL;
128
+ d->rd_tdrops = NULL;
129
+ d->rd_tfifo = NULL;
130
+ d->rd_tcollisions = NULL;
131
+ d->rd_tcarrier = NULL;
132
+ d->rd_tcompressed = NULL;
133
+}
134
+
135
+static void netdev_free_strings(struct netdev *d) {
136
+ freez((void *)d->chart_type_net_bytes);
137
+ freez((void *)d->chart_type_net_compressed);
138
+ freez((void *)d->chart_type_net_drops);
139
+ freez((void *)d->chart_type_net_errors);
140
+ freez((void *)d->chart_type_net_events);
141
+ freez((void *)d->chart_type_net_fifo);
142
+ freez((void *)d->chart_type_net_packets);
143
+
144
+ freez((void *)d->chart_id_net_bytes);
145
+ freez((void *)d->chart_id_net_compressed);
146
+ freez((void *)d->chart_id_net_drops);
147
+ freez((void *)d->chart_id_net_errors);
148
+ freez((void *)d->chart_id_net_events);
149
+ freez((void *)d->chart_id_net_fifo);
150
+ freez((void *)d->chart_id_net_packets);
151
+
152
+ freez((void *)d->chart_family);
153
+}
154
+
155
+static void netdev_free(struct netdev *d) {
156
+ netdev_charts_release(d);
157
+ netdev_free_strings(d);
158
+
159
+ freez((void *)d->name);
160
+ freez((void *)d);
161
+ netdev_added--;
162
+}
163
+
164
165
// ----------------------------------------------------------------------------
166
// netdev renames
@@ -126,6 +203,7 @@ void netdev_rename_device_add(const char *host_device, const char *container_dev
203
r->container_name = strdupz(container_name);
204
r->hash = hash;
205
r->next = netdev_rename_root;
206
+ r->processed = 0;
207
netdev_rename_root = r;
208
netdev_pending_renames++;
209
info("CGROUP: registered network interface rename for '%s' as '%s' under '%s'", r->host_device, r->container_device, r->container_name);
@@ -176,36 +254,78 @@ void netdev_rename_device_del(const char *host_device) {
254
netdata_mutex_unlock(&netdev_rename_mutex);
255
}
256
179
-// ----------------------------------------------------------------------------
180
-// netdev data collection
257
+static inline void netdev_rename_cgroup(struct netdev *d, struct netdev_rename *r) {
258
+ info("CGROUP: renaming network interface '%s' as '%s' under '%s'", r->host_device, r->container_device, r->container_name);
259
182
-static struct netdev *netdev_root = NULL, *netdev_last_used = NULL;
183
-static size_t netdev_added = 0, netdev_found = 0;
260
+ netdev_charts_release(d);
261
+ netdev_free_strings(d);
262
185
-static void netdev_free(struct netdev *d) {
186
- if(d->st_bandwidth) rrdset_is_obsolete(d->st_bandwidth);
187
- if(d->st_packets) rrdset_is_obsolete(d->st_packets);
188
- if(d->st_errors) rrdset_is_obsolete(d->st_errors);
189
- if(d->st_drops) rrdset_is_obsolete(d->st_drops);
190
- if(d->st_fifo) rrdset_is_obsolete(d->st_fifo);
191
- if(d->st_compressed) rrdset_is_obsolete(d->st_compressed);
192
- if(d->st_events) rrdset_is_obsolete(d->st_events);
263
+ char buffer[RRD_ID_LENGTH_MAX + 1];
264
194
- netdev_added--;
195
- freez((void *)d->chart_type_net_bytes);
196
- freez((void *)d->chart_type_net_compressed);
197
- freez((void *)d->chart_type_net_drops);
198
- freez((void *)d->chart_type_net_errors);
199
- freez((void *)d->chart_type_net_events);
200
- freez((void *)d->chart_type_net_fifo);
201
- freez((void *)d->chart_type_net_packets);
202
- freez((void *)d->chart_family);
203
- freez((void *)d->chart_name);
204
- freez((void *)d->chart_id);
205
- freez((void *)d->name);
206
- freez((void *)d);
265
+ snprintfz(buffer, RRD_ID_LENGTH_MAX, "cgroup_%s", r->container_name);
266
+ d->chart_type_net_bytes = strdupz(buffer);
267
+ d->chart_type_net_compressed = strdupz(buffer);
268
+ d->chart_type_net_drops = strdupz(buffer);
269
+ d->chart_type_net_errors = strdupz(buffer);
270
+ d->chart_type_net_events = strdupz(buffer);
271
+ d->chart_type_net_fifo = strdupz(buffer);
272
+ d->chart_type_net_packets = strdupz(buffer);
273
+
274
+ snprintfz(buffer, RRD_ID_LENGTH_MAX, "net_%s", r->container_device);
275
+ d->chart_id_net_bytes = strdupz(buffer);
276
+
277
+ snprintfz(buffer, RRD_ID_LENGTH_MAX, "net_compressed_%s", r->container_device);
278
+ d->chart_id_net_compressed = strdupz(buffer);
279
+
280
+ snprintfz(buffer, RRD_ID_LENGTH_MAX, "net_drops_%s", r->container_device);
281
+ d->chart_id_net_drops = strdupz(buffer);
282
+
283
+ snprintfz(buffer, RRD_ID_LENGTH_MAX, "net_errors_%s", r->container_device);
284
+ d->chart_id_net_errors = strdupz(buffer);
285
+
286
+ snprintfz(buffer, RRD_ID_LENGTH_MAX, "net_events_%s", r->container_device);
287
+ d->chart_id_net_events = strdupz(buffer);
288
+
289
+ snprintfz(buffer, RRD_ID_LENGTH_MAX, "net_fifo_%s", r->container_device);
290
+ d->chart_id_net_fifo = strdupz(buffer);
291
+
292
+ snprintfz(buffer, RRD_ID_LENGTH_MAX, "net_packets_%s", r->container_device);
293
+ d->chart_id_net_packets = strdupz(buffer);
294
+
295
+ d->chart_family = strdupz("net");
296
+ d->priority = 43000;
297
+ d->flipped = 1;
298
+}
299
+
300
+static inline void netdev_rename(struct netdev *d) {
301
+ struct netdev_rename *r = netdev_rename_find(d->name, d->hash);
302
+ if(unlikely(r && !r->processed)) {
303
+ netdev_rename_cgroup(d, r);
304
+ r->processed = 1;
305
+ netdev_pending_renames--;
306
+ }
307
}
308
309
+static inline void netdev_rename_lock(struct netdev *d) {
310
+ netdata_mutex_lock(&netdev_rename_mutex);
311
+ netdev_rename(d);
312
+ netdata_mutex_unlock(&netdev_rename_mutex);
313
+}
314
+
315
+static inline void netdev_rename_all_lock(void) {
316
+ netdata_mutex_lock(&netdev_rename_mutex);
317
+
318
+ struct netdev *d;
319
+ for(d = netdev_root; d ; d = d->next)
320
+ netdev_rename(d);
321
+
322
+ netdev_pending_renames = 0;
323
+ netdata_mutex_unlock(&netdev_rename_mutex);
324
+}
325
+
326
+// ----------------------------------------------------------------------------
327
+// netdev data collection
328
+
329
static void netdev_cleanup() {
330
if(likely(netdev_found == netdev_added)) return;
331
@@ -272,11 +392,20 @@ static struct netdev *get_netdev(const char *name) {
392
d->chart_type_net_events = strdupz("net_events");
393
d->chart_type_net_fifo = strdupz("net_fifo");
394
d->chart_type_net_packets = strdupz("net_packets");
395
+
396
+ d->chart_id_net_bytes = strdupz(d->name);
397
+ d->chart_id_net_compressed = strdupz(d->name);
398
+ d->chart_id_net_drops = strdupz(d->name);
399
+ d->chart_id_net_errors = strdupz(d->name);
400
+ d->chart_id_net_events = strdupz(d->name);
401
+ d->chart_id_net_fifo = strdupz(d->name);
402
+ d->chart_id_net_packets = strdupz(d->name);
403
+
404
d->chart_family = strdupz(d->name);
276
- d->chart_name = NULL;
277
- d->chart_id = strdupz(d->name);
405
d->priority = 7000;
406
407
+ netdev_rename_lock(d);
408
+
409
netdev_added++;
410
411
// link it to the end
@@ -309,9 +438,7 @@ int do_proc_net_dev(int update_every, usec_t dt) {
438
do_compressed = config_get_boolean_ondemand("plugin:proc:/proc/net/dev", "compressed packets for all interfaces", CONFIG_BOOLEAN_AUTO);
439
do_events = config_get_boolean_ondemand("plugin:proc:/proc/net/dev", "frames, collisions, carrier counters for all interfaces", CONFIG_BOOLEAN_AUTO);
440
312
- disabled_list = simple_pattern_create(
313
- config_get("plugin:proc:/proc/net/dev", "disable by default interfaces matching", "lo fireqos* *-ifb")
314
- , SIMPLE_PATTERN_EXACT);
441
+ disabled_list = simple_pattern_create(config_get("plugin:proc:/proc/net/dev", "disable by default interfaces matching", "lo fireqos* *-ifb"), SIMPLE_PATTERN_EXACT);
442
}
443
444
if(unlikely(!ff)) {
@@ -324,6 +451,10 @@ int do_proc_net_dev(int update_every, usec_t dt) {
451
ff = procfile_readall(ff);
452
if(unlikely(!ff)) return 0; // we return 0, so that we will retry to open it next time
453
454
+ // rename all the devices, if we have pending renames
455
+ if(unlikely(netdev_pending_renames))
456
+ netdev_rename_all_lock();
457
+
458
netdev_found = 0;
459
460
size_t lines = procfile_lines(ff), l;
@@ -353,13 +484,13 @@ int do_proc_net_dev(int update_every, usec_t dt) {
484
if(d->enabled == CONFIG_BOOLEAN_NO)
485
continue;
486
356
- d->do_bandwidth = config_get_boolean_ondemand(var_name, "bandwidth", do_bandwidth);
357
- d->do_packets = config_get_boolean_ondemand(var_name, "packets", do_packets);
358
- d->do_errors = config_get_boolean_ondemand(var_name, "errors", do_errors);
359
- d->do_drops = config_get_boolean_ondemand(var_name, "drops", do_drops);
360
- d->do_fifo = config_get_boolean_ondemand(var_name, "fifo", do_fifo);
487
+ d->do_bandwidth = config_get_boolean_ondemand(var_name, "bandwidth", do_bandwidth);
488
+ d->do_packets = config_get_boolean_ondemand(var_name, "packets", do_packets);
489
+ d->do_errors = config_get_boolean_ondemand(var_name, "errors", do_errors);
490
+ d->do_drops = config_get_boolean_ondemand(var_name, "drops", do_drops);
491
+ d->do_fifo = config_get_boolean_ondemand(var_name, "fifo", do_fifo);
492
d->do_compressed = config_get_boolean_ondemand(var_name, "compressed", do_compressed);
362
- d->do_events = config_get_boolean_ondemand(var_name, "events", do_events);
493
+ d->do_events = config_get_boolean_ondemand(var_name, "events", do_events);
494
}
495
496
if(unlikely(!d->enabled))
@@ -412,8 +543,8 @@ int do_proc_net_dev(int update_every, usec_t dt) {
543
544
d->st_bandwidth = rrdset_create_localhost(
545
d->chart_type_net_bytes
415
- , d->chart_id
416
- , d->chart_name
546
+ , d->chart_id_net_bytes
547
+ , NULL
548
, d->chart_family
549
, "net.net"
550
, "Bandwidth"
@@ -423,8 +554,16 @@ int do_proc_net_dev(int update_every, usec_t dt) {
554
, RRDSET_TYPE_AREA
555
);
556
426
- d->rd_rbytes = rrddim_add(d->st_bandwidth, "received", NULL, 8, 1024, RRD_ALGORITHM_INCREMENTAL);
427
- d->rd_tbytes = rrddim_add(d->st_bandwidth, "sent", NULL, -8, 1024, RRD_ALGORITHM_INCREMENTAL);
557
+ d->rd_rbytes = rrddim_add(d->st_bandwidth, "received", NULL, 8, 1024, RRD_ALGORITHM_INCREMENTAL);
558
+ d->rd_tbytes = rrddim_add(d->st_bandwidth, "sent", NULL, -8, 1024, RRD_ALGORITHM_INCREMENTAL);
559
+
560
+ if(d->flipped) {
561
+ // flip receive/trasmit
562
+
563
+ RRDDIM *td = d->rd_rbytes;
564
+ d->rd_rbytes = d->rd_tbytes;
565
+ d->rd_tbytes = td;
566
+ }
567
}
568
else rrdset_next(d->st_bandwidth);
569
@@ -443,8 +582,8 @@ int do_proc_net_dev(int update_every, usec_t dt) {
582
583
d->st_packets = rrdset_create_localhost(
584
d->chart_type_net_packets
446
- , d->chart_id
447
- , d->chart_name
585
+ , d->chart_id_net_packets
586
+ , NULL
587
, d->chart_family
588
, "net.packets"
589
, "Packets"
@@ -456,9 +595,17 @@ int do_proc_net_dev(int update_every, usec_t dt) {
595
596
rrdset_flag_set(d->st_packets, RRDSET_FLAG_DETAIL);
597
459
- d->rd_rpackets = rrddim_add(d->st_packets, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
460
- d->rd_tpackets = rrddim_add(d->st_packets, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
461
- d->rd_rmulticast = rrddim_add(d->st_packets, "multicast", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
598
+ d->rd_rpackets = rrddim_add(d->st_packets, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
599
+ d->rd_tpackets = rrddim_add(d->st_packets, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
600
+ d->rd_rmulticast = rrddim_add(d->st_packets, "multicast", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
601
+
602
+ if(d->flipped) {
603
+ // flip receive/trasmit
604
+
605
+ RRDDIM *td = d->rd_rpackets;
606
+ d->rd_rpackets = d->rd_tpackets;
607
+ d->rd_tpackets = td;
608
+ }
609
}
610
else rrdset_next(d->st_packets);
611
@@ -478,8 +625,8 @@ int do_proc_net_dev(int update_every, usec_t dt) {
625
626
d->st_errors = rrdset_create_localhost(
627
d->chart_type_net_errors
481
- , d->chart_id
482
- , d->chart_name
628
+ , d->chart_id_net_errors
629
+ , NULL
630
, d->chart_family
631
, "net.errors"
632
, "Interface Errors"
@@ -491,8 +638,16 @@ int do_proc_net_dev(int update_every, usec_t dt) {
638
639
rrdset_flag_set(d->st_errors, RRDSET_FLAG_DETAIL);
640
494
- d->rd_rerrors = rrddim_add(d->st_errors, "inbound", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
641
+ d->rd_rerrors = rrddim_add(d->st_errors, "inbound", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
642
d->rd_terrors = rrddim_add(d->st_errors, "outbound", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
643
+
644
+ if(d->flipped) {
645
+ // flip receive/trasmit
646
+
647
+ RRDDIM *td = d->rd_rerrors;
648
+ d->rd_rerrors = d->rd_terrors;
649
+ d->rd_terrors = td;
650
+ }
651
}
652
else rrdset_next(d->st_errors);
653
@@ -511,8 +666,8 @@ int do_proc_net_dev(int update_every, usec_t dt) {
666
667
d->st_drops = rrdset_create_localhost(
668
d->chart_type_net_drops
514
- , d->chart_id
515
- , d->chart_name
669
+ , d->chart_id_net_drops
670
+ , NULL
671
, d->chart_family
672
, "net.drops"
673
, "Interface Drops"
@@ -524,8 +679,16 @@ int do_proc_net_dev(int update_every, usec_t dt) {
679
680
rrdset_flag_set(d->st_drops, RRDSET_FLAG_DETAIL);
681
527
- d->rd_rdrops = rrddim_add(d->st_drops, "inbound", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
682
+ d->rd_rdrops = rrddim_add(d->st_drops, "inbound", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
683
d->rd_tdrops = rrddim_add(d->st_drops, "outbound", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
684
+
685
+ if(d->flipped) {
686
+ // flip receive/trasmit
687
+
688
+ RRDDIM *td = d->rd_rdrops;
689
+ d->rd_rdrops = d->rd_tdrops;
690
+ d->rd_tdrops = td;
691
+ }
692
}
693
else rrdset_next(d->st_drops);
694
@@ -544,8 +707,8 @@ int do_proc_net_dev(int update_every, usec_t dt) {
707
708
d->st_fifo = rrdset_create_localhost(
709
d->chart_type_net_fifo
547
- , d->chart_id
548
- , d->chart_name
710
+ , d->chart_id_net_fifo
711
+ , NULL
712
, d->chart_family
713
, "net.fifo"
714
, "Interface FIFO Buffer Errors"
@@ -557,8 +720,16 @@ int do_proc_net_dev(int update_every, usec_t dt) {
720
721
rrdset_flag_set(d->st_fifo, RRDSET_FLAG_DETAIL);
722
560
- d->rd_rfifo = rrddim_add(d->st_fifo, "receive", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
723
+ d->rd_rfifo = rrddim_add(d->st_fifo, "receive", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
724
d->rd_tfifo = rrddim_add(d->st_fifo, "transmit", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
725
+
726
+ if(d->flipped) {
727
+ // flip receive/trasmit
728
+
729
+ RRDDIM *td = d->rd_rfifo;
730
+ d->rd_rfifo = d->rd_tfifo;
731
+ d->rd_tfifo = td;
732
+ }
733
}
734
else rrdset_next(d->st_fifo);
735
@@ -577,8 +748,8 @@ int do_proc_net_dev(int update_every, usec_t dt) {
748
749
d->st_compressed = rrdset_create_localhost(
750
d->chart_type_net_compressed
580
- , d->chart_id
581
- , d->chart_name
751
+ , d->chart_id_net_compressed
752
+ , NULL
753
, d->chart_family
754
, "net.compressed"
755
, "Compressed Packets"
@@ -590,8 +761,16 @@ int do_proc_net_dev(int update_every, usec_t dt) {
761
762
rrdset_flag_set(d->st_compressed, RRDSET_FLAG_DETAIL);
763
593
- d->rd_rcompressed = rrddim_add(d->st_compressed, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
594
- d->rd_tcompressed = rrddim_add(d->st_compressed, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
764
+ d->rd_rcompressed = rrddim_add(d->st_compressed, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
765
+ d->rd_tcompressed = rrddim_add(d->st_compressed, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
766
+
767
+ if(d->flipped) {
768
+ // flip receive/trasmit
769
+
770
+ RRDDIM *td = d->rd_rcompressed;
771
+ d->rd_rcompressed = d->rd_tcompressed;
772
+ d->rd_tcompressed = td;
773
+ }
774
}
775
else rrdset_next(d->st_compressed);
776
@@ -610,8 +789,8 @@ int do_proc_net_dev(int update_every, usec_t dt) {
789
790
d->st_events = rrdset_create_localhost(
791
d->chart_type_net_events
613
- , d->chart_id
614
- , d->chart_name
792
+ , d->chart_id_net_events
793
+ , NULL
794
, d->chart_family
795
, "net.events"
796
, "Network Interface Events"
@@ -623,9 +802,9 @@ int do_proc_net_dev(int update_every, usec_t dt) {
802
803
rrdset_flag_set(d->st_events, RRDSET_FLAG_DETAIL);
804
626
- d->rd_rframe = rrddim_add(d->st_events, "frames", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
805
+ d->rd_rframe = rrddim_add(d->st_events, "frames", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
806
d->rd_tcollisions = rrddim_add(d->st_events, "collisions", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
628
- d->rd_tcarrier = rrddim_add(d->st_events, "carrier", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
807
+ d->rd_tcarrier = rrddim_add(d->st_events, "carrier", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
808
}
809
else rrdset_next(d->st_events);
810
web/dashboard_info.js
+46
-2
@@ -709,9 +709,53 @@ netdataDashboard.context = {
709
// NETWORK INTERFACES
710
711
'net.net': {
712
+ mainheads: [
713
+ function(os, id) {
714
+ void(os);
715
+ if(id.match(/^cgroup_.*/)) {
716
+ var iface;
717
+ try {
718
+ iface = id.substring(id.lastIndexOf('.net_') + 5, id.length) + ' ';
719
+ }
720
+ catch (e) {
721
+ iface = '';
722
+ }
723
+ return netdataDashboard.gaugeChart(iface + 'Received', '12%', 'received');
724
+ }
725
+ else
726
+ return '';
727
+ },
728
+ function(os, id) {
729
+ void(os);
730
+ if(id.match(/^cgroup_.*/)) {
731
+ var iface;
732
+ try {
733
+ iface = id.substring(id.lastIndexOf('.net_') + 5, id.length) + ' ';
734
+ }
735
+ catch (e) {
736
+ iface = '';
737
+ }
738
+ return netdataDashboard.gaugeChart(iface + 'Sent', '12%', 'sent');
739
+ }
740
+ else
741
+ return '';
742
+ }
743
+ ],
744
heads: [
713
- netdataDashboard.gaugeChart('Received', '12%', 'received'),
714
- netdataDashboard.gaugeChart('Sent', '12%', 'sent')
745
+ function(os, id) {
746
+ void(os);
747
+ if(!id.match(/^cgroup_.*/))
748
+ return netdataDashboard.gaugeChart('Received', '12%', 'received');
749
+ else
750
+ return '';
751
+ },
752
+ function(os, id) {
753
+ void(os);
754
+ if(!id.match(/^cgroup_.*/))
755
+ return netdataDashboard.gaugeChart('Sent', '12%', 'sent');
756
+ else
757
+ return '';
758
+ }
759
]
760
},
761
web/index.html
+1
-1
@@ -2961,7 +2961,7 @@
2961
});
2962
2963
NETDATA.requiredJs.push({
2964
- url: NETDATA.serverDefault + 'dashboard_info.js?v20170725-1',
2964
+ url: NETDATA.serverDefault + 'dashboard_info.js?v20170731-4',
2965
async: false,
2966
isAlreadyLoaded: function() { return false; }
2967
});