Improve logging, show usage if flag is missing
This commit is contained in:
parent
34d415c13f
commit
b1b0584f9d
1 changed files with 53 additions and 40 deletions
93
main.go
93
main.go
|
@ -7,6 +7,7 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"os"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
|
@ -88,47 +89,10 @@ func (e *Exporter) Collect(ch chan<- prometheus.Metric) {
|
||||||
|
|
||||||
func (e *Exporter) FetchSwitchMetrics(switchIP string, ch chan<- prometheus.Metric) {
|
func (e *Exporter) FetchSwitchMetrics(switchIP string, ch chan<- prometheus.Metric) {
|
||||||
|
|
||||||
log.Printf("Trying to connect to switch at: %s\n", switchIP)
|
report, err := FetchReport(switchIP)
|
||||||
|
|
||||||
url := "http://" + switchIP + "/report"
|
|
||||||
|
|
||||||
switchClient := http.Client{
|
|
||||||
Timeout: time.Second * 5, // 3 second timeout, might need to be increased
|
|
||||||
}
|
|
||||||
|
|
||||||
req, err := http.NewRequest(http.MethodGet, url, nil)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ch <- prometheus.MustNewConstMetric(
|
log.Printf("Error occured, while fetching metrics: %s", err)
|
||||||
up, prometheus.GaugeValue, 0,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
req.Header.Set("User-Agent", "myStrom-exporter")
|
|
||||||
|
|
||||||
res, getErr := switchClient.Do(req)
|
|
||||||
if getErr != nil {
|
|
||||||
fmt.Printf("Error while trying to connect to switch: %v\n", getErr)
|
|
||||||
ch <- prometheus.MustNewConstMetric(
|
|
||||||
up, prometheus.GaugeValue, 0,
|
|
||||||
)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if res.Body != nil {
|
|
||||||
defer res.Body.Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
body, readErr := ioutil.ReadAll(res.Body)
|
|
||||||
if readErr != nil {
|
|
||||||
ch <- prometheus.MustNewConstMetric(
|
|
||||||
up, prometheus.GaugeValue, 0,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
report := switchReport{}
|
|
||||||
err = json.Unmarshal(body, &report)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
ch <- prometheus.MustNewConstMetric(
|
ch <- prometheus.MustNewConstMetric(
|
||||||
up, prometheus.GaugeValue, 0,
|
up, prometheus.GaugeValue, 0,
|
||||||
)
|
)
|
||||||
|
@ -159,12 +123,56 @@ func (e *Exporter) FetchSwitchMetrics(switchIP string, ch chan<- prometheus.Metr
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func FetchReport(switchIP string) (*switchReport, error) {
|
||||||
|
log.Printf("Trying to connect to switch at: %s\n", switchIP)
|
||||||
|
url := "http://" + switchIP + "/report"
|
||||||
|
|
||||||
|
switchClient := http.Client{
|
||||||
|
Timeout: time.Second * 5, // 3 second timeout, might need to be increased
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := http.NewRequest(http.MethodGet, url, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
req.Header.Set("User-Agent", "myStrom-exporter")
|
||||||
|
|
||||||
|
res, getErr := switchClient.Do(req)
|
||||||
|
if getErr != nil {
|
||||||
|
log.Printf("Error while trying to connect to switch: %s\n", getErr)
|
||||||
|
return nil, getErr
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if res.Body != nil {
|
||||||
|
defer res.Body.Close()
|
||||||
|
}
|
||||||
|
|
||||||
|
body, readErr := ioutil.ReadAll(res.Body)
|
||||||
|
if readErr != nil {
|
||||||
|
log.Printf("Error while reading body: %s\n", readErr)
|
||||||
|
return nil, readErr
|
||||||
|
}
|
||||||
|
|
||||||
|
report := switchReport{}
|
||||||
|
err = json.Unmarshal(body, &report)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error while unmarshaling report: %s\n", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &report, nil
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
if *switchIP == "" {
|
if *switchIP == "" {
|
||||||
log.Fatal("No switch.ip-address provided")
|
flag.Usage()
|
||||||
|
fmt.Println("\nNo switch.ip-address provided")
|
||||||
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
exporter := NewExporter(*switchIP)
|
exporter := NewExporter(*switchIP)
|
||||||
|
@ -181,6 +189,11 @@ func main() {
|
||||||
</html>`))
|
</html>`))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
_, err := FetchReport(*switchIP)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Switch at address %s couldn't be reached. Ensure it is reachable before starting the exporter", *switchIP)
|
||||||
|
}
|
||||||
|
|
||||||
log.Printf("Starting listener on %s\n", *listenAddress)
|
log.Printf("Starting listener on %s\n", *listenAddress)
|
||||||
log.Fatal(http.ListenAndServe(*listenAddress, nil))
|
log.Fatal(http.ListenAndServe(*listenAddress, nil))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue