Files
unpoller_unpoller/pkg/inputunifi/discover.go
T
brngates98 9cfb732c11 Replace Python endpoint-discovery with --discover flag (replaces #936)
- Add --discover and --discover-output to unpoller; uses first unifi
  controller from config to probe known API endpoints and write a
  shareable markdown report.
- Add Discoverer interface and RunDiscover(); inputunifi implements
  Discoverer via unifi.DiscoverEndpoints.
- Remove tools/endpoint-discovery/ (Python/Playwright).
- Add docs/PR_936_REPLACEMENT.md. .gitignore: test config and report.

Requires unpoller/unifi with DiscoverEndpoints (replace in go.mod until
unifi release).
2026-01-30 20:17:00 -05:00

50 lines
1.2 KiB
Go

package inputunifi
import (
"fmt"
)
// Discover implements poller.Discoverer. It uses the first configured controller
// to probe known API endpoints and write a shareable report to outputPath.
// Uses the same credentials as normal polling (from config file).
func (u *InputUnifi) Discover(outputPath string) error {
if u.Config == nil || u.Disable {
return fmt.Errorf("unifi input disabled or not configured")
}
u.setDefaults(&u.Default)
if len(u.Controllers) == 0 && !u.Dynamic {
u.Controllers = []*Controller{&u.Default}
}
if len(u.Controllers) == 0 {
return fmt.Errorf("no unifi controller configured")
}
c := u.setControllerDefaults(u.Controllers[0])
if c.URL == "" {
return fmt.Errorf("first controller has no URL")
}
if err := u.getUnifi(c); err != nil {
return fmt.Errorf("authenticating to controller: %w", err)
}
sites, err := c.Unifi.GetSites()
if err != nil {
return fmt.Errorf("getting sites: %w", err)
}
site := "default"
if len(sites) > 0 && sites[0].Name != "" {
site = sites[0].Name
}
if err := c.Unifi.DiscoverEndpoints(site, outputPath); err != nil {
return fmt.Errorf("writing discovery report: %w", err)
}
return nil
}