Fix a couple more odd string->float types and add docs/dashboard
This commit is contained in:
parent
df7a661f7a
commit
d39a5dee39
|
|
@ -1,12 +1,104 @@
|
||||||
# Unifi
|
# Unifi
|
||||||
|
|
||||||
Collect your Unifi Controller Client data and send it to an InfluxDB instance. Grafana dashboard included.
|
Collect your Unifi Controller Data and send it to an InfluxDB instance.
|
||||||
|
Grafana dashboards included.
|
||||||

|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
[See the Wiki!](https://github.com/davidnewhall/unifi-poller/wiki/Installation)
|
[See the Wiki!](https://github.com/davidnewhall/unifi-poller/wiki/Installation)
|
||||||
|
|
||||||
|
# Backstory
|
||||||
|
|
||||||
|
Okay, so here's the deal. I found a simple piece of code on github that
|
||||||
|
sorta did what I needed; we all know that story. I wanted more data, so
|
||||||
|
I added more data collection. I believe I've completely rewritten every
|
||||||
|
piece of original code, except the copyright/license file and that's fine
|
||||||
|
by me. I probably wouldn't have made it this far if
|
||||||
|
[Garrett](https://github.com/dewski/unifi) hadn't written the original
|
||||||
|
code I started with. Many props my man.
|
||||||
|
|
||||||
|
The original code pulled only the client data. This app now pulls data
|
||||||
|
for clients, access points, security gateways and switches. I currently
|
||||||
|
own two UAP-AC-PROs, one USG-3 and one US-24-250W. If your devices differ
|
||||||
|
this app may miss some data. I'm willing to help and make it better.
|
||||||
|
Open an [Issue](https://github.com/davidnewhall/unifi-poller/issues) and
|
||||||
|
we'll figure out how to get things working for you.
|
||||||
|
|
||||||
|
# What's this data good for?
|
||||||
|
|
||||||
|
I've been trying to get my UAP data into Grafana. Sure, google search that.
|
||||||
|
You'll find [this](https://community.ubnt.com/t5/UniFi-Wireless/Grafana-dashboard-for-UniFi-APs-now-available/td-p/1833532).
|
||||||
|
And that's all you'll find. What if you don't want to deal with SNMP?
|
||||||
|
Well, here you go. I've replicated 90% of what you see on those SNMP-powered
|
||||||
|
dashboards with this Go app running on the same mac as my Unifi controller.
|
||||||
|
All without enabling SNMP nor trying to understand those OIDs. Mad props
|
||||||
|
to [waterside](https://community.ubnt.com/t5/user/viewprofilepage/user-id/303058)
|
||||||
|
for making this dashboard; it gave me a fantastic start to making my own.
|
||||||
|
|
||||||
|
# What now...
|
||||||
|
|
||||||
|
- I probably suck at InfluxDB.
|
||||||
|
|
||||||
|
I don't know what should be a tag and what should be a field. I think
|
||||||
|
I did my best, but there's certainly room for improvements in both
|
||||||
|
the data input and the Grafana graphs (output).
|
||||||
|
|
||||||
|
|
||||||
|
- The USW and USG code needs love.
|
||||||
|
|
||||||
|
Up to this point, my focus has been on UAP. I have only included dashboards
|
||||||
|
that focus on UAP. I am still working on the other two, but it may be a while
|
||||||
|
before I get around to publishing them. Help is appreciated.
|
||||||
|
|
||||||
|
|
||||||
|
- Are there other devices that need to be included?
|
||||||
|
|
||||||
|
I have: switch, router, access point. Three total, and the type structs are
|
||||||
|
likely missing data for variants of these devices. e.g. Some UAPs have more
|
||||||
|
radios, I probably didn't properly account for that. Some gateways have more
|
||||||
|
ports, some switches have 10Gb, etc. These are things I do not have data on
|
||||||
|
to write code for. If you have these devices, and want them graphed, open an
|
||||||
|
Issue and lets discuss.
|
||||||
|
|
||||||
|
|
||||||
|
- Better Installation instructions.
|
||||||
|
|
||||||
|
If you're a nerd you can probably figure it out. I'd still like some pretty
|
||||||
|
pictures and maybe even a Twitch VOD.
|
||||||
|
|
||||||
|
|
||||||
|
- Sanity Checking
|
||||||
|
|
||||||
|
Did I actually graph the right data in the right way? Some validation would
|
||||||
|
be nice.
|
||||||
|
|
||||||
|
|
||||||
|
- Radios, Frequencies, Interfaces, vAPs
|
||||||
|
|
||||||
|
My access points only seem to have two radios, one interface and vAP per radio.
|
||||||
|
I'm not sure if the graphs, as-is, provide enough insight into APs with other
|
||||||
|
configurations. Help me figure that out?
|
||||||
|
|
||||||
|
# What's it look like?
|
||||||
|
|
||||||
|
Here's a picture of the Client dashboard.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Here's a picture of the UAP dashboard. This only shows one device, but you can
|
||||||
|
select multiple to put specific stats side-by-side.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
# Woah, there's a library in here.
|
||||||
|
|
||||||
|
Sure is. If you want to write your own code around unifi data, you can import
|
||||||
|
the `unidev` library and easily poll your controller. If you have interest in
|
||||||
|
how to use the library, or need more features, open an Issue. I'm not committed
|
||||||
|
to documenting it unless it seems useful.
|
||||||
|
|
||||||
|
|
||||||
## Copyright & License
|
## Copyright & License
|
||||||
Copyright © 2016 Garrett Bjerkhoel. See [MIT-LICENSE](MIT-LICENSE) for details.
|
- Copyright © 2016 Garrett Bjerkhoel.
|
||||||
|
- Copyright © 2018 David Newhall II.
|
||||||
|
- See [MIT-LICENSE](MIT-LICENSE) for license information.
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
# Grafana Dashboards
|
||||||
|
|
||||||
|
Import these into Grafana to quickly visualize data from your devices.
|
||||||
|
|
||||||
|
They may/do use a few plugins: Clock, Discrete, Singlestat, Table
|
||||||
File diff suppressed because it is too large
Load Diff
|
Before Width: | Height: | Size: 246 KiB After Width: | Height: | Size: 246 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 141 KiB |
|
|
@ -9,6 +9,9 @@ import (
|
||||||
|
|
||||||
// Points generates a device's datapoints for InfluxDB.
|
// Points generates a device's datapoints for InfluxDB.
|
||||||
func (u UAP) Points() ([]*influx.Point, error) {
|
func (u UAP) Points() ([]*influx.Point, error) {
|
||||||
|
/* I generally suck at InfluxDB, so if I got the tags/fields wrong,
|
||||||
|
please send me a PR or open an Issue to address my faults. Thanks!
|
||||||
|
*/
|
||||||
var points []*influx.Point
|
var points []*influx.Point
|
||||||
tags := map[string]string{
|
tags := map[string]string{
|
||||||
"id": u.ID,
|
"id": u.ID,
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,12 @@
|
||||||
package unidev
|
package unidev
|
||||||
|
|
||||||
// UAP is a Unifi Access Point
|
// UAP is a Unifi Access Point.
|
||||||
type UAP struct {
|
type UAP struct {
|
||||||
|
/* This was auto generated and then slowly edited by hand
|
||||||
|
to get all the data types right and graphable.
|
||||||
|
No ones feelings will be hurt if you want to break this
|
||||||
|
up into multiple structs, and/or make it better in general.
|
||||||
|
*/
|
||||||
ID string `json:"_id"`
|
ID string `json:"_id"`
|
||||||
UUptime float64 `json:"_uptime"`
|
UUptime float64 `json:"_uptime"`
|
||||||
AdoptIP string `json:"adopt_ip,omitempty"`
|
AdoptIP string `json:"adopt_ip,omitempty"`
|
||||||
|
|
@ -257,17 +262,17 @@ type UAP struct {
|
||||||
} `json:"stat"`
|
} `json:"stat"`
|
||||||
State int `json:"state"`
|
State int `json:"state"`
|
||||||
SysStats struct {
|
SysStats struct {
|
||||||
Loadavg1 string `json:"loadavg_1"`
|
Loadavg1 float64 `json:"loadavg_1,string"`
|
||||||
Loadavg15 string `json:"loadavg_15"`
|
Loadavg15 float64 `json:"loadavg_15,string"`
|
||||||
Loadavg5 string `json:"loadavg_5"`
|
Loadavg5 float64 `json:"loadavg_5,string"`
|
||||||
MemBuffer float64 `json:"mem_buffer"`
|
MemBuffer float64 `json:"mem_buffer"`
|
||||||
MemTotal float64 `json:"mem_total"`
|
MemTotal float64 `json:"mem_total"`
|
||||||
MemUsed float64 `json:"mem_used"`
|
MemUsed float64 `json:"mem_used"`
|
||||||
} `json:"sys_stats"`
|
} `json:"sys_stats"`
|
||||||
SystemStats struct {
|
SystemStats struct {
|
||||||
CPU string `json:"cpu"`
|
CPU float64 `json:"cpu,string"`
|
||||||
Mem string `json:"mem"`
|
Mem float64 `json:"mem,string"`
|
||||||
Uptime string `json:"uptime"`
|
Uptime float64 `json:"uptime,string"`
|
||||||
} `json:"system-stats"`
|
} `json:"system-stats"`
|
||||||
TxBytes float64 `json:"tx_bytes"`
|
TxBytes float64 `json:"tx_bytes"`
|
||||||
TxBytesD float64 `json:"tx_bytes-d"`
|
TxBytesD float64 `json:"tx_bytes-d"`
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue