1package main 2 3import ( 4 "fmt" 5 "repodiff/constants" 6 "repodiff/controllers" 7 ent "repodiff/entities" 8 "repodiff/handlers" 9 "repodiff/persistence/filesystem" 10) 11 12const configFile = "config.json" 13 14type controllerFunc func(ent.ApplicationConfig) error 15 16func main() { 17 appConfig, err := loadConfig() 18 if err != nil { 19 panic(formattedError(err)) 20 } 21 statusChannel := make(chan ent.StatusMessage) 22 go handlers.StartHTTP(appConfig.Port, statusChannel) 23 go run(appConfig, statusChannel) 24 select {} 25} 26 27func run(appConfig ent.ApplicationConfig, statusChannel chan ent.StatusMessage) { 28 statusChannel <- ent.StatusMessage{ 29 JobStatus: constants.JobStatusRunning, 30 } 31 32 for _, controllerFn := range getEnabledControllers() { 33 if err := controllerFn(appConfig); err != nil { 34 topLevelErrorHandle(err, statusChannel) 35 return 36 } 37 } 38 statusChannel <- ent.StatusMessage{ 39 JobStatus: constants.JobStatusComplete, 40 } 41} 42 43func getEnabledControllers() []controllerFunc { 44 enabled := getEnabledOperations() 45 return []controllerFunc{ 46 disabledFnNullified(controllers.ExecuteDifferentials, enabled.Diff), 47 disabledFnNullified(controllers.DenormalizeData, enabled.Denorm), 48 disabledFnNullified(controllers.GenerateCommitReport, enabled.Report), 49 } 50} 51 52func disabledFnNullified(original controllerFunc, enabled bool) controllerFunc { 53 if enabled { 54 return original 55 } 56 return func(ent.ApplicationConfig) error { 57 return nil 58 } 59} 60 61func topLevelErrorHandle(err error, statusChannel chan ent.StatusMessage) { 62 statusChannel <- ent.StatusMessage{ 63 JobStatus: constants.JobStatusFailed, 64 Meta: formattedError(err), 65 } 66 fmt.Println(formattedError(err)) 67} 68 69func loadConfig() (ent.ApplicationConfig, error) { 70 var appConfig ent.ApplicationConfig 71 err := filesystem.ReadFileAsJson(configFile, &appConfig) 72 if err != nil { 73 return appConfig, err 74 } 75 return appConfig, nil 76} 77 78func formattedError(err error) string { 79 return fmt.Sprintf("%+v", err) 80} 81