add dead ports and sfp data
This commit is contained in:
		
							parent
							
								
									a77d5ab566
								
							
						
					
					
						commit
						bd10066545
					
				|  | @ -5,7 +5,7 @@ go 1.15 | ||||||
| require ( | require ( | ||||||
| 	github.com/influxdata/influxdb1-client v0.0.0-20200515024757-02f0bf5dbca3 | 	github.com/influxdata/influxdb1-client v0.0.0-20200515024757-02f0bf5dbca3 | ||||||
| 	github.com/unifi-poller/poller v0.0.8 | 	github.com/unifi-poller/poller v0.0.8 | ||||||
| 	github.com/unifi-poller/unifi v0.0.7-0.20210308061543-395de2119e12 | 	github.com/unifi-poller/unifi v0.0.7-0.20210315000917-22c6030f9df5 | ||||||
| 	github.com/unifi-poller/webserver v0.0.0-20200628212441-340749c94743 | 	github.com/unifi-poller/webserver v0.0.0-20200628212441-340749c94743 | ||||||
| 	golift.io/cnfg v0.0.7 | 	golift.io/cnfg v0.0.7 | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | @ -32,12 +32,14 @@ const ( | ||||||
| // Config defines the data needed to store metrics in InfluxDB.
 | // Config defines the data needed to store metrics in InfluxDB.
 | ||||||
| type Config struct { | type Config struct { | ||||||
| 	Interval  cnfg.Duration `json:"interval,omitempty" toml:"interval,omitempty" xml:"interval" yaml:"interval"` | 	Interval  cnfg.Duration `json:"interval,omitempty" toml:"interval,omitempty" xml:"interval" yaml:"interval"` | ||||||
| 	Disable   bool          `json:"disable" toml:"disable" xml:"disable,attr" yaml:"disable"` |  | ||||||
| 	VerifySSL bool          `json:"verify_ssl" toml:"verify_ssl" xml:"verify_ssl" yaml:"verify_ssl"` |  | ||||||
| 	URL       string        `json:"url,omitempty" toml:"url,omitempty" xml:"url" yaml:"url"` | 	URL       string        `json:"url,omitempty" toml:"url,omitempty" xml:"url" yaml:"url"` | ||||||
| 	User      string        `json:"user,omitempty" toml:"user,omitempty" xml:"user" yaml:"user"` | 	User      string        `json:"user,omitempty" toml:"user,omitempty" xml:"user" yaml:"user"` | ||||||
| 	Pass      string        `json:"pass,omitempty" toml:"pass,omitempty" xml:"pass" yaml:"pass"` | 	Pass      string        `json:"pass,omitempty" toml:"pass,omitempty" xml:"pass" yaml:"pass"` | ||||||
| 	DB        string        `json:"db,omitempty" toml:"db,omitempty" xml:"db" yaml:"db"` | 	DB        string        `json:"db,omitempty" toml:"db,omitempty" xml:"db" yaml:"db"` | ||||||
|  | 	Disable   bool          `json:"disable" toml:"disable" xml:"disable,attr" yaml:"disable"` | ||||||
|  | 	VerifySSL bool          `json:"verify_ssl" toml:"verify_ssl" xml:"verify_ssl" yaml:"verify_ssl"` | ||||||
|  | 	// Save data for dead ports? ie. ports that are down or disabled.
 | ||||||
|  | 	DeadPorts bool `json:"dead_ports" toml:"dead_ports" xml:"dead_ports" yaml:"dead_ports"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // InfluxDB allows the data to be nested in the config file.
 | // InfluxDB allows the data to be nested in the config file.
 | ||||||
|  |  | ||||||
|  | @ -67,26 +67,32 @@ func (u *InfluxUnifi) batchUSWstat(sw *unifi.Sw) map[string]interface{} { | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | //nolint:funlen
 | ||||||
| func (u *InfluxUnifi) batchPortTable(r report, t map[string]string, pt []unifi.Port) { | func (u *InfluxUnifi) batchPortTable(r report, t map[string]string, pt []unifi.Port) { | ||||||
| 	for _, p := range pt { | 	for _, p := range pt { | ||||||
| 		if !p.Up.Val || !p.Enable.Val { | 		if !u.DeadPorts && (!p.Up.Val || !p.Enable.Val) { | ||||||
| 			continue // only record UP ports.
 | 			continue // only record UP ports.
 | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		tags := map[string]string{ | 		tags := map[string]string{ | ||||||
| 			"site_name":   t["site_name"], | 			"site_name":      t["site_name"], | ||||||
| 			"device_name": t["name"], | 			"device_name":    t["name"], | ||||||
| 			"source":      t["source"], | 			"source":         t["source"], | ||||||
| 			"type":        t["type"], | 			"type":           t["type"], | ||||||
| 			"name":        p.Name, | 			"name":           p.Name, | ||||||
| 			"poe_mode":    p.PoeMode, | 			"poe_mode":       p.PoeMode, | ||||||
| 			"port_poe":    p.PortPoe.Txt, | 			"port_poe":       p.PortPoe.Txt, | ||||||
| 			"port_idx":    p.PortIdx.Txt, | 			"port_idx":       p.PortIdx.Txt, | ||||||
| 			"port_id":     t["name"] + " Port " + p.PortIdx.Txt, | 			"port_id":        t["name"] + " Port " + p.PortIdx.Txt, | ||||||
| 			"poe_enable":  p.PoeEnable.Txt, | 			"poe_enable":     p.PoeEnable.Txt, | ||||||
| 			"flowctrl_rx": p.FlowctrlRx.Txt, | 			"flowctrl_rx":    p.FlowctrlRx.Txt, | ||||||
| 			"flowctrl_tx": p.FlowctrlTx.Txt, | 			"flowctrl_tx":    p.FlowctrlTx.Txt, | ||||||
| 			"media":       p.Media, | 			"media":          p.Media, | ||||||
|  | 			"has_sfp":        p.SFPFound.Txt, | ||||||
|  | 			"sfp_compliance": p.SFPCompliance, | ||||||
|  | 			"sfp_serial":     p.SFPSerial, | ||||||
|  | 			"sfp_vendor":     p.SFPVendor, | ||||||
|  | 			"sfp_part":       p.SFPPart, | ||||||
| 		} | 		} | ||||||
| 		fields := map[string]interface{}{ | 		fields := map[string]interface{}{ | ||||||
| 			"dbytes_r":     p.BytesR.Val, | 			"dbytes_r":     p.BytesR.Val, | ||||||
|  | @ -114,6 +120,14 @@ func (u *InfluxUnifi) batchPortTable(r report, t map[string]string, pt []unifi.P | ||||||
| 			fields["poe_voltage"] = p.PoeVoltage.Val | 			fields["poe_voltage"] = p.PoeVoltage.Val | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		if p.SFPFound.Val { | ||||||
|  | 			fields["sfp_current"] = p.SFPCurrent.Val | ||||||
|  | 			fields["sfp_voltage"] = p.SFPVoltage.Val | ||||||
|  | 			fields["sfp_temperature"] = p.SFPTemperature.Val | ||||||
|  | 			fields["sfp_txpower"] = p.SFPTxpower.Val | ||||||
|  | 			fields["sfp_rxpower"] = p.SFPRxpower.Val | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		r.send(&metric{Table: "usw_ports", Tags: tags, Fields: fields}) | 		r.send(&metric{Table: "usw_ports", Tags: tags, Fields: fields}) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue