mirror of
https://github.com/unpoller/unpoller.git
synced 2026-03-31 06:24:19 -04:00
fix duplicate controllers due to cloud gateways site being default
This commit is contained in:
@@ -193,7 +193,8 @@ func (u *InputUnifi) checkSites(c *Controller) error {
|
||||
FIRST:
|
||||
for _, s := range c.Sites {
|
||||
for _, site := range sites {
|
||||
if s == site.Name {
|
||||
// Case-insensitive comparison for site names
|
||||
if strings.EqualFold(s, site.Name) {
|
||||
keep = append(keep, s)
|
||||
|
||||
continue FIRST
|
||||
|
||||
@@ -30,16 +30,7 @@ func (u *InputUnifi) Initialize(l poller.Logger) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
if u.setDefaults(&u.Default); len(u.Controllers) == 0 && !u.Dynamic {
|
||||
// If remote mode is enabled at config level, set it on default controller
|
||||
if u.Remote && u.RemoteAPIKey != "" {
|
||||
u.Default.Remote = true
|
||||
u.Default.APIKey = u.RemoteAPIKey
|
||||
}
|
||||
u.Controllers = []*Controller{&u.Default}
|
||||
}
|
||||
|
||||
// Discover remote controllers if remote mode is enabled
|
||||
// Discover remote controllers if remote mode is enabled at config level
|
||||
if u.Remote && u.RemoteAPIKey != "" {
|
||||
u.Logf("Remote API mode enabled, discovering controllers...")
|
||||
|
||||
@@ -47,32 +38,37 @@ func (u *InputUnifi) Initialize(l poller.Logger) error {
|
||||
if err != nil {
|
||||
u.LogErrorf("Failed to discover remote controllers: %v", err)
|
||||
} else if len(discovered) > 0 {
|
||||
// Merge discovered controllers with configured ones
|
||||
u.Controllers = append(u.Controllers, discovered...)
|
||||
// Replace controllers with discovered ones when using config-level remote mode
|
||||
u.Controllers = discovered
|
||||
u.Logf("Discovered %d remote controller(s)", len(discovered))
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Only set default controller if not using config-level remote mode
|
||||
if u.setDefaults(&u.Default); len(u.Controllers) == 0 && !u.Dynamic {
|
||||
u.Controllers = []*Controller{&u.Default}
|
||||
}
|
||||
|
||||
// Also check individual controllers for remote flag
|
||||
for _, c := range u.Controllers {
|
||||
if c.Remote && c.APIKey != "" && c.ConsoleID == "" {
|
||||
// This controller has remote flag but no console ID, try to discover
|
||||
discovered, err := u.discoverRemoteControllers(c.APIKey)
|
||||
if err != nil {
|
||||
u.LogErrorf("Failed to discover remote controllers for controller: %v", err)
|
||||
continue
|
||||
}
|
||||
if len(discovered) > 0 {
|
||||
// Replace this controller with discovered ones
|
||||
// Remove the current one and add discovered
|
||||
newControllers := []*Controller{}
|
||||
for _, existing := range u.Controllers {
|
||||
if existing != c {
|
||||
newControllers = append(newControllers, existing)
|
||||
}
|
||||
// Check individual controllers for remote flag (per-controller remote mode)
|
||||
for _, c := range u.Controllers {
|
||||
if c.Remote && c.APIKey != "" && c.ConsoleID == "" {
|
||||
// This controller has remote flag but no console ID, try to discover
|
||||
discovered, err := u.discoverRemoteControllers(c.APIKey)
|
||||
if err != nil {
|
||||
u.LogErrorf("Failed to discover remote controllers for controller: %v", err)
|
||||
continue
|
||||
}
|
||||
if len(discovered) > 0 {
|
||||
// Replace this controller with discovered ones
|
||||
// Remove the current one and add discovered
|
||||
newControllers := []*Controller{}
|
||||
for _, existing := range u.Controllers {
|
||||
if existing != c {
|
||||
newControllers = append(newControllers, existing)
|
||||
}
|
||||
}
|
||||
newControllers = append(newControllers, discovered...)
|
||||
u.Controllers = newControllers
|
||||
}
|
||||
newControllers = append(newControllers, discovered...)
|
||||
u.Controllers = newControllers
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -271,14 +271,58 @@ func (u *InputUnifi) discoverRemoteControllers(apiKey string) ([]*Controller, er
|
||||
URL: fmt.Sprintf("%s/v1/connector/consoles/%s", remoteAPIBaseURL, console.ID),
|
||||
}
|
||||
|
||||
// Ensure defaults are set before calling setControllerDefaults
|
||||
u.setDefaults(&u.Default)
|
||||
|
||||
// Copy defaults
|
||||
controller = u.setControllerDefaults(controller)
|
||||
|
||||
// Set remote-specific defaults
|
||||
// Set remote-specific defaults and ensure all boolean pointers are initialized
|
||||
t := true
|
||||
f := false
|
||||
if controller.VerifySSL == nil {
|
||||
controller.VerifySSL = &t // Remote API should verify SSL
|
||||
}
|
||||
// Ensure all boolean pointers are set (safety check)
|
||||
if controller.HashPII == nil {
|
||||
controller.HashPII = &f
|
||||
}
|
||||
if controller.DropPII == nil {
|
||||
controller.DropPII = &f
|
||||
}
|
||||
if controller.SaveSites == nil {
|
||||
controller.SaveSites = &t
|
||||
}
|
||||
if controller.SaveDPI == nil {
|
||||
controller.SaveDPI = &f
|
||||
}
|
||||
if controller.SaveEvents == nil {
|
||||
controller.SaveEvents = &f
|
||||
}
|
||||
if controller.SaveAlarms == nil {
|
||||
controller.SaveAlarms = &f
|
||||
}
|
||||
if controller.SaveAnomal == nil {
|
||||
controller.SaveAnomal = &f
|
||||
}
|
||||
if controller.SaveIDs == nil {
|
||||
controller.SaveIDs = &f
|
||||
}
|
||||
if controller.SaveTraffic == nil {
|
||||
controller.SaveTraffic = &f
|
||||
}
|
||||
if controller.SaveRogue == nil {
|
||||
controller.SaveRogue = &f
|
||||
}
|
||||
if controller.SaveSyslog == nil {
|
||||
controller.SaveSyslog = &f
|
||||
}
|
||||
if controller.SaveProtectLogs == nil {
|
||||
controller.SaveProtectLogs = &f
|
||||
}
|
||||
if controller.ProtectThumbnails == nil {
|
||||
controller.ProtectThumbnails = &f
|
||||
}
|
||||
|
||||
// Extract site names
|
||||
siteNames := make([]string, 0, len(sites))
|
||||
@@ -292,13 +336,13 @@ func (u *InputUnifi) discoverRemoteControllers(apiKey string) ([]*Controller, er
|
||||
// as the default site name override. The console name is in reportedState.name
|
||||
// (consoleName was already set above in the loop)
|
||||
|
||||
// If we only have one site and it's "default", use the console name as override
|
||||
if len(siteNames) == 1 && (siteNames[0] == "default" || siteNames[0] == "") && consoleName != "" {
|
||||
// If we only have one site and it's "default" (case-insensitive), use the console name as override
|
||||
if len(siteNames) == 1 && strings.EqualFold(siteNames[0], "default") && consoleName != "" {
|
||||
controller.DefaultSiteNameOverride = consoleName
|
||||
// Set sites to "all" since we're overriding the default site name
|
||||
controller.Sites = []string{"all"}
|
||||
u.LogDebugf("Using console name '%s' as default site name override for Cloud Gateway", consoleName)
|
||||
}
|
||||
|
||||
if len(siteNames) > 0 {
|
||||
} else if len(siteNames) > 0 {
|
||||
controller.Sites = siteNames
|
||||
} else {
|
||||
controller.Sites = []string{"all"}
|
||||
|
||||
Reference in New Issue
Block a user