xref: /aosp_15_r20/development/tools/repo_diff/service/repodiff/repodiff.go (revision 90c8c64db3049935a07c6143d7fd006e26f8ecca)
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