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
}