more reusable code
This commit is contained in:
		
							parent
							
								
									50c1a635c6
								
							
						
					
					
						commit
						36e88dcaf4
					
				|  | @ -19,157 +19,152 @@ func (u *InfluxUnifi) batchUAP(r report, s *unifi.UAP) { | |||
| 		"serial":    s.Serial, | ||||
| 		"type":      s.Type, | ||||
| 	} | ||||
| 	fields := map[string]interface{}{ | ||||
| 		"ip":            s.IP, | ||||
| 		"bytes":         s.Bytes.Val, | ||||
| 		"last_seen":     s.LastSeen.Val, | ||||
| 		"rx_bytes":      s.RxBytes.Val, | ||||
| 		"tx_bytes":      s.TxBytes.Val, | ||||
| 		"uptime":        s.Uptime.Val, | ||||
| 		"state":         s.State, | ||||
| 		"user-num_sta":  int(s.UserNumSta.Val), | ||||
| 		"guest-num_sta": int(s.GuestNumSta.Val), | ||||
| 		"num_sta":       s.NumSta.Val, | ||||
| 		"loadavg_1":     s.SysStats.Loadavg1.Val, | ||||
| 		"loadavg_5":     s.SysStats.Loadavg5.Val, | ||||
| 		"loadavg_15":    s.SysStats.Loadavg15.Val, | ||||
| 		"mem_buffer":    s.SysStats.MemBuffer.Val, | ||||
| 		"mem_total":     s.SysStats.MemTotal.Val, | ||||
| 		"mem_used":      s.SysStats.MemUsed.Val, | ||||
| 		"cpu":           s.SystemStats.CPU.Val, | ||||
| 		"mem":           s.SystemStats.Mem.Val, | ||||
| 		"system_uptime": s.SystemStats.Uptime.Val, | ||||
| 		// Accumulative Statistics.
 | ||||
| 		"stat_user-rx_packets":  s.Stat.Ap.UserRxPackets.Val, | ||||
| 		"stat_guest-rx_packets": s.Stat.Ap.GuestRxPackets.Val, | ||||
| 		"stat_rx_packets":       s.Stat.Ap.RxPackets.Val, | ||||
| 		"stat_user-rx_bytes":    s.Stat.Ap.UserRxBytes.Val, | ||||
| 		"stat_guest-rx_bytes":   s.Stat.Ap.GuestRxBytes.Val, | ||||
| 		"stat_rx_bytes":         s.Stat.Ap.RxBytes.Val, | ||||
| 		"stat_user-rx_errors":   s.Stat.Ap.UserRxErrors.Val, | ||||
| 		"stat_guest-rx_errors":  s.Stat.Ap.GuestRxErrors.Val, | ||||
| 		"stat_rx_errors":        s.Stat.Ap.RxErrors.Val, | ||||
| 		"stat_user-rx_dropped":  s.Stat.Ap.UserRxDropped.Val, | ||||
| 		"stat_guest-rx_dropped": s.Stat.Ap.GuestRxDropped.Val, | ||||
| 		"stat_rx_dropped":       s.Stat.Ap.RxDropped.Val, | ||||
| 		"stat_user-rx_crypts":   s.Stat.Ap.UserRxCrypts.Val, | ||||
| 		"stat_guest-rx_crypts":  s.Stat.Ap.GuestRxCrypts.Val, | ||||
| 		"stat_rx_crypts":        s.Stat.Ap.RxCrypts.Val, | ||||
| 		"stat_user-rx_frags":    s.Stat.Ap.UserRxFrags.Val, | ||||
| 		"stat_guest-rx_frags":   s.Stat.Ap.GuestRxFrags.Val, | ||||
| 		"stat_rx_frags":         s.Stat.Ap.RxFrags.Val, | ||||
| 		"stat_user-tx_packets":  s.Stat.Ap.UserTxPackets.Val, | ||||
| 		"stat_guest-tx_packets": s.Stat.Ap.GuestTxPackets.Val, | ||||
| 		"stat_tx_packets":       s.Stat.Ap.TxPackets.Val, | ||||
| 		"stat_user-tx_bytes":    s.Stat.Ap.UserTxBytes.Val, | ||||
| 		"stat_guest-tx_bytes":   s.Stat.Ap.GuestTxBytes.Val, | ||||
| 		"stat_tx_bytes":         s.Stat.Ap.TxBytes.Val, | ||||
| 		"stat_user-tx_errors":   s.Stat.Ap.UserTxErrors.Val, | ||||
| 		"stat_guest-tx_errors":  s.Stat.Ap.GuestTxErrors.Val, | ||||
| 		"stat_tx_errors":        s.Stat.Ap.TxErrors.Val, | ||||
| 		"stat_user-tx_dropped":  s.Stat.Ap.UserTxDropped.Val, | ||||
| 		"stat_guest-tx_dropped": s.Stat.Ap.GuestTxDropped.Val, | ||||
| 		"stat_tx_dropped":       s.Stat.Ap.TxDropped.Val, | ||||
| 		"stat_user-tx_retries":  s.Stat.Ap.UserTxRetries.Val, | ||||
| 		"stat_guest-tx_retries": s.Stat.Ap.GuestTxRetries.Val, | ||||
| 	} | ||||
| 	fields := Combine(u.processUAPstats(r, s.Stat.Ap), u.batchSysStats(r, s.SysStats, s.SystemStats)) | ||||
| 	fields["ip"] = s.IP | ||||
| 	fields["bytes"] = s.Bytes.Val | ||||
| 	fields["last_seen"] = s.LastSeen.Val | ||||
| 	fields["rx_bytes"] = s.RxBytes.Val | ||||
| 	fields["tx_bytes"] = s.TxBytes.Val | ||||
| 	fields["uptime"] = s.Uptime.Val | ||||
| 	fields["state"] = s.State | ||||
| 	fields["user-num_sta"] = int(s.UserNumSta.Val) | ||||
| 	fields["guest-num_sta"] = int(s.GuestNumSta.Val) | ||||
| 	fields["num_sta"] = s.NumSta.Val | ||||
| 	r.send(&metric{Table: "uap", Tags: tags, Fields: fields}) | ||||
| 	u.processVAPs(r, s.VapTable, s.RadioTable, s.RadioTableStats, s.Name, s.Mac, s.SiteName) | ||||
| 	u.processVAPs(r, tags, s.VapTable, s.RadioTable, s.RadioTableStats) | ||||
| } | ||||
| 
 | ||||
