Skip to content

Commit 32d8adc

Browse files
committed
Allow running multiple clients on the same system
1 parent 483c043 commit 32d8adc

File tree

2 files changed

+34
-17
lines changed

2 files changed

+34
-17
lines changed

main.go

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"os"
1010
"os/exec"
1111
"syscall"
12-
"time"
1312
)
1413

1514
// Env contains the structure of the .env file
@@ -90,7 +89,7 @@ func main() {
9089
}
9190

9291
api := NewAPI()
93-
go startWebserver(env, api)
92+
useAddress := startWebserver(env, api)
9493

9594
credentials := []SetCredentialsArg{env.PrimaryServer.toCredArg(true)}
9695
for _, server := range env.AlternativeServers {
@@ -122,7 +121,7 @@ func main() {
122121
}
123122

124123
scraper := exec.Command(os.Args[1], os.Args[2:]...)
125-
scraper.Env = append(os.Environ(), "SCRAPER_ADDRESS=http://localhost:4400")
124+
scraper.Env = append(os.Environ(), "SCRAPER_ADDRESS="+useAddress)
126125

127126
// Piple output of scraper to stdout
128127
scraper.Stdin = os.Stdin
@@ -168,14 +167,4 @@ func testServerConnections(api *API) {
168167
log.Fatal("provided key does not have scraper role (nr 1)")
169168
}
170169
}
171-
172-
referenceNrs := []string{}
173-
err := api.connections[api.primaryConnection].Get("/api/v1/scraper/scannedReferenceNrs/since/days/30", &referenceNrs)
174-
if err != nil {
175-
log.Fatal(err)
176-
}
177-
178-
for _, nr := range referenceNrs {
179-
api.SetCacheEntry(nr, time.Hour*72) // 3 days
180-
}
181170
}

webserver.go

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@ package main
22

33
import (
44
"encoding/json"
5+
"fmt"
56
"log"
7+
"net"
8+
"strings"
69
"time"
710

811
"github.com/valyala/fasthttp"
912
)
1013

11-
func startWebserver(env Env, api *API) {
14+
func startWebserver(env Env, api *API) string {
1215
loginUsers, err := json.Marshal(env.LoginUsers)
1316
if err != nil {
1417
log.Fatal(err)
@@ -110,9 +113,34 @@ func startWebserver(env Env, api *API) {
110113
}
111114

112115
s := &fasthttp.Server{Handler: requestHandler}
113-
err = s.ListenAndServe("127.0.0.1:4400")
114-
if err != nil {
115-
log.Fatal("Error in ListenAndServe: " + err.Error())
116+
117+
portAttempt := 4_000
118+
for {
119+
portAttempt++
120+
if portAttempt > 6_000 {
121+
// Give up
122+
log.Fatal("Could not find a free port to start the webserver")
123+
}
124+
125+
address := fmt.Sprintf("127.0.0.1:%d", portAttempt)
126+
127+
l, err := net.Listen("tcp4", address)
128+
if err != nil {
129+
if strings.Contains(err.Error(), "address already in use") {
130+
// Retry with a diffrent port
131+
continue
132+
}
133+
log.Fatal("Error in Listen: " + err.Error())
134+
}
135+
136+
go func() {
137+
err = s.Serve(l)
138+
if err != nil {
139+
log.Fatal("Error in Serve: " + err.Error())
140+
}
141+
}()
142+
143+
return "http://" + address
116144
}
117145
}
118146

0 commit comments

Comments
 (0)