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
 | |
| }
 |