From 4b61ace3c8be457733e38ca5992a855d1b77879c Mon Sep 17 00:00:00 2001 From: Jacob Gunther Date: Wed, 3 May 2023 09:42:49 -0500 Subject: [PATCH] Add query parameter to disable query lookup --- src/routes.go | 6 ++++-- src/status.go | 28 ++++++++++++++++------------ 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/routes.go b/src/routes.go index af1b956..84214dd 100644 --- a/src/routes.go +++ b/src/routes.go @@ -31,11 +31,13 @@ func JavaStatusHandler(ctx *fiber.Ctx) error { return ctx.Status(http.StatusBadRequest).SendString("Invalid address value") } + enableQuery := ctx.QueryBool("query", true) + if err = r.Increment(fmt.Sprintf("java-hits:%s-%d", host, port)); err != nil { return err } - response, expiresAt, err := GetJavaStatus(host, port) + response, expiresAt, err := GetJavaStatus(host, port, enableQuery) if err != nil { return err @@ -62,7 +64,7 @@ func JavaWidgetHandler(ctx *fiber.Ctx) error { return err } - response, _, err := GetJavaStatus(host, port) + response, _, err := GetJavaStatus(host, port, false) if err != nil { return err diff --git a/src/status.go b/src/status.go index 1797b78..760511b 100644 --- a/src/status.go +++ b/src/status.go @@ -113,8 +113,8 @@ type Plugin struct { } // GetJavaStatus returns the status response of a Java Edition server, either using cache or fetching a fresh status. -func GetJavaStatus(host string, port uint16) (*JavaStatusResponse, time.Duration, error) { - cacheKey := fmt.Sprintf("java:%s-%d", host, port) +func GetJavaStatus(host string, port uint16, enableQuery bool) (*JavaStatusResponse, time.Duration, error) { + cacheKey := fmt.Sprintf("java:%v-%s-%d", enableQuery, host, port) cache, ttl, err := r.Get(cacheKey) @@ -130,7 +130,7 @@ func GetJavaStatus(host string, port uint16) (*JavaStatusResponse, time.Duration return &response, ttl, err } - response := FetchJavaStatus(host, port) + response := FetchJavaStatus(host, port, enableQuery) data, err := json.Marshal(response) @@ -218,11 +218,9 @@ func GetServerIcon(host string, port uint16) ([]byte, time.Duration, error) { } // FetchJavaStatus fetches fresh information about a Java Edition Minecraft server. -func FetchJavaStatus(host string, port uint16) JavaStatusResponse { +func FetchJavaStatus(host string, port uint16, enableQuery bool) JavaStatusResponse { var wg sync.WaitGroup - wg.Add(2) - var status interface{} = nil var query *response.FullQuery = nil @@ -236,13 +234,19 @@ func FetchJavaStatus(host string, port uint16) JavaStatusResponse { } }() - go func() { - defer wg.Done() + wg.Add(1) - query, _ = mcutil.FullQuery(host, port, options.Query{ - Timeout: time.Second, - }) - }() + if enableQuery { + go func() { + defer wg.Done() + + query, _ = mcutil.FullQuery(host, port, options.Query{ + Timeout: time.Second, + }) + }() + + wg.Add(1) + } wg.Wait()