From 7bbf00682e55b1bebcccc8024cc2552b05b90d17 Mon Sep 17 00:00:00 2001 From: Antonio Navarro Perez Date: Tue, 10 Sep 2024 11:28:46 +0200 Subject: [PATCH 1/3] Implement health endpoint Signed-off-by: Antonio Navarro Perez --- README.md | 4 ++-- cmd/start.go | 2 ++ go.mod | 3 +++ go.sum | 6 ++++++ serve/health/health.go | 29 +++++++++++++++++++++++++++++ 5 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 serve/health/health.go diff --git a/README.md b/README.md index 95601567..a2b8a388 100644 --- a/README.md +++ b/README.md @@ -55,13 +55,13 @@ make build 3. **Run the indexer** ```bash -./build/tx-indexer start --remote http://test3.gno.land:36657 --db-path indexer-db +./build/tx-indexer start --remote https://rpc.test4.gno.land --db-path indexer-db ``` or: ```bash -go run cmd/main.go cmd/start.go cmd/waiter.go start --remote http://test3.gno.land:36657 --db-path indexer-db +go run cmd/main.go cmd/start.go cmd/waiter.go start --remote https://rpc.test4.gno.land --db-path indexer-db ``` The `--remote` flag specifies the JSON-RPC URL of the chain the indexer should index, and the `--db-path` specifies the diff --git a/cmd/start.go b/cmd/start.go index 16605b1f..501e8fe3 100644 --- a/cmd/start.go +++ b/cmd/start.go @@ -18,6 +18,7 @@ import ( "github.com/gnolang/tx-indexer/fetch" "github.com/gnolang/tx-indexer/serve" "github.com/gnolang/tx-indexer/serve/graph" + "github.com/gnolang/tx-indexer/serve/health" "github.com/gnolang/tx-indexer/storage" ) @@ -187,6 +188,7 @@ func (c *startCfg) exec(ctx context.Context) error { mux = j.SetupRoutes(mux) mux = graph.Setup(db, em, mux) + mux = health.Setup(db, mux) // Create the HTTP server hs := serve.NewHTTPServer(mux, c.listenAddress, logger.Named("http-server")) diff --git a/go.mod b/go.mod index bfb29fd8..0ca41e29 100644 --- a/go.mod +++ b/go.mod @@ -20,6 +20,8 @@ require ( golang.org/x/sync v0.8.0 ) +require github.com/ajg/form v1.5.1 // indirect + require ( github.com/DataDog/zstd v1.5.5 // indirect github.com/agnivade/levenshtein v1.1.1 // indirect @@ -39,6 +41,7 @@ require ( github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect github.com/getsentry/sentry-go v0.27.0 // indirect github.com/gnolang/overflow v0.0.0-20170615021017-4d914c927216 // indirect + github.com/go-chi/render v1.0.3 github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect diff --git a/go.sum b/go.sum index b943273f..cf2bcd38 100644 --- a/go.sum +++ b/go.sum @@ -9,6 +9,8 @@ github.com/PuerkitoBio/goquery v1.9.2/go.mod h1:GHPCaP0ODyyxqcNoFGYlAprUFH81NuRP github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/agnivade/levenshtein v1.1.1 h1:QY8M92nrzkmr798gCo3kmMyqXFzdQVpxLlGPRBij0P8= github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo= +github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= +github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/andybalholm/cascadia v1.3.2 h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsViSLyss= @@ -92,6 +94,10 @@ github.com/go-chi/chi/v5 v5.1.0 h1:acVI1TYaD+hhedDJ3r54HyA6sExp3HfXq7QWEEY/xMw= github.com/go-chi/chi/v5 v5.1.0/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= github.com/go-chi/httprate v0.12.1 h1:55l3IWrPcipqKb72yBzH+grF51z5w+2Bb/Qmu1bos/E= github.com/go-chi/httprate v0.12.1/go.mod h1:TUepLXaz/pCjmCtf/obgOQJ2Sz6rC8fSf5cAt5cnTt0= +github.com/go-chi/httprate v0.9.0 h1:21A+4WDMDA5FyWcg7mNrhj63aNT8CGh+Z1alOE/piU8= +github.com/go-chi/httprate v0.9.0/go.mod h1:6GOYBSwnpra4CQfAKXu8sQZg+nZ0M1g9QnyFvxrAB8A= +github.com/go-chi/render v1.0.3 h1:AsXqd2a1/INaIfUSKq3G5uA8weYx20FOsM7uSoCyyt4= +github.com/go-chi/render v1.0.3/go.mod h1:/gr3hVkmYR0YlEy3LxCuVRFzEu9Ruok+gFqbIofjao0= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= diff --git a/serve/health/health.go b/serve/health/health.go new file mode 100644 index 00000000..e63fd935 --- /dev/null +++ b/serve/health/health.go @@ -0,0 +1,29 @@ +package health + +import ( + "fmt" + "net/http" + "time" + + "github.com/go-chi/chi/v5" + "github.com/go-chi/render" + + "github.com/gnolang/tx-indexer/storage" +) + +func Setup(s storage.Storage, m *chi.Mux) *chi.Mux { + m.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) { + h, err := s.GetLatestHeight() + if err != nil { + fmt.Fprintf(w, "ERROR: %s\n", err) + render.Status(r, http.StatusInternalServerError) + return + } + + fmt.Fprintf(w, "Server is responding\n") + fmt.Fprintf(w, "- Time: %s\n", time.Now()) + fmt.Fprintf(w, "- Latest Height: %d\n", h) + }) + + return m +} From a89bd284661f9dd746e2f6a7b74aba38b3179c80 Mon Sep 17 00:00:00 2001 From: Antonio Navarro Perez Date: Tue, 10 Sep 2024 11:35:23 +0200 Subject: [PATCH 2/3] Go mod tidy Signed-off-by: Antonio Navarro Perez --- go.mod | 2 +- go.sum | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 0ca41e29..9ef424d1 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/gnolang/tx-indexer -go 1.22 +go 1.22.7 require ( github.com/99designs/gqlgen v0.17.49 diff --git a/go.sum b/go.sum index cf2bcd38..13849d84 100644 --- a/go.sum +++ b/go.sum @@ -94,8 +94,6 @@ github.com/go-chi/chi/v5 v5.1.0 h1:acVI1TYaD+hhedDJ3r54HyA6sExp3HfXq7QWEEY/xMw= github.com/go-chi/chi/v5 v5.1.0/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= github.com/go-chi/httprate v0.12.1 h1:55l3IWrPcipqKb72yBzH+grF51z5w+2Bb/Qmu1bos/E= github.com/go-chi/httprate v0.12.1/go.mod h1:TUepLXaz/pCjmCtf/obgOQJ2Sz6rC8fSf5cAt5cnTt0= -github.com/go-chi/httprate v0.9.0 h1:21A+4WDMDA5FyWcg7mNrhj63aNT8CGh+Z1alOE/piU8= -github.com/go-chi/httprate v0.9.0/go.mod h1:6GOYBSwnpra4CQfAKXu8sQZg+nZ0M1g9QnyFvxrAB8A= github.com/go-chi/render v1.0.3 h1:AsXqd2a1/INaIfUSKq3G5uA8weYx20FOsM7uSoCyyt4= github.com/go-chi/render v1.0.3/go.mod h1:/gr3hVkmYR0YlEy3LxCuVRFzEu9Ruok+gFqbIofjao0= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= From efe21b3396673b7e089467833339952ee573a3b0 Mon Sep 17 00:00:00 2001 From: Antonio Navarro Perez Date: Tue, 10 Sep 2024 11:39:00 +0200 Subject: [PATCH 3/3] linter Signed-off-by: Antonio Navarro Perez --- serve/health/health.go | 1 + 1 file changed, 1 insertion(+) diff --git a/serve/health/health.go b/serve/health/health.go index e63fd935..9b49994e 100644 --- a/serve/health/health.go +++ b/serve/health/health.go @@ -17,6 +17,7 @@ func Setup(s storage.Storage, m *chi.Mux) *chi.Mux { if err != nil { fmt.Fprintf(w, "ERROR: %s\n", err) render.Status(r, http.StatusInternalServerError) + return }