Skip to content

Commit 491934b

Browse files
committed
refactor: Refactor main to use ping package
Main command stays functionally the same but will utilize the pkg/ping package
1 parent 29b3941 commit 491934b

1 file changed

Lines changed: 31 additions & 49 deletions

File tree

main.go renamed to cmd/main.go

Lines changed: 31 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ import (
66
"os"
77
"time"
88

9-
sdk "agones.dev/agones/sdks/go"
10-
mcpinger "github.com/Raqbit/mc-pinger"
9+
ping "github.com/saulmaldonado/agones-mc-monitor/pkg"
1110
)
1211

1312
var host string
@@ -29,36 +28,26 @@ func init() {
2928
}
3029

3130
func main() {
32-
// connect to local SDK server
33-
client, err := sdk.NewSDK()
31+
pinger, err := ping.NewTimed(host, uint16(port), timeout)
3432

3533
if err != nil {
3634
log.Fatal(err)
3735
}
3836

3937
// Ping server until startup
40-
_, err = pingUntilSuccessful(retry)
38+
err = pingUntilStartup(retry, interval, pinger)
4139

4240
// Exit in case of unsuccessful startup
4341
if err != nil {
4442
logger.Println(err)
4543
logger.Fatal("Fatal Mincraft server. Exiting...")
4644
}
4745

48-
// Signal that server is ready for players
49-
err = client.Ready()
50-
51-
if err != nil {
52-
log.Fatal(err)
53-
}
54-
55-
logger.Println("Server Ready")
56-
5746
// Pause before starting next ping cycle
5847
time.Sleep(interval)
5948

6049
// Ping infinitely or until after a series of unsuccessful pings
61-
err = pingUntilFatal(retry, client)
50+
err = pingUntilFatal(retry, interval, pinger)
6251

6352
// Exit in case of fatal server
6453
if err != nil {
@@ -67,55 +56,48 @@ func main() {
6756
}
6857
}
6958

70-
// Creates a pinger with Context containing timeout
71-
func ping() (*mcpinger.ServerInfo, error) {
72-
pinger := mcpinger.NewTimed(host, uint16(port), timeout)
73-
return pinger.Ping()
74-
}
75-
76-
// Creates pings the server on an interval until the first sucessful ping which then will return the server info response
77-
// After a series of failed retries an error will be returned indicating a fatal server
78-
func pingUntilSuccessful(retry uint) (*mcpinger.ServerInfo, error) {
79-
info, err := ping()
80-
81-
for err != nil && retry > 0 {
82-
logger.Println(err)
83-
logger.Printf("Unsuccessful ping. retrying in %v...", interval)
84-
time.Sleep(interval)
85-
86-
info, err = ping()
87-
retry--
88-
}
59+
// Pings server with the specified retries until the server returns a complete response
60+
// Will also signal the local Agones server with Ready()
61+
// Returns an error if the pings or singaling local Agones server fails
62+
func pingUntilStartup(retry uint, interval time.Duration, pinger *ping.AgonesPinger) error {
63+
err := retryPing(retry, interval, pinger.ReadyPingWithTimeout)
8964

90-
// Server will respond with an empty JSON object if its starting up
91-
// Pings will continue to happen until the server returns the expected response
92-
for info.Players.Max == 0 {
93-
logger.Println("Minecraft server starting up...")
94-
time.Sleep(interval)
95-
info, err = ping()
65+
if err != nil {
66+
return err
9667
}
9768

98-
return info, err
69+
logger.Println("Server ready")
70+
return nil
9971
}
10072

10173
// Pings the server infinitely or the server fails to reposnd after a series of retries
10274
// Signals to local SDK that server is healthy
103-
func pingUntilFatal(retry uint, client *sdk.SDK) error {
75+
func pingUntilFatal(retry uint, interval time.Duration, pinger *ping.AgonesPinger) error {
10476
for {
105-
_, err := pingUntilSuccessful(retry)
77+
err := retryPing(retry, interval, pinger.HealthPingWithTimeout)
10678

10779
if err != nil {
10880
return err
10981
}
11082

111-
// Signal that server is healthy
112-
err = client.Health()
83+
logger.Printf("Server healthy")
84+
time.Sleep(interval)
85+
}
86+
}
11387

114-
if err != nil {
115-
logger.Fatal(err)
116-
}
88+
// Retry wrapper function that will retry the given ping function with the specified attempts and intervals
89+
// until it dosen't return an error or until all attempts have been made
90+
func retryPing(attempts uint, interval time.Duration, p func() error) error {
91+
err := p()
11792

118-
logger.Printf("Server healthy")
93+
for err != nil && attempts > 0 {
94+
logger.Println(err)
95+
logger.Printf("Unsuccessful ping. retrying in %v...", interval)
11996
time.Sleep(interval)
97+
98+
err = p()
99+
attempts--
120100
}
101+
102+
return err
121103
}

0 commit comments

Comments
 (0)