You've already forked prometheus-fail2ban-exporter
							
							
		
			All checks were successful
		
		
	
	continuous-integration/drone/push Build is passing
				
			
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package textfile
 | |
| 
 | |
| import (
 | |
| 	"log"
 | |
| 	"os"
 | |
| 	"path/filepath"
 | |
| 	"strings"
 | |
| 
 | |
| 	"github.com/prometheus/client_golang/prometheus"
 | |
| )
 | |
| 
 | |
| const namespace = "textfile"
 | |
| 
 | |
| var (
 | |
| 	metricReadError = prometheus.NewDesc(
 | |
| 		prometheus.BuildFQName(namespace, "", "error"),
 | |
| 		"Checks for errors while reading text files",
 | |
| 		[]string{"path"}, nil,
 | |
| 	)
 | |
| )
 | |
| 
 | |
| func (c *Collector) collectFileContents() {
 | |
| 	files, err := os.ReadDir(c.folderPath)
 | |
| 	if err != nil {
 | |
| 		log.Printf("error reading directory '%s': %v", c.folderPath, err)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	for _, file := range files {
 | |
| 		fileName := file.Name()
 | |
| 		if !strings.HasSuffix(strings.ToLower(fileName), ".prom") {
 | |
| 			continue
 | |
| 		}
 | |
| 		c.fileMap[fileName] = &fileData{
 | |
| 			readErrors: 0,
 | |
| 			fileName:   fileName,
 | |
| 		}
 | |
| 
 | |
| 		fullPath := filepath.Join(c.folderPath, fileName)
 | |
| 		content, err := os.ReadFile(fullPath)
 | |
| 		if err != nil {
 | |
| 			c.appendErrorForPath(fileName)
 | |
| 			log.Printf("error reading contents of file '%s': %v", fileName, err)
 | |
| 		}
 | |
| 
 | |
| 		c.fileMap[fileName].fileContents = content
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (c *Collector) collectFileErrors(ch chan<- prometheus.Metric) {
 | |
| 	for _, f := range c.fileMap {
 | |
| 		ch <- prometheus.MustNewConstMetric(
 | |
| 			metricReadError, prometheus.GaugeValue, float64(f.readErrors), f.fileName,
 | |
| 		)
 | |
| 	}
 | |
| }
 |