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