kopia lustrzana https://github.com/bugout-dev/moonstream
81 wiersze
2.3 KiB
Go
81 wiersze
2.3 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"log"
|
|
"os"
|
|
"strings"
|
|
|
|
probes "github.com/moonstream-to/api/probes/pkg"
|
|
engine "github.com/moonstream-to/api/probes/pkg/engine"
|
|
)
|
|
|
|
// Application Probe configuration
|
|
type ApplicationProbeConfig struct {
|
|
Application string `json:"application"`
|
|
DbUri string `json:"db_uri"`
|
|
DbTimeout string `json:"db_timeout"`
|
|
|
|
Probe probes.ApplicationProbe `json:"probe"`
|
|
}
|
|
|
|
// ReadConfig parses list of configuration file paths to list of Application Probes configs
|
|
func ReadConfig(rawConfigPaths []string) (*[]ApplicationProbeConfig, error) {
|
|
var configs []ApplicationProbeConfig
|
|
for _, rawConfigPath := range rawConfigPaths {
|
|
configPath := strings.TrimSuffix(rawConfigPath, "/")
|
|
_, err := os.Stat(configPath)
|
|
if err != nil {
|
|
if os.IsNotExist(err) {
|
|
log.Printf("File %s not found, err: %v", configPath, err)
|
|
continue
|
|
}
|
|
log.Printf("Error due checking config path %s, err: %v", configPath, err)
|
|
continue
|
|
}
|
|
|
|
rawBytes, err := ioutil.ReadFile(configPath)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
configTemp := &ApplicationProbeConfig{}
|
|
err = json.Unmarshal(rawBytes, configTemp)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
dbUri := os.Getenv(configTemp.DbUri)
|
|
if dbUri == "" {
|
|
return nil, fmt.Errorf(
|
|
"unable to load database URI for service %s with probe %s", configTemp.Application, configTemp.Probe.Name,
|
|
)
|
|
}
|
|
|
|
// Link worker function
|
|
switch configTemp.Application {
|
|
case "engine":
|
|
engineWorker := engine.ENGINE_SUPPORTED_WORKERS[fmt.Sprintf("%s-%s", configTemp.Application, configTemp.Probe.Name)]
|
|
if engineWorker.ExecFunction == nil {
|
|
log.Printf("Function for application %s with probe %s not found, removed from the list", configTemp.Application, configTemp.Probe.Name)
|
|
continue
|
|
}
|
|
configs = append(configs, ApplicationProbeConfig{
|
|
Application: configTemp.Application,
|
|
DbUri: dbUri,
|
|
DbTimeout: configTemp.DbTimeout,
|
|
Probe: probes.ApplicationProbe{
|
|
Interval: configTemp.Probe.Interval,
|
|
ExecFunction: engineWorker.ExecFunction,
|
|
},
|
|
})
|
|
log.Printf("[%s] [%s] - Registered function", configTemp.Application, configTemp.Probe.Name)
|
|
default:
|
|
log.Printf("Unsupported %s application with %s probe from the config", configTemp.Application, configTemp.Probe.Name)
|
|
}
|
|
}
|
|
|
|
return &configs, nil
|
|
}
|