Repository navigation
Conversation
Author
…cket-support Re-applies the net change of #24 (#20 + #21 + #23) onto the 2026-09-28 rewrite of feat/websocket-support (stacked on #29): - auth: forwardedClientId strategy; secret accepted as path /<secret>, ?apikey= query and header (NewPayloadFromHttp takes the URL path) - architecture: jsonrpc passthrough for non-EVM HAProxy upstreams, now coexisting with upstream's svm architecture and registered as a no-op ArchitectureHandler (required by the new architecture registry); its error extractor defers to the EVM one, as before - json-rpc: treat "error": null as success; omit empty params Co-Authored-By: Claude Opus 5.5 <[email protected]>
…cy metrics
- network_request_received_total gains transport (http|ws); WS ingress
sets it on single and batch requests and on eth_(un)subscribe
- ws_requests_total{category,user,agent_name,outcome}: every JSON-RPC
request over WebSocket counted once, including requests rejected before
the network (invalid, method_not_allowed, unauthorized, rate_limited,
network_unavailable, invalid_batch). category stays "n/a" until the
client is authenticated so unauthenticated clients cannot mint series
- ws_subscription_events_total{user,agent_name}: notifications delivered
- websocket_subscription_notifications_dropped_total gains user and
agent_name (labels frozen at subscribe time, no network lookup per drop)
- ws_subscriptions_active{kind,user}, ws_connections_active,
ws_connections_closed_total{close_code,initiator}
- client_request_duration_seconds{network,user,transport,outcome}: per-user
end-to-end latency without the category/vendor/upstream dimensions, for
deployments that drop user from network_request_duration_seconds
Co-Authored-By: Claude Opus 5.5 <[email protected]>
snowkide
force-pushed
the
feat/cll-on-websocket-support
branch
from
October 7, 2026 09:14
6dfd658 to
11108fd
Compare
snowkide
changed the base branch from
fix/fallback-tip-leader
to
fix/fallback-tier-subscriptions
October 7, 2026 09:14
Author
|
Full
That test fails on the base too. Running only that test with Still to do: a canary on chainlink-erpc with a non-EVM network (BTC-family / Stellar) over HTTPS and WSS. |
1 of 3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Rebased 2026-10-07 onto
fix/fallback-tier-subscriptions(#31), the version now running in production. Previously stacked onfix/fallback-tip-leader(#29, closed). Old tip6dfd658e-> new tip11108fd2. Both commits applied without conflicts on top of #31's three commits (hedge all-missing leg, fallback heads holdback, filter subscriptions on head tiers). Once #31 merges intofeat/websocket-support, retarget this PR there.Original context:
feat/websocket-supportwas rewritten on 2026-09-28: rebased onto upstream989cfe60and squashed to 11 commits (old tip kept asbackup/feat-websocket-support-2026-09-28). #24 still sits on the old history. This PR re-applies #24's net change onto the new history and adds WS observability. #24 is not modified.Commit 1: port of #24 (#20 + #21 + #23)
forwardedClientIdauth strategy. The secret is also accepted as path/<secret>,?apikey=and header (NewPayloadFromHttpnow takes the URL path).jsonrpcpassthrough architecture. It now sits next to upstream's newsvmarchitecture in config, defaults, validation, network IDs and the registry, and it's registered as a no-opArchitectureHandlerbecause the new architecture registry requires one. Its error extractor claims nothing, so errors still go through the EVM extractor, the same as in prod today."error": nullis treated as success, and emptyparamsare omitted (BTC-family / Stellar).Commit 2: count every WSS call and add per-client metrics
Today
network_request_received_total{transport="ws"}, which CLL'srpc_ws_event_count_totalis built from, only counts WS requests that reachProject.Forwardoreth_(un)subscribe. WS requests rejected earlier are invisible: invalid, method not allowed, auth failure, project or auth rate limit, network unavailable, and batch parse errors.network_request_received_totaltransportws_requests_total(new)category="n/a"until authenticated (protects cardinality)ws_subscription_events_totalwebsocket_subscription_notifications_dropped_totalws_subscriptions_active(new)ws_connections_active/ws_connections_closed_total(new)client_request_duration_seconds(new)userfrom all histograms, sonetwork_request_duration_secondscan't be broken down by keyHow the two histories diverged (for review)
.github/workflows/ghcr-publish.yml(303b094). It still exists onmain, which is the copyworkflow_dispatchruns, and it builds anyref, so this branch can still be built.Test plan (on the rebased tree, 2026-10-07)
go build ./....go veton changed packages is clean apart from an existing upstream warning inerpc/query_executor_test.go:341(from feat: unified selection policy and scoring mechanism erpc/erpc#888)go test ./auth ./common ./util ./indexer/... ./telemetry ./clients ./upstream ./architecture/...passgo test ./erpc -run 'TestWebSocket_|TestAdapter_PerClientMetrics|Subscription' -racepassnetwork_request_received_total+transport, dropped-notifications +user/agent_name, the newws_*metrics,client_request_duration_seconds). A mismatch would only show up as a panic at runtimego test ./erpc(running; result will be posted in a comment)🤖 Generated with Claude Code