@cryptotaxi247 / netdata-1 / commits / dd0a902ae

eliminated unecessary index lookups

Costa Tsaousis (ktsaou) committed Oct 14, 2017 at 21:34 UTC dd0a902ae0254bf29eb9ae624b937100c12d1eac
1 file changed +400 -329
src/proc_net_snmp.c
+400 -329
@@ -8,150 +8,151 @@ struct netstat_columns {
8 unsigned long long value;
9 int multiplier; // not needed everywhere
10 char *label; // not needed everywhere
11 + RRDDIM *rd; // not needed everywhere
12 };
13
14 static struct netstat_columns ip_data[] = {
14 -// { "Forwarding", 0, 0, 1, NULL },
15 -// { "DefaultTTL", 0, 0, 1, NULL },
16 - { "InReceives", 0, 0, 1, NULL },
17 - { "InHdrErrors", 0, 0, 1, NULL },
18 - { "InAddrErrors", 0, 0, 1, NULL },
19 - { "ForwDatagrams", 0, 0, 1, NULL },
20 - { "InUnknownProtos", 0, 0, 1, NULL },
21 - { "InDiscards", 0, 0, 1, NULL },
22 - { "InDelivers", 0, 0, 1, NULL },
23 - { "OutRequests", 0, 0, 1, NULL },
24 - { "OutDiscards", 0, 0, 1, NULL },
25 - { "OutNoRoutes", 0, 0, 1, NULL },
26 -// { "ReasmTimeout", 0, 0, 1, NULL },
27 - { "ReasmReqds", 0, 0, 1, NULL },
28 - { "ReasmOKs", 0, 0, 1, NULL },
29 - { "ReasmFails", 0, 0, 1, NULL },
30 - { "FragOKs", 0, 0, 1, NULL },
31 - { "FragFails", 0, 0, 1, NULL },
32 - { "FragCreates", 0, 0, 1, NULL },
33 - { NULL, 0, 0, 0, NULL }
15 +// { "Forwarding", 0, 0, 1, NULL, NULL },
16 +// { "DefaultTTL", 0, 0, 1, NULL, NULL },
17 + { "InReceives", 0, 0, 1, NULL, NULL },
18 + { "InHdrErrors", 0, 0, 1, NULL, NULL },
19 + { "InAddrErrors", 0, 0, 1, NULL, NULL },
20 + { "ForwDatagrams", 0, 0, 1, NULL, NULL },
21 + { "InUnknownProtos", 0, 0, 1, NULL, NULL },
22 + { "InDiscards", 0, 0, 1, NULL, NULL },
23 + { "InDelivers", 0, 0, 1, NULL, NULL },
24 + { "OutRequests", 0, 0, 1, NULL, NULL },
25 + { "OutDiscards", 0, 0, 1, NULL, NULL },
26 + { "OutNoRoutes", 0, 0, 1, NULL, NULL },
27 +// { "ReasmTimeout", 0, 0, 1, NULL, NULL },
28 + { "ReasmReqds", 0, 0, 1, NULL, NULL },
29 + { "ReasmOKs", 0, 0, 1, NULL, NULL },
30 + { "ReasmFails", 0, 0, 1, NULL, NULL },
31 + { "FragOKs", 0, 0, 1, NULL, NULL },
32 + { "FragFails", 0, 0, 1, NULL, NULL },
33 + { "FragCreates", 0, 0, 1, NULL, NULL },
34 + { NULL, 0, 0, 0, NULL, NULL }
35 };
36
37 static struct netstat_columns icmp_data[] = {
37 - { "InMsgs", 0, 0, 1, NULL },
38 - { "OutMsgs", 0, 0, -1, NULL },
39 - { "InErrors", 0, 0, 1, NULL },
40 - { "OutErrors", 0, 0, -1, NULL },
41 - { "InCsumErrors", 0, 0, 1, NULL },
38 + { "InMsgs", 0, 0, 1, NULL, NULL },
39 + { "OutMsgs", 0, 0, -1, NULL, NULL },
40 + { "InErrors", 0, 0, 1, NULL, NULL },
41 + { "OutErrors", 0, 0, -1, NULL, NULL },
42 + { "InCsumErrors", 0, 0, 1, NULL, NULL },
43
44 // all these are available in icmpmsg
44 -// { "InDestUnreachs", 0, 0, 1, NULL },
45 -// { "OutDestUnreachs", 0, 0, -1, NULL },
46 -// { "InTimeExcds", 0, 0, 1, NULL },
47 -// { "OutTimeExcds", 0, 0, -1, NULL },
48 -// { "InParmProbs", 0, 0, 1, NULL },
49 -// { "OutParmProbs", 0, 0, -1, NULL },
50 -// { "InSrcQuenchs", 0, 0, 1, NULL },
51 -// { "OutSrcQuenchs", 0, 0, -1, NULL },
52 -// { "InRedirects", 0, 0, 1, NULL },
53 -// { "OutRedirects", 0, 0, -1, NULL },
54 -// { "InEchos", 0, 0, 1, NULL },
55 -// { "OutEchos", 0, 0, -1, NULL },
56 -// { "InEchoReps", 0, 0, 1, NULL },
57 -// { "OutEchoReps", 0, 0, -1, NULL },
58 -// { "InTimestamps", 0, 0, 1, NULL },
59 -// { "OutTimestamps", 0, 0, -1, NULL },
60 -// { "InTimestampReps", 0, 0, 1, NULL },
61 -// { "OutTimestampReps", 0, 0, -1, NULL },
62 -// { "InAddrMasks", 0, 0, 1, NULL },
63 -// { "OutAddrMasks", 0, 0, -1, NULL },
64 -// { "InAddrMaskReps", 0, 0, 1, NULL },
65 -// { "OutAddrMaskReps", 0, 0, -1, NULL },
66 -
67 - { NULL, 0, 0, 0, NULL }
45 +// { "InDestUnreachs", 0, 0, 1, NULL, NULL },
46 +// { "OutDestUnreachs", 0, 0, -1, NULL, NULL },
47 +// { "InTimeExcds", 0, 0, 1, NULL, NULL },
48 +// { "OutTimeExcds", 0, 0, -1, NULL, NULL },
49 +// { "InParmProbs", 0, 0, 1, NULL, NULL },
50 +// { "OutParmProbs", 0, 0, -1, NULL, NULL },
51 +// { "InSrcQuenchs", 0, 0, 1, NULL, NULL },
52 +// { "OutSrcQuenchs", 0, 0, -1, NULL, NULL },
53 +// { "InRedirects", 0, 0, 1, NULL, NULL },
54 +// { "OutRedirects", 0, 0, -1, NULL, NULL },
55 +// { "InEchos", 0, 0, 1, NULL, NULL },
56 +// { "OutEchos", 0, 0, -1, NULL, NULL },
57 +// { "InEchoReps", 0, 0, 1, NULL, NULL },
58 +// { "OutEchoReps", 0, 0, -1, NULL, NULL },
59 +// { "InTimestamps", 0, 0, 1, NULL, NULL },
60 +// { "OutTimestamps", 0, 0, -1, NULL, NULL },
61 +// { "InTimestampReps", 0, 0, 1, NULL, NULL },
62 +// { "OutTimestampReps", 0, 0, -1, NULL, NULL },
63 +// { "InAddrMasks", 0, 0, 1, NULL, NULL },
64 +// { "OutAddrMasks", 0, 0, -1, NULL, NULL },
65 +// { "InAddrMaskReps", 0, 0, 1, NULL, NULL },
66 +// { "OutAddrMaskReps", 0, 0, -1, NULL, NULL },
67 +
68 + { NULL, 0, 0, 0, NULL, NULL }
69 };
70
71 static struct netstat_columns icmpmsg_data[] = {
71 - { "InType0", 0, 0, 1, "InEchoReps" },
72 - { "OutType0", 0, 0, -1, "OutEchoReps" },
73 -// { "InType1", 0, 0, 1, NULL }, // unassigned
74 -// { "OutType1", 0, 0, -1, NULL }, // unassigned
75 -// { "InType2", 0, 0, 1, NULL }, // unassigned
76 -// { "OutType2", 0, 0, -1, NULL }, // unassigned
77 - { "InType3", 0, 0, 1, "InDestUnreachs" },
78 - { "OutType3", 0, 0, -1, "OutDestUnreachs" },
79 -// { "InType4", 0, 0, 1, "InSrcQuenchs" }, // deprecated
80 -// { "OutType4", 0, 0, -1, "OutSrcQuenchs" }, // deprecated
81 - { "InType5", 0, 0, 1, "InRedirects" },
82 - { "OutType5", 0, 0, -1, "OutRedirects" },
83 -// { "InType6", 0, 0, 1, "InAlterHostAddr" }, // deprecated
84 -// { "OutType6", 0, 0, -1, "OutAlterHostAddr" }, // deprecated
85 -// { "InType7", 0, 0, 1, NULL }, // unassigned
86 -// { "OutType7", 0, 0, -1, NULL }, // unassigned
87 - { "InType8", 0, 0, 1, "InEchos" },
88 - { "OutType8", 0, 0, -1, "OutEchos" },
89 - { "InType9", 0, 0, 1, "InRouterAdvert" },
90 - { "OutType9", 0, 0, -1, "OutRouterAdvert" },
91 - { "InType10", 0, 0, 1, "InRouterSelect" },
92 - { "OutType10", 0, 0, -1, "OutRouterSelect" },
93 - { "InType11", 0, 0, 1, "InTimeExcds" },
94 - { "OutType11", 0, 0, -1, "OutTimeExcds" },
95 - { "InType12", 0, 0, 1, "InParmProbs" },
96 - { "OutType12", 0, 0, -1, "OutParmProbs" },
97 - { "InType13", 0, 0, 1, "InTimestamps" },
98 - { "OutType13", 0, 0, -1, "OutTimestamps" },
99 - { "InType14", 0, 0, 1, "InTimestampReps" },
100 - { "OutType14", 0, 0, -1, "OutTimestampReps" },
101 -// { "InType15", 0, 0, 1, "InInfos" }, // deprecated
102 -// { "OutType15", 0, 0, -1, "OutInfos" }, // deprecated
103 -// { "InType16", 0, 0, 1, "InInfoReps" }, // deprecated
104 -// { "OutType16", 0, 0, -1, "OutInfoReps" }, // deprecated
105 -// { "InType17", 0, 0, 1, "InAddrMasks" }, // deprecated
106 -// { "OutType17", 0, 0, -1, "OutAddrMasks" }, // deprecated
107 -// { "InType18", 0, 0, 1, "InAddrMaskReps" }, // deprecated
108 -// { "OutType18", 0, 0, -1, "OutAddrMaskReps" }, // deprecated
109 -// { "InType30", 0, 0, 1, "InTraceroute" }, // deprecated
110 -// { "OutType30", 0, 0, -1, "OutTraceroute" }, // deprecated
111 - { NULL, 0, 0, 0, NULL }
72 + { "InType0", 0, 0, 1, "InEchoReps", NULL },
73 + { "OutType0", 0, 0, -1, "OutEchoReps", NULL },
74 +// { "InType1", 0, 0, 1, NULL, NULL }, // unassigned
75 +// { "OutType1", 0, 0, -1, NULL, NULL }, // unassigned
76 +// { "InType2", 0, 0, 1, NULL, NULL }, // unassigned
77 +// { "OutType2", 0, 0, -1, NULL, NULL }, // unassigned
78 + { "InType3", 0, 0, 1, "InDestUnreachs", NULL },
79 + { "OutType3", 0, 0, -1, "OutDestUnreachs", NULL },
80 +// { "InType4", 0, 0, 1, "InSrcQuenchs", NULL }, // deprecated
81 +// { "OutType4", 0, 0, -1, "OutSrcQuenchs", NULL }, // deprecated
82 + { "InType5", 0, 0, 1, "InRedirects", NULL },
83 + { "OutType5", 0, 0, -1, "OutRedirects", NULL },
84 +// { "InType6", 0, 0, 1, "InAlterHostAddr", NULL }, // deprecated
85 +// { "OutType6", 0, 0, -1, "OutAlterHostAddr", NULL }, // deprecated
86 +// { "InType7", 0, 0, 1, NULL, NULL }, // unassigned
87 +// { "OutType7", 0, 0, -1, NULL, NULL }, // unassigned
88 + { "InType8", 0, 0, 1, "InEchos", NULL },
89 + { "OutType8", 0, 0, -1, "OutEchos", NULL },
90 + { "InType9", 0, 0, 1, "InRouterAdvert", NULL },
91 + { "OutType9", 0, 0, -1, "OutRouterAdvert", NULL },
92 + { "InType10", 0, 0, 1, "InRouterSelect", NULL },
93 + { "OutType10", 0, 0, -1, "OutRouterSelect", NULL },
94 + { "InType11", 0, 0, 1, "InTimeExcds", NULL },
95 + { "OutType11", 0, 0, -1, "OutTimeExcds", NULL },
96 + { "InType12", 0, 0, 1, "InParmProbs", NULL },
97 + { "OutType12", 0, 0, -1, "OutParmProbs", NULL },
98 + { "InType13", 0, 0, 1, "InTimestamps", NULL },
99 + { "OutType13", 0, 0, -1, "OutTimestamps", NULL },
100 + { "InType14", 0, 0, 1, "InTimestampReps", NULL },
101 + { "OutType14", 0, 0, -1, "OutTimestampReps", NULL },
102 +// { "InType15", 0, 0, 1, "InInfos", NULL }, // deprecated
103 +// { "OutType15", 0, 0, -1, "OutInfos", NULL }, // deprecated
104 +// { "InType16", 0, 0, 1, "InInfoReps", NULL }, // deprecated
105 +// { "OutType16", 0, 0, -1, "OutInfoReps", NULL }, // deprecated
106 +// { "InType17", 0, 0, 1, "InAddrMasks", NULL }, // deprecated
107 +// { "OutType17", 0, 0, -1, "OutAddrMasks", NULL }, // deprecated
108 +// { "InType18", 0, 0, 1, "InAddrMaskReps", NULL }, // deprecated
109 +// { "OutType18", 0, 0, -1, "OutAddrMaskReps", NULL }, // deprecated
110 +// { "InType30", 0, 0, 1, "InTraceroute", NULL }, // deprecated
111 +// { "OutType30", 0, 0, -1, "OutTraceroute", NULL }, // deprecated
112 + { NULL, 0, 0, 0, NULL, NULL }
113 };
114
115 static struct netstat_columns tcp_data[] = {
115 -// { "RtoAlgorithm", 0, 0, 1, NULL },
116 -// { "RtoMin", 0, 0, 1, NULL },
117 -// { "RtoMax", 0, 0, 1, NULL },
118 -// { "MaxConn", 0, 0, 1, NULL },
119 - { "ActiveOpens", 0, 0, 1, NULL },
120 - { "PassiveOpens", 0, 0, 1, NULL },
121 - { "AttemptFails", 0, 0, 1, NULL },
122 - { "EstabResets", 0, 0, 1, NULL },
123 - { "CurrEstab", 0, 0, 1, NULL },
124 - { "InSegs", 0, 0, 1, NULL },
125 - { "OutSegs", 0, 0, 1, NULL },
126 - { "RetransSegs", 0, 0, 1, NULL },
127 - { "InErrs", 0, 0, 1, NULL },
128 - { "OutRsts", 0, 0, 1, NULL },
129 - { "InCsumErrors", 0, 0, 1, NULL },
130 - { NULL, 0, 0, 0, NULL }
116 +// { "RtoAlgorithm", 0, 0, 1, NULL, NULL },
117 +// { "RtoMin", 0, 0, 1, NULL, NULL },
118 +// { "RtoMax", 0, 0, 1, NULL, NULL },
119 +// { "MaxConn", 0, 0, 1, NULL, NULL },
120 + { "ActiveOpens", 0, 0, 1, NULL, NULL },
121 + { "PassiveOpens", 0, 0, 1, NULL, NULL },
122 + { "AttemptFails", 0, 0, 1, NULL, NULL },
123 + { "EstabResets", 0, 0, 1, NULL, NULL },
124 + { "CurrEstab", 0, 0, 1, NULL, NULL },
125 + { "InSegs", 0, 0, 1, NULL, NULL },
126 + { "OutSegs", 0, 0, 1, NULL, NULL },
127 + { "RetransSegs", 0, 0, 1, NULL, NULL },
128 + { "InErrs", 0, 0, 1, NULL, NULL },
129 + { "OutRsts", 0, 0, 1, NULL, NULL },
130 + { "InCsumErrors", 0, 0, 1, NULL, NULL },
131 + { NULL, 0, 0, 0, NULL, NULL }
132 };
133
134 static struct netstat_columns udp_data[] = {
134 - { "InDatagrams", 0, 0, 1, NULL },
135 - { "NoPorts", 0, 0, 1, NULL },
136 - { "InErrors", 0, 0, 1, NULL },
137 - { "OutDatagrams", 0, 0, 1, NULL },
138 - { "RcvbufErrors", 0, 0, 1, NULL },
139 - { "SndbufErrors", 0, 0, 1, NULL },
140 - { "InCsumErrors", 0, 0, 1, NULL },
141 - { "IgnoredMulti", 0, 0, 1, NULL },
142 - { NULL, 0, 0, 0, NULL }
135 + { "InDatagrams", 0, 0, 1, NULL, NULL },
136 + { "NoPorts", 0, 0, 1, NULL, NULL },
137 + { "InErrors", 0, 0, 1, NULL, NULL },
138 + { "OutDatagrams", 0, 0, 1, NULL, NULL },
139 + { "RcvbufErrors", 0, 0, 1, NULL, NULL },
140 + { "SndbufErrors", 0, 0, 1, NULL, NULL },
141 + { "InCsumErrors", 0, 0, 1, NULL, NULL },
142 + { "IgnoredMulti", 0, 0, 1, NULL, NULL },
143 + { NULL, 0, 0, 0, NULL, NULL }
144 };
145
146 static struct netstat_columns udplite_data[] = {
146 - { "InDatagrams", 0, 0, 1, NULL },
147 - { "NoPorts", 0, 0, 1, NULL },
148 - { "InErrors", 0, 0, 1, NULL },
149 - { "OutDatagrams", 0, 0, 1, NULL },
150 - { "RcvbufErrors", 0, 0, 1, NULL },
151 - { "SndbufErrors", 0, 0, 1, NULL },
152 - { "InCsumErrors", 0, 0, 1, NULL },
153 - { "IgnoredMulti", 0, 0, 1, NULL },
154 - { NULL, 0, 0, 0, NULL }
147 + { "InDatagrams", 0, 0, 1, NULL, NULL },
148 + { "NoPorts", 0, 0, 1, NULL, NULL },
149 + { "InErrors", 0, 0, 1, NULL, NULL },
150 + { "OutDatagrams", 0, 0, 1, NULL, NULL },
151 + { "RcvbufErrors", 0, 0, 1, NULL, NULL },
152 + { "SndbufErrors", 0, 0, 1, NULL, NULL },
153 + { "InCsumErrors", 0, 0, 1, NULL, NULL },
154 + { "IgnoredMulti", 0, 0, 1, NULL, NULL },
155 + { NULL, 0, 0, 0, NULL, NULL }
156 };
157
158 static void hash_array(struct netstat_columns *nc) {
@@ -366,8 +367,6 @@ int do_proc_net_snmp(int update_every, usec_t dt) {
367 size_t lines = procfile_lines(ff), l;
368 size_t words;
369
369 - RRDSET *st;
370 -
370 for(l = 0; l < lines ;l++) {
371 char *key = procfile_lineword(ff, l, 0);
372 uint32_t hash = simple_hash(key);
@@ -392,8 +391,13 @@ int do_proc_net_snmp(int update_every, usec_t dt) {
391 // --------------------------------------------------------------------
392
393 if(do_ip_packets) {
395 - st = rrdset_find_localhost(RRD_TYPE_NET_SNMP ".packets");
396 - if(!st) {
394 + static RRDSET *st = NULL;
395 + static RRDDIM *rd_InReceives = NULL,
396 + *rd_OutRequests = NULL,
397 + *rd_ForwDatagrams = NULL,
398 + *rd_InDelivers = NULL;
399 +
400 + if(unlikely(!st)) {
401 st = rrdset_create_localhost(
402 RRD_TYPE_NET_SNMP
403 , "packets"
@@ -409,25 +413,29 @@ int do_proc_net_snmp(int update_every, usec_t dt) {
413 , RRDSET_TYPE_LINE
414 );
415
412 - rrddim_add(st, "InReceives", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
413 - rrddim_add(st, "OutRequests", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
414 - rrddim_add(st, "ForwDatagrams", "forwarded", 1, 1, RRD_ALGORITHM_INCREMENTAL);
415 - rrddim_add(st, "InDelivers", "delivered", 1, 1, RRD_ALGORITHM_INCREMENTAL);
416 + rd_InReceives = rrddim_add(st, "InReceives", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
417 + rd_OutRequests = rrddim_add(st, "OutRequests", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
418 + rd_ForwDatagrams = rrddim_add(st, "ForwDatagrams", "forwarded", 1, 1, RRD_ALGORITHM_INCREMENTAL);
419 + rd_InDelivers = rrddim_add(st, "InDelivers", "delivered", 1, 1, RRD_ALGORITHM_INCREMENTAL);
420 }
421 else rrdset_next(st);
422
419 - rrddim_set(st, "OutRequests", *ip_OutRequests);
420 - rrddim_set(st, "InReceives", *ip_InReceives);
421 - rrddim_set(st, "ForwDatagrams", *ip_ForwDatagrams);
422 - rrddim_set(st, "InDelivers", *ip_InDelivers);
423 + rrddim_set_by_pointer(st, rd_OutRequests, *ip_OutRequests);
424 + rrddim_set_by_pointer(st, rd_InReceives, *ip_InReceives);
425 + rrddim_set_by_pointer(st, rd_ForwDatagrams, *ip_ForwDatagrams);
426 + rrddim_set_by_pointer(st, rd_InDelivers, *ip_InDelivers);
427 rrdset_done(st);
428 }
429
430 // --------------------------------------------------------------------
431
432 if(do_ip_fragsout) {
429 - st = rrdset_find_localhost(RRD_TYPE_NET_SNMP ".fragsout");
430 - if(!st) {
433 + static RRDSET *st = NULL;
434 + static RRDDIM *rd_FragOKs = NULL,
435 + *rd_FragFails = NULL,
436 + *rd_FragCreates = NULL;
437 +
438 + if(unlikely(!st)) {
439 st = rrdset_create_localhost(
440 RRD_TYPE_NET_SNMP
441 , "fragsout"
@@ -444,23 +452,27 @@ int do_proc_net_snmp(int update_every, usec_t dt) {
452 );
453 rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
454
447 - rrddim_add(st, "FragOKs", "ok", 1, 1, RRD_ALGORITHM_INCREMENTAL);
448 - rrddim_add(st, "FragFails", "failed", -1, 1, RRD_ALGORITHM_INCREMENTAL);
449 - rrddim_add(st, "FragCreates", "created", 1, 1, RRD_ALGORITHM_INCREMENTAL);
455 + rd_FragOKs = rrddim_add(st, "FragOKs", "ok", 1, 1, RRD_ALGORITHM_INCREMENTAL);
456 + rd_FragFails = rrddim_add(st, "FragFails", "failed", -1, 1, RRD_ALGORITHM_INCREMENTAL);
457 + rd_FragCreates = rrddim_add(st, "FragCreates", "created", 1, 1, RRD_ALGORITHM_INCREMENTAL);
458 }
459 else rrdset_next(st);
460
453 - rrddim_set(st, "FragOKs", *ip_FragOKs);
454 - rrddim_set(st, "FragFails", *ip_FragFails);
455 - rrddim_set(st, "FragCreates", *ip_FragCreates);
461 + rrddim_set_by_pointer(st, rd_FragOKs, *ip_FragOKs);
462 + rrddim_set_by_pointer(st, rd_FragFails, *ip_FragFails);
463 + rrddim_set_by_pointer(st, rd_FragCreates, *ip_FragCreates);
464 rrdset_done(st);
465 }
466
467 // --------------------------------------------------------------------
468
469 if(do_ip_fragsin) {
462 - st = rrdset_find_localhost(RRD_TYPE_NET_SNMP ".fragsin");
463 - if(!st) {
470 + static RRDSET *st = NULL;
471 + static RRDDIM *rd_ReasmOKs = NULL,
472 + *rd_ReasmFails = NULL,
473 + *rd_ReasmReqds = NULL;
474 +
475 + if(unlikely(!st)) {
476 st = rrdset_create_localhost(
477 RRD_TYPE_NET_SNMP
478 , "fragsin"
@@ -477,23 +489,30 @@ int do_proc_net_snmp(int update_every, usec_t dt) {
489 );
490 rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
491
480 - rrddim_add(st, "ReasmOKs", "ok", 1, 1, RRD_ALGORITHM_INCREMENTAL);
481 - rrddim_add(st, "ReasmFails", "failed", -1, 1, RRD_ALGORITHM_INCREMENTAL);
482 - rrddim_add(st, "ReasmReqds", "all", 1, 1, RRD_ALGORITHM_INCREMENTAL);
492 + rd_ReasmOKs = rrddim_add(st, "ReasmOKs", "ok", 1, 1, RRD_ALGORITHM_INCREMENTAL);
493 + rd_ReasmFails = rrddim_add(st, "ReasmFails", "failed", -1, 1, RRD_ALGORITHM_INCREMENTAL);
494 + rd_ReasmReqds = rrddim_add(st, "ReasmReqds", "all", 1, 1, RRD_ALGORITHM_INCREMENTAL);
495 }
496 else rrdset_next(st);
497
486 - rrddim_set(st, "ReasmOKs", *ip_ReasmOKs);
487 - rrddim_set(st, "ReasmFails", *ip_ReasmFails);
488 - rrddim_set(st, "ReasmReqds", *ip_ReasmReqds);
498 + rrddim_set_by_pointer(st, rd_ReasmOKs, *ip_ReasmOKs);
499 + rrddim_set_by_pointer(st, rd_ReasmFails, *ip_ReasmFails);
500 + rrddim_set_by_pointer(st, rd_ReasmReqds, *ip_ReasmReqds);
501 rrdset_done(st);
502 }
503
504 // --------------------------------------------------------------------
505
506 if(do_ip_errors) {
495 - st = rrdset_find_localhost(RRD_TYPE_NET_SNMP ".errors");
496 - if(!st) {
507 + static RRDSET *st = NULL;
508 + static RRDDIM *rd_InDiscards = NULL,
509 + *rd_OutDiscards = NULL,
510 + *rd_InHdrErrors = NULL,
511 + *rd_OutNoRoutes = NULL,
512 + *rd_InAddrErrors = NULL,
513 + *rd_InUnknownProtos = NULL;
514 +
515 + if(unlikely(!st)) {
516 st = rrdset_create_localhost(
517 RRD_TYPE_NET_SNMP
518 , "errors"
@@ -510,23 +529,23 @@ int do_proc_net_snmp(int update_every, usec_t dt) {
529 );
530 rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
531
513 - rrddim_add(st, "InDiscards", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
514 - rrddim_add(st, "OutDiscards", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
532 + rd_InDiscards = rrddim_add(st, "InDiscards", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
533 + rd_OutDiscards = rrddim_add(st, "OutDiscards", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
534
516 - rrddim_add(st, "InHdrErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
517 - rrddim_add(st, "OutNoRoutes", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
535 + rd_InHdrErrors = rrddim_add(st, "InHdrErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
536 + rd_OutNoRoutes = rrddim_add(st, "OutNoRoutes", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
537
519 - rrddim_add(st, "InAddrErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
520 - rrddim_add(st, "InUnknownProtos", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
538 + rd_InAddrErrors = rrddim_add(st, "InAddrErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
539 + rd_InUnknownProtos = rrddim_add(st, "InUnknownProtos", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
540 }
541 else rrdset_next(st);
542
524 - rrddim_set(st, "InDiscards", *ip_InDiscards);
525 - rrddim_set(st, "OutDiscards", *ip_OutDiscards);
526 - rrddim_set(st, "InHdrErrors", *ip_InHdrErrors);
527 - rrddim_set(st, "InAddrErrors", *ip_InAddrErrors);
528 - rrddim_set(st, "InUnknownProtos", *ip_InUnknownProtos);
529 - rrddim_set(st, "OutNoRoutes", *ip_OutNoRoutes);
543 + rrddim_set_by_pointer(st, rd_InDiscards, *ip_InDiscards);
544 + rrddim_set_by_pointer(st, rd_OutDiscards, *ip_OutDiscards);
545 + rrddim_set_by_pointer(st, rd_InHdrErrors, *ip_InHdrErrors);
546 + rrddim_set_by_pointer(st, rd_InAddrErrors, *ip_InAddrErrors);
547 + rrddim_set_by_pointer(st, rd_InUnknownProtos, *ip_InUnknownProtos);
548 + rrddim_set_by_pointer(st, rd_OutNoRoutes, *ip_OutNoRoutes);
549 rrdset_done(st);
550 }
551 }
@@ -549,61 +568,72 @@ int do_proc_net_snmp(int update_every, usec_t dt) {
568 // --------------------------------------------------------------------
569
570 if(do_icmp_packets) {
552 - st = rrdset_find_localhost(RRD_TYPE_NET_SNMP ".icmp");
553 - if(!st) {
554 - st = rrdset_create_localhost(
555 - RRD_TYPE_NET_SNMP
556 - , "icmp"
557 - , NULL
558 - , "icmp"
559 - , NULL
560 - , "IPv4 ICMP Packets"
561 - , "packets/s"
562 - , "proc"
563 - , "net/snmp"
564 - , 2602
565 - , update_every
566 - , RRDSET_TYPE_LINE
567 - );
568 -
569 - rrddim_add(st, "InMsgs", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
570 - rrddim_add(st, "OutMsgs", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
571 + {
572 + static RRDSET *st_packets = NULL;
573 + static RRDDIM *rd_InMsgs = NULL,
574 + *rd_OutMsgs = NULL;
575 +
576 + if(unlikely(!st_packets)) {
577 + st_packets = rrdset_create_localhost(
578 + RRD_TYPE_NET_SNMP
579 + , "icmp"
580 + , NULL
581 + , "icmp"
582 + , NULL
583 + , "IPv4 ICMP Packets"
584 + , "packets/s"
585 + , "proc"
586 + , "net/snmp"
587 + , 2602
588 + , update_every
589 + , RRDSET_TYPE_LINE
590 + );
591 +
592 + rd_InMsgs = rrddim_add(st_packets, "InMsgs", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
593 + rd_OutMsgs = rrddim_add(st_packets, "OutMsgs", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
594 + }
595 + else rrdset_next(st_packets);
596 +
597 + rrddim_set_by_pointer(st_packets, rd_InMsgs, *icmp_InMsgs);
598 + rrddim_set_by_pointer(st_packets, rd_OutMsgs, *icmp_OutMsgs);
599 +
600 + rrdset_done(st_packets);
601 }
572 - else rrdset_next(st);
573 -
574 - rrddim_set(st, "InMsgs", *icmp_InMsgs);
575 - rrddim_set(st, "OutMsgs", *icmp_OutMsgs);
602
577 - rrdset_done(st);
578 -
579 - st = rrdset_find_localhost(RRD_TYPE_NET_SNMP ".icmp_errors");
580 - if(!st) {
581 - st = rrdset_create_localhost(
582 - RRD_TYPE_NET_SNMP
583 - , "icmp_errors"
584 - , NULL
585 - , "icmp"
586 - , NULL
587 - , "IPv4 ICMP Errors"
588 - , "packets/s"
589 - , "proc"
590 - , "net/snmp"
591 - , 2603
592 - , update_every
593 - , RRDSET_TYPE_LINE
594 - );
595 -
596 - rrddim_add(st, "InErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
597 - rrddim_add(st, "OutErrors", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
598 - rrddim_add(st, "InCsumErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
603 + {
604 + static RRDSET *st_errors = NULL;
605 + static RRDDIM *rd_InErrors = NULL,
606 + *rd_OutErrors = NULL,
607 + *rd_InCsumErrors = NULL;
608 +
609 + if(unlikely(!st_errors)) {
610 + st_errors = rrdset_create_localhost(
611 + RRD_TYPE_NET_SNMP
612 + , "icmp_errors"
613 + , NULL
614 + , "icmp"
615 + , NULL
616 + , "IPv4 ICMP Errors"
617 + , "packets/s"
618 + , "proc"
619 + , "net/snmp"
620 + , 2603
621 + , update_every
622 + , RRDSET_TYPE_LINE
623 + );
624 +
625 + rd_InErrors = rrddim_add(st_errors, "InErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
626 + rd_OutErrors = rrddim_add(st_errors, "OutErrors", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
627 + rd_InCsumErrors = rrddim_add(st_errors, "InCsumErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
628 + }
629 + else rrdset_next(st_errors);
630 +
631 + rrddim_set_by_pointer(st_errors, rd_InErrors, *icmp_InErrors);
632 + rrddim_set_by_pointer(st_errors, rd_OutErrors, *icmp_OutErrors);
633 + rrddim_set_by_pointer(st_errors, rd_InCsumErrors, *icmp_InCsumErrors);
634 +
635 + rrdset_done(st_errors);
636 }
600 - else rrdset_next(st);
601 -
602 - rrddim_set(st, "InErrors", *icmp_InErrors);
603 - rrddim_set(st, "OutErrors", *icmp_OutErrors);
604 - rrddim_set(st, "InCsumErrors", *icmp_InCsumErrors);
605 -
606 - rrdset_done(st);
637 }
638 }
639 else if(unlikely(hash == hash_icmpmsg && strcmp(key, "IcmpMsg") == 0)) {
@@ -621,8 +651,9 @@ int do_proc_net_snmp(int update_every, usec_t dt) {
651 if(do_icmpmsg) {
652 int i;
653
624 - st = rrdset_find_localhost(RRD_TYPE_NET_SNMP ".icmpmsg");
625 - if(!st) {
654 + static RRDSET *st = NULL;
655 +
656 + if(unlikely(!st)) {
657 st = rrdset_create_localhost(
658 RRD_TYPE_NET_SNMP
659 , "icmpmsg"
@@ -639,12 +670,12 @@ int do_proc_net_snmp(int update_every, usec_t dt) {
670 );
671
672 for(i = 0; icmpmsg_data[i].name ;i++)
642 - rrddim_add(st, icmpmsg_data[i].name, icmpmsg_data[i].label, icmpmsg_data[i].multiplier, 1, RRD_ALGORITHM_INCREMENTAL);
673 + icmpmsg_data[i].rd = rrddim_add(st, icmpmsg_data[i].name, icmpmsg_data[i].label, icmpmsg_data[i].multiplier, 1, RRD_ALGORITHM_INCREMENTAL);
674 }
675 else rrdset_next(st);
676
677 for(i = 0; icmpmsg_data[i].name ;i++)
647 - rrddim_set(st, icmpmsg_data[i].name, icmpmsg_data[i].value);
678 + rrddim_set_by_pointer(st, icmpmsg_data[i].rd, icmpmsg_data[i].value);
679
680 rrdset_done(st);
681 }
@@ -669,8 +700,10 @@ int do_proc_net_snmp(int update_every, usec_t dt) {
700
701 // see http://net-snmp.sourceforge.net/docs/mibs/tcp.html
702 if(do_tcp_sockets) {
672 - st = rrdset_find_localhost(RRD_TYPE_NET_SNMP ".tcpsock");
673 - if(!st) {
703 + static RRDSET *st = NULL;
704 + static RRDDIM *rd_CurrEstab = NULL;
705 +
706 + if(unlikely(!st)) {
707 st = rrdset_create_localhost(
708 RRD_TYPE_NET_SNMP
709 , "tcpsock"
@@ -686,19 +719,22 @@ int do_proc_net_snmp(int update_every, usec_t dt) {
719 , RRDSET_TYPE_LINE
720 );
721
689 - rrddim_add(st, "CurrEstab", "connections", 1, 1, RRD_ALGORITHM_ABSOLUTE);
722 + rd_CurrEstab = rrddim_add(st, "CurrEstab", "connections", 1, 1, RRD_ALGORITHM_ABSOLUTE);
723 }
724 else rrdset_next(st);
725
693 - rrddim_set(st, "CurrEstab", *tcp_CurrEstab);
726 + rrddim_set_by_pointer(st, rd_CurrEstab, *tcp_CurrEstab);
727 rrdset_done(st);
728 }
729
730 // --------------------------------------------------------------------
731
732 if(do_tcp_packets) {
700 - st = rrdset_find_localhost(RRD_TYPE_NET_SNMP ".tcppackets");
701 - if(!st) {
733 + static RRDSET *st = NULL;
734 + static RRDDIM *rd_InSegs = NULL,
735 + *rd_OutSegs = NULL;
736 +
737 + if(unlikely(!st)) {
738 st = rrdset_create_localhost(
739 RRD_TYPE_NET_SNMP
740 , "tcppackets"
@@ -714,21 +750,25 @@ int do_proc_net_snmp(int update_every, usec_t dt) {
750 , RRDSET_TYPE_LINE
751 );
752
717 - rrddim_add(st, "InSegs", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
718 - rrddim_add(st, "OutSegs", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
753 + rd_InSegs = rrddim_add(st, "InSegs", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
754 + rd_OutSegs = rrddim_add(st, "OutSegs", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
755 }
756 else rrdset_next(st);
757
722 - rrddim_set(st, "InSegs", *tcp_InSegs);
723 - rrddim_set(st, "OutSegs", *tcp_OutSegs);
758 + rrddim_set_by_pointer(st, rd_InSegs, *tcp_InSegs);
759 + rrddim_set_by_pointer(st, rd_OutSegs, *tcp_OutSegs);
760 rrdset_done(st);
761 }
762
763 // --------------------------------------------------------------------
764
765 if(do_tcp_errors) {
730 - st = rrdset_find_localhost(RRD_TYPE_NET_SNMP ".tcperrors");
731 - if(!st) {
766 + static RRDSET *st = NULL;
767 + static RRDDIM *rd_InErrs = NULL,
768 + *rd_InCsumErrors = NULL,
769 + *rd_RetransSegs = NULL;
770 +
771 + if(unlikely(!st)) {
772 st = rrdset_create_localhost(
773 RRD_TYPE_NET_SNMP
774 , "tcperrors"
@@ -745,23 +785,30 @@ int do_proc_net_snmp(int update_every, usec_t dt) {
785 );
786 rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
787
748 - rrddim_add(st, "InErrs", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
749 - rrddim_add(st, "InCsumErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
750 - rrddim_add(st, "RetransSegs", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
788 + rd_InErrs = rrddim_add(st, "InErrs", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
789 + rd_InCsumErrors = rrddim_add(st, "InCsumErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
790 + rd_RetransSegs = rrddim_add(st, "RetransSegs", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
791 }
792 else rrdset_next(st);
793
754 - rrddim_set(st, "InErrs", *tcp_InErrs);
755 - rrddim_set(st, "InCsumErrors", *tcp_InCsumErrors);
756 - rrddim_set(st, "RetransSegs", *tcp_RetransSegs);
794 + rrddim_set_by_pointer(st, rd_InErrs, *tcp_InErrs);
795 + rrddim_set_by_pointer(st, rd_InCsumErrors, *tcp_InCsumErrors);
796 + rrddim_set_by_pointer(st, rd_RetransSegs, *tcp_RetransSegs);
797 rrdset_done(st);
798 }
799
800 // --------------------------------------------------------------------
801
802 if(do_tcp_handshake) {
763 - st = rrdset_find_localhost(RRD_TYPE_NET_SNMP ".tcphandshake");
764 - if(!st) {
803 + static RRDSET *st = NULL;
804 + static RRDDIM *rd_EstabResets = NULL,
805 + *rd_OutRsts = NULL,
806 + *rd_ActiveOpens = NULL,
807 + *rd_PassiveOpens = NULL,
808 + *rd_AttemptFails = NULL,
809 + *rd_TCPSynRetrans = NULL;
810 +
811 + if(unlikely(!st)) {
812 st = rrdset_create_localhost(
813 RRD_TYPE_NET_SNMP
814 , "tcphandshake"
@@ -778,21 +825,21 @@ int do_proc_net_snmp(int update_every, usec_t dt) {
825 );
826 rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
827
781 - rrddim_add(st, "EstabResets", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
782 - rrddim_add(st, "OutRsts", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
783 - rrddim_add(st, "ActiveOpens", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
784 - rrddim_add(st, "PassiveOpens", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
785 - rrddim_add(st, "AttemptFails", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
786 - rrddim_add(st, "TCPSynRetrans", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
828 + rd_EstabResets = rrddim_add(st, "EstabResets", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
829 + rd_OutRsts = rrddim_add(st, "OutRsts", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
830 + rd_ActiveOpens = rrddim_add(st, "ActiveOpens", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
831 + rd_PassiveOpens = rrddim_add(st, "PassiveOpens", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
832 + rd_AttemptFails = rrddim_add(st, "AttemptFails", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
833 + rd_TCPSynRetrans = rrddim_add(st, "TCPSynRetrans", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
834 }
835 else rrdset_next(st);
836
790 - rrddim_set(st, "EstabResets", *tcp_EstabResets);
791 - rrddim_set(st, "OutRsts", *tcp_OutRsts);
792 - rrddim_set(st, "ActiveOpens", *tcp_ActiveOpens);
793 - rrddim_set(st, "PassiveOpens", *tcp_PassiveOpens);
794 - rrddim_set(st, "AttemptFails", *tcp_AttemptFails);
795 - rrddim_set(st, "TCPSynRetrans", tcpext_TCPSynRetrans);
837 + rrddim_set_by_pointer(st, rd_EstabResets, *tcp_EstabResets);
838 + rrddim_set_by_pointer(st, rd_OutRsts, *tcp_OutRsts);
839 + rrddim_set_by_pointer(st, rd_ActiveOpens, *tcp_ActiveOpens);
840 + rrddim_set_by_pointer(st, rd_PassiveOpens, *tcp_PassiveOpens);
841 + rrddim_set_by_pointer(st, rd_AttemptFails, *tcp_AttemptFails);
842 + rrddim_set_by_pointer(st, rd_TCPSynRetrans, tcpext_TCPSynRetrans);
843 rrdset_done(st);
844 }
845 }
@@ -816,8 +863,11 @@ int do_proc_net_snmp(int update_every, usec_t dt) {
863
864 // see http://net-snmp.sourceforge.net/docs/mibs/udp.html
865 if(do_udp_packets) {
819 - st = rrdset_find_localhost(RRD_TYPE_NET_SNMP ".udppackets");
820 - if(!st) {
866 + static RRDSET *st = NULL;
867 + static RRDDIM *rd_InDatagrams = NULL,
868 + *rd_OutDatagrams = NULL;
869 +
870 + if(unlikely(!st)) {
871 st = rrdset_create_localhost(
872 RRD_TYPE_NET_SNMP
873 , "udppackets"
@@ -833,21 +883,28 @@ int do_proc_net_snmp(int update_every, usec_t dt) {
883 , RRDSET_TYPE_LINE
884 );
885
836 - rrddim_add(st, "InDatagrams", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
837 - rrddim_add(st, "OutDatagrams", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
886 + rd_InDatagrams = rrddim_add(st, "InDatagrams", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
887 + rd_OutDatagrams = rrddim_add(st, "OutDatagrams", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
888 }
889 else rrdset_next(st);
890
841 - rrddim_set(st, "InDatagrams", *udp_InDatagrams);
842 - rrddim_set(st, "OutDatagrams", *udp_OutDatagrams);
891 + rrddim_set_by_pointer(st, rd_InDatagrams, *udp_InDatagrams);
892 + rrddim_set_by_pointer(st, rd_OutDatagrams, *udp_OutDatagrams);
893 rrdset_done(st);
894 }
895
896 // --------------------------------------------------------------------
897
898 if(do_udp_errors) {
849 - st = rrdset_find_localhost(RRD_TYPE_NET_SNMP ".udperrors");
850 - if(!st) {
899 + static RRDSET *st = NULL;
900 + static RRDDIM *rd_RcvbufErrors = NULL,
901 + *rd_SndbufErrors = NULL,
902 + *rd_InErrors = NULL,
903 + *rd_NoPorts = NULL,
904 + *rd_InCsumErrors = NULL,
905 + *rd_IgnoredMulti = NULL;
906 +
907 + if(unlikely(!st)) {
908 st = rrdset_create_localhost(
909 RRD_TYPE_NET_SNMP
910 , "udperrors"
@@ -864,21 +921,21 @@ int do_proc_net_snmp(int update_every, usec_t dt) {
921 );
922 rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
923
867 - rrddim_add(st, "RcvbufErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
868 - rrddim_add(st, "SndbufErrors", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
869 - rrddim_add(st, "InErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
870 - rrddim_add(st, "NoPorts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
871 - rrddim_add(st, "InCsumErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
872 - rrddim_add(st, "IgnoredMulti", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
924 + rd_RcvbufErrors = rrddim_add(st, "RcvbufErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
925 + rd_SndbufErrors = rrddim_add(st, "SndbufErrors", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
926 + rd_InErrors = rrddim_add(st, "InErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
927 + rd_NoPorts = rrddim_add(st, "NoPorts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
928 + rd_InCsumErrors = rrddim_add(st, "InCsumErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
929 + rd_IgnoredMulti = rrddim_add(st, "IgnoredMulti", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
930 }
931 else rrdset_next(st);
932
876 - rrddim_set(st, "InErrors", *udp_InErrors);
877 - rrddim_set(st, "NoPorts", *udp_NoPorts);
878 - rrddim_set(st, "RcvbufErrors", *udp_RcvbufErrors);
879 - rrddim_set(st, "SndbufErrors", *udp_SndbufErrors);
880 - rrddim_set(st, "InCsumErrors", *udp_InCsumErrors);
881 - rrddim_set(st, "IgnoredMulti", *udp_IgnoredMulti);
933 + rrddim_set_by_pointer(st, rd_InErrors, *udp_InErrors);
934 + rrddim_set_by_pointer(st, rd_NoPorts, *udp_NoPorts);
935 + rrddim_set_by_pointer(st, rd_RcvbufErrors, *udp_RcvbufErrors);
936 + rrddim_set_by_pointer(st, rd_SndbufErrors, *udp_SndbufErrors);
937 + rrddim_set_by_pointer(st, rd_InCsumErrors, *udp_InCsumErrors);
938 + rrddim_set_by_pointer(st, rd_IgnoredMulti, *udp_IgnoredMulti);
939 rrdset_done(st);
940 }
941 }
@@ -901,64 +958,78 @@ int do_proc_net_snmp(int update_every, usec_t dt) {
958 // --------------------------------------------------------------------
959
960 if(do_udplite_packets) {
904 - st = rrdset_find_localhost(RRD_TYPE_NET_SNMP ".udplite");
905 - if(!st) {
906 - st = rrdset_create_localhost(
907 - RRD_TYPE_NET_SNMP
908 - , "udplite"
909 - , NULL
910 - , "udplite"
911 - , NULL
912 - , "IPv4 UDPLite Packets"
913 - , "packets/s"
914 - , "proc"
915 - , "net/snmp"
916 - , 2603
917 - , update_every
918 - , RRDSET_TYPE_LINE
919 - );
920 -
921 - rrddim_add(st, "InDatagrams", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
922 - rrddim_add(st, "OutDatagrams", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
961 + {
962 + static RRDSET *st = NULL;
963 + static RRDDIM *rd_InDatagrams = NULL,
964 + *rd_OutDatagrams = NULL;
965 +
966 + if(unlikely(!st)) {
967 + st = rrdset_create_localhost(
968 + RRD_TYPE_NET_SNMP
969 + , "udplite"
970 + , NULL
971 + , "udplite"
972 + , NULL
973 + , "IPv4 UDPLite Packets"
974 + , "packets/s"
975 + , "proc"
976 + , "net/snmp"
977 + , 2603
978 + , update_every
979 + , RRDSET_TYPE_LINE
980 + );
981 +
982 + rd_InDatagrams = rrddim_add(st, "InDatagrams", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
983 + rd_OutDatagrams = rrddim_add(st, "OutDatagrams", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
984 + }
985 + else rrdset_next(st);
986 +
987 + rrddim_set_by_pointer(st, rd_InDatagrams, *udplite_InDatagrams);
988 + rrddim_set_by_pointer(st, rd_OutDatagrams, *udplite_OutDatagrams);
989 + rrdset_done(st);
990 }
924 - else rrdset_next(st);
925 -
926 - rrddim_set(st, "InDatagrams", *udplite_InDatagrams);
927 - rrddim_set(st, "OutDatagrams", *udplite_OutDatagrams);
928 - rrdset_done(st);
991
930 - st = rrdset_find_localhost(RRD_TYPE_NET_SNMP ".udplite_errors");
931 - if(!st) {
932 - st = rrdset_create_localhost(
933 - RRD_TYPE_NET_SNMP
934 - , "udplite_errors"
935 - , NULL
936 - , "udplite"
937 - , NULL
938 - , "IPv4 UDPLite Errors"
939 - , "packets/s"
940 - , "proc"
941 - , "net/snmp"
942 - , 2604
943 - , update_every
944 - , RRDSET_TYPE_LINE);
945 -
946 - rrddim_add(st, "RcvbufErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
947 - rrddim_add(st, "SndbufErrors", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
948 - rrddim_add(st, "NoPorts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
949 - rrddim_add(st, "IgnoredMulti", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
950 - rrddim_add(st, "InErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
951 - rrddim_add(st, "InCsumErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
992 + {
993 + static RRDSET *st = NULL;
994 + static RRDDIM *rd_RcvbufErrors = NULL,
995 + *rd_SndbufErrors = NULL,
996 + *rd_InErrors = NULL,
997 + *rd_NoPorts = NULL,
998 + *rd_InCsumErrors = NULL,
999 + *rd_IgnoredMulti = NULL;
1000 +
1001 + if(unlikely(!st)) {
1002 + st = rrdset_create_localhost(
1003 + RRD_TYPE_NET_SNMP
1004 + , "udplite_errors"
1005 + , NULL
1006 + , "udplite"
1007 + , NULL
1008 + , "IPv4 UDPLite Errors"
1009 + , "packets/s"
1010 + , "proc"
1011 + , "net/snmp"
1012 + , 2604
1013 + , update_every
1014 + , RRDSET_TYPE_LINE);
1015 +
1016 + rd_RcvbufErrors = rrddim_add(st, "RcvbufErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1017 + rd_SndbufErrors = rrddim_add(st, "SndbufErrors", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1018 + rd_InErrors = rrddim_add(st, "InErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1019 + rd_NoPorts = rrddim_add(st, "NoPorts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1020 + rd_InCsumErrors = rrddim_add(st, "InCsumErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1021 + rd_IgnoredMulti = rrddim_add(st, "IgnoredMulti", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1022 + }
1023 + else rrdset_next(st);
1024 +
1025 + rrddim_set_by_pointer(st, rd_NoPorts, *udplite_NoPorts);
1026 + rrddim_set_by_pointer(st, rd_InErrors, *udplite_InErrors);
1027 + rrddim_set_by_pointer(st, rd_InCsumErrors, *udplite_InCsumErrors);
1028 + rrddim_set_by_pointer(st, rd_RcvbufErrors, *udplite_RcvbufErrors);
1029 + rrddim_set_by_pointer(st, rd_SndbufErrors, *udplite_SndbufErrors);
1030 + rrddim_set_by_pointer(st, rd_IgnoredMulti, *udplite_IgnoredMulti);
1031 + rrdset_done(st);
1032 }
953 - else rrdset_next(st);
954 -
955 - rrddim_set(st, "NoPorts", *udplite_NoPorts);
956 - rrddim_set(st, "InErrors", *udplite_InErrors);
957 - rrddim_set(st, "InCsumErrors", *udplite_InCsumErrors);
958 - rrddim_set(st, "RcvbufErrors", *udplite_RcvbufErrors);
959 - rrddim_set(st, "SndbufErrors", *udplite_SndbufErrors);
960 - rrddim_set(st, "IgnoredMulti", *udplite_IgnoredMulti);
961 - rrdset_done(st);
1033 }
1034 }
1035 }