Skip to content
Snippets Groups Projects
Select Git revision
1 result Searching

exporter.go

Blame
  • Forked from ai3 / thirdparty / rsyslog-exporter
    Source project has a limited visibility.
    exporter.go 2.39 KiB
    package main
    
    import (
    	"bufio"
    	"os"
    	"strings"
    	"sync"
    
    	"github.com/prometheus/client_golang/prometheus"
    )
    
    type rsyslogType int
    
    const (
    	rsyslogUnknown rsyslogType = iota
    	rsyslogAction
    	rsyslogInput
    	rsyslogQueue
    	rsyslogResource
    )
    
    type rsyslogExporter struct {
    	started bool
    	logfile *os.File
    	scanner *bufio.Scanner
    	pointStore
    }
    
    func newRsyslogExporter() *rsyslogExporter {
    	e := &rsyslogExporter{
    		scanner: bufio.NewScanner(os.Stdin),
    		pointStore: pointStore{
    			pointMap: make(map[string]*point),
    			lock:     &sync.RWMutex{},
    		},
    	}
    	return e
    }
    
    func (re *rsyslogExporter) handleStatLine(buf []byte) {
    	pstatType := getStatType(buf)
    
    	switch pstatType {
    	case rsyslogAction:
    		a := newActionFromJSON(buf)
    		for _, p := range a.toPoints() {
    			re.add(p)
    		}
    
    	case rsyslogInput:
    		i := newInputFromJSON(buf)
    		for _, p := range i.toPoints() {
    			re.add(p)
    		}
    
    	case rsyslogQueue:
    		q := newQueueFromJSON(buf)
    		for _, p := range q.toPoints() {
    			re.add(p)
    		}
    
    	case rsyslogResource:
    		r := newResourceFromJSON(buf)
    		for _, p := range r.toPoints() {
    			re.add(p)
    		}
    
    	default:
    	}
    }