cubefs

Форк
0
381 строка · 10.9 Кб
1
// Copyright 2022 The Prometheus Authors
2
// Licensed under the Apache License, Version 2.0 (the "License");
3
// you may not use this file except in compliance with the License.
4
// You may obtain a copy of the License at
5
//
6
// http://www.apache.org/licenses/LICENSE-2.0
7
//
8
// Unless required by applicable law or agreed to in writing, software
9
// distributed under the License is distributed on an "AS IS" BASIS,
10
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
// See the License for the specific language governing permissions and
12
// limitations under the License.
13

14
package procfs
15

16
import (
17
	"bufio"
18
	"bytes"
19
	"errors"
20
	"io"
21
	"os"
22
	"strconv"
23
	"strings"
24

25
	"github.com/prometheus/procfs/internal/util"
26
)
27

28
// ProcSnmp6 models the content of /proc/<pid>/net/snmp6.
29
type ProcSnmp6 struct {
30
	// The process ID.
31
	PID int
32
	Ip6
33
	Icmp6
34
	Udp6
35
	UdpLite6
36
}
37

38
type Ip6 struct { // nolint:revive
39
	InReceives       float64
40
	InHdrErrors      float64
41
	InTooBigErrors   float64
42
	InNoRoutes       float64
43
	InAddrErrors     float64
44
	InUnknownProtos  float64
45
	InTruncatedPkts  float64
46
	InDiscards       float64
47
	InDelivers       float64
48
	OutForwDatagrams float64
49
	OutRequests      float64
50
	OutDiscards      float64
51
	OutNoRoutes      float64
52
	ReasmTimeout     float64
53
	ReasmReqds       float64
54
	ReasmOKs         float64
55
	ReasmFails       float64
56
	FragOKs          float64
57
	FragFails        float64
58
	FragCreates      float64
59
	InMcastPkts      float64
60
	OutMcastPkts     float64
61
	InOctets         float64
62
	OutOctets        float64
63
	InMcastOctets    float64
64
	OutMcastOctets   float64
65
	InBcastOctets    float64
66
	OutBcastOctets   float64
67
	InNoECTPkts      float64
68
	InECT1Pkts       float64
69
	InECT0Pkts       float64
70
	InCEPkts         float64
71
}
72

73
type Icmp6 struct {
74
	InMsgs                    float64
75
	InErrors                  float64
76
	OutMsgs                   float64
77
	OutErrors                 float64
78
	InCsumErrors              float64
79
	InDestUnreachs            float64
80
	InPktTooBigs              float64
81
	InTimeExcds               float64
82
	InParmProblems            float64
83
	InEchos                   float64
84
	InEchoReplies             float64
85
	InGroupMembQueries        float64
86
	InGroupMembResponses      float64
87
	InGroupMembReductions     float64
88
	InRouterSolicits          float64
89
	InRouterAdvertisements    float64
90
	InNeighborSolicits        float64
91
	InNeighborAdvertisements  float64
92
	InRedirects               float64
93
	InMLDv2Reports            float64
94
	OutDestUnreachs           float64
95
	OutPktTooBigs             float64
96
	OutTimeExcds              float64
97
	OutParmProblems           float64
98
	OutEchos                  float64
99
	OutEchoReplies            float64
100
	OutGroupMembQueries       float64
101
	OutGroupMembResponses     float64
102
	OutGroupMembReductions    float64
103
	OutRouterSolicits         float64
104
	OutRouterAdvertisements   float64
105
	OutNeighborSolicits       float64
106
	OutNeighborAdvertisements float64
107
	OutRedirects              float64
108
	OutMLDv2Reports           float64
109
	InType1                   float64
110
	InType134                 float64
111
	InType135                 float64
112
	InType136                 float64
113
	InType143                 float64
114
	OutType133                float64
115
	OutType135                float64
116
	OutType136                float64
117
	OutType143                float64
118
}
119

120
type Udp6 struct { // nolint:revive
121
	InDatagrams  float64
122
	NoPorts      float64
123
	InErrors     float64
124
	OutDatagrams float64
125
	RcvbufErrors float64
126
	SndbufErrors float64
127
	InCsumErrors float64
128
	IgnoredMulti float64
129
}
130

131
type UdpLite6 struct { // nolint:revive
132
	InDatagrams  float64
133
	NoPorts      float64
134
	InErrors     float64
135
	OutDatagrams float64
136
	RcvbufErrors float64
137
	SndbufErrors float64
138
	InCsumErrors float64
139
}
140

141
func (p Proc) Snmp6() (ProcSnmp6, error) {
142
	filename := p.path("net/snmp6")
143
	data, err := util.ReadFileNoStat(filename)
144
	if err != nil {
145
		// On systems with IPv6 disabled, this file won't exist.
146
		// Do nothing.
147
		if errors.Is(err, os.ErrNotExist) {
148
			return ProcSnmp6{PID: p.PID}, nil
149
		}
150

151
		return ProcSnmp6{PID: p.PID}, err
152
	}
153

154
	procSnmp6, err := parseSNMP6Stats(bytes.NewReader(data))
155
	procSnmp6.PID = p.PID
156
	return procSnmp6, err
157
}
158

