statping/types/services/env.go

60 lines
1.3 KiB
Go

package services
import (
"bufio"
"github.com/pkg/errors"
"github.com/statping/statping/utils"
"os"
)
// findServiceByHas will return a service that matches the SHA256 hash of a service
// Service hash example: sha256(name:EXAMPLEdomain:HTTP://DOMAIN.COMport:8080type:HTTPmethod:GET)
func findServiceByHash(hash string) *Service {
for _, service := range All() {
if service.Hash() == hash {
return service
}
}
return nil
}
func ServicesFromEnvFile() error {
servicesEnv := utils.Params.GetString("SERVICES_FILE")
if servicesEnv == "" {
return nil
}
file, err := os.Open(servicesEnv)
if err != nil {
return errors.Wrapf(err, "error opening 'SERVICES_FILE' at: %s", servicesEnv)
}
defer file.Close()
var serviceLines []string
scanner := bufio.NewScanner(file)
for scanner.Scan() {
serviceLines = append(serviceLines, scanner.Text())
}
if len(serviceLines) == 0 {
return nil
}
for k, service := range serviceLines {
svr, err := ValidateService(service)
if err != nil {
return errors.Wrapf(err, "invalid service at index %d in SERVICES_FILE environment variable", k)
}
if findServiceByHash(svr.Hash()) == nil {
if err := svr.Create(); err != nil {
return errors.Wrapf(err, "could not create service %s", svr.Name)
}
log.Infof("Created new service '%s'", svr.Name)
}
}
return nil
}