Merge pull request #48 from unifi-poller/dn2_rogue_aps
Add methods to get Rogue APs.
This commit is contained in:
commit
e8502acf12
|
|
@ -14,6 +14,8 @@ var ErrCannotUnmarshalFlexInt = fmt.Errorf("cannot unmarshal to FlexInt")
|
||||||
// This is a list of unifi API paths.
|
// This is a list of unifi API paths.
|
||||||
// The %s in each string must be replaced with a Site.Name.
|
// The %s in each string must be replaced with a Site.Name.
|
||||||
const (
|
const (
|
||||||
|
// APIRogueAP shows your neighbors' wifis.
|
||||||
|
APIRogueAP string = "/api/s/%s/stat/rogueap"
|
||||||
// APIStatusPath shows Controller version.
|
// APIStatusPath shows Controller version.
|
||||||
APIStatusPath string = "/status"
|
APIStatusPath string = "/status"
|
||||||
// APIEventPath contains UniFi Event data.
|
// APIEventPath contains UniFi Event data.
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ package unifi
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -549,6 +550,82 @@ type VapTable []struct {
|
||||||
WlanconfID string `json:"wlanconf_id"`
|
WlanconfID string `json:"wlanconf_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RogueAP are your neighbors access points.
|
||||||
|
type RogueAP struct {
|
||||||
|
SourceName string `json:"-"`
|
||||||
|
SiteName string `json:"-"`
|
||||||
|
ID string `json:"_id"`
|
||||||
|
ApMac string `json:"ap_mac"`
|
||||||
|
Bssid string `json:"bssid"`
|
||||||
|
SiteID string `json:"site_id"`
|
||||||
|
Age FlexInt `json:"age"`
|
||||||
|
Band string `json:"band"`
|
||||||
|
Bw FlexInt `json:"bw"`
|
||||||
|
CenterFreq FlexInt `json:"center_freq"`
|
||||||
|
Channel int `json:"channel"`
|
||||||
|
Essid string `json:"essid"`
|
||||||
|
Freq FlexInt `json:"freq"`
|
||||||
|
IsAdhoc FlexBool `json:"is_adhoc"`
|
||||||
|
IsRogue FlexBool `json:"is_rogue"`
|
||||||
|
IsUbnt FlexBool `json:"is_ubnt"`
|
||||||
|
LastSeen FlexInt `json:"last_seen"`
|
||||||
|
Noise FlexInt `json:"noise"`
|
||||||
|
Radio string `json:"radio"`
|
||||||
|
RadioName string `json:"radio_name"`
|
||||||
|
ReportTime FlexInt `json:"report_time"`
|
||||||
|
Rssi FlexInt `json:"rssi"`
|
||||||
|
RssiAge FlexInt `json:"rssi_age"`
|
||||||
|
Security string `json:"security"`
|
||||||
|
Signal FlexInt `json:"signal"`
|
||||||
|
Oui string `json:"oui"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRogueAPs returns RogueAPs for a list of Sites.
|
||||||
|
// Use GetRogueAPsSite if you want more control.
|
||||||
|
func (u *Unifi) GetRogueAPs(sites []*Site) ([]*RogueAP, error) {
|
||||||
|
data := []*RogueAP{}
|
||||||
|
|
||||||
|
for _, site := range sites {
|
||||||
|
response, err := u.GetRogueAPsSite(site)
|
||||||
|
if err != nil {
|
||||||
|
return data, err
|
||||||
|
}
|
||||||
|
|
||||||
|
data = append(data, response...)
|
||||||
|
}
|
||||||
|
|
||||||
|
return data, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRogueAPsSite returns RogueAPs for a single Site.
|
||||||
|
func (u *Unifi) GetRogueAPsSite(site *Site) ([]*RogueAP, error) {
|
||||||
|
if site == nil || site.Name == "" {
|
||||||
|
return nil, ErrNoSiteProvided
|
||||||
|
}
|
||||||
|
|
||||||
|
u.DebugLog("Polling Controller for RogueAPs, site %s (%s)", site.Name, site.Desc)
|
||||||
|
|
||||||
|
var (
|
||||||
|
path = fmt.Sprintf(APIRogueAP, site.Name)
|
||||||
|
rogueaps struct {
|
||||||
|
Data []*RogueAP `json:"data"`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
if err := u.GetData(path, &rogueaps, ""); err != nil {
|
||||||
|
return rogueaps.Data, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := range rogueaps.Data {
|
||||||
|
// Add special SourceName value.
|
||||||
|
rogueaps.Data[i].SourceName = u.URL
|
||||||
|
// Add the special "Site Name" to each event. This becomes a Grafana filter somewhere.
|
||||||
|
rogueaps.Data[i].SiteName = site.Desc + " (" + site.Name + ")"
|
||||||
|
}
|
||||||
|
|
||||||
|
return rogueaps.Data, nil
|
||||||
|
}
|
||||||
|
|
||||||
// UnmarshalJSON unmarshalls 5.10 or 5.11 formatted Access Point Stat data.
|
// UnmarshalJSON unmarshalls 5.10 or 5.11 formatted Access Point Stat data.
|
||||||
func (v *UAPStat) UnmarshalJSON(data []byte) error {
|
func (v *UAPStat) UnmarshalJSON(data []byte) error {
|
||||||
var n struct {
|
var n struct {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue