Refactored to kingpin and fixed a EOF bug in CollectShowqFromReader.
This commit is contained in:
parent
1e650923d8
commit
f51b1f882d
@ -3,14 +3,19 @@
|
||||
|
||||
package main
|
||||
|
||||
import "io"
|
||||
import(
|
||||
"io"
|
||||
|
||||
"github.com/alecthomas/kingpin"
|
||||
)
|
||||
|
||||
|
||||
type Journal struct {
|
||||
io.Closer
|
||||
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) {
|
||||
return nil, nil
|
||||
|
@ -17,8 +17,8 @@ import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"github.com/alecthomas/kingpin"
|
||||
"io"
|
||||
"log"
|
||||
"net"
|
||||
@ -78,7 +78,7 @@ type PostfixExporter struct {
|
||||
func CollectShowqFromReader(file io.Reader, ch chan<- prometheus.Metric) error {
|
||||
reader := bufio.NewReader(file)
|
||||
buf, err := reader.Peek(128)
|
||||
if err != nil {
|
||||
if err != nil && err != io.EOF {
|
||||
log.Printf("Could not read postfix output, %v", err)
|
||||
}
|
||||
if bytes.IndexByte(buf, 0) >= 0 {
|
||||
@ -663,16 +663,17 @@ func (e *PostfixExporter) Collect(ch chan<- prometheus.Metric) {
|
||||
|
||||
func main() {
|
||||
var (
|
||||
listenAddress = flag.String("web.listen-address", ":9154", "Address to listen on for web interface and telemetry.")
|
||||
metricsPath = flag.String("web.telemetry-path", "/metrics", "Path under which to expose metrics.")
|
||||
postfixShowqPath = flag.String("postfix.showq_path", "/var/spool/postfix/public/showq", "Path at which Postfix places its showq socket.")
|
||||
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.")
|
||||
|
||||
systemdEnable bool
|
||||
app = kingpin.New("postfix_exporter", "Prometheus metrics exporter for postfix")
|
||||
listenAddress = app.Flag("web.listen-address", "Address to listen on for web interface and telemetry.").Default(":9154").String()
|
||||
metricsPath = app.Flag("web.telemetry-path", "Path under which to expose metrics.").Default("/metrics").String()
|
||||
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
|
||||
systemdUnit, systemdSlice, systemdJournalPath string
|
||||
)
|
||||
systemdFlags(&systemdEnable, &systemdUnit, &systemdSlice, &systemdJournalPath)
|
||||
flag.Parse()
|
||||
systemdFlags(&systemdEnable, &systemdUnit, &systemdSlice, &systemdJournalPath, app)
|
||||
|
||||
kingpin.MustParse(app.Parse(os.Args[1:]))
|
||||
|
||||
var journal *Journal
|
||||
if systemdEnable {
|
||||
|
12
systemd.go
12
systemd.go
@ -3,12 +3,12 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/alecthomas/kingpin"
|
||||
"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
|
||||
func systemdFlags(enable *bool, unit, slice, path *string) {
|
||||
flag.BoolVar(enable, "systemd.enable", false, "Read from the systemd journal instead of log")
|
||||
flag.StringVar(unit, "systemd.unit", "postfix.service", "Name of the Postfix systemd unit.")
|
||||
flag.StringVar(slice, "systemd.slice", "", "Name of the Postfix systemd slice. Overrides the systemd unit.")
|
||||
flag.StringVar(path, "systemd.journal_path", "", "Path to the systemd journal")
|
||||
func systemdFlags(enable *bool, unit, slice, path *string, app *kingpin.Application) {
|
||||
app.Flag("systemd.enable", "Read from the systemd journal instead of log").Default("false").BoolVar(enable)
|
||||
app.Flag("systemd.unit", "Name of the Postfix systemd unit.").Default("postfix.service").StringVar(unit)
|
||||
app.Flag("systemd.slice", "Name of the Postfix systemd slice. Overrides the systemd unit.").Default("").StringVar(slice)
|
||||
app.Flag("systemd.journal_path", "Path to the systemd journal").Default("").StringVar(path)
|
||||
}
|
||||
|
||||
// CollectLogfileFromJournal Collects entries from the systemd journal.
|
||||
|
Loading…
Reference in New Issue
Block a user