Compare commits
3 Commits
Author | SHA1 | Date |
---|---|---|
lconsuegra | e6c278ad8f | |
lconsuegra | 4b61efaff6 | |
lconsuegra | 68b4a2e0fd |
10
README.md
10
README.md
|
@ -41,7 +41,6 @@ $ docker run --rm --network="host" ghcr.io/camptocamp/cups_exporter:0.0.8
|
|||
| Metric | Meaning | Labels |
|
||||
| ------ | ------- | ------ |
|
||||
| cups_up | Was the last scrape of cups successful | |
|
||||
| cups_job_state_total | Number of current print jobs per state | printer, state |
|
||||
| cups_job_total | Total number of print jobs per printer | printer |
|
||||
| cups_printer_state_total | Number of printers per state | printer, state |
|
||||
| cups_printer_total | Total number of available printers | |
|
||||
|
@ -50,15 +49,6 @@ $ docker run --rm --network="host" ghcr.io/camptocamp/cups_exporter:0.0.8
|
|||
|
||||
Examples:
|
||||
```
|
||||
# HELP cups_job_state_total Number of jobs per state
|
||||
# TYPE cups_job_state_total gauge
|
||||
cups_job_state_total{printer="CUPS_Printer_1",state="aborted"} 0
|
||||
cups_job_state_total{printer="CUPS_Printer_1",state="canceled"} 0
|
||||
cups_job_state_total{printer="CUPS_Printer_1",state="completed"} 2
|
||||
cups_job_state_total{printer="CUPS_Printer_1",state="held"} 0
|
||||
cups_job_state_total{printer="CUPS_Printer_1",state="pending"} 0
|
||||
cups_job_state_total{printer="CUPS_Printer_1",state="processing"} 1
|
||||
cups_job_state_total{printer="CUPS_Printer_1",state="stopped"} 0
|
||||
# HELP cups_job_total Total number of print jobs
|
||||
# TYPE cups_job_total counter
|
||||
cups_job_total{printer="CUPS_Printer_1"} 3
|
||||
|
|
2
go.mod
2
go.mod
|
@ -5,7 +5,7 @@ go 1.13
|
|||
require (
|
||||
github.com/go-logr/logr v0.3.0
|
||||
github.com/go-logr/zapr v0.3.0
|
||||
github.com/phin1x/go-ipp v1.5.0
|
||||
github.com/phin1x/go-ipp v1.2.1-0.20191226192803-6c9dee854ace
|
||||
github.com/prometheus/client_golang v1.9.0
|
||||
go.uber.org/multierr v1.6.0 // indirect
|
||||
go.uber.org/zap v1.16.0
|
||||
|
|
4
go.sum
4
go.sum
|
@ -204,8 +204,8 @@ github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIw
|
|||
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
||||
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
|
||||
github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
|
||||
github.com/phin1x/go-ipp v1.5.0 h1:3WLi0RLI3LbF93lHK7TBsK7h53u8tNXZNEokfFOurno=
|
||||
github.com/phin1x/go-ipp v1.5.0/go.mod h1:GZwyNds6grdLi2xRBX22Cvt7Dh7ITWsML0bjrqBF5uo=
|
||||
github.com/phin1x/go-ipp v1.2.1-0.20191226192803-6c9dee854ace h1:ELNodn+xPzMsqbwObNVFRt/OYlcCEw51IlRYdCtURcM=
|
||||
github.com/phin1x/go-ipp v1.2.1-0.20191226192803-6c9dee854ace/go.mod h1:GZwyNds6grdLi2xRBX22Cvt7Dh7ITWsML0bjrqBF5uo=
|
||||
github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
|
||||
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
|
||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
|
|
|
@ -53,12 +53,6 @@ func NewExporter(cupsUri string, log logr.Logger) (*Exporter, error) {
|
|||
[]string{"printer"},
|
||||
nil,
|
||||
),
|
||||
jobStateTotal: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(namespace, "job", "state_total"),
|
||||
"Number of jobs per state",
|
||||
[]string{"printer", "state"},
|
||||
nil,
|
||||
),
|
||||
printersTotal: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(namespace, "printer", "total"),
|
||||
"Number of available printers",
|
||||
|
@ -84,7 +78,6 @@ type Exporter struct {
|
|||
cupsUp *prometheus.Desc
|
||||
scrapeDurationSeconds *prometheus.Desc
|
||||
jobsTotal *prometheus.Desc
|
||||
jobStateTotal *prometheus.Desc
|
||||
printersTotal *prometheus.Desc
|
||||
printerStateTotal *prometheus.Desc
|
||||
}
|
||||
|
@ -93,7 +86,6 @@ func (e *Exporter) Describe(ch chan<- *prometheus.Desc) {
|
|||
ch <- e.cupsUp
|
||||
ch <- e.scrapeDurationSeconds
|
||||
ch <- e.jobsTotal
|
||||
ch <- e.jobStateTotal
|
||||
ch <- e.printersTotal
|
||||
ch <- e.printerStateTotal
|
||||
}
|
||||
|
|
45
pkg/jobs.go
45
pkg/jobs.go
|
@ -3,12 +3,11 @@ package pkg
|
|||
import (
|
||||
"github.com/phin1x/go-ipp"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
func (e *Exporter) jobsMetrics(ch chan<- prometheus.Metric) error {
|
||||
|
||||
printers, err := e.client.GetPrinters([]string{"printer-state"})
|
||||
printers, err := e.client.GetPrinters([]string{})
|
||||
|
||||
if err != nil {
|
||||
e.log.Error(err, "failed to fetch printers")
|
||||
|
@ -17,42 +16,20 @@ func (e *Exporter) jobsMetrics(ch chan<- prometheus.Metric) error {
|
|||
|
||||
for _, attr := range printers {
|
||||
|
||||
printer := attr["printer-name"][0].Value.(string)
|
||||
if len(attr["printer-name"]) == 1 {
|
||||
|
||||
jobs, err := e.client.GetJobs(printer, "", ipp.JobStateFilterAll, false, 0, 0, []string{"job-state"})
|
||||
if err != nil {
|
||||
e.log.Error(err, "failed to fetch all jobs states")
|
||||
return err
|
||||
}
|
||||
printer := attr["printer-name"][0].Value.(string)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(e.jobsTotal, prometheus.CounterValue, float64(len(jobs)), printer)
|
||||
|
||||
states := map[int8]int{}
|
||||
|
||||
for _, attr := range jobs {
|
||||
|
||||
if len(attr["job-state"]) == 1 {
|
||||
|
||||
value := int8(attr["job-state"][0].Value.(int))
|
||||
|
||||
if value <= 9 && value >= 3 {
|
||||
states[value]++
|
||||
} else {
|
||||
e.log.Info("Unknow job state : " + strconv.Itoa(int(value)))
|
||||
}
|
||||
} else {
|
||||
e.log.Info("job state attribute missing")
|
||||
jobs, err := e.client.GetJobs(printer, "", ipp.JobStateFilterAll, false, 0, 0, []string{})
|
||||
if err != nil {
|
||||
e.log.Error(err, "failed to fetch all jobs")
|
||||
return err
|
||||
}
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(e.jobsTotal, prometheus.CounterValue, float64(len(jobs)), printer)
|
||||
} else {
|
||||
e.log.Info("printer name attribute missing")
|
||||
}
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(e.jobStateTotal, prometheus.GaugeValue, float64(states[ipp.JobStatePending]), printer, "pending")
|
||||
ch <- prometheus.MustNewConstMetric(e.jobStateTotal, prometheus.GaugeValue, float64(states[ipp.JobStateHeld]), printer, "held")
|
||||
ch <- prometheus.MustNewConstMetric(e.jobStateTotal, prometheus.GaugeValue, float64(states[ipp.JobStateProcessing]), printer, "processing")
|
||||
ch <- prometheus.MustNewConstMetric(e.jobStateTotal, prometheus.GaugeValue, float64(states[ipp.JobStateStopped]), printer, "stopped")
|
||||
ch <- prometheus.MustNewConstMetric(e.jobStateTotal, prometheus.GaugeValue, float64(states[ipp.JobStateCanceled]), printer, "canceled")
|
||||
ch <- prometheus.MustNewConstMetric(e.jobStateTotal, prometheus.GaugeValue, float64(states[ipp.JobStateAborted]), printer, "aborted")
|
||||
ch <- prometheus.MustNewConstMetric(e.jobStateTotal, prometheus.GaugeValue, float64(states[ipp.JobStateCompleted]), printer, "completed")
|
||||
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
@ -18,12 +18,12 @@ func (e *Exporter) printerMetrics(ch chan<- prometheus.Metric) error {
|
|||
|
||||
printer := attr["printer-name"][0].Value.(string)
|
||||
|
||||
states := make(map[int8]int)
|
||||
states := make(map[ipp.PrinterState]int)
|
||||
states[ipp.PrinterStateIdle] = 0
|
||||
states[ipp.PrinterStateProcessing] = 0
|
||||
states[ipp.PrinterStateStopped] = 0
|
||||
|
||||
states[int8(attr["printer-state"][0].Value.(int))]++
|
||||
states[ipp.PrinterState(attr["printer-state"][0].Value.(int))]++
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(e.printerStateTotal, prometheus.GaugeValue, float64(states[ipp.PrinterStateIdle]), printer, "idle")
|
||||
ch <- prometheus.MustNewConstMetric(e.printerStateTotal, prometheus.GaugeValue, float64(states[ipp.PrinterStateProcessing]), printer, "processing")
|
||||
|
|
Loading…
Reference in New Issue