Skip to content

Commit d027445

Browse files
authored
Merge pull request #2 from ara-framework/feat/env-variables
feat: support env variables for config file and port
2 parents 01843d5 + eea26f3 commit d027445

File tree

1 file changed

+65
-53
lines changed

1 file changed

+65
-53
lines changed

main.go

Lines changed: 65 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@ import (
55
"io/ioutil"
66
"log"
77
"net/http"
8+
"os"
89
"strings"
910
"sync"
1011

12+
"github.com/gookit/color"
1113
"github.com/gorilla/mux"
1214
"github.com/imdario/mergo"
1315
)
@@ -101,10 +103,10 @@ func BatchRequest(server string, batch map[string]ViewJob) BatchResponse {
101103
}
102104

103105
func GetViewDefintions() map[string]ViewDefinition {
104-
dat, err := ioutil.ReadFile("./views.json")
106+
dat, err := ioutil.ReadFile(os.Getenv("CONFIG_FILE"))
105107

106108
if err != nil {
107-
log.Fatal(err)
109+
log.Fatal("Config file not found")
108110
}
109111

110112
var viewDefinitions map[string]ViewDefinition
@@ -114,79 +116,89 @@ func GetViewDefintions() map[string]ViewDefinition {
114116
return viewDefinitions
115117
}
116118

117-
func BatchHandler(w http.ResponseWriter, r *http.Request) {
118-
b, err := ioutil.ReadAll(r.Body)
119+
func BatchHandler(viewDefinitions map[string]ViewDefinition) func(w http.ResponseWriter, r *http.Request) {
120+
return func(w http.ResponseWriter, r *http.Request) {
121+
b, err := ioutil.ReadAll(r.Body)
119122

120-
if err != nil {
121-
log.Fatal(err)
122-
}
123-
124-
var viewRequests map[string]ViewJob
125-
126-
json.Unmarshal(b, &viewRequests)
123+
if err != nil {
124+
log.Fatal(err)
125+
}
127126

128-
viewDefinitions := GetViewDefintions()
127+
var viewRequests map[string]ViewJob
129128

130-
aggregatedResponse := BatchResponse{
131-
Results: make(map[string]ViewJobResult),
132-
}
129+
json.Unmarshal(b, &viewRequests)
133130

134-
batches := make(map[string]map[string]ViewJob)
131+
aggregatedResponse := BatchResponse{
132+
Results: make(map[string]ViewJobResult),
133+
}
135134

136-
for uuid, job := range viewRequests {
137-
server := viewDefinitions[job.Name].Server
135+
batches := make(map[string]map[string]ViewJob)
136+
137+
for uuid, job := range viewRequests {
138+
server := viewDefinitions[job.Name].Server
139+
140+
if server == "" {
141+
aggregatedResponse.Results[uuid] = ViewJobResult{
142+
Name: job.Name,
143+
Success: false,
144+
Error: ViewJobError{
145+
Name: "ReferenceError",
146+
Message: "Component\"" + job.Name + "\" not registered in cluster",
147+
},
148+
}
149+
continue
150+
}
138151

139-
if server == "" {
140-
aggregatedResponse.Results[uuid] = ViewJobResult{
141-
Name: job.Name,
142-
Success: false,
143-
Error: ViewJobError{
144-
Name: "ReferenceError",
145-
Message: "Component\"" + job.Name + "\" not registered in cluster",
146-
},
152+
if batches[server] == nil {
153+
batch := make(map[string]ViewJob)
154+
batches[server] = batch
147155
}
148-
continue
149-
}
150156

151-
if batches[server] == nil {
152-
batch := make(map[string]ViewJob)
153-
batches[server] = batch
157+
batches[server][uuid] = job
154158
}
155159

156-
batches[server][uuid] = job
157-
}
160+
var wg sync.WaitGroup
161+
var batchResponsesMap sync.Map
158162

159-
var wg sync.WaitGroup
160-
var batchResponsesMap sync.Map
163+
for server, batch := range batches {
164+
wg.Add(1)
161165

162-
for server, batch := range batches {
163-
wg.Add(1)
166+
go func(server string, batch map[string]ViewJob) {
167+
response := BatchRequest(server, batch)
168+
batchResponsesMap.Store(server, response)
169+
defer wg.Done()
170+
}(server, batch)
171+
}
164172

165-
go func(server string, batch map[string]ViewJob) {
166-
response := BatchRequest(server, batch)
167-
batchResponsesMap.Store(server, response)
168-
defer wg.Done()
169-
}(server, batch)
170-
}
173+
wg.Wait()
171174

172-
wg.Wait()
175+
for server := range batches {
176+
response, _ := batchResponsesMap.Load(server)
173177

174-
for server := range batches {
175-
response, _ := batchResponsesMap.Load(server)
178+
batchResponse := response.(BatchResponse)
179+
mergo.Merge(&aggregatedResponse.Results, batchResponse.Results)
180+
}
176181

177-
batchResponse := response.(BatchResponse)
178-
mergo.Merge(&aggregatedResponse.Results, batchResponse.Results)
182+
w.Header().Add("Content-Type", "application/json")
183+
json.NewEncoder(w).Encode(aggregatedResponse)
179184
}
180-
181-
w.Header().Add("Content-Type", "application/json")
182-
json.NewEncoder(w).Encode(aggregatedResponse)
183185
}
184186

185187
func main() {
186188

187189
router := mux.NewRouter()
188190
router.Use(corsMiddleware)
189191

190-
router.HandleFunc("/batch", BatchHandler).Methods("OPTIONS", "POST")
191-
http.ListenAndServe(":8000", router)
192+
viewDefinitions := GetViewDefintions()
193+
194+
router.HandleFunc("/batch", BatchHandler(viewDefinitions)).Methods("OPTIONS", "POST")
195+
196+
port := os.Getenv("PORT")
197+
198+
if len(port) == 0 {
199+
port = "8000"
200+
}
201+
202+
color.Info.Printf("Nova cluster running on http://0.0.0.0:%s\n", port)
203+
http.ListenAndServe(":"+port, router)
192204
}

0 commit comments

Comments
 (0)