Changed UISP API for Statistics
This commit is contained in:
parent
dc1bc7f135
commit
5ba7f23776
15
types.go
15
types.go
@ -330,21 +330,26 @@ type XY struct {
|
|||||||
Y int `json:"y"`
|
Y int `json:"y"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type AvgMax struct {
|
||||||
|
AVG []XY `json:"avg"`
|
||||||
|
MAX []XY `json:"max"`
|
||||||
|
}
|
||||||
|
|
||||||
type UNMSstatistics struct {
|
type UNMSstatistics struct {
|
||||||
Period int `json:"period"`
|
Period int `json:"period"`
|
||||||
Interval struct {
|
Interval struct {
|
||||||
Start int `json:"start"`
|
Start int `json:"start"`
|
||||||
End int `json:"end"`
|
End int `json:"end"`
|
||||||
} `json:"interval"`
|
} `json:"interval"`
|
||||||
CPU []XY `json:"cpu"`
|
CPU AvgMax `json:"cpu"`
|
||||||
RAM []XY `json:"ram"`
|
RAM AvgMax `json:"ram"`
|
||||||
Errors []XY `json:"errors"`
|
Errors AvgMax `json:"errors"`
|
||||||
Interfaces []struct {
|
Interfaces []struct {
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
Priority int `json:"priority"`
|
Priority int `json:"priority"`
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Receive []XY `json:"receive"`
|
Receive AvgMax `json:"receive"`
|
||||||
Transmit []XY `json:"transmit"`
|
Transmit AvgMax `json:"transmit"`
|
||||||
} `json:"interfaces"`
|
} `json:"interfaces"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
81
unifi.go
81
unifi.go
@ -10,6 +10,8 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
client "github.com/influxdata/influxdb1-client/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Unifi Controller API processing
|
// Unifi Controller API processing
|
||||||
@ -53,23 +55,80 @@ func processUcAPIs() ([]node, []link, error) {
|
|||||||
links = UnifiAddLink(jsonDevice, links)
|
links = UnifiAddLink(jsonDevice, links)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
load, err := strconv.ParseFloat(currentDevice.Sysstats.CPU, 64)
|
isOnline := currentDevice.State == 1
|
||||||
if err != nil {
|
var load float64
|
||||||
log.Println("Error psrsing CPU load from ", currentDevice.Name)
|
var mem float64
|
||||||
log.Println(err)
|
var cpu float64
|
||||||
load = 0
|
if isOnline {
|
||||||
}
|
load, err = strconv.ParseFloat(currentDevice.Sysstats.CPU, 64)
|
||||||
mem, err := strconv.ParseFloat(currentDevice.Sysstats.Memory, 64)
|
cpu = load * 100
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("Error psrsing CPU load from ", currentDevice.Name)
|
log.Println("Error psrsing CPU of device ", currentDevice.Name)
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
mem = 0
|
load = 0
|
||||||
|
cpu = 0
|
||||||
|
}
|
||||||
|
mem, err = strconv.ParseFloat(currentDevice.Sysstats.Memory, 64)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Error parsing Memory of device ", currentDevice.Name)
|
||||||
|
log.Println(err)
|
||||||
|
mem = 0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var model = lookupModels(currentDevice.Model)
|
var model = lookupModels(currentDevice.Model)
|
||||||
var clients int
|
var clients int
|
||||||
if conf.Unifi.DisplayUsers {
|
if conf.Unifi.DisplayUsers {
|
||||||
clients = currentDevice.Users
|
clients = currentDevice.Users
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//// INFLUX START
|
||||||
|
// fields := map[string]interface{}{}
|
||||||
|
fields := make(map[string]any)
|
||||||
|
tags := map[string]string{
|
||||||
|
"hostname": strings.ReplaceAll(currentDevice.Name, " ", "-"),
|
||||||
|
"nodeid": strings.ReplaceAll(currentDevice.Mac, ":", ""),
|
||||||
|
}
|
||||||
|
// Generate fields for all network interfaces (not availible for Unifi Nodes)
|
||||||
|
//for eth := range details.Interfaces {
|
||||||
|
// interface_name_rx := ("rate.rx" + "_" + details.Interfaces[eth].Identification.Name)
|
||||||
|
// interface_name_tx := ("rate.tx" + "_" + details.Interfaces[eth].Identification.Name)
|
||||||
|
// fields[interface_name_rx] = details.Interfaces[eth].Statistics.Rxrate
|
||||||
|
// fields[interface_name_tx] = details.Interfaces[eth].Statistics.Txrate
|
||||||
|
//}
|
||||||
|
|
||||||
|
// set default values if we can't get statistics
|
||||||
|
fields["cpu"] = 0
|
||||||
|
fields["load"] = float64(0)
|
||||||
|
fields["ram"] = 0
|
||||||
|
|
||||||
|
if isOnline {
|
||||||
|
// Generate fields for all Statistics
|
||||||
|
//load := (float64(load) / float64(100))
|
||||||
|
fields["cpu"] = int(cpu)
|
||||||
|
fields["load"] = load
|
||||||
|
fields["ram"] = int(mem)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate field for DHCP Leases
|
||||||
|
fields["clients.total"] = clients
|
||||||
|
fields["time.up"] = currentDevice.Uptime
|
||||||
|
|
||||||
|
// Generate Dataponts
|
||||||
|
point, err := client.NewPoint(
|
||||||
|
"node",
|
||||||
|
tags,
|
||||||
|
fields,
|
||||||
|
time.Now(),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln("Error: ", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
sendInfluxBatchDataPoint(point, conf.General.FreifunkInfluxPort)
|
||||||
|
|
||||||
|
// INFLUX STOP
|
||||||
|
|
||||||
nodes = append(nodes, node{
|
nodes = append(nodes, node{
|
||||||
Firstseen: "0",
|
Firstseen: "0",
|
||||||
Lastseen: time.Unix(int64(currentDevice.LastSeen), 0).Format(iso8601),
|
Lastseen: time.Unix(int64(currentDevice.LastSeen), 0).Format(iso8601),
|
||||||
|
8
unms.go
8
unms.go
@ -141,7 +141,6 @@ func processUNMSAPIRouter() ([]node, error) {
|
|||||||
if err := UnmsCallAPI("/devices/"+dev.Identification.ID+"/statistics?interval=hour", &statistics); err != nil {
|
if err := UnmsCallAPI("/devices/"+dev.Identification.ID+"/statistics?interval=hour", &statistics); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// API CALL FOR DHCP LEASES
|
// API CALL FOR DHCP LEASES
|
||||||
log.Println("Getting DHCP Leases of ", d.Devices[i].Name, "from UNMS API")
|
log.Println("Getting DHCP Leases of ", d.Devices[i].Name, "from UNMS API")
|
||||||
var dhcpleases UNMSdhcp
|
var dhcpleases UNMSdhcp
|
||||||
@ -174,10 +173,10 @@ func processUNMSAPIRouter() ([]node, error) {
|
|||||||
|
|
||||||
if isOnline {
|
if isOnline {
|
||||||
// Generate fields for all Statistics
|
// Generate fields for all Statistics
|
||||||
load := (float64(statistics.CPU[0].Y) / float64(100))
|
load := (float64(statistics.CPU.AVG[0].Y) / float64(100))
|
||||||
fields["cpu"] = statistics.CPU[0].Y
|
fields["cpu"] = statistics.CPU.AVG[0].Y
|
||||||
fields["load"] = load
|
fields["load"] = load
|
||||||
fields["ram"] = statistics.RAM[0].Y
|
fields["ram"] = statistics.RAM.AVG[0].Y
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate field for DHCP Leases
|
// Generate field for DHCP Leases
|
||||||
@ -238,6 +237,7 @@ func UnmsCallAPI(url string, i any) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.New(fmt.Sprint("can't set request", conf.Unms.UnmsAPIURL+url))
|
return errors.New(fmt.Sprint("can't set request", conf.Unms.UnmsAPIURL+url))
|
||||||
}
|
}
|
||||||
|
log.Println(conf.Unms.UnmsAPIURL + url)
|
||||||
request.Header.Set("x-auth-token", conf.Unms.APItoken)
|
request.Header.Set("x-auth-token", conf.Unms.APItoken)
|
||||||
client := &http.Client{}
|
client := &http.Client{}
|
||||||
response, err := client.Do(request)
|
response, err := client.Do(request)
|
||||||
|
Loading…
Reference in New Issue
Block a user