Refactored to kingpin and fixed a EOF bug in CollectShowqFromReader.

This commit is contained in:
Bart Vercoulen 2018-12-17 17:01:01 +01:00
parent 1e650923d8
commit f51b1f882d
No known key found for this signature in database
GPG Key ID: E6D9CA10D6B6AC2B
3 changed files with 24 additions and 18 deletions

View File

@ -3,14 +3,19 @@
package main package main
import "io" import(
"io"
"github.com/alecthomas/kingpin"
)
type Journal struct { type Journal struct {
io.Closer io.Closer
Path string Path string
} }
func systemdFlags(enable *bool, unit, slice, path *string) {} func systemdFlags(enable *bool, unit, slice, path *string, app *kingpin.Application) {}
func NewJournal(unit, slice, path string) (*Journal, error) { func NewJournal(unit, slice, path string) (*Journal, error) {
return nil, nil return nil, nil

View File

@ -17,8 +17,8 @@ import (
"bufio" "bufio"
"bytes" "bytes"
"errors" "errors"
"flag"
"fmt" "fmt"
"github.com/alecthomas/kingpin"
"io" "io"
"log" "log"
"net" "net"
@ -78,7 +78,7 @@ type PostfixExporter struct {
func CollectShowqFromReader(file io.Reader, ch chan<- prometheus.Metric) error { func CollectShowqFromReader(file io.Reader, ch chan<- prometheus.Metric) error {
reader := bufio.NewReader(file) reader := bufio.NewReader(file)
buf, err := reader.Peek(128) buf, err := reader.Peek(128)
if err != nil { if err != nil && err != io.EOF {
log.Printf("Could not read postfix output, %v", err) log.Printf("Could not read postfix output, %v", err)
} }
if bytes.IndexByte(buf, 0) >= 0 { if bytes.IndexByte(buf, 0) >= 0 {
@ -663,16 +663,17 @@ func (e *PostfixExporter) Collect(ch chan<- prometheus.Metric) {
func main() { func main() {
var ( var (
listenAddress = flag.String("web.listen-address", ":9154", "Address to listen on for web interface and telemetry.") app = kingpin.New("postfix_exporter", "Prometheus metrics exporter for postfix")
metricsPath = flag.String("web.telemetry-path", "/metrics", "Path under which to expose metrics.") listenAddress = app.Flag("web.listen-address", "Address to listen on for web interface and telemetry.").Default(":9154").String()
postfixShowqPath = flag.String("postfix.showq_path", "/var/spool/postfix/public/showq", "Path at which Postfix places its showq socket.") metricsPath = app.Flag("web.telemetry-path", "Path under which to expose metrics.").Default("/metrics").String()
postfixLogfilePath = flag.String("postfix.logfile_path", "/var/log/postfix_exporter_input.log", "Path where Postfix writes log entries. This file will be truncated by this exporter.") postfixShowqPath = app.Flag("postfix.showq_path", "Path at which Postfix places its showq socket.").Default("/var/spool/postfix/public/showq").String()
postfixLogfilePath = app.Flag("postfix.logfile_path", "Path where Postfix writes log entries. This file will be truncated by this exporter.").Default("/var/log/postfix_exporter_input.log").String()
systemdEnable bool systemdEnable bool
systemdUnit, systemdSlice, systemdJournalPath string systemdUnit, systemdSlice, systemdJournalPath string
) )
systemdFlags(&systemdEnable, &systemdUnit, &systemdSlice, &systemdJournalPath) systemdFlags(&systemdEnable, &systemdUnit, &systemdSlice, &systemdJournalPath, app)
flag.Parse()
kingpin.MustParse(app.Parse(os.Args[1:]))
var journal *Journal var journal *Journal
if systemdEnable { if systemdEnable {

View File

@ -3,12 +3,12 @@
package main package main
import ( import (
"flag"
"fmt" "fmt"
"log" "log"
"sync" "sync"
"time" "time"
"github.com/alecthomas/kingpin"
"github.com/coreos/go-systemd/sdjournal" "github.com/coreos/go-systemd/sdjournal"
) )
@ -88,11 +88,11 @@ func (j *Journal) NextMessage() (s string, c uint64, err error) {
} }
// systemdFlags sets the flags for use with systemd // systemdFlags sets the flags for use with systemd
func systemdFlags(enable *bool, unit, slice, path *string) { func systemdFlags(enable *bool, unit, slice, path *string, app *kingpin.Application) {
flag.BoolVar(enable, "systemd.enable", false, "Read from the systemd journal instead of log") app.Flag("systemd.enable", "Read from the systemd journal instead of log").Default("false").BoolVar(enable)
flag.StringVar(unit, "systemd.unit", "postfix.service", "Name of the Postfix systemd unit.") app.Flag("systemd.unit", "Name of the Postfix systemd unit.").Default("postfix.service").StringVar(unit)
flag.StringVar(slice, "systemd.slice", "", "Name of the Postfix systemd slice. Overrides the systemd unit.") app.Flag("systemd.slice", "Name of the Postfix systemd slice. Overrides the systemd unit.").Default("").StringVar(slice)
flag.StringVar(path, "systemd.journal_path", "", "Path to the systemd journal") app.Flag("systemd.journal_path", "Path to the systemd journal").Default("").StringVar(path)
} }
// CollectLogfileFromJournal Collects entries from the systemd journal. // CollectLogfileFromJournal Collects entries from the systemd journal.