| 
									
										
										
										
											2015-09-26 08:36:40 -07:00
										 |  |  | // Copyright 2015 The Prometheus Authors
 | 
					
						
							|  |  |  | // Licensed under the Apache License, Version 2.0 (the "License");
 | 
					
						
							|  |  |  | // you may not use this file except in compliance with the License.
 | 
					
						
							|  |  |  | // You may obtain a copy of the License at
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // http://www.apache.org/licenses/LICENSE-2.0
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // Unless required by applicable law or agreed to in writing, software
 | 
					
						
							|  |  |  | // distributed under the License is distributed on an "AS IS" BASIS,
 | 
					
						
							|  |  |  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
					
						
							|  |  |  | // See the License for the specific language governing permissions and
 | 
					
						
							|  |  |  | // limitations under the License.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-30 07:34:59 -07:00
										 |  |  | //go:build !nofilesystem && (linux || freebsd || netbsd || openbsd || darwin || dragonfly || aix)
 | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | // +build !nofilesystem
 | 
					
						
							| 
									
										
										
										
											2024-07-30 07:34:59 -07:00
										 |  |  | // +build linux freebsd netbsd openbsd darwin dragonfly aix
 | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | package collector | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2021-03-23 04:00:06 -07:00
										 |  |  | 	"errors" | 
					
						
							| 
									
										
										
										
											2024-11-05 01:36:13 -08:00
										 |  |  | 	"fmt" | 
					
						
							| 
									
										
										
										
											2024-09-11 01:51:28 -07:00
										 |  |  | 	"log/slog" | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-07 00:25:05 -08:00
										 |  |  | 	"github.com/alecthomas/kingpin/v2" | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | 	"github.com/prometheus/client_golang/prometheus" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Arch-dependent implementation must define:
 | 
					
						
							| 
									
										
										
										
											2021-03-23 04:00:06 -07:00
										 |  |  | // * defMountPointsExcluded
 | 
					
						
							|  |  |  | // * defFSTypesExcluded
 | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | // * filesystemLabelNames
 | 
					
						
							|  |  |  | // * filesystemCollector.GetStats
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var ( | 
					
						
							| 
									
										
										
										
											2021-03-23 04:00:06 -07:00
										 |  |  | 	mountPointsExcludeSet bool | 
					
						
							|  |  |  | 	mountPointsExclude    = kingpin.Flag( | 
					
						
							|  |  |  | 		"collector.filesystem.mount-points-exclude", | 
					
						
							| 
									
										
										
										
											2024-11-05 01:36:13 -08:00
										 |  |  | 		"Regexp of mount points to exclude for filesystem collector. (mutually exclusive to mount-points-include)", | 
					
						
							| 
									
										
										
										
											2021-03-23 04:00:06 -07:00
										 |  |  | 	).Default(defMountPointsExcluded).PreAction(func(c *kingpin.ParseContext) error { | 
					
						
							|  |  |  | 		mountPointsExcludeSet = true | 
					
						
							|  |  |  | 		return nil | 
					
						
							|  |  |  | 	}).String() | 
					
						
							|  |  |  | 	oldMountPointsExcluded = kingpin.Flag( | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | 		"collector.filesystem.ignored-mount-points", | 
					
						
							| 
									
										
										
										
											2017-08-12 06:07:24 -07:00
										 |  |  | 		"Regexp of mount points to ignore for filesystem collector.", | 
					
						
							| 
									
										
										
										
											2021-03-23 04:00:06 -07:00
										 |  |  | 	).Hidden().String() | 
					
						
							| 
									
										
										
										
											2024-11-05 01:36:13 -08:00
										 |  |  | 	mountPointsInclude = kingpin.Flag( | 
					
						
							|  |  |  | 		"collector.filesystem.mount-points-include", | 
					
						
							|  |  |  | 		"Regexp of mount points to include for filesystem collector. (mutually exclusive to mount-points-exclude)", | 
					
						
							|  |  |  | 	).String() | 
					
						
							| 
									
										
										
										
											2021-03-23 04:00:06 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	fsTypesExcludeSet bool | 
					
						
							|  |  |  | 	fsTypesExclude    = kingpin.Flag( | 
					
						
							|  |  |  | 		"collector.filesystem.fs-types-exclude", | 
					
						
							| 
									
										
										
										
											2024-11-05 01:36:13 -08:00
										 |  |  | 		"Regexp of filesystem types to exclude for filesystem collector. (mutually exclusive to fs-types-include)", | 
					
						
							| 
									
										
										
										
											2021-03-23 04:00:06 -07:00
										 |  |  | 	).Default(defFSTypesExcluded).PreAction(func(c *kingpin.ParseContext) error { | 
					
						
							|  |  |  | 		fsTypesExcludeSet = true | 
					
						
							|  |  |  | 		return nil | 
					
						
							|  |  |  | 	}).String() | 
					
						
							|  |  |  | 	oldFSTypesExcluded = kingpin.Flag( | 
					
						
							| 
									
										
										
										
											2016-03-15 06:01:08 -07:00
										 |  |  | 		"collector.filesystem.ignored-fs-types", | 
					
						
							| 
									
										
										
										
											2017-08-12 06:07:24 -07:00
										 |  |  | 		"Regexp of filesystem types to ignore for filesystem collector.", | 
					
						
							| 
									
										
										
										
											2021-03-23 04:00:06 -07:00
										 |  |  | 	).Hidden().String() | 
					
						
							| 
									
										
										
										
											2024-11-05 01:36:13 -08:00
										 |  |  | 	fsTypesInclude = kingpin.Flag( | 
					
						
							|  |  |  | 		"collector.filesystem.fs-types-include", | 
					
						
							|  |  |  | 		"Regexp of filesystem types to exclude for filesystem collector. (mutually exclusive to fs-types-exclude)", | 
					
						
							|  |  |  | 	).String() | 
					
						
							| 
									
										
										
										
											2016-03-15 06:01:08 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-18 03:04:30 -08:00
										 |  |  | 	filesystemLabelNames = []string{"device", "mountpoint", "fstype", "device_error"} | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type filesystemCollector struct { | 
					
						
							| 
									
										
										
										
											2024-11-05 01:36:13 -08:00
										 |  |  | 	mountPointFilter              deviceFilter | 
					
						
							|  |  |  | 	fsTypeFilter                  deviceFilter | 
					
						
							| 
									
										
										
										
											2017-03-22 17:48:18 -07:00
										 |  |  | 	sizeDesc, freeDesc, availDesc *prometheus.Desc | 
					
						
							|  |  |  | 	filesDesc, filesFreeDesc      *prometheus.Desc | 
					
						
							|  |  |  | 	roDesc, deviceErrorDesc       *prometheus.Desc | 
					
						
							| 
									
										
										
										
											2024-07-14 07:33:12 -07:00
										 |  |  | 	mountInfoDesc                 *prometheus.Desc | 
					
						
							| 
									
										
										
										
											2024-09-11 01:51:28 -07:00
										 |  |  | 	logger                        *slog.Logger | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-03 06:55:40 -08:00
										 |  |  | type filesystemLabels struct { | 
					
						
							| 
									
										
										
										
											2024-07-14 07:33:12 -07:00
										 |  |  | 	device, mountPoint, fsType, options, deviceError, major, minor string | 
					
						
							| 
									
										
										
										
											2017-01-03 06:55:40 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | type filesystemStats struct { | 
					
						
							| 
									
										
										
										
											2017-03-22 17:48:18 -07:00
										 |  |  | 	labels            filesystemLabels | 
					
						
							|  |  |  | 	size, free, avail float64 | 
					
						
							|  |  |  | 	files, filesFree  float64 | 
					
						
							|  |  |  | 	ro, deviceError   float64 | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func init() { | 
					
						
							| 
									
										
										
										
											2017-09-28 06:06:26 -07:00
										 |  |  | 	registerCollector("filesystem", defaultEnabled, NewFilesystemCollector) | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-28 08:44:53 -08:00
										 |  |  | // NewFilesystemCollector returns a new Collector exposing filesystems stats.
 | 
					
						
							| 
									
										
										
										
											2024-09-11 01:51:28 -07:00
										 |  |  | func NewFilesystemCollector(logger *slog.Logger) (Collector, error) { | 
					
						
							| 
									
										
										
										
											2024-11-05 01:36:13 -08:00
										 |  |  | 	const subsystem = "filesystem" | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	sizeDesc := prometheus.NewDesc( | 
					
						
							| 
									
										
										
										
											2018-01-17 08:55:55 -08:00
										 |  |  | 		prometheus.BuildFQName(namespace, subsystem, "size_bytes"), | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | 		"Filesystem size in bytes.", | 
					
						
							|  |  |  | 		filesystemLabelNames, nil, | 
					
						
							|  |  |  | 	) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	freeDesc := prometheus.NewDesc( | 
					
						
							| 
									
										
										
										
											2018-01-17 08:55:55 -08:00
										 |  |  | 		prometheus.BuildFQName(namespace, subsystem, "free_bytes"), | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | 		"Filesystem free space in bytes.", | 
					
						
							|  |  |  | 		filesystemLabelNames, nil, | 
					
						
							|  |  |  | 	) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	availDesc := prometheus.NewDesc( | 
					
						
							| 
									
										
										
										
											2018-01-17 08:55:55 -08:00
										 |  |  | 		prometheus.BuildFQName(namespace, subsystem, "avail_bytes"), | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | 		"Filesystem space available to non-root users in bytes.", | 
					
						
							|  |  |  | 		filesystemLabelNames, nil, | 
					
						
							|  |  |  | 	) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	filesDesc := prometheus.NewDesc( | 
					
						
							| 
									
										
										
										
											2017-09-28 06:06:26 -07:00
										 |  |  | 		prometheus.BuildFQName(namespace, subsystem, "files"), | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | 		"Filesystem total file nodes.", | 
					
						
							|  |  |  | 		filesystemLabelNames, nil, | 
					
						
							|  |  |  | 	) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	filesFreeDesc := prometheus.NewDesc( | 
					
						
							| 
									
										
										
										
											2017-09-28 06:06:26 -07:00
										 |  |  | 		prometheus.BuildFQName(namespace, subsystem, "files_free"), | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | 		"Filesystem total free file nodes.", | 
					
						
							|  |  |  | 		filesystemLabelNames, nil, | 
					
						
							|  |  |  | 	) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-10 00:25:04 -08:00
										 |  |  | 	roDesc := prometheus.NewDesc( | 
					
						
							| 
									
										
										
										
											2017-09-28 06:06:26 -07:00
										 |  |  | 		prometheus.BuildFQName(namespace, subsystem, "readonly"), | 
					
						
							| 
									
										
										
										
											2015-11-10 00:25:04 -08:00
										 |  |  | 		"Filesystem read-only status.", | 
					
						
							|  |  |  | 		filesystemLabelNames, nil, | 
					
						
							|  |  |  | 	) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-22 17:48:18 -07:00
										 |  |  | 	deviceErrorDesc := prometheus.NewDesc( | 
					
						
							| 
									
										
										
										
											2017-09-28 06:06:26 -07:00
										 |  |  | 		prometheus.BuildFQName(namespace, subsystem, "device_error"), | 
					
						
							| 
									
										
										
										
											2017-05-14 10:46:23 -07:00
										 |  |  | 		"Whether an error occurred while getting statistics for the given device.", | 
					
						
							| 
									
										
										
										
											2017-03-22 17:48:18 -07:00
										 |  |  | 		filesystemLabelNames, nil, | 
					
						
							|  |  |  | 	) | 
					
						
							| 
									
										
										
										
											2016-12-19 02:48:32 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-14 07:33:12 -07:00
										 |  |  | 	mountInfoDesc := prometheus.NewDesc( | 
					
						
							|  |  |  | 		prometheus.BuildFQName(namespace, subsystem, "mount_info"), | 
					
						
							|  |  |  | 		"Filesystem mount information.", | 
					
						
							|  |  |  | 		[]string{"device", "major", "minor", "mountpoint"}, | 
					
						
							|  |  |  | 		nil, | 
					
						
							|  |  |  | 	) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-05 01:36:13 -08:00
										 |  |  | 	mountPointFilter, err := newMountPointsFilter(logger) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return nil, fmt.Errorf("unable to parse mount points filter flags: %w", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	fsTypeFilter, err := newFSTypeFilter(logger) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return nil, fmt.Errorf("unable to parse fs types filter flags: %w", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | 	return &filesystemCollector{ | 
					
						
							| 
									
										
										
										
											2024-11-05 01:36:13 -08:00
										 |  |  | 		mountPointFilter: mountPointFilter, | 
					
						
							|  |  |  | 		fsTypeFilter:     fsTypeFilter, | 
					
						
							|  |  |  | 		sizeDesc:         sizeDesc, | 
					
						
							|  |  |  | 		freeDesc:         freeDesc, | 
					
						
							|  |  |  | 		availDesc:        availDesc, | 
					
						
							|  |  |  | 		filesDesc:        filesDesc, | 
					
						
							|  |  |  | 		filesFreeDesc:    filesFreeDesc, | 
					
						
							|  |  |  | 		roDesc:           roDesc, | 
					
						
							|  |  |  | 		deviceErrorDesc:  deviceErrorDesc, | 
					
						
							|  |  |  | 		mountInfoDesc:    mountInfoDesc, | 
					
						
							|  |  |  | 		logger:           logger, | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | 	}, nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-28 10:47:20 -08:00
										 |  |  | func (c *filesystemCollector) Update(ch chan<- prometheus.Metric) error { | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | 	stats, err := c.GetStats() | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-01-03 06:55:40 -08:00
										 |  |  | 	// Make sure we expose a metric once, even if there are multiple mounts
 | 
					
						
							|  |  |  | 	seen := map[filesystemLabels]bool{} | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | 	for _, s := range stats { | 
					
						
							| 
									
										
										
										
											2017-01-03 06:55:40 -08:00
										 |  |  | 		if seen[s.labels] { | 
					
						
							|  |  |  | 			continue | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		seen[s.labels] = true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-22 17:48:18 -07:00
										 |  |  | 		ch <- prometheus.MustNewConstMetric( | 
					
						
							|  |  |  | 			c.deviceErrorDesc, prometheus.GaugeValue, | 
					
						
							| 
									
										
										
										
											2024-02-18 03:04:30 -08:00
										 |  |  | 			s.deviceError, s.labels.device, s.labels.mountPoint, s.labels.fsType, s.labels.deviceError, | 
					
						
							| 
									
										
										
										
											2017-03-22 17:48:18 -07:00
										 |  |  | 		) | 
					
						
							| 
									
										
										
										
											2023-09-19 05:55:58 -07:00
										 |  |  | 		ch <- prometheus.MustNewConstMetric( | 
					
						
							|  |  |  | 			c.roDesc, prometheus.GaugeValue, | 
					
						
							| 
									
										
										
										
											2024-02-18 03:04:30 -08:00
										 |  |  | 			s.ro, s.labels.device, s.labels.mountPoint, s.labels.fsType, s.labels.deviceError, | 
					
						
							| 
									
										
										
										
											2023-09-19 05:55:58 -07:00
										 |  |  | 		) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-22 17:48:18 -07:00
										 |  |  | 		if s.deviceError > 0 { | 
					
						
							|  |  |  | 			continue | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | 		ch <- prometheus.MustNewConstMetric( | 
					
						
							|  |  |  | 			c.sizeDesc, prometheus.GaugeValue, | 
					
						
							| 
									
										
										
										
											2024-02-18 03:04:30 -08:00
										 |  |  | 			s.size, s.labels.device, s.labels.mountPoint, s.labels.fsType, s.labels.deviceError, | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | 		) | 
					
						
							|  |  |  | 		ch <- prometheus.MustNewConstMetric( | 
					
						
							|  |  |  | 			c.freeDesc, prometheus.GaugeValue, | 
					
						
							| 
									
										
										
										
											2024-02-18 03:04:30 -08:00
										 |  |  | 			s.free, s.labels.device, s.labels.mountPoint, s.labels.fsType, s.labels.deviceError, | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | 		) | 
					
						
							|  |  |  | 		ch <- prometheus.MustNewConstMetric( | 
					
						
							|  |  |  | 			c.availDesc, prometheus.GaugeValue, | 
					
						
							| 
									
										
										
										
											2024-02-18 03:04:30 -08:00
										 |  |  | 			s.avail, s.labels.device, s.labels.mountPoint, s.labels.fsType, s.labels.deviceError, | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | 		) | 
					
						
							|  |  |  | 		ch <- prometheus.MustNewConstMetric( | 
					
						
							|  |  |  | 			c.filesDesc, prometheus.GaugeValue, | 
					
						
							| 
									
										
										
										
											2024-02-18 03:04:30 -08:00
										 |  |  | 			s.files, s.labels.device, s.labels.mountPoint, s.labels.fsType, s.labels.deviceError, | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | 		) | 
					
						
							|  |  |  | 		ch <- prometheus.MustNewConstMetric( | 
					
						
							|  |  |  | 			c.filesFreeDesc, prometheus.GaugeValue, | 
					
						
							| 
									
										
										
										
											2024-02-18 03:04:30 -08:00
										 |  |  | 			s.filesFree, s.labels.device, s.labels.mountPoint, s.labels.fsType, s.labels.deviceError, | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | 		) | 
					
						
							| 
									
										
										
										
											2024-07-14 07:33:12 -07:00
										 |  |  | 		ch <- prometheus.MustNewConstMetric( | 
					
						
							|  |  |  | 			c.mountInfoDesc, prometheus.GaugeValue, | 
					
						
							|  |  |  | 			1.0, s.labels.device, s.labels.major, s.labels.minor, s.labels.mountPoint, | 
					
						
							|  |  |  | 		) | 
					
						
							| 
									
										
										
										
											2015-09-16 06:34:34 -07:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2024-11-05 01:36:13 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | func newMountPointsFilter(logger *slog.Logger) (deviceFilter, error) { | 
					
						
							|  |  |  | 	if *oldMountPointsExcluded != "" { | 
					
						
							|  |  |  | 		if !mountPointsExcludeSet { | 
					
						
							|  |  |  | 			logger.Warn("--collector.filesystem.ignored-mount-points is DEPRECATED and will be removed in 2.0.0, use --collector.filesystem.mount-points-exclude") | 
					
						
							|  |  |  | 			*mountPointsExclude = *oldMountPointsExcluded | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			return deviceFilter{}, errors.New("--collector.filesystem.ignored-mount-points and --collector.filesystem.mount-points-exclude are mutually exclusive") | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if *mountPointsInclude != "" && !mountPointsExcludeSet { | 
					
						
							|  |  |  | 		logger.Debug("mount-points-exclude flag not set when mount-points-include flag is set, assuming include is desired") | 
					
						
							|  |  |  | 		*mountPointsExclude = "" | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if *mountPointsExclude != "" && *mountPointsInclude != "" { | 
					
						
							|  |  |  | 		return deviceFilter{}, errors.New("--collector.filesystem.mount-points-exclude and --collector.filesystem.mount-points-include are mutually exclusive") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if *mountPointsExclude != "" { | 
					
						
							|  |  |  | 		logger.Info("Parsed flag --collector.filesystem.mount-points-exclude", "flag", *mountPointsExclude) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if *mountPointsInclude != "" { | 
					
						
							|  |  |  | 		logger.Info("Parsed flag --collector.filesystem.mount-points-include", "flag", *mountPointsInclude) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return newDeviceFilter(*mountPointsExclude, *mountPointsInclude), nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func newFSTypeFilter(logger *slog.Logger) (deviceFilter, error) { | 
					
						
							|  |  |  | 	if *oldFSTypesExcluded != "" { | 
					
						
							|  |  |  | 		if !fsTypesExcludeSet { | 
					
						
							|  |  |  | 			logger.Warn("--collector.filesystem.ignored-fs-types is DEPRECATED and will be removed in 2.0.0, use --collector.filesystem.fs-types-exclude") | 
					
						
							|  |  |  | 			*fsTypesExclude = *oldFSTypesExcluded | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			return deviceFilter{}, errors.New("--collector.filesystem.ignored-fs-types and --collector.filesystem.fs-types-exclude are mutually exclusive") | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if *fsTypesInclude != "" && !fsTypesExcludeSet { | 
					
						
							|  |  |  | 		logger.Debug("fs-types-exclude flag not set when fs-types-include flag is set, assuming include is desired") | 
					
						
							|  |  |  | 		*fsTypesExclude = "" | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if *fsTypesExclude != "" && *fsTypesInclude != "" { | 
					
						
							|  |  |  | 		return deviceFilter{}, errors.New("--collector.filesystem.fs-types-exclude and --collector.filesystem.fs-types-include are mutually exclusive") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if *fsTypesExclude != "" { | 
					
						
							|  |  |  | 		logger.Info("Parsed flag --collector.filesystem.fs-types-exclude", "flag", *fsTypesExclude) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if *fsTypesInclude != "" { | 
					
						
							|  |  |  | 		logger.Info("Parsed flag --collector.filesystem.fs-types-include", "flag", *fsTypesInclude) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return newDeviceFilter(*fsTypesExclude, *fsTypesInclude), nil | 
					
						
							|  |  |  | } |