From 664d7678f179db7aeeef02fa0e8360ce1a964824 Mon Sep 17 00:00:00 2001 From: appkins Date: Sun, 2 Mar 2025 21:26:33 -0600 Subject: [PATCH] Union for clients --- unifi/{active_clients.go => client.go} | 32 +++++++++++---- unifi/local_client.go | 57 -------------------------- 2 files changed, 23 insertions(+), 66 deletions(-) rename unifi/{active_clients.go => client.go} (91%) delete mode 100644 unifi/local_client.go diff --git a/unifi/active_clients.go b/unifi/client.go similarity index 91% rename from unifi/active_clients.go rename to unifi/client.go index 99e6782..789d6fd 100644 --- a/unifi/active_clients.go +++ b/unifi/client.go @@ -44,6 +44,7 @@ type ActiveClient struct { Ccq int `json:"ccq,omitempty"` Channel int `json:"channel,omitempty"` ChannelWidth string `json:"channel_width,omitempty"` + DetailedStates DetailedStates `json:"detailed_states,omitempty"` DhcpendTime int `json:"dhcpend_time,omitempty"` DisplayName string `json:"display_name,omitempty"` Essid string `json:"essid,omitempty"` @@ -62,6 +63,10 @@ type ActiveClient struct { IsGuest bool `json:"is_guest,omitempty"` IsMlo bool `json:"is_mlo,omitempty"` IsWired bool `json:"is_wired,omitempty"` + LastConnectionNetworkID string `json:"last_connection_network_id,omitempty"` + LastConnectionNetworkName string `json:"last_connection_network_name,omitempty"` + LastIP string `json:"last_ip,omitempty"` + LastIpv6 []string `json:"last_ipv6,omitempty"` LastRadio string `json:"last_radio,omitempty"` LastSeen int `json:"last_seen,omitempty"` LastUplinkMac string `json:"last_uplink_mac,omitempty"` @@ -91,6 +96,7 @@ type ActiveClient struct { Signal int `json:"signal,omitempty"` SiteID string `json:"site_id,omitempty"` Status string `json:"status,omitempty"` + SwPort int `json:"sw_port,omitempty"` Tags []string `json:"tags,omitempty"` TxBytes int `json:"tx_bytes,omitempty"` TxBytesR int `json:"tx_bytes-r,omitempty"` @@ -99,29 +105,26 @@ type ActiveClient struct { TxRate int `json:"tx_rate,omitempty"` Type string `json:"type,omitempty"` UnifiDevice bool `json:"unifi_device,omitempty"` + UnifiDeviceInfo UnifiDeviceInfo `json:"unifi_device_info,omitempty"` UplinkMac string `json:"uplink_mac,omitempty"` Uptime int `json:"uptime,omitempty"` UseFixedip bool `json:"use_fixedip,omitempty"` - UserID string `json:"user_id,omitempty"` UsergroupID string `json:"usergroup_id,omitempty"` + UserID string `json:"user_id,omitempty"` VirtualNetworkOverrideEnabled bool `json:"virtual_network_override_enabled,omitempty"` VirtualNetworkOverrideID string `json:"virtual_network_override_id,omitempty"` WifiExperienceAverage int `json:"wifi_experience_average,omitempty"` WifiExperienceScore int `json:"wifi_experience_score,omitempty"` WifiTxAttempts int `json:"wifi_tx_attempts,omitempty"` WifiTxRetriesPercentage float64 `json:"wifi_tx_retries_percentage,omitempty"` - WlanconfID string `json:"wlanconf_id,omitempty"` - UnifiDeviceInfo UnifiDeviceInfo `json:"unifi_device_info,omitempty"` - DetailedStates DetailedStates `json:"detailed_states,omitempty"` - SwPort int `json:"sw_port,omitempty"` WiredRateMbps int `json:"wired_rate_mbps,omitempty"` - LastIpv6 []string `json:"last_ipv6,omitempty"` + WlanconfID string `json:"wlanconf_id,omitempty"` } -type ActiveClients []ActiveClient +type ClientList []Client -func (c *Client) ListActiveClients(ctx context.Context, site string) (ActiveClients, error) { - var respBody []ActiveClient +func (c *Client) ListClientsActive(ctx context.Context, site string) (ClientList, error) { + var respBody []Client err := c.do(ctx, "GET", fmt.Sprintf("%s/site/%s/clients/active?includeUnifiDevices=true", c.apiV2Path, site), nil, &respBody) if err != nil { @@ -130,3 +133,14 @@ func (c *Client) ListActiveClients(ctx context.Context, site string) (ActiveClie return respBody, nil } + +func (c *Client) GetClientLocal(ctx context.Context, site string, mac string) (*Client, error) { + var respBody Client + + err := c.do(ctx, "GET", fmt.Sprintf("%s/site/%s/clients/local/%s?includeUnifiDevices=true&includeUnifiDevices=true", c.apiV2Path, site, mac), nil, &respBody) + if err != nil { + return nil, err + } + + return &respBody, nil +} diff --git a/unifi/local_client.go b/unifi/local_client.go deleted file mode 100644 index afc8a67..0000000 --- a/unifi/local_client.go +++ /dev/null @@ -1,57 +0,0 @@ -package unifi - -import ( - "context" - "fmt" -) - -type LocalClient struct { - Blocked bool `json:"blocked,omitempty"` - DisplayName string `json:"display_name,omitempty"` - Fingerprint Fingerprint `json:"fingerprint,omitempty"` - FirstSeen int `json:"first_seen,omitempty"` - FixedIP string `json:"fixed_ip,omitempty"` - Hostname string `json:"hostname,omitempty"` - ID string `json:"id,omitempty"` - IsAllowedInVisualProgramming bool `json:"is_allowed_in_visual_programming,omitempty"` - IsGuest bool `json:"is_guest,omitempty"` - IsWired bool `json:"is_wired,omitempty"` - LastConnectionNetworkID string `json:"last_connection_network_id,omitempty"` - LastConnectionNetworkName string `json:"last_connection_network_name,omitempty"` - LastIP string `json:"last_ip,omitempty"` - LastIpv6 []string `json:"last_ipv6,omitempty"` - LastSeen int `json:"last_seen,omitempty"` - LastUplinkMac string `json:"last_uplink_mac,omitempty"` - LastUplinkName string `json:"last_uplink_name,omitempty"` - LocalDNSRecord string `json:"local_dns_record,omitempty"` - LocalDNSRecordEnabled bool `json:"local_dns_record_enabled,omitempty"` - Mac string `json:"mac,omitempty"` - ModelName string `json:"model_name,omitempty"` - Name string `json:"name,omitempty"` - Noted bool `json:"noted,omitempty"` - Oui string `json:"oui,omitempty"` - SiteID string `json:"site_id,omitempty"` - Status string `json:"status,omitempty"` - SwPort int `json:"sw_port,omitempty"` - Tags []any `json:"tags,omitempty"` - Type string `json:"type,omitempty"` - UnifiDevice bool `json:"unifi_device,omitempty"` - UplinkMac string `json:"uplink_mac,omitempty"` - UseFixedip bool `json:"use_fixedip,omitempty"` - UserID string `json:"user_id,omitempty"` - UsergroupID string `json:"usergroup_id,omitempty"` - VirtualNetworkOverrideEnabled bool `json:"virtual_network_override_enabled,omitempty"` - VirtualNetworkOverrideID string `json:"virtual_network_override_id,omitempty"` - WiredRateMbps int `json:"wired_rate_mbps,omitempty"` -} - -func (c *Client) GetLocalClient(ctx context.Context, site string, mac string) (*LocalClient, error) { - var respBody LocalClient - - err := c.do(ctx, "GET", fmt.Sprintf("%s/site/%s/clients/local/%s?includeUnifiDevices=true&includeUnifiDevices=true", c.apiV2Path, site, mac), nil, &respBody) - if err != nil { - return nil, err - } - - return &respBody, nil -}