Files
ucs-exporter/cmd/server/main.go
Nathan Coad 88c8109391
All checks were successful
continuous-integration/drone/push Build is passing
include vnic stats
2023-09-29 14:09:39 +10:00

70 lines
2.0 KiB
Go

package main
import (
"context"
"crypto/tls"
"flag"
"log"
"net/http"
"ucs-exporter/internal/exporters"
"github.com/dnaeon/go-ucs/api"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
var sha1ver string // sha1 revision used to build the program
var buildTime string // when the executable was built
func main() {
vURL := flag.String("url", "", "The URL of a UCS Manager, eg https://server.domain.example/nuova")
vUser := flag.String("user", "ucspe", "The username to use when connecting to UCS Manager")
vPass := flag.String("password", "ucspe", "The password to use when connecting to UCS Manager")
listenPort := flag.String("listen-port", ":9101", "The port to listen on for telemetry")
flag.Parse()
// The following example shows how to retrieve all compute blades.
// Skip SSL certificate verification of remote endpoint.
tr := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
httpClient := &http.Client{Transport: tr}
// Create a new Cisco UCS API client
config := api.Config{
Endpoint: *vURL,
Username: *vUser,
Password: *vPass,
HttpClient: httpClient,
}
ucsClient, err := api.NewClient(config)
if err != nil {
log.Fatalf("Unable to create API client: %s", err)
}
ctx := context.Background()
log.Printf("Starting execution. Built on %s from sha1 %s\n", buildTime, sha1ver)
log.Printf("Logging in to %s\n", config.Endpoint)
if _, err := ucsClient.AaaLogin(ctx); err != nil {
log.Fatalf("Unable to login: %s\n", err)
}
defer ucsClient.AaaLogout(ctx)
log.Printf("Got authentication cookie: %s\n", ucsClient.Cookie)
// Register prometheus exporters
exporter := exporters.NewUcsmExporters(ucsClient, ctx)
prometheus.MustRegister(exporter)
// Start prometheus exporter
http.Handle("/metrics", promhttp.Handler())
// TODO - run this in a go routine to avoid blocking, as per cbs code
log.Fatal(http.ListenAndServe(*listenPort, nil))
// TODO - log off from UCS manager
}