mirror of
https://github.com/TwiN/gatus.git
synced 2024-11-24 17:04:42 +01:00
55 lines
1.7 KiB
Go
55 lines
1.7 KiB
Go
package k8s
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/TwinProduction/gatus/core"
|
|
)
|
|
|
|
// DiscoverServices return discovered services
|
|
func DiscoverServices(kubernetesConfig *Config) ([]*core.Service, error) {
|
|
client, err := NewClient(kubernetesConfig.ClusterMode)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
services := make([]*core.Service, 0)
|
|
for _, ns := range kubernetesConfig.Namespaces {
|
|
kubernetesServices, err := GetKubernetesServices(client, ns.Name)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
skipExcluded:
|
|
for _, service := range kubernetesServices {
|
|
for _, excludedServiceSuffix := range kubernetesConfig.ExcludedServiceSuffixes {
|
|
if strings.HasSuffix(service.Name, excludedServiceSuffix) {
|
|
continue skipExcluded
|
|
}
|
|
}
|
|
for _, excludedService := range ns.ExcludedServices {
|
|
if service.Name == excludedService {
|
|
continue skipExcluded
|
|
}
|
|
}
|
|
// XXX: try to extract health from liveness probe endpoint?
|
|
var url, port string
|
|
if len(service.Spec.Ports) > 0 && !strings.Contains(ns.HostnameSuffix, ":") && strings.HasSuffix(ns.HostnameSuffix, ".svc.cluster.local") {
|
|
port = fmt.Sprintf(":%d", service.Spec.Ports[0].Port)
|
|
}
|
|
// If the path starts with a / or starts with a port
|
|
if strings.HasPrefix(ns.TargetPath, "/") {
|
|
url = fmt.Sprintf("http://%s%s%s%s", service.Name, ns.HostnameSuffix, port, ns.TargetPath)
|
|
} else {
|
|
url = fmt.Sprintf("http://%s%s%s/%s", service.Name, ns.HostnameSuffix, port, ns.TargetPath)
|
|
}
|
|
services = append(services, &core.Service{
|
|
Name: service.Name,
|
|
URL: url,
|
|
Interval: kubernetesConfig.ServiceTemplate.Interval,
|
|
Conditions: kubernetesConfig.ServiceTemplate.Conditions,
|
|
})
|
|
}
|
|
}
|
|
return services, nil
|
|
}
|