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 }