Skip to content

Commit c06daf9

Browse files
committed
readyz handler
1 parent 31ac01f commit c06daf9

File tree

3 files changed

+43
-1
lines changed

3 files changed

+43
-1
lines changed

proxy/receiver_api.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"errors"
88
"html/template"
99
"log/slog"
10+
"net/http"
1011
"time"
1112

1213
"github.com/ethereum/go-ethereum/common"
@@ -81,12 +82,34 @@ func (prx *ReceiverProxy) UserJSONRPCHandler(maxRequestBodySizeBytes int64) (*rp
8182
MaxRequestBodySizeBytes: maxRequestBodySizeBytes,
8283
VerifyRequestSignatureFromHeader: true,
8384
GetResponseContent: landingPageHTML,
85+
ReadyHandler: prx.readyHandler,
8486
},
8587
)
8688

8789
return handler, err
8890
}
8991

92+
// readyHandler is caalling /readyz on rbuilder
93+
func (prx *ReceiverProxy) readyHandler(w http.ResponseWriter, r *http.Request) error {
94+
resp, err := http.Get(prx.localBuilderEndpoint + "/readyz")
95+
if err != nil {
96+
prx.Log.Warn("Failed to check builder readiness", slog.Any("error", err))
97+
http.Error(w, "not ready", http.StatusServiceUnavailable)
98+
return nil
99+
}
100+
defer resp.Body.Close()
101+
102+
if resp.StatusCode != http.StatusOK {
103+
http.Error(w, "not ready", http.StatusServiceUnavailable)
104+
return nil
105+
}
106+
107+
// If the builder is ready, return 200 OK
108+
w.WriteHeader(http.StatusOK)
109+
_, _ = w.Write([]byte("ready"))
110+
return nil
111+
}
112+
90113
func (prx *ReceiverProxy) ValidateSigner(ctx context.Context, req *ParsedRequest, systemEndpoint bool) error {
91114
req.signer = rpcserver.GetSigner(ctx)
92115
if !systemEndpoint {

proxy/receiver_proxy.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ type ReceiverProxy struct {
4343
PublicCertPEM []byte
4444
Certificate tls.Certificate
4545

46-
localBuilder rpcclient.RPCClient
46+
localBuilder rpcclient.RPCClient
47+
localBuilderEndpoint string
4748

4849
UserHandler http.Handler
4950
SystemHandler http.Handler
@@ -131,6 +132,7 @@ func NewReceiverProxy(config ReceiverProxyConfig) (*ReceiverProxy, error) {
131132
PublicCertPEM: cert,
132133
Certificate: certificate,
133134
localBuilder: localBuilder,
135+
localBuilderEndpoint: config.LocalBuilderEndpoint,
134136
requestUniqueKeysRLU: expirable.NewLRU[uuid.UUID, struct{}](requestsRLUSize, nil, requestsRLUTTL),
135137
replacementNonceRLU: expirable.NewLRU[replacementNonceKey, int](replacementNonceSize, nil, replacementNonceTTL),
136138
userAPIRateLimiter: userAPIRateLimiter,

proxy/receiver_proxy_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -670,3 +670,20 @@ func TestValidateLocalBundles(t *testing.T) {
670670

671671
proxiesFlushQueue()
672672
}
673+
674+
func TestJSONRPCServerReadyzOK(t *testing.T) {
675+
tempDir := t.TempDir()
676+
certPath := path.Join(tempDir, "cert")
677+
keyPath := path.Join(tempDir, "key")
678+
proxy, err := StartTestOrderflowProxy("1", certPath, keyPath)
679+
require.NoError(t, err)
680+
681+
req := httptest.NewRequest(http.MethodGet, "/readyz", nil)
682+
683+
rr := httptest.NewRecorder()
684+
proxy.localServer.Handler.ServeHTTP(rr, req)
685+
respBody, err := io.ReadAll(rr.Body)
686+
require.NoError(t, err)
687+
require.Equal(t, http.StatusOK, rr.Code)
688+
require.Contains(t, string(respBody), "ready")
689+
}

0 commit comments

Comments
 (0)