81 lines
1.9 KiB
Go
81 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"repodiff/constants"
|
|
"repodiff/controllers"
|
|
ent "repodiff/entities"
|
|
"repodiff/handlers"
|
|
"repodiff/persistence/filesystem"
|
|
)
|
|
|
|
const configFile = "config.json"
|
|
|
|
type controllerFunc func(ent.ApplicationConfig) error
|
|
|
|
func main() {
|
|
appConfig, err := loadConfig()
|
|
if err != nil {
|
|
panic(formattedError(err))
|
|
}
|
|
statusChannel := make(chan ent.StatusMessage)
|
|
go handlers.StartHTTP(appConfig.Port, statusChannel)
|
|
go run(appConfig, statusChannel)
|
|
select {}
|
|
}
|
|
|
|
func run(appConfig ent.ApplicationConfig, statusChannel chan ent.StatusMessage) {
|
|
statusChannel <- ent.StatusMessage{
|
|
JobStatus: constants.JobStatusRunning,
|
|
}
|
|
|
|
for _, controllerFn := range getEnabledControllers() {
|
|
if err := controllerFn(appConfig); err != nil {
|
|
topLevelErrorHandle(err, statusChannel)
|
|
return
|
|
}
|
|
}
|
|
statusChannel <- ent.StatusMessage{
|
|
JobStatus: constants.JobStatusComplete,
|
|
}
|
|
}
|
|
|
|
func getEnabledControllers() []controllerFunc {
|
|
enabled := getEnabledOperations()
|
|
return []controllerFunc{
|
|
disabledFnNullified(controllers.ExecuteDifferentials, enabled.Diff),
|
|
disabledFnNullified(controllers.DenormalizeData, enabled.Denorm),
|
|
disabledFnNullified(controllers.GenerateCommitReport, enabled.Report),
|
|
}
|
|
}
|
|
|
|
func disabledFnNullified(original controllerFunc, enabled bool) controllerFunc {
|
|
if enabled {
|
|
return original
|
|
}
|
|
return func(ent.ApplicationConfig) error {
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func topLevelErrorHandle(err error, statusChannel chan ent.StatusMessage) {
|
|
statusChannel <- ent.StatusMessage{
|
|
JobStatus: constants.JobStatusFailed,
|
|
Meta: formattedError(err),
|
|
}
|
|
fmt.Println(formattedError(err))
|
|
}
|
|
|
|
func loadConfig() (ent.ApplicationConfig, error) {
|
|
var appConfig ent.ApplicationConfig
|
|
err := filesystem.ReadFileAsJson(configFile, &appConfig)
|
|
if err != nil {
|
|
return appConfig, err
|
|
}
|
|
return appConfig, nil
|
|
}
|
|
|
|
func formattedError(err error) string {
|
|
return fmt.Sprintf("%+v", err)
|
|
}
|