mirror of
https://github.com/netbirdio/netbird.git
synced 2026-05-20 23:59:55 +00:00
The cluster listing now answers three questions in one round-trip instead of forcing the dashboard to cross-reference the domains API: which clusters can this account see, are they currently up, and what do they support. The ProxyCluster wire type drops the boolean self_hosted in favour of a `type` enum (`account` / `shared`) plus explicit `online`, `supports_custom_ports`, `require_subdomain`, and `supports_crowdsec` fields. Store query reworked so offline clusters still appear (no last_seen WHERE), with online and connected_proxies both derived from the existing 2-min active window via portable CASE expressions; the 1-hour heartbeat reaper still removes long-stale rows. Service manager enriches each cluster with the capability flags via the existing per-cluster lookups (CapabilityProvider now also exposes ClusterSupportsCrowdSec). GetActiveClusterAddresses* keep their tight 2-min filter so service routing and domain enumeration aren't pulled into the wider window. The hard cut removes self_hosted from the response — the dashboard is the only consumer and is updated in the matching PR; no transitional field is shipped. Adds a cross-engine regression test asserting offline clusters surface, connected_proxies counts only fresh proxies, and account-scoped BYOP clusters never leak across accounts.
34 lines
2.0 KiB
Go
34 lines
2.0 KiB
Go
package service
|
|
|
|
//go:generate go run github.com/golang/mock/mockgen -package service -destination=interface_mock.go -source=./interface.go -build_flags=-mod=mod
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/netbirdio/netbird/management/internals/modules/reverseproxy/proxy"
|
|
)
|
|
|
|
type Manager interface {
|
|
GetClusters(ctx context.Context, accountID, userID string) ([]proxy.Cluster, error)
|
|
DeleteAccountCluster(ctx context.Context, accountID, userID, clusterAddress string) error
|
|
GetAllServices(ctx context.Context, accountID, userID string) ([]*Service, error)
|
|
GetService(ctx context.Context, accountID, userID, serviceID string) (*Service, error)
|
|
CreateService(ctx context.Context, accountID, userID string, service *Service) (*Service, error)
|
|
UpdateService(ctx context.Context, accountID, userID string, service *Service) (*Service, error)
|
|
DeleteService(ctx context.Context, accountID, userID, serviceID string) error
|
|
DeleteAllServices(ctx context.Context, accountID, userID string) error
|
|
SetCertificateIssuedAt(ctx context.Context, accountID, serviceID string) error
|
|
SetStatus(ctx context.Context, accountID, serviceID string, status Status) error
|
|
ReloadAllServicesForAccount(ctx context.Context, accountID string) error
|
|
ReloadService(ctx context.Context, accountID, serviceID string) error
|
|
GetGlobalServices(ctx context.Context) ([]*Service, error)
|
|
GetServiceByID(ctx context.Context, accountID, serviceID string) (*Service, error)
|
|
GetAccountServices(ctx context.Context, accountID string) ([]*Service, error)
|
|
GetServiceIDByTargetID(ctx context.Context, accountID string, resourceID string) (string, error)
|
|
CreateServiceFromPeer(ctx context.Context, accountID, peerID string, req *ExposeServiceRequest) (*ExposeServiceResponse, error)
|
|
RenewServiceFromPeer(ctx context.Context, accountID, peerID, serviceID string) error
|
|
StopServiceFromPeer(ctx context.Context, accountID, peerID, serviceID string) error
|
|
StartExposeReaper(ctx context.Context)
|
|
GetServiceByDomain(ctx context.Context, domain string) (*Service, error)
|
|
}
|