diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 5cd06c8..418127f 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -6,29 +6,32 @@ on: pull_request: jobs: - build: - runs-on: ubuntu-20.04 + check: + runs-on: ubuntu-22.04 steps: - name: Checkout the code - uses: actions/checkout@v1 + uses: actions/checkout@v3 + + - name: Set up Go + uses: actions/setup-go@v4 + with: + go-version: '1.19' - name: Set up QEMU - uses: docker/setup-qemu-action@v1 + uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx id: buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 - name: Lint with golangci-lint - uses: golangci/golangci-lint-action@v2 + uses: golangci/golangci-lint-action@v3 - - name: Set up Go - uses: actions/setup-go@v2 - with: - go-version: 1.19 + - name: Run Go tests + run: go test -v ./... - name: Run GoReleaser check - uses: goreleaser/goreleaser-action@v2.8.1 + uses: goreleaser/goreleaser-action@v4 with: version: latest args: build --skip-validate diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 7aed32c..f898d1d 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -8,40 +8,34 @@ on: jobs: build: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: Checkout the code - uses: actions/checkout@v1 + uses: actions/checkout@v3 + + - name: Set up Go + uses: actions/setup-go@v4 + with: + go-version: '1.19' - name: Set up QEMU - uses: docker/setup-qemu-action@v1 + uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx id: buildx - uses: docker/setup-buildx-action@v1 - - - name: Login to Docker Hub - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} + uses: docker/setup-buildx-action@v2 - name: Login to GitHub Container Registry - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: registry: ghcr.io - username: "charlie-haley" + username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Set up Go - uses: actions/setup-go@v2 - with: - go-version: 1.19 - - name: Run GoReleaser - uses: goreleaser/goreleaser-action@v2.8.1 + uses: goreleaser/goreleaser-action@v4 with: version: latest - args: release --rm-dist + args: release --clean env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.goreleaser.yaml b/.goreleaser.yaml index c6dd52a..c5a7e5a 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -23,17 +23,11 @@ builds: dockers: - image_templates: - - "docker.io/chhaley/omada_exporter:latest-amd64" - - "docker.io/chhaley/omada_exporter:{{ .Version }}-amd64" - - "docker.io/chhaley/omada_exporter:{{ .Major }}.{{ .Minor }}.{{ .Patch }}-amd64" - - "docker.io/chhaley/omada_exporter:{{ .Major }}.{{ .Minor }}-amd64" - - "docker.io/chhaley/omada_exporter:{{ .Major }}-amd64" - - - "ghcr.io/charlie-haley/omada_exporter:latest-amd64" - - "ghcr.io/charlie-haley/omada_exporter:{{ .Version }}-amd64" - - "ghcr.io/charlie-haley/omada_exporter:{{ .Major }}.{{ .Minor }}.{{ .Patch }}-amd64" - - "ghcr.io/charlie-haley/omada_exporter:{{ .Major }}.{{ .Minor }}-amd64" - - "ghcr.io/charlie-haley/omada_exporter:{{ .Major }}-amd64" + - "ghcr.io/michelheusschen/omada_exporter:latest-amd64" + - "ghcr.io/michelheusschen/omada_exporter:{{ .Version }}-amd64" + - "ghcr.io/michelheusschen/omada_exporter:{{ .Major }}.{{ .Minor }}.{{ .Patch }}-amd64" + - "ghcr.io/michelheusschen/omada_exporter:{{ .Major }}.{{ .Minor }}-amd64" + - "ghcr.io/michelheusschen/omada_exporter:{{ .Major }}-amd64" use: buildx dockerfile: Dockerfile goarch: amd64 @@ -48,17 +42,11 @@ dockers: - "--build-arg=VCS_REF={{.FullCommit}}" - "--platform=linux/amd64" - image_templates: - - "docker.io/chhaley/omada_exporter:latest-arm64v8" - - "docker.io/chhaley/omada_exporter:{{ .Version }}-arm64v8" - - "docker.io/chhaley/omada_exporter:{{ .Major }}.{{ .Minor }}.{{ .Patch }}-arm64v8" - - "docker.io/chhaley/omada_exporter:{{ .Major }}.{{ .Minor }}-arm64v8" - - "docker.io/chhaley/omada_exporter:{{ .Major }}-arm64v8" - - - "ghcr.io/charlie-haley/omada_exporter:latest-arm64v8" - - "ghcr.io/charlie-haley/omada_exporter:{{ .Version }}-arm64v8" - - "ghcr.io/charlie-haley/omada_exporter:{{ .Major }}.{{ .Minor }}.{{ .Patch }}-arm64v8" - - "ghcr.io/charlie-haley/omada_exporter:{{ .Major }}.{{ .Minor }}-arm64v8" - - "ghcr.io/charlie-haley/omada_exporter:{{ .Major }}-arm64v8" + - "ghcr.io/michelheusschen/omada_exporter:latest-arm64v8" + - "ghcr.io/michelheusschen/omada_exporter:{{ .Version }}-arm64v8" + - "ghcr.io/michelheusschen/omada_exporter:{{ .Major }}.{{ .Minor }}.{{ .Patch }}-arm64v8" + - "ghcr.io/michelheusschen/omada_exporter:{{ .Major }}.{{ .Minor }}-arm64v8" + - "ghcr.io/michelheusschen/omada_exporter:{{ .Major }}-arm64v8" use: buildx dockerfile: Dockerfile goarch: arm64 @@ -74,57 +62,31 @@ dockers: - "--platform=linux/arm64/v8" docker_manifests: -## Docker Hub - - name_template: docker.io/chhaley/omada_exporter:latest - image_templates: - - docker.io/chhaley/omada_exporter:latest-amd64 - - docker.io/chhaley/omada_exporter:latest-arm64v8 - - - name_template: docker.io/chhaley/omada_exporter:{{ .Version }} - image_templates: - - docker.io/chhaley/omada_exporter:{{ .Version }}-amd64 - - docker.io/chhaley/omada_exporter:{{ .Version }}-arm64v8 - - - name_template: docker.io/chhaley/omada_exporter:{{ .Major }}.{{ .Minor }}.{{ .Patch }} - image_templates: - - docker.io/chhaley/omada_exporter:{{ .Major }}.{{ .Minor }}.{{ .Patch }}-amd64 - - docker.io/chhaley/omada_exporter:{{ .Major }}.{{ .Minor }}.{{ .Patch }}-arm64v8 - - - name_template: docker.io/chhaley/omada_exporter:{{ .Major }}.{{ .Minor }} - image_templates: - - docker.io/chhaley/omada_exporter:{{ .Major }}.{{ .Minor }}-amd64 - - docker.io/chhaley/omada_exporter:{{ .Major }}.{{ .Minor }}-arm64v8 - - - name_template: docker.io/chhaley/omada_exporter:{{ .Major }} - image_templates: - - docker.io/chhaley/omada_exporter:{{ .Major }}-amd64 - - docker.io/chhaley/omada_exporter:{{ .Major }}-arm64v8 - ## GHCR - - name_template: ghcr.io/charlie-haley/omada_exporter:latest + - name_template: ghcr.io/michelheusschen/omada_exporter:latest image_templates: - - ghcr.io/charlie-haley/omada_exporter:latest-amd64 - - ghcr.io/charlie-haley/omada_exporter:latest-arm64v8 + - ghcr.io/michelheusschen/omada_exporter:latest-amd64 + - ghcr.io/michelheusschen/omada_exporter:latest-arm64v8 - - name_template: ghcr.io/charlie-haley/omada_exporter:{{ .Version }} + - name_template: ghcr.io/michelheusschen/omada_exporter:{{ .Version }} image_templates: - - ghcr.io/charlie-haley/omada_exporter:{{ .Version }}-amd64 - - ghcr.io/charlie-haley/omada_exporter:{{ .Version }}-arm64v8 + - ghcr.io/michelheusschen/omada_exporter:{{ .Version }}-amd64 + - ghcr.io/michelheusschen/omada_exporter:{{ .Version }}-arm64v8 - - name_template: ghcr.io/charlie-haley/omada_exporter:{{ .Major }}.{{ .Minor }}.{{ .Patch }} + - name_template: ghcr.io/michelheusschen/omada_exporter:{{ .Major }}.{{ .Minor }}.{{ .Patch }} image_templates: - - ghcr.io/charlie-haley/omada_exporter:{{ .Major }}.{{ .Minor }}.{{ .Patch }}-amd64 - - ghcr.io/charlie-haley/omada_exporter:{{ .Major }}.{{ .Minor }}.{{ .Patch }}-arm64v8 + - ghcr.io/michelheusschen/omada_exporter:{{ .Major }}.{{ .Minor }}.{{ .Patch }}-amd64 + - ghcr.io/michelheusschen/omada_exporter:{{ .Major }}.{{ .Minor }}.{{ .Patch }}-arm64v8 - - name_template: ghcr.io/charlie-haley/omada_exporter:{{ .Major }}.{{ .Minor }} + - name_template: ghcr.io/michelheusschen/omada_exporter:{{ .Major }}.{{ .Minor }} image_templates: - - ghcr.io/charlie-haley/omada_exporter:{{ .Major }}.{{ .Minor }}-amd64 - - ghcr.io/charlie-haley/omada_exporter:{{ .Major }}.{{ .Minor }}-arm64v8 + - ghcr.io/michelheusschen/omada_exporter:{{ .Major }}.{{ .Minor }}-amd64 + - ghcr.io/michelheusschen/omada_exporter:{{ .Major }}.{{ .Minor }}-arm64v8 - - name_template: ghcr.io/charlie-haley/omada_exporter:{{ .Major }} + - name_template: ghcr.io/michelheusschen/omada_exporter:{{ .Major }} image_templates: - - ghcr.io/charlie-haley/omada_exporter:{{ .Major }}-amd64 - - ghcr.io/charlie-haley/omada_exporter:{{ .Major }}-arm64v8 + - ghcr.io/michelheusschen/omada_exporter:{{ .Major }}-amd64 + - ghcr.io/michelheusschen/omada_exporter:{{ .Major }}-arm64v8 release: prerelease: auto diff --git a/cmd/exporter.go b/cmd/exporter.go index a9dbf37..be654a4 100644 --- a/cmd/exporter.go +++ b/cmd/exporter.go @@ -6,9 +6,9 @@ import ( "os" "strings" - "github.com/charlie-haley/omada_exporter/pkg/api" - "github.com/charlie-haley/omada_exporter/pkg/collector" - "github.com/charlie-haley/omada_exporter/pkg/config" + "github.com/michelheusschen/omada_exporter/pkg/api" + "github.com/michelheusschen/omada_exporter/pkg/collector" + "github.com/michelheusschen/omada_exporter/pkg/config" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" zerolog "github.com/rs/zerolog" diff --git a/go.mod b/go.mod index 2822a85..49c4cf0 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/charlie-haley/omada_exporter +module github.com/michelheusschen/omada_exporter go 1.19 diff --git a/main.go b/main.go index 375349e..404fb38 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,7 @@ package main import ( - "github.com/charlie-haley/omada_exporter/cmd" + "github.com/michelheusschen/omada_exporter/cmd" ) func main() { diff --git a/pkg/api/api.go b/pkg/api/api.go index 329fa5a..6e42086 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -7,7 +7,8 @@ import ( "net/http/cookiejar" "time" - "github.com/charlie-haley/omada_exporter/pkg/config" + "github.com/michelheusschen/omada_exporter/pkg/config" + log "github.com/rs/zerolog/log" ) type Client struct { @@ -18,6 +19,24 @@ type Client struct { SiteId string } +func (c *Client) makeLoggedInRequest(req *http.Request) (*http.Response, error) { + loggedIn, err := c.IsLoggedIn() + if err != nil { + return nil, err + } + if !loggedIn { + log.Info().Msg(fmt.Sprintf("not logged in, logging in with user: %s", c.Config.Username)) + err := c.Login() + if err != nil || c.token == "" { + log.Error().Err(err).Msg("failed to login") + return nil, err + } + } + + setHeaders(req, c.token) + return c.httpClient.Do(req) +} + func setuphttpClient(insecure bool, timeout int) (*http.Client, error) { jar, err := cookiejar.New(nil) if err != nil { diff --git a/pkg/api/client.go b/pkg/api/client.go index e08aba4..606a4d7 100644 --- a/pkg/api/client.go +++ b/pkg/api/client.go @@ -35,19 +35,6 @@ func (c *Client) GetClients() ([]NetworkClient, error) { // gets clients by filters in omada - currentl supports SwitchMac func (c *Client) getClientsWithFilters(filtersEnabled bool, mac string) ([]NetworkClient, error) { - loggedIn, err := c.IsLoggedIn() - if err != nil { - return nil, err - } - if !loggedIn { - log.Info().Msg(fmt.Sprintf("not logged in, logging in with user: %s", c.Config.Username)) - err := c.Login() - if err != nil || c.token == "" { - log.Error().Err(err).Msg("Failed to login") - return nil, err - } - } - url := fmt.Sprintf("%s/%s/api/v2/sites/%s/clients", c.Config.Host, c.omadaCID, c.SiteId) req, err := http.NewRequest("GET", url, nil) if err != nil { @@ -64,8 +51,7 @@ func (c *Client) getClientsWithFilters(filtersEnabled bool, mac string) ([]Netwo req.URL.RawQuery = q.Encode() - setHeaders(req, c.token) - resp, err := c.httpClient.Do(req) + resp, err := c.makeLoggedInRequest(req) if err != nil { return nil, err } @@ -104,9 +90,9 @@ type NetworkClient struct { SignalLevel float64 `json:"signalLevel"` WifiMode float64 `json:"wifiMode"` Ssid string `json:"ssid"` - Rssi float64 `json:"rssi"` - TrafficDown float64 `json:"trafficDown"` - TrafficUp float64 `json:"trafficUp"` - RxRate float64 `json:"rxRate"` - TxRate float64 `json:"txRate"` + Rssi float64 `json:"rssi"` + TrafficDown float64 `json:"trafficDown"` + TrafficUp float64 `json:"trafficUp"` + RxRate float64 `json:"rxRate"` + TxRate float64 `json:"txRate"` } diff --git a/pkg/api/controller.go b/pkg/api/controller.go index f89d5d9..3b73f6e 100644 --- a/pkg/api/controller.go +++ b/pkg/api/controller.go @@ -10,27 +10,13 @@ import ( ) func (c *Client) GetController() (*Controller, error) { - loggedIn, err := c.IsLoggedIn() - if err != nil { - return nil, err - } - if !loggedIn { - log.Info().Msg(fmt.Sprintf("not logged in, logging in with user: %s", c.Config.Username)) - err := c.Login() - if err != nil || c.token == "" { - log.Error().Err(err).Msg("failed to login") - return nil, err - } - } - url := fmt.Sprintf("%s/%s/api/v2/maintenance/controllerStatus?", c.Config.Host, c.omadaCID) req, err := http.NewRequest("GET", url, nil) if err != nil { return nil, err } - setHeaders(req, c.token) - resp, err := c.httpClient.Do(req) + resp, err := c.makeLoggedInRequest(req) if err != nil { return nil, err } diff --git a/pkg/api/device.go b/pkg/api/device.go index 968de96..e86e278 100644 --- a/pkg/api/device.go +++ b/pkg/api/device.go @@ -10,27 +10,13 @@ import ( ) func (c *Client) GetDevices() ([]Device, error) { - loggedIn, err := c.IsLoggedIn() - if err != nil { - return nil, err - } - if !loggedIn { - log.Info().Msg(fmt.Sprintf("not logged in, logging in with user: %s", c.Config.Username)) - err := c.Login() - if err != nil || c.token == "" { - log.Error().Err(err).Msg("failed to login") - return nil, err - } - } - url := fmt.Sprintf("%s/%s/api/v2/sites/%s/devices", c.Config.Host, c.omadaCID, c.SiteId) req, err := http.NewRequest("GET", url, nil) if err != nil { return nil, err } - setHeaders(req, c.token) - resp, err := c.httpClient.Do(req) + resp, err := c.makeLoggedInRequest(req) if err != nil { return nil, err } @@ -49,7 +35,7 @@ func (c *Client) GetDevices() ([]Device, error) { if d.Type == "switch" { switchPorts, err := c.GetPorts(d.Mac) if err != nil { - return nil, fmt.Errorf("failed to get ports: %s", err) + return nil, fmt.Errorf("failed to get ports: %w", err) } devicedata.Result[i].Ports = switchPorts } @@ -72,6 +58,8 @@ type Device struct { MemUtil float64 `json:"memUtil"` Uptime float64 `json:"uptimeLong"` NeedUpgrade bool `json:"needUpgrade"` + Download float64 `json:"download"` + Upload float64 `json:"upload"` TxRate float64 `json:"txRate"` RxRate float64 `json:"rxRate"` PoeRemain float64 `json:"poeRemain"` diff --git a/pkg/api/device_test.go b/pkg/api/device_test.go new file mode 100644 index 0000000..f74d923 --- /dev/null +++ b/pkg/api/device_test.go @@ -0,0 +1,46 @@ +package api + +import ( + "net/http" + "net/http/httptest" + "testing" + + "github.com/michelheusschen/omada_exporter/pkg/config" +) + +func createMockServer() (*http.Client, *httptest.Server) { + mockServer := httptest.NewServer(nil) + mockClient := &http.Client{Transport: mockServer.Client().Transport} + + return mockClient, mockServer +} + +func TestGetDevicesEmpty(t *testing.T) { + mockClient, mockServer := createMockServer() + defer mockServer.Close() + + client := &Client{ + Config: &config.Config{Host: mockServer.URL}, + omadaCID: "example", + SiteId: "123", + httpClient: mockClient, + } + + mockServer.Config.Handler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method == http.MethodGet && r.URL.Path == "/example/api/v2/loginStatus" { + _, _ = w.Write([]byte(`{"errorCode":0,"msg":"Success.","result":{"login":true}}`)) + return + } + + // Verify the request + if r.Method != "GET" || r.URL.Path != "/example/api/v2/sites/123/devices" { + t.Errorf("Unexpected request: %s %s", r.Method, r.URL.Path) + } + + _, _ = w.Write([]byte(`{"errorCode":0,"msg":"Success.","result":[]}`)) + }) + + if _, err := client.GetDevices(); err != nil { + t.Fatalf("GetDevices returned an error: %v", err) + } +} diff --git a/pkg/api/port.go b/pkg/api/port.go index 121c916..7a3bd2d 100644 --- a/pkg/api/port.go +++ b/pkg/api/port.go @@ -10,27 +10,13 @@ import ( ) func (c *Client) GetPorts(switchMac string) ([]Port, error) { - loggedIn, err := c.IsLoggedIn() - if err != nil { - return nil, err - } - if !loggedIn { - log.Info().Msg(fmt.Sprintf("not logged in, logging in with user: %s", c.Config.Username)) - err := c.Login() - if err != nil || c.token == "" { - log.Error().Err(err).Msg("failed to login") - return nil, err - } - } - url := fmt.Sprintf("%s/%s/api/v2/sites/%s/switches/%s/ports", c.Config.Host, c.omadaCID, c.SiteId, switchMac) req, err := http.NewRequest("GET", url, nil) if err != nil { return nil, err } - setHeaders(req, c.token) - resp, err := c.httpClient.Do(req) + resp, err := c.makeLoggedInRequest(req) if err != nil { return nil, err } diff --git a/pkg/api/user.go b/pkg/api/user.go index b251778..6d4e447 100644 --- a/pkg/api/user.go +++ b/pkg/api/user.go @@ -5,33 +5,18 @@ import ( "fmt" "io" "net/http" - - log "github.com/rs/zerolog/log" ) // there's no nice way of fetching the site ID from the `Viewer` role // calling the user endpoint seems to return a list of sites for the user func (c *Client) getSiteId(name string) (*string, error) { - loggedIn, err := c.IsLoggedIn() - if err != nil { - return nil, err - } - if !loggedIn { - log.Info().Msg(fmt.Sprintf("not logged in, logging in with user: %s", c.Config.Username)) - err := c.Login() - if err != nil || c.token == "" { - return nil, fmt.Errorf("failed to login: %s", err) - } - } - url := fmt.Sprintf("%s/%s/api/v2/users/current", c.Config.Host, c.omadaCID) req, err := http.NewRequest("GET", url, nil) if err != nil { return nil, err } - setHeaders(req, c.token) - resp, err := c.httpClient.Do(req) + resp, err := c.makeLoggedInRequest(req) if err != nil { return nil, err } diff --git a/pkg/collector/client.go b/pkg/collector/client.go index d2fee39..18dcb58 100644 --- a/pkg/collector/client.go +++ b/pkg/collector/client.go @@ -3,7 +3,7 @@ package collector import ( "fmt" - "github.com/charlie-haley/omada_exporter/pkg/api" + "github.com/michelheusschen/omada_exporter/pkg/api" "github.com/prometheus/client_golang/prometheus" log "github.com/rs/zerolog/log" ) @@ -11,11 +11,11 @@ import ( type clientCollector struct { omadaClientDownloadActivityBytes *prometheus.Desc omadaClientSignalDbm *prometheus.Desc - omadaClientRssiDbm *prometheus.Desc - omadaClientTrafficDown *prometheus.Desc - omadaClientTrafficUp *prometheus.Desc - omadaClientTxRate *prometheus.Desc - omadaClientRxRate *prometheus.Desc + omadaClientRssiDbm *prometheus.Desc + omadaClientTrafficDown *prometheus.Desc + omadaClientTrafficUp *prometheus.Desc + omadaClientTxRate *prometheus.Desc + omadaClientRxRate *prometheus.Desc omadaClientConnectedTotal *prometheus.Desc client *api.Client } @@ -23,16 +23,16 @@ type clientCollector struct { func (c *clientCollector) Describe(ch chan<- *prometheus.Desc) { ch <- c.omadaClientDownloadActivityBytes ch <- c.omadaClientSignalDbm - ch <- c.omadaClientRssiDbm - ch <- c.omadaClientTrafficDown - ch <- c.omadaClientTrafficUp - ch <- c.omadaClientTxRate - ch <- c.omadaClientRxRate + ch <- c.omadaClientRssiDbm + ch <- c.omadaClientTrafficDown + ch <- c.omadaClientTrafficUp + ch <- c.omadaClientTxRate + ch <- c.omadaClientRxRate ch <- c.omadaClientConnectedTotal } func FormatWifiMode(wifiMode int) string { - mapping := map[int]string { + mapping := map[int]string{ 0: "802.11a", 1: "802.11b", 2: "802.11g", @@ -70,7 +70,7 @@ func (c *clientCollector) Collect(ch chan<- prometheus.Metric) { CollectWirelessMetrics := func(desc *prometheus.Desc, valueType prometheus.ValueType, value float64) { ch <- prometheus.MustNewConstMetric(desc, valueType, value, - item.HostName, item.Vendor, item.Ip, item.Mac, site, client.SiteId, "wireless", wifiMode, item.ApName, item.Ssid) + item.HostName, item.Vendor, item.Ip, item.Mac, site, client.SiteId, "wireless", wifiMode, item.ApName, item.Ssid) } CollectWirelessMetrics(c.omadaClientSignalDbm, prometheus.GaugeValue, -item.SignalLevel) CollectWirelessMetrics(c.omadaClientRssiDbm, prometheus.GaugeValue, item.Rssi) diff --git a/pkg/collector/controller.go b/pkg/collector/controller.go index 4274edd..2598d48 100644 --- a/pkg/collector/controller.go +++ b/pkg/collector/controller.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/charlie-haley/omada_exporter/pkg/api" + "github.com/michelheusschen/omada_exporter/pkg/api" "github.com/prometheus/client_golang/prometheus" log "github.com/rs/zerolog/log" ) diff --git a/pkg/collector/device.go b/pkg/collector/device.go index fbc000c..2db0b1e 100644 --- a/pkg/collector/device.go +++ b/pkg/collector/device.go @@ -1,7 +1,7 @@ package collector import ( - "github.com/charlie-haley/omada_exporter/pkg/api" + "github.com/michelheusschen/omada_exporter/pkg/api" "github.com/prometheus/client_golang/prometheus" log "github.com/rs/zerolog/log" ) @@ -13,6 +13,8 @@ type deviceCollector struct { omadaDeviceNeedUpgrade *prometheus.Desc omadaDeviceTxRate *prometheus.Desc omadaDeviceRxRate *prometheus.Desc + omadaDeviceDownload *prometheus.Desc + omadaDeviceUpload *prometheus.Desc omadaDevicePoeRemainWatts *prometheus.Desc client *api.Client } @@ -50,9 +52,11 @@ func (c *deviceCollector) Collect(ch chan<- prometheus.Metric) { ch <- prometheus.MustNewConstMetric(c.omadaDeviceCpuPercentage, prometheus.GaugeValue, item.CpuUtil, labels...) ch <- prometheus.MustNewConstMetric(c.omadaDeviceMemPercentage, prometheus.GaugeValue, item.MemUtil, labels...) ch <- prometheus.MustNewConstMetric(c.omadaDeviceNeedUpgrade, prometheus.GaugeValue, needUpgrade, labels...) + ch <- prometheus.MustNewConstMetric(c.omadaDeviceDownload, prometheus.CounterValue, item.Download, labels...) + ch <- prometheus.MustNewConstMetric(c.omadaDeviceUpload, prometheus.CounterValue, item.Upload, labels...) if item.Type == "ap" { - ch <- prometheus.MustNewConstMetric(c.omadaDeviceTxRate, prometheus.CounterValue, item.TxRate, labels...) - ch <- prometheus.MustNewConstMetric(c.omadaDeviceRxRate, prometheus.CounterValue, item.RxRate, labels...) + ch <- prometheus.MustNewConstMetric(c.omadaDeviceTxRate, prometheus.GaugeValue, item.TxRate, labels...) + ch <- prometheus.MustNewConstMetric(c.omadaDeviceRxRate, prometheus.GaugeValue, item.RxRate, labels...) } if item.Type == "switch" { ch <- prometheus.MustNewConstMetric(c.omadaDevicePoeRemainWatts, prometheus.GaugeValue, item.PoeRemain, labels...) @@ -84,6 +88,16 @@ func NewDeviceCollector(c *api.Client) *deviceCollector { labels, nil, ), + omadaDeviceDownload: prometheus.NewDesc("omada_device_download", + "Accumulative download traffic in bytes.", + labels, + nil, + ), + omadaDeviceUpload: prometheus.NewDesc("omada_device_upload", + "Accumulative upload traffic in bytes.", + labels, + nil, + ), omadaDeviceTxRate: prometheus.NewDesc("omada_device_tx_rate", "The tx rate of the device.", labels, diff --git a/pkg/collector/port.go b/pkg/collector/port.go index 7d731f7..32e7376 100644 --- a/pkg/collector/port.go +++ b/pkg/collector/port.go @@ -3,7 +3,7 @@ package collector import ( "fmt" - "github.com/charlie-haley/omada_exporter/pkg/api" + "github.com/michelheusschen/omada_exporter/pkg/api" "github.com/prometheus/client_golang/prometheus" log "github.com/rs/zerolog/log" )