| func (u *InfluxUnifi) processUAPstats(r report, ap *unifi.Ap) map[string]interface{} { | ||||
| 	// Accumulative Statistics.
 | ||||
| 	return map[string]interface{}{ | ||||
| 		"stat_user-rx_packets":  ap.UserRxPackets.Val, | ||||
| 		"stat_guest-rx_packets": ap.GuestRxPackets.Val, | ||||
| 		"stat_rx_packets":       ap.RxPackets.Val, | ||||
| 		"stat_user-rx_bytes":    ap.UserRxBytes.Val, | ||||
| 		"stat_guest-rx_bytes":   ap.GuestRxBytes.Val, | ||||
| 		"stat_rx_bytes":         ap.RxBytes.Val, | ||||
| 		"stat_user-rx_errors":   ap.UserRxErrors.Val, | ||||
| 		"stat_guest-rx_errors":  ap.GuestRxErrors.Val, | ||||
| 		"stat_rx_errors":        ap.RxErrors.Val, | ||||
| 		"stat_user-rx_dropped":  ap.UserRxDropped.Val, | ||||
| 		"stat_guest-rx_dropped": ap.GuestRxDropped.Val, | ||||
| 		"stat_rx_dropped":       ap.RxDropped.Val, | ||||
| 		"stat_user-rx_crypts":   ap.UserRxCrypts.Val, | ||||
| 		"stat_guest-rx_crypts":  ap.GuestRxCrypts.Val, | ||||
| 		"stat_rx_crypts":        ap.RxCrypts.Val, | ||||
| 		"stat_user-rx_frags":    ap.UserRxFrags.Val, | ||||
| 		"stat_guest-rx_frags":   ap.GuestRxFrags.Val, | ||||
| 		"stat_rx_frags":         ap.RxFrags.Val, | ||||
| 		"stat_user-tx_packets":  ap.UserTxPackets.Val, | ||||
| 		"stat_guest-tx_packets": ap.GuestTxPackets.Val, | ||||
| 		"stat_tx_packets":       ap.TxPackets.Val, | ||||
| 		"stat_user-tx_bytes":    ap.UserTxBytes.Val, | ||||
| 		"stat_guest-tx_bytes":   ap.GuestTxBytes.Val, | ||||
| 		"stat_tx_bytes":         ap.TxBytes.Val, | ||||
| 		"stat_user-tx_errors":   ap.UserTxErrors.Val, | ||||
| 		"stat_guest-tx_errors":  ap.GuestTxErrors.Val, | ||||
| 		"stat_tx_errors":        ap.TxErrors.Val, | ||||
| 		"stat_user-tx_dropped":  ap.UserTxDropped.Val, | ||||
| 		"stat_guest-tx_dropped": ap.GuestTxDropped.Val, | ||||
| 		"stat_tx_dropped":       ap.TxDropped.Val, | ||||
| 		"stat_user-tx_retries":  ap.UserTxRetries.Val, | ||||
| 		"stat_guest-tx_retries": ap.GuestTxRetries.Val, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // processVAPs creates points for Wifi Radios. This works with several types of UAP-capable devices.
 | ||||
| func (u *InfluxUnifi) processVAPs(r report, vt unifi.VapTable, rt unifi.RadioTable, rts unifi.RadioTableStats, name, mac, sitename string) { | ||||
| func (u *InfluxUnifi) processVAPs(r report, tags map[string]string, vt unifi.VapTable, rt unifi.RadioTable, rts unifi.RadioTableStats) { | ||||
| 	// Loop each virtual AP (ESSID) and extract data for it
 | ||||
| 	// from radio_tables and radio_table_stats.
 | ||||
| 	for _, s := range vt { | ||||
| 		tags := make(map[string]string) | ||||
| 		fields := make(map[string]interface{}) | ||||
| 		tags["device_name"] = name | ||||
| 		tags["device_mac"] = mac | ||||
| 		tags["site_name"] = sitename | ||||
| 		tags["ap_mac"] = s.ApMac | ||||
| 		tags["bssid"] = s.Bssid | ||||
| 		tags["id"] = s.ID | ||||
| 		tags["name"] = s.Name | ||||
| 		tags["radio_name"] = s.RadioName | ||||
| 		tags["essid"] = s.Essid | ||||
| 		tags["site_id"] = s.SiteID | ||||
| 		tags["usage"] = s.Usage | ||||
| 		tags["state"] = s.State | ||||
| 		tags["is_guest"] = s.IsGuest.Txt | ||||
| 		t := make(map[string]string)      // tags
 | ||||
| 		f := make(map[string]interface{}) // fields
 | ||||
| 		t["device_name"] = tags["name"] | ||||
| 		t["site_name"] = tags["site_name"] | ||||
| 		t["ap_mac"] = s.ApMac | ||||
| 		t["bssid"] = s.Bssid | ||||
| 		t["id"] = s.ID | ||||
| 		t["name"] = s.Name | ||||
| 		t["radio_name"] = s.RadioName | ||||
| 		t["essid"] = s.Essid | ||||
| 		t["site_id"] = s.SiteID | ||||
| 		t["usage"] = s.Usage | ||||
| 		t["state"] = s.State | ||||
| 		t["is_guest"] = s.IsGuest.Txt | ||||
| 
 | ||||
| 		fields["ccq"] = s.Ccq | ||||
| 		fields["mac_filter_rejections"] = s.MacFilterRejections | ||||
| 		fields["num_satisfaction_sta"] = s.NumSatisfactionSta.Val | ||||
| 		fields["avg_client_signal"] = s.AvgClientSignal.Val | ||||
| 		fields["satisfaction"] = s.Satisfaction.Val | ||||
| 		fields["satisfaction_now"] = s.SatisfactionNow.Val | ||||
| 		fields["rx_bytes"] = s.RxBytes.Val | ||||
| 		fields["rx_crypts"] = s.RxCrypts.Val | ||||
| 		fields["rx_dropped"] = s.RxDropped.Val | ||||
| 		fields["rx_errors"] = s.RxErrors.Val | ||||
| 		fields["rx_frags"] = s.RxFrags.Val | ||||
| 		fields["rx_nwids"] = s.RxNwids.Val | ||||
| 		fields["rx_packets"] = s.RxPackets.Val | ||||
| 		fields["tx_bytes"] = s.TxBytes.Val | ||||
| 		fields["tx_dropped"] = s.TxDropped.Val | ||||
| 		fields["tx_errors"] = s.TxErrors.Val | ||||
| 		fields["tx_packets"] = s.TxPackets.Val | ||||
| 		fields["tx_power"] = s.TxPower.Val | ||||
| 		fields["tx_retries"] = s.TxRetries.Val | ||||
| 		fields["tx_combined_retries"] = s.TxCombinedRetries.Val | ||||
| 		fields["tx_data_mpdu_bytes"] = s.TxDataMpduBytes.Val | ||||
| 		fields["tx_rts_retries"] = s.TxRtsRetries.Val | ||||
| 		fields["tx_success"] = s.TxSuccess.Val | ||||
| 		fields["tx_total"] = s.TxTotal.Val | ||||
| 		fields["tx_tcp_goodbytes"] = s.TxTCPStats.Goodbytes.Val | ||||
| 		fields["tx_tcp_lat_avg"] = s.TxTCPStats.LatAvg.Val | ||||
| 		fields["tx_tcp_lat_max"] = s.TxTCPStats.LatMax.Val | ||||
| 		fields["tx_tcp_lat_min"] = s.TxTCPStats.LatMin.Val | ||||
| 		fields["rx_tcp_goodbytes"] = s.RxTCPStats.Goodbytes.Val | ||||
| 		fields["rx_tcp_lat_avg"] = s.RxTCPStats.LatAvg.Val | ||||
| 		fields["rx_tcp_lat_max"] = s.RxTCPStats.LatMax.Val | ||||
| 		fields["rx_tcp_lat_min"] = s.RxTCPStats.LatMin.Val | ||||
| 		fields["wifi_tx_latency_mov_avg"] = s.WifiTxLatencyMov.Avg.Val | ||||
| 		fields["wifi_tx_latency_mov_max"] = s.WifiTxLatencyMov.Max.Val | ||||
| 		fields["wifi_tx_latency_mov_min"] = s.WifiTxLatencyMov.Min.Val | ||||
| 		fields["wifi_tx_latency_mov_total"] = s.WifiTxLatencyMov.Total.Val | ||||
| 		fields["wifi_tx_latency_mov_cuont"] = s.WifiTxLatencyMov.TotalCount.Val | ||||
| 		f["ccq"] = s.Ccq | ||||
| 		f["mac_filter_rejections"] = s.MacFilterRejections | ||||
| 		f["num_satisfaction_sta"] = s.NumSatisfactionSta.Val | ||||
| 		f["avg_client_signal"] = s.AvgClientSignal.Val | ||||
| 		f["satisfaction"] = s.Satisfaction.Val | ||||
| 		f["satisfaction_now"] = s.SatisfactionNow.Val | ||||
| 		f["rx_bytes"] = s.RxBytes.Val | ||||
| 		f["rx_crypts"] = s.RxCrypts.Val | ||||
| 		f["rx_dropped"] = s.RxDropped.Val | ||||
| 		f["rx_errors"] = s.RxErrors.Val | ||||
| 		f["rx_frags"] = s.RxFrags.Val | ||||
| 		f["rx_nwids"] = s.RxNwids.Val | ||||
| 		f["rx_packets"] = s.RxPackets.Val | ||||
| 		f["tx_bytes"] = s.TxBytes.Val | ||||
| 		f["tx_dropped"] = s.TxDropped.Val | ||||
| 		f["tx_errors"] = s.TxErrors.Val | ||||
| 		f["tx_packets"] = s.TxPackets.Val | ||||
| 		f["tx_power"] = s.TxPower.Val | ||||
| 		f["tx_retries"] = s.TxRetries.Val | ||||
| 		f["tx_combined_retries"] = s.TxCombinedRetries.Val | ||||
| 		f["tx_data_mpdu_bytes"] = s.TxDataMpduBytes.Val | ||||
| 		f["tx_rts_retries"] = s.TxRtsRetries.Val | ||||
| 		f["tx_success"] = s.TxSuccess.Val | ||||
| 		f["tx_total"] = s.TxTotal.Val | ||||
| 		f["tx_tcp_goodbytes"] = s.TxTCPStats.Goodbytes.Val | ||||
| 		f["tx_tcp_lat_avg"] = s.TxTCPStats.LatAvg.Val | ||||
| 		f["tx_tcp_lat_max"] = s.TxTCPStats.LatMax.Val | ||||
| 		f["tx_tcp_lat_min"] = s.TxTCPStats.LatMin.Val | ||||
| 		f["rx_tcp_goodbytes"] = s.RxTCPStats.Goodbytes.Val | ||||
| 		f["rx_tcp_lat_avg"] = s.RxTCPStats.LatAvg.Val | ||||
| 		f["rx_tcp_lat_max"] = s.RxTCPStats.LatMax.Val | ||||
| 		f["rx_tcp_lat_min"] = s.RxTCPStats.LatMin.Val | ||||
| 		f["wifi_tx_latency_mov_avg"] = s.WifiTxLatencyMov.Avg.Val | ||||
| 		f["wifi_tx_latency_mov_max"] = s.WifiTxLatencyMov.Max.Val | ||||
| 		f["wifi_tx_latency_mov_min"] = s.WifiTxLatencyMov.Min.Val | ||||
| 		f["wifi_tx_latency_mov_total"] = s.WifiTxLatencyMov.Total.Val | ||||
| 		f["wifi_tx_latency_mov_cuont"] = s.WifiTxLatencyMov.TotalCount.Val | ||||
| 
 | ||||
| 		// XXX: This is busted. It needs its own table....
 | ||||
| 		for _, p := range rt { | ||||
| 			if p.Name != s.RadioName { | ||||
| 				continue | ||||
| 			} | ||||
| 			tags["channel"] = p.Channel.Txt | ||||
| 			tags["radio"] = p.Radio | ||||
| 			fields["current_antenna_gain"] = p.CurrentAntennaGain.Val | ||||
| 			fields["ht"] = p.Ht.Txt | ||||
| 			fields["max_txpower"] = p.MaxTxpower.Val | ||||
| 			fields["min_txpower"] = p.MinTxpower.Val | ||||
| 			fields["nss"] = p.Nss.Val | ||||
| 			fields["radio_caps"] = p.RadioCaps.Val | ||||
| 			fields["tx_power"] = p.TxPower.Val | ||||
| 			t["channel"] = p.Channel.Txt | ||||
| 			t["radio"] = p.Radio | ||||
| 			f["current_antenna_gain"] = p.CurrentAntennaGain.Val | ||||
| 			f["ht"] = p.Ht.Txt | ||||
| 			f["max_txpower"] = p.MaxTxpower.Val | ||||
| 			f["min_txpower"] = p.MinTxpower.Val | ||||
| 			f["nss"] = p.Nss.Val | ||||
| 			f["radio_caps"] = p.RadioCaps.Val | ||||
| 			f["tx_power"] = p.TxPower.Val | ||||
| 		} | ||||
| 
 | ||||
| 		for _, p := range rts { | ||||
| 			if p.Name != s.RadioName { | ||||
| 				continue | ||||
| 			} | ||||
| 			fields["ast_be_xmit"] = p.AstBeXmit.Val | ||||
| 			fields["channel"] = p.Channel.Val | ||||
| 			fields["cu_self_rx"] = p.CuSelfRx.Val | ||||
| 			fields["cu_self_tx"] = p.CuSelfTx.Val | ||||
| 			fields["cu_total"] = p.CuTotal.Val | ||||
| 			fields["extchannel"] = p.Extchannel.Val | ||||
| 			fields["gain"] = p.Gain.Val | ||||
| 			fields["guest-num_sta"] = p.GuestNumSta.Val | ||||
| 			fields["num_sta"] = p.NumSta.Val | ||||
| 			fields["radio"] = p.Radio | ||||
| 			fields["tx_packets"] = p.TxPackets.Val | ||||
| 			fields["tx_power"] = p.TxPower.Val | ||||
| 			fields["tx_retries"] = p.TxRetries.Val | ||||
| 			fields["user-num_sta"] = p.UserNumSta.Val | ||||
| 			f["ast_be_xmit"] = p.AstBeXmit.Val | ||||
| 			f["channel"] = p.Channel.Val | ||||
| 			f["cu_self_rx"] = p.CuSelfRx.Val | ||||
| 			f["cu_self_tx"] = p.CuSelfTx.Val | ||||
| 			f["cu_total"] = p.CuTotal.Val | ||||
| 			f["extchannel"] = p.Extchannel.Val | ||||
| 			f["gain"] = p.Gain.Val | ||||
| 			f["guest-num_sta"] = p.GuestNumSta.Val | ||||
| 			f["num_sta"] = p.NumSta.Val | ||||
| 			f["radio"] = p.Radio | ||||
| 			f["tx_packets"] = p.TxPackets.Val | ||||
| 			f["tx_power"] = p.TxPower.Val | ||||
| 			f["tx_retries"] = p.TxRetries.Val | ||||
| 			f["user-num_sta"] = p.UserNumSta.Val | ||||
| 		} | ||||
| 		r.send(&metric{Table: "uap_vaps", Tags: tags, Fields: fields}) | ||||
| 		r.send(&metric{Table: "uap_vaps", Tags: t, Fields: f}) | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -4,6 +4,32 @@ import ( | |||
| 	"golift.io/unifi" | ||||
| ) | ||||
| 
 | ||||
| // Combines concatenates N maps. This will delete things if not used with caution.
 | ||||
| func Combine(in ...map[string]interface{}) map[string]interface{} { | ||||
| 	out := make(map[string]interface{}) | ||||
| 	for i := range in { | ||||
| 		for k := range in[i] { | ||||
| 			out[k] = in[i][k] | ||||
| 		} | ||||
| 	} | ||||
| 	return out | ||||
| } | ||||
| 
 | ||||
| // batchSysStats is used by all device types.
 | ||||
| func (u *InfluxUnifi) batchSysStats(r report, s unifi.SysStats, ss unifi.SystemStats) map[string]interface{} { | ||||
| 	return map[string]interface{}{ | ||||
| 		"loadavg_1":     s.Loadavg1.Val, | ||||
| 		"loadavg_5":     s.Loadavg5.Val, | ||||
| 		"loadavg_15":    s.Loadavg15.Val, | ||||
| 		"mem_used":      s.MemUsed.Val, | ||||
| 		"mem_buffer":    s.MemBuffer.Val, | ||||
| 		"mem_total":     s.MemTotal.Val, | ||||
| 		"cpu":           ss.CPU.Val, | ||||
| 		"mem":           ss.Mem.Val, | ||||
| 		"system_uptime": ss.Uptime.Val, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // batchUDM generates Unifi Gateway datapoints for InfluxDB.
 | ||||
| // These points can be passed directly to influx.
 | ||||
| func (u *InfluxUnifi) batchUDM(r report, s *unifi.UDM) { | ||||
|  | @ -22,7 +48,7 @@ func (u *InfluxUnifi) batchUDM(r report, s *unifi.UDM) { | |||
| 		"serial":    s.Serial, | ||||
| 		"type":      s.Type, | ||||
| 	} | ||||
| 	fields := map[string]interface{}{ | ||||
| 	fields := Combine(map[string]interface{}{ | ||||
| 		"ip":                             s.IP, | ||||
| 		"bytes":                          s.Bytes.Val, | ||||
| 		"last_seen":                      s.LastSeen.Val, | ||||
|  | @ -42,72 +68,14 @@ func (u *InfluxUnifi) batchUDM(r report, s *unifi.UDM) { | |||
| 		"speedtest-status_ping":          s.SpeedtestStatus.StatusPing.Val, | ||||
| 		"speedtest-status_xput_download": s.SpeedtestStatus.XputDownload.Val, | ||||
| 		"speedtest-status_xput_upload":   s.SpeedtestStatus.XputUpload.Val, | ||||
| 		"wan1_bytes-r":                   s.Wan1.BytesR.Val, | ||||
| 		"wan1_enable":                    s.Wan1.Enable.Val, | ||||
| 		"wan1_full_duplex":               s.Wan1.FullDuplex.Val, | ||||
| 		"wan1_gateway":                   s.Wan1.Gateway, | ||||
| 		"wan1_ifname":                    s.Wan1.Ifname, | ||||
| 		"wan1_ip":                        s.Wan1.IP, | ||||
| 		"wan1_mac":                       s.Wan1.Mac, | ||||
| 		"wan1_max_speed":                 s.Wan1.MaxSpeed.Val, | ||||
| 		"wan1_name":                      s.Wan1.Name, | ||||
| 		"wan1_rx_bytes":                  s.Wan1.RxBytes.Val, | ||||
| 		"wan1_rx_bytes-r":                s.Wan1.RxBytesR.Val, | ||||
| 		"wan1_rx_dropped":                s.Wan1.RxDropped.Val, | ||||
| 		"wan1_rx_errors":                 s.Wan1.RxErrors.Val, | ||||
| 		"wan1_rx_multicast":              s.Wan1.RxMulticast.Val, | ||||
| 		"wan1_rx_packets":                s.Wan1.RxPackets.Val, | ||||
| 		"wan1_type":                      s.Wan1.Type, | ||||
| 		"wan1_speed":                     s.Wan1.Speed.Val, | ||||
| 		"wan1_up":                        s.Wan1.Up.Val, | ||||
| 		"wan1_tx_bytes":                  s.Wan1.TxBytes.Val, | ||||
| 		"wan1_tx_bytes-r":                s.Wan1.TxBytesR.Val, | ||||
| 		"wan1_tx_dropped":                s.Wan1.TxDropped.Val, | ||||
| 		"wan1_tx_errors":                 s.Wan1.TxErrors.Val, | ||||
| 		"wan1_tx_packets":                s.Wan1.TxPackets.Val, | ||||
| 		"wan2_bytes-r":                   s.Wan2.BytesR.Val, | ||||
| 		"wan2_enable":                    s.Wan2.Enable.Val, | ||||
| 		"wan2_full_duplex":               s.Wan2.FullDuplex.Val, | ||||
| 		"wan2_gateway":                   s.Wan2.Gateway, | ||||
| 		"wan2_ifname":                    s.Wan2.Ifname, | ||||
| 		"wan2_ip":                        s.Wan2.IP, | ||||
| 		"wan2_mac":                       s.Wan2.Mac, | ||||
| 		"wan2_max_speed":                 s.Wan2.MaxSpeed.Val, | ||||
| 		"wan2_name":                      s.Wan2.Name, | ||||
| 		"wan2_rx_bytes":                  s.Wan2.RxBytes.Val, | ||||
| 		"wan2_rx_bytes-r":                s.Wan2.RxBytesR.Val, | ||||
| 		"wan2_rx_dropped":                s.Wan2.RxDropped.Val, | ||||
| 		"wan2_rx_errors":                 s.Wan2.RxErrors.Val, | ||||
| 		"wan2_rx_multicast":              s.Wan2.RxMulticast.Val, | ||||
| 		"wan2_rx_packets":                s.Wan2.RxPackets.Val, | ||||
| 		"wan2_type":                      s.Wan2.Type, | ||||
| 		"wan2_speed":                     s.Wan2.Speed.Val, | ||||
| 		"wan2_up":                        s.Wan2.Up.Val, | ||||
| 		"wan2_tx_bytes":                  s.Wan2.TxBytes.Val, | ||||
| 		"wan2_tx_bytes-r":                s.Wan2.TxBytesR.Val, | ||||
| 		"wan2_tx_dropped":                s.Wan2.TxDropped.Val, | ||||
| 		"wan2_tx_errors":                 s.Wan2.TxErrors.Val, | ||||
| 		"wan2_tx_packets":                s.Wan2.TxPackets.Val, | ||||
| 		"loadavg_1":                      s.SysStats.Loadavg1.Val, | ||||
| 		"loadavg_5":                      s.SysStats.Loadavg5.Val, | ||||
| 		"loadavg_15":                     s.SysStats.Loadavg15.Val, | ||||
| 		"mem_used":                       s.SysStats.MemUsed.Val, | ||||
| 		"mem_buffer":                     s.SysStats.MemBuffer.Val, | ||||
| 		"mem_total":                      s.SysStats.MemTotal.Val, | ||||
| 		"cpu":                            s.SystemStats.CPU.Val, | ||||
| 		"mem":                            s.SystemStats.Mem.Val, | ||||
| 		"system_uptime":                  s.SystemStats.Uptime.Val, | ||||
| 		"lan-rx_bytes":                   s.Stat.LanRxBytes.Val, | ||||
| 		"lan-rx_packets":                 s.Stat.LanRxPackets.Val, | ||||
| 		"lan-tx_bytes":                   s.Stat.LanTxBytes.Val, | ||||
| 		"lan-tx_packets":                 s.Stat.LanTxPackets.Val, | ||||
| 		"wan-rx_bytes":                   s.Stat.WanRxBytes.Val, | ||||
| 		"wan-rx_dropped":                 s.Stat.WanRxDropped.Val, | ||||
| 		"wan-rx_packets":                 s.Stat.WanRxPackets.Val, | ||||
| 		"wan-tx_bytes":                   s.Stat.WanTxBytes.Val, | ||||
| 		"wan-tx_packets":                 s.Stat.WanTxPackets.Val, | ||||
| 	} | ||||
| 		"lan-rx_bytes":                   s.Stat.Gw.LanRxBytes.Val, | ||||
| 		"lan-rx_packets":                 s.Stat.Gw.LanRxPackets.Val, | ||||
| 		"lan-tx_bytes":                   s.Stat.Gw.LanTxBytes.Val, | ||||
| 		"lan-tx_packets":                 s.Stat.Gw.LanTxPackets.Val, | ||||
| 	}, u.batchSysStats(r, s.SysStats, s.SystemStats)) | ||||
| 	r.send(&metric{Table: "usg", Tags: tags, Fields: fields}) | ||||
| 	u.batchNetworkTable(r, tags, s.NetworkTable) | ||||
| 	u.batchUSGwans(r, tags, s.Wan1, s.Wan2) | ||||
| 
 | ||||
| 	tags = map[string]string{ | ||||
| 		"mac":       s.Mac, | ||||
|  | @ -127,16 +95,6 @@ func (u *InfluxUnifi) batchUDM(r report, s *unifi.UDM) { | |||
| 		"tx_bytes":        s.TxBytes.Val, | ||||
| 		"uptime":          s.Uptime.Val, | ||||
| 		"state":           s.State.Val, | ||||
| 		"user-num_sta":    s.UserNumSta.Val, | ||||
| 		"loadavg_1":       s.SysStats.Loadavg1.Val, | ||||
| 		"loadavg_5":       s.SysStats.Loadavg5.Val, | ||||
| 		"loadavg_15":      s.SysStats.Loadavg15.Val, | ||||
| 		"mem_buffer":      s.SysStats.MemBuffer.Val, | ||||
| 		"mem_used":        s.SysStats.MemUsed.Val, | ||||
| 		"mem_total":       s.SysStats.MemTotal.Val, | ||||
| 		"cpu":             s.SystemStats.CPU.Val, | ||||
| 		"mem":             s.SystemStats.Mem.Val, | ||||
| 		"system_uptime":   s.SystemStats.Uptime.Val, | ||||
| 		"stat_bytes":      s.Stat.Sw.Bytes.Val, | ||||
| 		"stat_rx_bytes":   s.Stat.Sw.RxBytes.Val, | ||||
| 		"stat_rx_crypts":  s.Stat.Sw.RxCrypts.Val, | ||||
|  | @ -151,85 +109,8 @@ func (u *InfluxUnifi) batchUDM(r report, s *unifi.UDM) { | |||
| 		"stat_tx_retries": s.Stat.Sw.TxRetries.Val, | ||||
| 	} | ||||
| 	r.send(&metric{Table: "usw", Tags: tags, Fields: fields}) | ||||
| 	u.batchPortTable(r, tags, s.PortTable) | ||||
| 
 | ||||
| 	for _, p := range s.NetworkTable { | ||||
| 		tags := map[string]string{ | ||||
| 			"device_name": s.Name, | ||||
| 			"device_id":   s.ID, | ||||
| 			"device_mac":  s.Mac, | ||||
| 			"site_name":   s.SiteName, | ||||
| 			"up":          p.Up.Txt, | ||||
| 			"enabled":     p.Enabled.Txt, | ||||
| 			"site_id":     p.SiteID, | ||||
| 			"ip":          p.IP, | ||||
| 			"ip_subnet":   p.IPSubnet, | ||||
| 			"mac":         p.Mac, | ||||
| 			"name":        p.Name, | ||||
| 			"domain_name": p.DomainName, | ||||
| 			"purpose":     p.Purpose, | ||||
| 		} | ||||
| 		fields := map[string]interface{}{ | ||||
| 			"domain_name":         p.DomainName, | ||||
| 			"dhcpd_start":         p.DhcpdStart, | ||||
| 			"dhcpd_stop":          p.DhcpdStop, | ||||
| 			"ip":                  p.IP, | ||||
| 			"ip_subnet":           p.IPSubnet, | ||||
| 			"mac":                 p.Mac, | ||||
| 			"name":                p.Name, | ||||
| 			"num_sta":             p.NumSta.Val, | ||||
| 			"purpose":             p.Purpose, | ||||
| 			"rx_bytes":            p.RxBytes.Val, | ||||
| 			"rx_packets":          p.RxPackets.Val, | ||||
| 			"tx_bytes":            p.TxBytes.Val, | ||||
| 			"tx_packets":          p.TxPackets.Val, | ||||
| 			"ipv6_interface_type": p.Ipv6InterfaceType, | ||||
| 			"attr_hidden_id":      p.AttrHiddenID, | ||||
| 		} | ||||
| 		r.send(&metric{Table: "usg_networks", Tags: tags, Fields: fields}) | ||||
| 	} | ||||
| 
 | ||||
| 	for _, p := range s.PortTable { | ||||
| 		tags := map[string]string{ | ||||
| 			"site_id":     s.SiteID, | ||||
| 			"site_name":   s.SiteName, | ||||
| 			"device_name": s.Name, | ||||
| 			"name":        p.Name, | ||||
| 			"enable":      p.Enable.Txt, | ||||
| 			"up":          p.Up.Txt, | ||||
| 			"poe_mode":    p.PoeMode, | ||||
| 			"port_poe":    p.PortPoe.Txt, | ||||
| 			"port_idx":    p.PortIdx.Txt, | ||||
| 			"port_id":     s.Name + " Port " + p.PortIdx.Txt, | ||||
| 			"poe_enable":  p.PoeEnable.Txt, | ||||
| 			"flowctrl_rx": p.FlowctrlRx.Txt, | ||||
| 			"flowctrl_tx": p.FlowctrlTx.Txt, | ||||
| 			"media":       p.Media, | ||||
| 			"poe_class":   p.PoeClass, | ||||
| 		} | ||||
| 		fields := map[string]interface{}{ | ||||
| 			"dbytes_r":     p.BytesR.Val, | ||||
| 			"rx_broadcast": p.RxBroadcast.Val, | ||||
| 			"rx_bytes":     p.RxBytes.Val, | ||||
| 			"rx_bytes-r":   p.RxBytesR.Val, | ||||
| 			"rx_dropped":   p.RxDropped.Val, | ||||
| 			"rx_errors":    p.RxErrors.Val, | ||||
| 			"rx_multicast": p.RxMulticast.Val, | ||||
| 			"rx_packets":   p.RxPackets.Val, | ||||
| 			"speed":        p.Speed.Val, | ||||
| 			"stp_pathcost": p.StpPathcost.Val, | ||||
| 			"tx_broadcast": p.TxBroadcast.Val, | ||||
| 			"tx_bytes":     p.TxBytes.Val, | ||||
| 			"tx_bytes-r":   p.TxBytesR.Val, | ||||
| 			"tx_dropped":   p.TxDropped.Val, | ||||
| 			"tx_errors":    p.TxErrors.Val, | ||||
| 			"tx_multicast": p.TxMulticast.Val, | ||||
| 			"tx_packets":   p.TxPackets.Val, | ||||
| 			"poe_current":  p.PoeCurrent.Val, | ||||
| 			"poe_power":    p.PoePower.Val, | ||||
| 			"poe_voltage":  p.PoeVoltage.Val, | ||||
| 		} | ||||
| 		r.send(&metric{Table: "usw_ports", Tags: tags, Fields: fields}) | ||||
| 	} | ||||
| 	if s.Stat.Ap == nil { | ||||
| 		return | ||||
| 		// we're done now. the following code process UDM (non-pro) UAP data.
 | ||||
|  | @ -243,60 +124,17 @@ func (u *InfluxUnifi) batchUDM(r report, s *unifi.UDM) { | |||
| 		"serial":    s.Serial, | ||||
| 		"type":      s.Type, | ||||
| 	} | ||||
| 	fields = map[string]interface{}{ | ||||
| 		"ip":            s.IP, | ||||
| 		"bytes":         s.Bytes.Val, | ||||
| 		"last_seen":     s.LastSeen.Val, | ||||
| 		"rx_bytes":      s.RxBytes.Val, | ||||
| 		"tx_bytes":      s.TxBytes.Val, | ||||
| 		"uptime":        s.Uptime.Val, | ||||
| 		"state":         int(s.State.Val), | ||||
| 		"user-num_sta":  int(s.UserWlanNumSta.Val), | ||||
| 		"guest-num_sta": int(s.GuestWlanNumSta.Val), | ||||
| 		"num_sta":       s.WlanNumSta.Val, | ||||
| 		"loadavg_1":     s.SysStats.Loadavg1.Val, | ||||
| 		"loadavg_5":     s.SysStats.Loadavg5.Val, | ||||
| 		"loadavg_15":    s.SysStats.Loadavg15.Val, | ||||
| 		"mem_buffer":    s.SysStats.MemBuffer.Val, | ||||
| 		"mem_total":     s.SysStats.MemTotal.Val, | ||||
| 		"mem_used":      s.SysStats.MemUsed.Val, | ||||
| 		"cpu":           s.SystemStats.CPU.Val, | ||||
| 		"mem":           s.SystemStats.Mem.Val, | ||||
| 		"system_uptime": s.SystemStats.Uptime.Val, | ||||
| 		// Accumulative Statistics.
 | ||||
| 		"stat_user-rx_packets":  s.Stat.Ap.UserRxPackets.Val, | ||||
| 		"stat_guest-rx_packets": s.Stat.Ap.GuestRxPackets.Val, | ||||
| 		"stat_rx_packets":       s.Stat.Ap.RxPackets.Val, | ||||
| 		"stat_user-rx_bytes":    s.Stat.Ap.UserRxBytes.Val, | ||||
| 		"stat_guest-rx_bytes":   s.Stat.Ap.GuestRxBytes.Val, | ||||
| 		"stat_rx_bytes":         s.Stat.Ap.RxBytes.Val, | ||||
| 		"stat_user-rx_errors":   s.Stat.Ap.UserRxErrors.Val, | ||||
| 		"stat_guest-rx_errors":  s.Stat.Ap.GuestRxErrors.Val, | ||||
| 		"stat_rx_errors":        s.Stat.Ap.RxErrors.Val, | ||||
| 		"stat_user-rx_dropped":  s.Stat.Ap.UserRxDropped.Val, | ||||
| 		"stat_guest-rx_dropped": s.Stat.Ap.GuestRxDropped.Val, | ||||
| 		"stat_rx_dropped":       s.Stat.Ap.RxDropped.Val, | ||||
| 		"stat_user-rx_crypts":   s.Stat.Ap.UserRxCrypts.Val, | ||||
| 		"stat_guest-rx_crypts":  s.Stat.Ap.GuestRxCrypts.Val, | ||||
| 		"stat_rx_crypts":        s.Stat.Ap.RxCrypts.Val, | ||||
| 		"stat_user-rx_frags":    s.Stat.Ap.UserRxFrags.Val, | ||||
| 		"stat_guest-rx_frags":   s.Stat.Ap.GuestRxFrags.Val, | ||||
| 		"stat_rx_frags":         s.Stat.Ap.RxFrags.Val, | ||||
| 		"stat_user-tx_packets":  s.Stat.Ap.UserTxPackets.Val, | ||||
| 		"stat_guest-tx_packets": s.Stat.Ap.GuestTxPackets.Val, | ||||
| 		"stat_tx_packets":       s.Stat.Ap.TxPackets.Val, | ||||
| 		"stat_user-tx_bytes":    s.Stat.Ap.UserTxBytes.Val, | ||||
| 		"stat_guest-tx_bytes":   s.Stat.Ap.GuestTxBytes.Val, | ||||
| 		"stat_tx_bytes":         s.Stat.Ap.TxBytes.Val, | ||||
| 		"stat_user-tx_errors":   s.Stat.Ap.UserTxErrors.Val, | ||||
| 		"stat_guest-tx_errors":  s.Stat.Ap.GuestTxErrors.Val, | ||||
| 		"stat_tx_errors":        s.Stat.Ap.TxErrors.Val, | ||||
| 		"stat_user-tx_dropped":  s.Stat.Ap.UserTxDropped.Val, | ||||
| 		"stat_guest-tx_dropped": s.Stat.Ap.GuestTxDropped.Val, | ||||
| 		"stat_tx_dropped":       s.Stat.Ap.TxDropped.Val, | ||||
| 		"stat_user-tx_retries":  s.Stat.Ap.UserTxRetries.Val, | ||||
| 		"stat_guest-tx_retries": s.Stat.Ap.GuestTxRetries.Val, | ||||
| 	} | ||||
| 	fields = u.processUAPstats(r, s.Stat.Ap) | ||||
| 	fields["ip"] = s.IP | ||||
| 	fields["bytes"] = s.Bytes.Val | ||||
| 	fields["last_seen"] = s.LastSeen.Val | ||||
| 	fields["rx_bytes"] = s.RxBytes.Val | ||||
| 	fields["tx_bytes"] = s.TxBytes.Val | ||||
| 	fields["uptime"] = s.Uptime.Val | ||||
| 	fields["state"] = s.State | ||||
| 	fields["user-num_sta"] = int(s.UserNumSta.Val) | ||||
| 	fields["guest-num_sta"] = int(s.GuestNumSta.Val) | ||||
| 	fields["num_sta"] = s.NumSta.Val | ||||
| 	r.send(&metric{Table: "uap", Tags: tags, Fields: fields}) | ||||
| 	u.processVAPs(r, *s.VapTable, *s.RadioTable, *s.RadioTableStats, s.Name, s.Mac, s.SiteName) | ||||
| 	u.processVAPs(r, tags, *s.VapTable, *s.RadioTable, *s.RadioTableStats) | ||||
| } | ||||
|  |  | |||
|  | @ -1,8 +1,6 @@ | |||
| package influxunifi | ||||
| 
 | ||||
| import ( | ||||
| 	"strings" | ||||
| 
 | ||||
| 	"golift.io/unifi" | ||||
| ) | ||||
| 
 | ||||
|  | @ -41,84 +39,93 @@ func (u *InfluxUnifi) batchUSG(r report, s *unifi.USG) { | |||
| 		"speedtest-status_ping":          s.SpeedtestStatus.StatusPing.Val, | ||||
| 		"speedtest-status_xput_download": s.SpeedtestStatus.XputDownload.Val, | ||||
| 		"speedtest-status_xput_upload":   s.SpeedtestStatus.XputUpload.Val, | ||||
| 		"wan1_bytes-r":                   s.Wan1.BytesR.Val, | ||||
| 		"wan1_enable":                    s.Wan1.Enable.Val, | ||||
| 		"wan1_full_duplex":               s.Wan1.FullDuplex.Val, | ||||
| 		"wan1_gateway":                   s.Wan1.Gateway, | ||||
| 		"wan1_ifname":                    s.Wan1.Ifname, | ||||
| 		"wan1_ip":                        s.Wan1.IP, | ||||
| 		"wan1_mac":                       s.Wan1.Mac, | ||||
| 		"wan1_max_speed":                 s.Wan1.MaxSpeed.Val, | ||||
| 		"wan1_name":                      s.Wan1.Name, | ||||
| 		"wan1_rx_bytes":                  s.Wan1.RxBytes.Val, | ||||
| 		"wan1_rx_bytes-r":                s.Wan1.RxBytesR.Val, | ||||
| 		"wan1_rx_dropped":                s.Wan1.RxDropped.Val, | ||||
| 		"wan1_rx_errors":                 s.Wan1.RxErrors.Val, | ||||
| 		"wan1_rx_multicast":              s.Wan1.RxMulticast.Val, | ||||
| 		"wan1_rx_packets":                s.Wan1.RxPackets.Val, | ||||
| 		"wan1_type":                      s.Wan1.Type, | ||||
| 		"wan1_speed":                     s.Wan1.Speed.Val, | ||||
| 		"wan1_up":                        s.Wan1.Up.Val, | ||||
| 		"wan1_tx_bytes":                  s.Wan1.TxBytes.Val, | ||||
| 		"wan1_tx_bytes-r":                s.Wan1.TxBytesR.Val, | ||||
| 		"wan1_tx_dropped":                s.Wan1.TxDropped.Val, | ||||
| 		"wan1_tx_errors":                 s.Wan1.TxErrors.Val, | ||||
| 		"wan1_tx_packets":                s.Wan1.TxPackets.Val, | ||||
| 		"wan2_bytes-r":                   s.Wan2.BytesR.Val, | ||||
| 		"wan2_enable":                    s.Wan2.Enable.Val, | ||||
| 		"wan2_full_duplex":               s.Wan2.FullDuplex.Val, | ||||
| 		"wan2_gateway":                   s.Wan2.Gateway, | ||||
| 		"wan2_ifname":                    s.Wan2.Ifname, | ||||
| 		"wan2_ip":                        s.Wan2.IP, | ||||
| 		"wan2_mac":                       s.Wan2.Mac, | ||||
| 		"wan2_max_speed":                 s.Wan2.MaxSpeed.Val, | ||||
| 		"wan2_name":                      s.Wan2.Name, | ||||
| 		"wan2_rx_bytes":                  s.Wan2.RxBytes.Val, | ||||
| 		"wan2_rx_bytes-r":                s.Wan2.RxBytesR.Val, | ||||
| 		"wan2_rx_dropped":                s.Wan2.RxDropped.Val, | ||||
| 		"wan2_rx_errors":                 s.Wan2.RxErrors.Val, | ||||
| 		"wan2_rx_multicast":              s.Wan2.RxMulticast.Val, | ||||
| 		"wan2_rx_packets":                s.Wan2.RxPackets.Val, | ||||
| 		"wan2_type":                      s.Wan2.Type, | ||||
| 		"wan2_speed":                     s.Wan2.Speed.Val, | ||||
| 		"wan2_up":                        s.Wan2.Up.Val, | ||||
| 		"wan2_tx_bytes":                  s.Wan2.TxBytes.Val, | ||||
| 		"wan2_tx_bytes-r":                s.Wan2.TxBytesR.Val, | ||||
| 		"wan2_tx_dropped":                s.Wan2.TxDropped.Val, | ||||
| 		"wan2_tx_errors":                 s.Wan2.TxErrors.Val, | ||||
| 		"wan2_tx_packets":                s.Wan2.TxPackets.Val, | ||||
| 		"loadavg_1":                      s.SysStats.Loadavg1.Val, | ||||
| 		"loadavg_5":                      s.SysStats.Loadavg5.Val, | ||||
| 		"loadavg_15":                     s.SysStats.Loadavg15.Val, | ||||
| 		"mem_used":                       s.SysStats.MemUsed.Val, | ||||
| 		"mem_buffer":                     s.SysStats.MemBuffer.Val, | ||||
| 		"mem_total":                      s.SysStats.MemTotal.Val, | ||||
| 		"cpu":                            s.SystemStats.CPU.Val, | ||||
| 		"mem":                            s.SystemStats.Mem.Val, | ||||
| 		"system_uptime":                  s.SystemStats.Uptime.Val, | ||||
| 		"lan-rx_bytes":                   s.Stat.LanRxBytes.Val, | ||||
| 		"lan-rx_packets":                 s.Stat.LanRxPackets.Val, | ||||
| 		"lan-tx_bytes":                   s.Stat.LanTxBytes.Val, | ||||
| 		"lan-tx_packets":                 s.Stat.LanTxPackets.Val, | ||||
| 		"wan-rx_bytes":                   s.Stat.WanRxBytes.Val, | ||||
| 		"wan-rx_dropped":                 s.Stat.WanRxDropped.Val, | ||||
| 		"wan-rx_packets":                 s.Stat.WanRxPackets.Val, | ||||
| 		"wan-tx_bytes":                   s.Stat.WanTxBytes.Val, | ||||
| 		"wan-tx_packets":                 s.Stat.WanTxPackets.Val, | ||||
| 		"lan-rx_bytes":                   s.Stat.Gw.LanRxBytes.Val, | ||||
| 		"lan-rx_packets":                 s.Stat.Gw.LanRxPackets.Val, | ||||
| 		"lan-tx_bytes":                   s.Stat.Gw.LanTxBytes.Val, | ||||
| 		"lan-tx_packets":                 s.Stat.Gw.LanTxPackets.Val, | ||||
| 	} | ||||
| 	/* | ||||
| 		for _, p := range s.PortTable { | ||||
| 			t := map[string]string{ | ||||
| 				"device_name": tags["name"], | ||||
| 				"site_name":   tags["site_name"], | ||||
| 				"name":        p.Name, | ||||
| 				"ifname":      p.Ifname, | ||||
| 				"ip":          p.IP, | ||||
| 				"mac":         p.Mac, | ||||
| 				"up":          p.Up.Txt, | ||||
| 				"speed":       p.Speed.Txt, | ||||
| 				"full_duplex": p.FullDuplex.Txt, | ||||
| 				"enable":      p.Enable.Txt, | ||||
| 			} | ||||
| 			f := map[string]interface{}{ | ||||
| 				"rx_bytes":     p.RxBytes.Val, | ||||
| 				"rx_dropped":   p.RxDropped.Val, | ||||
| 				"rx_errors":    p.RxErrors.Val, | ||||
| 				"rx_packets":   p.RxBytes.Val, | ||||
| 				"tx_bytes":     p.TxBytes.Val, | ||||
| 				"tx_dropped":   p.TxDropped.Val, | ||||
| 				"tx_errors":    p.TxErrors.Val, | ||||
| 				"tx_packets":   p.TxPackets.Val, | ||||
| 				"rx_multicast": p.RxMulticast.Val, | ||||
| 				"dns_servers":  strings.Join(p.DNS, ","), | ||||
| 			} | ||||
| 			r.send(&metric{Table: "usg_ports", Tags: t, Fields: f}) | ||||
| 		} | ||||
| 	*/ | ||||
| 	fields = Combine(fields, u.batchSysStats(r, s.SysStats, s.SystemStats)) | ||||
| 	r.send(&metric{Table: "usg", Tags: tags, Fields: fields}) | ||||
| 	u.batchNetworkTable(r, tags, s.NetworkTable) | ||||
| 	u.batchUSGwans(r, tags, s.Wan1, s.Wan2) | ||||
| } | ||||
| 
 | ||||
| 	for _, p := range s.NetworkTable { | ||||
| func (u *InfluxUnifi) batchUSGwans(r report, tags map[string]string, wans ...unifi.Wan) { | ||||
| 	for _, wan := range wans { | ||||
| 		if !wan.Up.Val { | ||||
| 			continue | ||||
| 		} | ||||
| 		tags := map[string]string{ | ||||
| 			"device_name": s.Name, | ||||
| 			"device_id":   s.ID, | ||||
| 			"device_mac":  s.Mac, | ||||
| 			"site_name":   s.SiteName, | ||||
| 			"device_name": tags["name"], | ||||
| 			"site_name":   tags["site_name"], | ||||
| 			"wan_name":    wan.Name, | ||||
| 		} | ||||
| 		fields := map[string]interface{}{ | ||||
| 			"bytes-r":      wan.BytesR.Val, | ||||
| 			"enable":       wan.Enable.Val, | ||||
| 			"full_duplex":  wan.FullDuplex.Val, | ||||
| 			"gateway":      wan.Gateway, | ||||
| 			"ifname":       wan.Ifname, | ||||
| 			"ip":           wan.IP, | ||||
| 			"mac":          wan.Mac, | ||||
| 			"max_speed":    wan.MaxSpeed.Val, | ||||
| 			"name":         wan.Name, | ||||
| 			"rx_bytes":     wan.RxBytes.Val, | ||||
| 			"rx_bytes-r":   wan.RxBytesR.Val, | ||||
| 			"rx_dropped":   wan.RxDropped.Val, | ||||
| 			"rx_errors":    wan.RxErrors.Val, | ||||
| 			"rx_multicast": wan.RxMulticast.Val, | ||||
| 			"rx_packets":   wan.RxPackets.Val, | ||||
| 			"type":         wan.Type, | ||||
| 			"speed":        wan.Speed.Val, | ||||
| 			"up":           wan.Up.Val, | ||||
| 			"tx_bytes":     wan.TxBytes.Val, | ||||
| 			"tx_bytes-r":   wan.TxBytesR.Val, | ||||
| 			"tx_dropped":   wan.TxDropped.Val, | ||||
| 			"tx_errors":    wan.TxErrors.Val, | ||||
| 			"tx_packets":   wan.TxPackets.Val, | ||||
| 		} | ||||
| 		r.send(&metric{Table: "usg_wan_ports", Tags: tags, Fields: fields}) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (u *InfluxUnifi) batchNetworkTable(r report, tags map[string]string, nt unifi.NetworkTable) { | ||||
| 	for _, p := range nt { | ||||
| 		tags := map[string]string{ | ||||
| 			"device_name": tags["name"], | ||||
| 			"site_name":   tags["site_name"], | ||||
| 			"up":          p.Up.Txt, | ||||
| 			"enabled":     p.Enabled.Txt, | ||||
| 			"site_id":     p.SiteID, | ||||
| 			"ip":          p.IP, | ||||
| 			"ip_subnet":   p.IPSubnet, | ||||
| 			"mac":         p.Mac, | ||||
| 			"name":        p.Name, | ||||
| 			"domain_name": p.DomainName, | ||||
|  | @ -133,34 +140,4 @@ func (u *InfluxUnifi) batchUSG(r report, s *unifi.USG) { | |||
| 		} | ||||
| 		r.send(&metric{Table: "usg_networks", Tags: tags, Fields: fields}) | ||||
| 	} | ||||
| 	for _, p := range s.PortTable { | ||||
| 		tags := map[string]string{ | ||||
| 			"device_name": s.Name, | ||||
| 			"device_id":   s.ID, | ||||
| 			"device_mac":  s.Mac, | ||||
| 			"site_name":   s.SiteName, | ||||
| 			"name":        p.Name, | ||||
| 			"ifname":      p.Ifname, | ||||
| 			"ip":          p.IP, | ||||
| 			"mac":         p.Mac, | ||||
| 			"up":          p.Up.Txt, | ||||
| 			"speed":       p.Speed.Txt, | ||||
| 			"full_duplex": p.FullDuplex.Txt, | ||||
| 			"enable":      p.Enable.Txt, | ||||
| 		} | ||||
| 		fields := map[string]interface{}{ | ||||
| 			"rx_bytes":     p.RxBytes.Val, | ||||
| 			"rx_dropped":   p.RxDropped.Val, | ||||
| 			"rx_errors":    p.RxErrors.Val, | ||||
| 			"rx_packets":   p.RxBytes.Val, | ||||
| 			"tx_bytes":     p.TxBytes.Val, | ||||
| 			"tx_dropped":   p.TxDropped.Val, | ||||
| 			"tx_errors":    p.TxErrors.Val, | ||||
| 			"tx_packets":   p.TxPackets.Val, | ||||
| 			"rx_multicast": p.RxMulticast.Val, | ||||
| 			"dns_servers":  strings.Join(p.DNS, ","), | ||||
| 		} | ||||
| 		r.send(&metric{Table: "usg_ports", Tags: tags, Fields: fields}) | ||||
| 
 | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -19,7 +19,7 @@ func (u *InfluxUnifi) batchUSW(r report, s *unifi.USW) { | |||
| 		"serial":    s.Serial, | ||||
| 		"type":      s.Type, | ||||
| 	} | ||||
| 	fields := map[string]interface{}{ | ||||
| 	fields := Combine(map[string]interface{}{ | ||||
| 		"guest-num_sta":       s.GuestNumSta.Val, | ||||
| 		"ip":                  s.IP, | ||||
| 		"bytes":               s.Bytes.Val, | ||||
|  | @ -31,15 +31,6 @@ func (u *InfluxUnifi) batchUSW(r report, s *unifi.USW) { | |||
| 		"uptime":              s.Uptime.Val, | ||||
| 		"state":               s.State.Val, | ||||
| 		"user-num_sta":        s.UserNumSta.Val, | ||||
| 		"loadavg_1":           s.SysStats.Loadavg1.Val, | ||||
| 		"loadavg_5":           s.SysStats.Loadavg5.Val, | ||||
| 		"loadavg_15":          s.SysStats.Loadavg15.Val, | ||||
| 		"mem_buffer":          s.SysStats.MemBuffer.Val, | ||||
| 		"mem_used":            s.SysStats.MemUsed.Val, | ||||
| 		"mem_total":           s.SysStats.MemTotal.Val, | ||||
| 		"cpu":                 s.SystemStats.CPU.Val, | ||||
| 		"mem":                 s.SystemStats.Mem.Val, | ||||
| 		"system_uptime":       s.SystemStats.Uptime.Val, | ||||
| 		"stat_bytes":          s.Stat.Sw.Bytes.Val, | ||||
| 		"stat_rx_bytes":       s.Stat.Sw.RxBytes.Val, | ||||
| 		"stat_rx_crypts":      s.Stat.Sw.RxCrypts.Val, | ||||
|  | @ -52,21 +43,24 @@ func (u *InfluxUnifi) batchUSW(r report, s *unifi.USW) { | |||
| 		"stat_tx_errors":      s.Stat.Sw.TxErrors.Val, | ||||
| 		"stat_tx_packets":     s.Stat.Sw.TxPackets.Val, | ||||
| 		"stat_tx_retries":     s.Stat.Sw.TxRetries.Val, | ||||
| 	} | ||||
| 	}, u.batchSysStats(r, s.SysStats, s.SystemStats)) | ||||
| 	r.send(&metric{Table: "usw", Tags: tags, Fields: fields}) | ||||
| 	u.batchPortTable(r, tags, s.PortTable) | ||||
| } | ||||
| 
 | ||||
| 	for _, p := range s.PortTable { | ||||
| func (u *InfluxUnifi) batchPortTable(r report, tags map[string]string, pt []unifi.Port) { | ||||
| 	for _, p := range pt { | ||||
| 		if !p.Up.Val || !p.Enable.Val { | ||||
| 			continue // only record UP ports.
 | ||||
| 		} | ||||
| 		tags := map[string]string{ | ||||
| 			"site_name":   s.SiteName, | ||||
| 			"device_name": s.Name, | ||||
| 			"site_name":   tags["site_name"], | ||||
| 			"device_name": tags["name"], | ||||
| 			"name":        p.Name, | ||||
| 			"poe_mode":    p.PoeMode, | ||||
| 			"port_poe":    p.PortPoe.Txt, | ||||
| 			"port_idx":    p.PortIdx.Txt, | ||||
| 			"port_id":     s.Name + " Port " + p.PortIdx.Txt, | ||||
| 			"port_id":     tags["name"] + " Port " + p.PortIdx.Txt, | ||||
| 			"poe_enable":  p.PoeEnable.Txt, | ||||
| 			"flowctrl_rx": p.FlowctrlRx.Txt, | ||||
| 			"flowctrl_tx": p.FlowctrlTx.Txt, | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue