MCPcopy
hub / github.com/prometheus/node_exporter / parsePoolObjsetFile

Method parsePoolObjsetFile

collector/zfs_linux.go:297–336  ·  view source on GitHub ↗
(reader io.Reader, zpoolPath string, handler func(string, string, zfsSysctl, uint64))

Source from the content-addressed store, hash-verified

295}
296
297func (c *zfsCollector) parsePoolObjsetFile(reader io.Reader, zpoolPath string, handler func(string, string, zfsSysctl, uint64)) error {
298 scanner := bufio.NewScanner(reader)
299
300 parseLine := false
301 var zpoolName, datasetName string
302 for scanner.Scan() {
303 line := scanner.Text()
304 parts := strings.Fields(line)
305
306 if !parseLine && len(parts) == 3 && parts[0] == "name" && parts[1] == "type" && parts[2] == "data" {
307 parseLine = true
308 continue
309 }
310
311 if !parseLine || len(parts) < 3 {
312 continue
313 }
314 if parts[0] == "dataset_name" {
315 zpoolPathElements := strings.Split(zpoolPath, "/")
316 pathLen := len(zpoolPathElements)
317 zpoolName = zpoolPathElements[pathLen-2]
318 datasetName = line[strings.Index(line, parts[2]):]
319 continue
320 }
321
322 if parts[1] == kstatDataUint64 {
323 key := fmt.Sprintf("kstat.zfs.misc.objset.%s", parts[0])
324 value, err := strconv.ParseUint(parts[2], 10, 64)
325 if err != nil {
326 return fmt.Errorf("could not parse expected integer value for %q", key)
327 }
328 handler(zpoolName, datasetName, zfsSysctl(key), value)
329 }
330 }
331 if !parseLine {
332 return fmt.Errorf("did not parse a single %s %s metric", zpoolName, datasetName)
333 }
334
335 return scanner.Err()
336}
337
338func (c *zfsCollector) parsePoolStateFile(reader io.Reader, zpoolPath string, handler func(string, string, uint64)) error {
339 scanner := bufio.NewScanner(reader)

Callers 3

TestZpoolObjsetParsingFunction · 0.95
updatePoolStatsMethod · 0.95

Calls 2

handlerStruct · 0.85
zfsSysctlTypeAlias · 0.85

Tested by 2

TestZpoolObjsetParsingFunction · 0.76