mirror of
https://github.com/unpoller/unpoller.git
synced 2026-09-30 11:36:41 +02:00
- 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).
50 lines
1.2 KiB
Go
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
|
|
}
|