159
// parseSnmp6 parses the metrics from proc/<pid>/net/snmp6 file
160
// and returns a map contains those metrics.
161
func parseSNMP6Stats(r io.Reader) (ProcSnmp6, error) {
162
	var (
163
		scanner   = bufio.NewScanner(r)
164
		procSnmp6 = ProcSnmp6{}
165
	)
166

167
	for scanner.Scan() {
168
		stat := strings.Fields(scanner.Text())
169
		if len(stat) < 2 {
170
			continue
171
		}
172
		// Expect to have "6" in metric name, skip line otherwise
173
		if sixIndex := strings.Index(stat[0], "6"); sixIndex != -1 {
174
			protocol := stat[0][:sixIndex+1]
175
			key := stat[0][sixIndex+1:]
176
			value, err := strconv.ParseFloat(stat[1], 64)
177
			if err != nil {
178
				return procSnmp6, err
179
			}
180

181
			switch protocol {
182
			case "Ip6":
183
				switch key {
184
				case "InReceives":
185
					procSnmp6.Ip6.InReceives = value
186
				case "InHdrErrors":
187
					procSnmp6.Ip6.InHdrErrors = value
188
				case "InTooBigErrors":
189
					procSnmp6.Ip6.InTooBigErrors = value
190
				case "InNoRoutes":
191
					procSnmp6.Ip6.InNoRoutes = value
192
				case "InAddrErrors":
193
					procSnmp6.Ip6.InAddrErrors = value
194
				case "InUnknownProtos":
195
					procSnmp6.Ip6.InUnknownProtos = value
196
				case "InTruncatedPkts":
197
					procSnmp6.Ip6.InTruncatedPkts = value
198
				case "InDiscards":
199
					procSnmp6.Ip6.InDiscards = value
200
				case "InDelivers":
201
					procSnmp6.Ip6.InDelivers = value
202
				case "OutForwDatagrams":
203
					procSnmp6.Ip6.OutForwDatagrams = value
204
				case "OutRequests":
205
					procSnmp6.Ip6.OutRequests = value
206
				case "OutDiscards":
207
					procSnmp6.Ip6.OutDiscards = value
208
				case "OutNoRoutes":
209
					procSnmp6.Ip6.OutNoRoutes = value
210
				case "ReasmTimeout":
211
					procSnmp6.Ip6.ReasmTimeout = value
212
				case "ReasmReqds":
213
					procSnmp6.Ip6.ReasmReqds = value
214
				case "ReasmOKs":
215
					procSnmp6.Ip6.ReasmOKs = value
216
				case "ReasmFails":
217
					procSnmp6.Ip6.ReasmFails = value
218
				case "FragOKs":
219
					procSnmp6.Ip6.FragOKs = value
220
				case "FragFails":
221
					procSnmp6.Ip6.FragFails = value
222
				case "FragCreates":
223
					procSnmp6.Ip6.FragCreates = value
224
				case "InMcastPkts":
225
					procSnmp6.Ip6.InMcastPkts = value
226
				case "OutMcastPkts":
227
					procSnmp6.Ip6.OutMcastPkts = value
228
				case "InOctets":
229
					procSnmp6.Ip6.InOctets = value
230
				case "OutOctets":
231
					procSnmp6.Ip6.OutOctets = value
232
				case "InMcastOctets":
233
					procSnmp6.Ip6.InMcastOctets = value
234
				case "OutMcastOctets":
235
					procSnmp6.Ip6.OutMcastOctets = value
236
				case "InBcastOctets":
237
					procSnmp6.Ip6.InBcastOctets = value
238
				case "OutBcastOctets":
239
					procSnmp6.Ip6.OutBcastOctets = value
240
				case "InNoECTPkts":
241
					procSnmp6.Ip6.InNoECTPkts = value
242
				case "InECT1Pkts":
243
					procSnmp6.Ip6.InECT1Pkts = value
244
				case "InECT0Pkts":
245
					procSnmp6.Ip6.InECT0Pkts = value
246
				case "InCEPkts":
247
					procSnmp6.Ip6.InCEPkts = value
248

249
				}
250
			case "Icmp6":
251
				switch key {
252
				case "InMsgs":
253
					procSnmp6.Icmp6.InMsgs = value
254
				case "InErrors":
255
					procSnmp6.Icmp6.InErrors = value
256
				case "OutMsgs":
257
					procSnmp6.Icmp6.OutMsgs = value
258
				case "OutErrors":
259
					procSnmp6.Icmp6.OutErrors = value
260
				case "InCsumErrors":
261
					procSnmp6.Icmp6.InCsumErrors = value
262
				case "InDestUnreachs":
263
					procSnmp6.Icmp6.InDestUnreachs = value
264
				case "InPktTooBigs":
265
					procSnmp6.Icmp6.InPktTooBigs = value
266
				case "InTimeExcds":
267
					procSnmp6.Icmp6.InTimeExcds = value
268
				case "InParmProblems":
269
					procSnmp6.Icmp6.InParmProblems = value
270
				case "InEchos":
271
					procSnmp6.Icmp6.InEchos = value
272
				case "InEchoReplies":
273
					procSnmp6.Icmp6.InEchoReplies = value
274
				case "InGroupMembQueries":
275
					procSnmp6.Icmp6.InGroupMembQueries = value
276
				case "InGroupMembResponses":
277
					procSnmp6.Icmp6.InGroupMembResponses = value
278
				case "InGroupMembReductions":
279
					procSnmp6.Icmp6.InGroupMembReductions = value
280
				case "InRouterSolicits":
281
					procSnmp6.Icmp6.InRouterSolicits = value
282
				case "InRouterAdvertisements":
283
					procSnmp6.Icmp6.InRouterAdvertisements = value
284
				case "InNeighborSolicits":
285
					procSnmp6.Icmp6.InNeighborSolicits = value
286
				case "InNeighborAdvertisements":
287
					procSnmp6.Icmp6.InNeighborAdvertisements = value
288
				case "InRedirects":
289
					procSnmp6.Icmp6.InRedirects = value
290
				case "InMLDv2Reports":
291
					procSnmp6.Icmp6.InMLDv2Reports = value
292
				case "OutDestUnreachs":
293
					procSnmp6.Icmp6.OutDestUnreachs = value
294
				case "OutPktTooBigs":
295
					procSnmp6.Icmp6.OutPktTooBigs = value
296
				case "OutTimeExcds":
297
					procSnmp6.Icmp6.OutTimeExcds = value
298
				case "OutParmProblems":
299
					procSnmp6.Icmp6.OutParmProblems = value
300
				case "OutEchos":
301
					procSnmp6.Icmp6.OutEchos = value
302
				case "OutEchoReplies":
303
					procSnmp6.Icmp6.OutEchoReplies = value
304
				case "OutGroupMembQueries":
305
					procSnmp6.Icmp6.OutGroupMembQueries = value
306
				case "OutGroupMembResponses":
307
					procSnmp6.Icmp6.OutGroupMembResponses = value
308
				case "OutGroupMembReductions":
309
					procSnmp6.Icmp6.OutGroupMembReductions = value
310
				case "OutRouterSolicits":
311
					procSnmp6.Icmp6.OutRouterSolicits = value
312
				case "OutRouterAdvertisements":
313
					procSnmp6.Icmp6.OutRouterAdvertisements = value
314
				case "OutNeighborSolicits":
315
					procSnmp6.Icmp6.OutNeighborSolicits = value
316
				case "OutNeighborAdvertisements":
317
					procSnmp6.Icmp6.OutNeighborAdvertisements = value
318
				case "OutRedirects":
319
					procSnmp6.Icmp6.OutRedirects = value
320
				case "OutMLDv2Reports":
321
					procSnmp6.Icmp6.OutMLDv2Reports = value
322
				case "InType1":
323
					procSnmp6.Icmp6.InType1 = value
324
				case "InType134":
325
					procSnmp6.Icmp6.InType134 = value
326
				case "InType135":
327
					procSnmp6.Icmp6.InType135 = value
328
				case "InType136":
329
					procSnmp6.Icmp6.InType136 = value
330
				case "InType143":
331
					procSnmp6.Icmp6.InType143 = value
332
				case "OutType133":
333
					procSnmp6.Icmp6.OutType133 = value
334
				case "OutType135":
335
					procSnmp6.Icmp6.OutType135 = value
336
				case "OutType136":
337
					procSnmp6.Icmp6.OutType136 = value
338
				case "OutType143":
339
					procSnmp6.Icmp6.OutType143 = value
340
				}
341
			case "Udp6":
342
				switch key {
343
				case "InDatagrams":
344
					procSnmp6.Udp6.InDatagrams = value
345
				case "NoPorts":
346
					procSnmp6.Udp6.NoPorts = value
347
				case "InErrors":
348
					procSnmp6.Udp6.InErrors = value
349
				case "OutDatagrams":
350
					procSnmp6.Udp6.OutDatagrams = value
351
				case "RcvbufErrors":
352
					procSnmp6.Udp6.RcvbufErrors = value
353
				case "SndbufErrors":
354
					procSnmp6.Udp6.SndbufErrors = value
355
				case "InCsumErrors":
356
					procSnmp6.Udp6.InCsumErrors = value
357
				case "IgnoredMulti":
358
					procSnmp6.Udp6.IgnoredMulti = value
359
				}
360
			case "UdpLite6":
361
				switch key {
362
				case "InDatagrams":
363
					procSnmp6.UdpLite6.InDatagrams = value
364
				case "NoPorts":
365
					procSnmp6.UdpLite6.NoPorts = value
366
				case "InErrors":
367
					procSnmp6.UdpLite6.InErrors = value
368
				case "OutDatagrams":
369
					procSnmp6.UdpLite6.OutDatagrams = value
370
				case "RcvbufErrors":
371
					procSnmp6.UdpLite6.RcvbufErrors = value
372
				case "SndbufErrors":
373
					procSnmp6.UdpLite6.SndbufErrors = value
374
				case "InCsumErrors":
375
					procSnmp6.UdpLite6.InCsumErrors = value
376
				}
377
			}
378
		}
379
	}
380
	return procSnmp6, scanner.Err()
381
}
382

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.