waku-org/go-waku

View on GitHub
cmd/waku/server/rest/health.go

Summary

Maintainability
A
0 mins
Test Coverage
F
35%
package rest

import (
    "context"
    "errors"
    "net/http"

    "github.com/go-chi/chi/v5"
    "github.com/waku-org/go-waku/waku/v2/node"
)

type HealthService struct {
    node *node.WakuNode
    mux  *chi.Mux
}

const routeHealth = "/health"

func NewHealthService(node *node.WakuNode, m *chi.Mux) *HealthService {
    h := &HealthService{
        node: node,
        mux:  m,
    }

    m.Get(routeHealth, h.getHealth)

    return h
}

type HealthResponse string

func (d *HealthService) getHealth(w http.ResponseWriter, r *http.Request) {
    if d.node.RLNRelay() != nil {
        isReady, err := d.node.RLNRelay().IsReady(r.Context())
        if err != nil {
            if errors.Is(err, context.DeadlineExceeded) {
                writeResponse(w, HealthResponse("Health check timed out"), http.StatusInternalServerError)
            } else {
                writeResponse(w, HealthResponse(err.Error()), http.StatusInternalServerError)
            }
            return
        }

        if isReady {
            writeResponse(w, HealthResponse("Node is healthy"), http.StatusOK)
        } else {
            writeResponse(w, HealthResponse("Node is not ready"), http.StatusInternalServerError)
        }
    } else {
        writeResponse(w, HealthResponse("Non RLN healthcheck is not implemented"), http.StatusNotImplemented)
    }
}