Bugfixing UISP 503 Errors.
Finetuning API Calls
This commit is contained in:
parent
f9fa5fe26a
commit
ff5cf755aa
@ -5,14 +5,17 @@
|
||||
"APItoken": "UNMS API TOKEN",
|
||||
"devicesURL": "https://git.freifunk-rhein-sieg.net/Freifunk-Troisdorf/ubnt-freifunk-map-api/raw/branch/master/example.devices.json"
|
||||
},
|
||||
"unifi": {
|
||||
"unifi": [
|
||||
{
|
||||
"name": "Unifi Freifunk Troisdorf",
|
||||
"enabled": false,
|
||||
"displayusers": true,
|
||||
"APIUrl": "https://unifi.freifunk-troisdorf.de",
|
||||
"user": "APIuser",
|
||||
"password": "PASSWORD",
|
||||
"ucDevicesURL": "https://git.freifunk-rhein-sieg.net/Freifunk-Troisdorf/ubnt-freifunk-map-api/raw/branch/master/example.ucDevices.json"
|
||||
},
|
||||
}
|
||||
],
|
||||
"meshviewer": {
|
||||
"enabled": false,
|
||||
"files": [
|
||||
|
20
main.go
20
main.go
@ -9,6 +9,7 @@ import (
|
||||
"net/http"
|
||||
"net/http/cookiejar"
|
||||
"os"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
_ "git.nils.zone/nils/prettify"
|
||||
@ -16,14 +17,20 @@ import (
|
||||
|
||||
const (
|
||||
iso8601 = "2006-01-02T15:04:05-0700"
|
||||
fetchInterval = 1 * time.Minute
|
||||
)
|
||||
|
||||
// flags
|
||||
var (
|
||||
lastFetchTime time.Time
|
||||
cacheMutex sync.Mutex
|
||||
cacheNodes []node
|
||||
cacheLinks []link
|
||||
)
|
||||
var configPath = flag.String("configPath", "config.json", "Path to config.json")
|
||||
var version = "development"
|
||||
var delay time.Duration = 60 * time.Second
|
||||
var conf = loadconfig(*configPath)
|
||||
var ucDev = getDevices(conf.Unifi.UCDevicesURL)
|
||||
|
||||
func main() {
|
||||
log.Printf("starting version %s...\n", version)
|
||||
@ -71,15 +78,20 @@ func processAPIs() error {
|
||||
nodes = append(nodes, uispRouters...)
|
||||
links = append(links, uispLinks...)
|
||||
}
|
||||
if conf.Unifi.Enabled {
|
||||
log.Println("Processing Unifi")
|
||||
if len(conf.Unifi) > 0 {
|
||||
log.Println("Anazahl der Unifi Server:", len(conf.Unifi))
|
||||
for i := range conf.Unifi {
|
||||
if conf.Unifi[i].Enabled {
|
||||
log.Println("Processing Unifi-Server: ", conf.Unifi[i].Name)
|
||||
//Process Unifi Nodes
|
||||
unifiNodes, _, err := processUnifiAPI()
|
||||
unifiNodes, _, err := processUnifiAPI(i)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
nodes = append(nodes, unifiNodes...)
|
||||
}
|
||||
}
|
||||
}
|
||||
if conf.Meshviewer.Enabled {
|
||||
log.Println("Processing Meshviewer")
|
||||
mvNodes, mvLinks := getMeshviewer()
|
||||
|
@ -3,6 +3,7 @@ package main
|
||||
import (
|
||||
"encoding/json"
|
||||
"log"
|
||||
"time"
|
||||
)
|
||||
|
||||
func getMeshviewerJSON(url string) (mvDevices, error) {
|
||||
@ -129,17 +130,31 @@ func addmvDevices(d mvDevices) ([]node, []link) {
|
||||
}
|
||||
|
||||
func getMeshviewer() ([]node, []link) {
|
||||
cacheMutex.Lock()
|
||||
defer cacheMutex.Unlock()
|
||||
|
||||
// Überprüfen, ob die Daten kürzlich aktualisiert wurden
|
||||
if time.Since(lastFetchTime) < fetchInterval {
|
||||
return cacheNodes, cacheLinks
|
||||
}
|
||||
|
||||
var nodes []node
|
||||
var links []link
|
||||
|
||||
for i := range conf.Meshviewer.Files {
|
||||
m, err := getMeshviewerJSON(conf.Meshviewer.Files[i].URL)
|
||||
if err != nil {
|
||||
return nodes, links
|
||||
return cacheNodes, cacheLinks
|
||||
}
|
||||
mvNodes, mvLinks := addmvDevices(m)
|
||||
nodes = append(nodes, mvNodes...)
|
||||
links = append(links, mvLinks...)
|
||||
}
|
||||
return nodes, links
|
||||
|
||||
// Cache aktualisieren
|
||||
cacheNodes = nodes
|
||||
cacheLinks = links
|
||||
lastFetchTime = time.Now()
|
||||
|
||||
return cacheNodes, cacheLinks
|
||||
}
|
||||
|
19
types.go
19
types.go
@ -23,14 +23,7 @@ type config struct {
|
||||
DevicesURL string `json:"devicesURL"`
|
||||
RouterURL string `json:"routerURL"`
|
||||
} `json:"unms"`
|
||||
Unifi struct {
|
||||
Enabled bool `json:"enabled"`
|
||||
DisplayUsers bool `json:"displayusers"`
|
||||
APIURL string `json:"APIUrl"`
|
||||
User string `json:"user"`
|
||||
Password string `json:"password"`
|
||||
UCDevicesURL string `json:"ucDevicesURL"`
|
||||
} `json:"unifi"`
|
||||
Unifi []UnifiServer `json:"unifi"`
|
||||
Meshviewer struct {
|
||||
Enabled bool `json:"enabled"`
|
||||
Files []struct {
|
||||
@ -44,6 +37,16 @@ type config struct {
|
||||
} `json:"gateways"`
|
||||
}
|
||||
|
||||
type UnifiServer struct {
|
||||
Name string `json:"name"`
|
||||
Enabled bool `json:"enabled"`
|
||||
DisplayUsers bool `json:"displayusers"`
|
||||
APIURL string `json:"APIUrl"`
|
||||
User string `json:"user"`
|
||||
Password string `json:"password"`
|
||||
UCDevicesURL string `json:"ucDevicesURL"`
|
||||
}
|
||||
|
||||
type device struct {
|
||||
Name string `json:"name"`
|
||||
FQDN string `json:"fqdn"`
|
||||
|
15
unifi.go
15
unifi.go
@ -15,14 +15,14 @@ import (
|
||||
)
|
||||
|
||||
// Unifi Controller API processing
|
||||
func processUnifiAPI() ([]node, []link, error) {
|
||||
func processUnifiAPI(s int) ([]node, []link, error) {
|
||||
//get list of Unifi devices to display
|
||||
var nodes []node
|
||||
var links []link
|
||||
d := getDevices(conf.Unifi.UCDevicesURL)
|
||||
d := getDevices(conf.Unifi[s].UCDevicesURL)
|
||||
|
||||
//call Unifi Controller
|
||||
ucAPI := UnifiNewAPI(conf.Unifi.User, conf.Unifi.Password, conf.Unifi.APIURL)
|
||||
ucAPI := UnifiNewAPI(conf.Unifi[s].User, conf.Unifi[s].Password, conf.Unifi[s].APIURL)
|
||||
//login
|
||||
if err := ucAPI.ucLogin(); err != nil {
|
||||
return nil, nil, err
|
||||
@ -49,12 +49,14 @@ func processUnifiAPI() ([]node, []link, error) {
|
||||
currentJSONDevice = jsonDevice
|
||||
}
|
||||
}
|
||||
|
||||
if isRemoteMACpublished(jsonDevice.MAC, d.Devices) {
|
||||
//hier muss gecheckt werden ob der link valide ist
|
||||
if checkMeshviewerLink(jsonDevice.LinkedTo) {
|
||||
links = UnifiAddLink(jsonDevice, links)
|
||||
}
|
||||
}
|
||||
|
||||
isOnline := currentDevice.State == 1
|
||||
var load float64
|
||||
var mem float64
|
||||
@ -78,7 +80,7 @@ func processUnifiAPI() ([]node, []link, error) {
|
||||
|
||||
var model = lookupModels(currentDevice.Model)
|
||||
var clients int
|
||||
if conf.Unifi.DisplayUsers {
|
||||
if conf.Unifi[s].DisplayUsers {
|
||||
clients = currentDevice.Users
|
||||
}
|
||||
|
||||
@ -130,7 +132,7 @@ func processUnifiAPI() ([]node, []link, error) {
|
||||
}
|
||||
|
||||
// INFLUX STOP
|
||||
|
||||
//log.Println(currentDevice.Mac)
|
||||
nodes = append(nodes, node{
|
||||
Firstseen: "0",
|
||||
Lastseen: time.Unix(int64(currentDevice.LastSeen), 0).Format(iso8601),
|
||||
@ -268,10 +270,13 @@ func UnifiAddLink(dev device, links []link) []link {
|
||||
}
|
||||
|
||||
func findNodeID(NodeID string) bool {
|
||||
for s := range conf.Unifi {
|
||||
ucDev := getDevices(conf.Unifi[s].UCDevicesURL)
|
||||
for i := range ucDev.Devices {
|
||||
if ucDev.Devices[i].GatewayNexthop == NodeID {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
8
unms.go
8
unms.go
@ -33,6 +33,7 @@ func processUISPRiFu() ([]node, []link, error) {
|
||||
}
|
||||
|
||||
for i := range d.Devices {
|
||||
time.Sleep(time.Second)
|
||||
var dev unifiAPIResponse
|
||||
var currentDevice device
|
||||
for j := range u {
|
||||
@ -104,6 +105,7 @@ func processUISPRiFu() ([]node, []link, error) {
|
||||
}
|
||||
|
||||
func processUISPRouter() ([]node, error) {
|
||||
time.Sleep(time.Second)
|
||||
// Variables for runtime
|
||||
var nodes []node
|
||||
d := getDevices(conf.UISP.RouterURL)
|
||||
@ -234,11 +236,12 @@ func processUISPRouter() ([]node, error) {
|
||||
}
|
||||
|
||||
func UnmsCallAPI(url string, i any) error {
|
||||
time.Sleep(time.Second)
|
||||
request, err := http.NewRequest(http.MethodGet, conf.UISP.UnmsAPIURL+url, nil)
|
||||
if err != nil {
|
||||
return errors.New(fmt.Sprint("can't set request", conf.UISP.UnmsAPIURL+url))
|
||||
}
|
||||
log.Println(conf.UISP.UnmsAPIURL + url)
|
||||
//log.Println(conf.UISP.UnmsAPIURL + url)
|
||||
request.Header.Set("x-auth-token", conf.UISP.APItoken)
|
||||
client := &http.Client{}
|
||||
response, err := client.Do(request)
|
||||
@ -246,7 +249,8 @@ func UnmsCallAPI(url string, i any) error {
|
||||
return fmt.Errorf("can't get request %s with x-auth-token %s", conf.UISP.UnmsAPIURL+url, conf.UISP.APItoken)
|
||||
}
|
||||
if response.StatusCode != 200 {
|
||||
log.Fatalln("Can't call UNMS API, check token and URL. HTTP Status: ", response.StatusCode)
|
||||
log.Println("Can't call UNMS API, check token and URL. Skipping device. HTTP Status: ", response.StatusCode)
|
||||
return nil
|
||||
}
|
||||
data, err := ioutil.ReadAll(response.Body)
|
||||
defer response.Body.Close()
|
||||
|
Loading…
Reference in New Issue
Block a user