unpoller_unpoller/unidev/usg.go

127 lines
5.2 KiB
Go

package unidev
import (
"strconv"
"time"
influx "github.com/influxdata/influxdb/client/v2"
)
// Points generates a device's datapoints for InfluxDB.
func (u USG) Points() ([]*influx.Point, error) {
var points []*influx.Point
tags := map[string]string{
"id": u.ID,
"mac": u.Mac,
"device_type": u.Stat.O,
"device_oid": u.Stat.Oid,
"site_id": u.SiteID,
"addopted": strconv.FormatBool(u.Adopted),
"name": u.Name,
"adopt_ip": u.AdoptIP,
"adopt_url": u.AdoptURL,
"cfgversion": u.Cfgversion,
"config_network_ip": u.ConfigNetwork.IP,
"config_network_type": u.ConfigNetwork.Type,
"connect_request_ip": u.ConnectRequestIP,
"connect_request_port": u.ConnectRequestPort,
"default": strconv.FormatBool(u.Default),
"device_id": u.DeviceID,
"discovered_via": u.DiscoveredVia,
"fw_caps": strconv.FormatFloat(u.FwCaps, 'f', 6, 64),
"guest-num_sta": strconv.FormatFloat(u.GuestNumSta, 'f', 6, 64),
"guest_token": u.GuestToken,
"inform_ip": u.InformIP,
"last_seen": strconv.FormatFloat(u.LastSeen, 'f', 6, 64),
"known_cfgversion": u.KnownCfgversion,
"led_override": u.LedOverride,
"locating": strconv.FormatBool(u.Locating),
"model": u.Model,
"outdoor_mode_override": u.OutdoorModeOverride,
"serial": u.Serial,
"type": u.Type,
"version_incompatible": strconv.FormatBool(u.VersionIncompatible),
"config_network_wan_type": u.ConfigNetworkWan.Type,
"usg_caps": strconv.FormatFloat(u.UsgCaps, 'f', 6, 64),
"speedtest-status-saved": strconv.FormatBool(u.SpeedtestStatusSaved),
}
fields := map[string]interface{}{
"ip": u.IP,
"bytes": u.Bytes,
"last_seen": u.LastSeen,
"license_state": u.LicenseState,
"rx_bytes": u.RxBytes,
"tx_bytes": u.TxBytes,
"uptime": u.Uptime,
"considered_lost_at": u.ConsideredLostAt,
"next_heartbeat_at": u.NextHeartbeatAt,
"roll_upgrade": u.Rollupgrade,
"state": u.State,
"upgradable": u.Upgradable,
"user-num_sta": u.UserNumSta,
"version": u.Version,
"num_desktop": u.NumDesktop,
"num_handheld": u.NumHandheld,
"num_mobile": u.NumMobile,
"speedtest-status_latency": u.SpeedtestStatus.Latency,
"speedtest-status_rundate": u.SpeedtestStatus.Rundate,
"speedtest-status_runtime": u.SpeedtestStatus.Runtime,
"speedtest-status_download": u.SpeedtestStatus.StatusDownload,
"speedtest-status_ping": u.SpeedtestStatus.StatusPing,
"speedtest-status_summary": u.SpeedtestStatus.StatusSummary,
"speedtest-status_upload": u.SpeedtestStatus.StatusUpload,
"speedtest-status_xput_download": u.SpeedtestStatus.XputDownload,
"speedtest-status_xput_upload": u.SpeedtestStatus.XputUpload,
// have two WANs? mmmm, go ahead and add it. ;)
"wan1_bytes-r": u.Wan1.BytesR,
"wan1_enable": u.Wan1.Enable,
"wan1_full_duplex": u.Wan1.FullDuplex,
"wan1_gateway": u.Wan1.Gateway,
"wan1_ifname": u.Wan1.Ifname,
"wan1_ip": u.Wan1.IP,
"wan1_mac": u.Wan1.Mac,
"wan1_max_speed": u.Wan1.MaxSpeed,
"wan1_name": u.Wan1.Name,
"wan1_netmask": u.Wan1.Netmask,
"wan1_rx_bytes": u.Wan1.RxBytes,
"wan1_rx_bytes-r": u.Wan1.RxBytesR,
"wan1_rx_dropped": u.Wan1.RxDropped,
"wan1_rx_errors": u.Wan1.RxErrors,
"wan1_rx_multicast": u.Wan1.RxMulticast,
"wan1_rx_packets": u.Wan1.RxPackets,
"wan1_type": u.Wan1.Type,
"wan1_speed": u.Wan1.Speed,
"wan1_up": u.Wan1.Up,
"wan1_tx_bytes": u.Wan1.TxBytes,
"wan1_tx_bytes-r": u.Wan1.TxBytesR,
"wan1_tx_dropped": u.Wan1.TxDropped,
"wan1_tx_errors": u.Wan1.TxErrors,
"wan1_tx_packets": u.Wan1.TxPackets,
"loadavg_1": u.SysStats.Loadavg1,
"loadavg_5": u.SysStats.Loadavg5,
"loadavg_15": u.SysStats.Loadavg15,
"mem_buffer": u.SysStats.MemBuffer,
"mem_total": u.SysStats.MemTotal,
"cpu": u.SystemStats.CPU,
"mem": u.SystemStats.Mem,
"system_uptime": u.SystemStats.Uptime,
"stat_duration": u.Stat.Duration,
"stat_datetime": u.Stat.Datetime,
"gw": u.Stat.Gw,
"lan-rx_bytes": u.Stat.LanRxBytes,
"lan-rx_packets": u.Stat.LanRxPackets,
"lan-tx_bytes": u.Stat.LanTxBytes,
"lan-tx_packets": u.Stat.LanTxPackets,
"wan-rx_bytes": u.Stat.WanRxBytes,
"wan-rx_dropped": u.Stat.WanRxDropped,
"wan-rx_packets": u.Stat.WanRxPackets,
"wan-tx_bytes": u.Stat.WanTxBytes,
"wan-tx_packets": u.Stat.WanTxPackets,
}
pt, err := influx.NewPoint("usg", tags, fields, time.Now())
if err == nil {
points = append(points, pt)
}
return points, err
}