Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat_: RPC providers detailed statuses #5923 #5924

Merged
merged 5 commits into from
Oct 15, 2024
Merged

Conversation

friofry
Copy link
Contributor

@friofry friofry commented Oct 7, 2024

PR Summary:
This PR introduces a new RPC provider health monitor, as discussed here. It's moved to a separate PR without changing existing logic (will be introduced as a separate PR)

please read before review
1st commit - healthmanager

  • aggregator: Combines the status of multiple RPC providers to a chain into one result (e.g., if provider1 is down and provider2 is up, the result is 'up').
  • provider_errors: Helps filter out non-critical errors (general or RPC errors).
  • provider_health_manager.go: Collects provider statuses and notifies subscribers when things change.
  • blockchain_health_manager.go: Collects chain statuses from different provider_health_managerss and sends updates.

2nd commit - integration

  • circuit_breaker - Returns a list of errors per provider (previously it was one big concatenated string).
  • rpc/chain/client.go - Passes RPC results from the circuit breaker to the provider_health_manager
  • rpc/client.go - Creates a blockchain_health_manager and sends a new event to the wallet feed on every update

Important changes:

  • Matches the existing logic on the desktop version.
  • As noted in code smells, contexts should not be stored in structs. Instead, store cancel callbacks. (Reference: Code Smell #2)

Usage:

  1. Create top-level BlockchainHealthManager with NewBlockchainHealthManager()
  2. Create a ProviderHealthManager for each chain via NewProvidersHealthManager(chainID)
  3. Register a ProvidersHealthManager with BlockchainHealthManager::RegisterProvidersHealthManager
  4. On each provider call ProvidersHealthManager::Update()
  5. Subscribe to blockchain updates channel BlockchainHealthManager::Subscribe() and get status from GetFullStatus()
  6. Stop BlockchainHealthManager::Stop()

Closes #5923

@status-im-auto
Copy link
Member

status-im-auto commented Oct 7, 2024

Jenkins Builds

Click to see older builds (107)
Commit #️⃣ Finished (UTC) Duration Platform Result
✖️ ac6650f #1 2024-10-07 15:24:55 ~1 min tests 📄log
✔️ ac6650f #1 2024-10-07 15:26:41 ~3 min tests-rpc 📄log
✔️ ac6650f #1 2024-10-07 15:27:34 ~4 min linux 📦zip
✔️ ac6650f #1 2024-10-07 15:28:40 ~5 min ios 📦zip
✔️ ac6650f #1 2024-10-07 15:28:49 ~5 min android 📦aar
✔️ 5164e3d #2 2024-10-08 08:37:03 ~2 min linux 📦zip
✔️ 5164e3d #2 2024-10-08 08:37:49 ~3 min ios 📦zip
✔️ 5164e3d #2 2024-10-08 08:38:25 ~3 min tests-rpc 📄log
✖️ 5164e3d #2 2024-10-08 08:38:59 ~4 min tests 📄log
✔️ 5164e3d #2 2024-10-08 08:39:36 ~5 min android 📦aar
✔️ 53d33e7 #3 2024-10-08 09:49:43 ~2 min android 📦aar
✔️ 53d33e7 #3 2024-10-08 09:49:59 ~2 min linux 📦zip
✖️ 53d33e7 #3 2024-10-08 09:50:35 ~3 min tests 📄log
✔️ 53d33e7 #3 2024-10-08 09:50:36 ~3 min ios 📦zip
✔️ 53d33e7 #3 2024-10-08 09:50:51 ~3 min tests-rpc 📄log
✔️ cd5b966 #4 2024-10-08 09:52:24 ~1 min android 📦aar
✔️ cd5b966 #4 2024-10-08 09:53:05 ~2 min linux 📦zip
✔️ cd5b966 #4 2024-10-08 09:54:01 ~3 min ios 📦zip
✖️ cd5b966 #4 2024-10-08 09:54:18 ~3 min tests 📄log
✔️ cd5b966 #4 2024-10-08 09:54:38 ~3 min tests-rpc 📄log
✔️ 4341e17 #5 2024-10-08 10:07:26 ~1 min android 📦aar
✖️ 4341e17 #5 2024-10-08 10:07:45 ~2 min tests 📄log
✔️ 4341e17 #5 2024-10-08 10:07:56 ~2 min linux 📦zip
✔️ 4341e17 #5 2024-10-08 10:08:28 ~2 min ios 📦zip
✔️ 4341e17 #5 2024-10-08 10:09:12 ~3 min tests-rpc 📄log
✔️ bc7e638 #6 2024-10-08 10:11:34 ~1 min android 📦aar
✖️ bc7e638 #6 2024-10-08 10:11:38 ~1 min tests 📄log
✔️ bc7e638 #6 2024-10-08 10:12:14 ~2 min linux 📦zip
✔️ bc7e638 #6 2024-10-08 10:13:21 ~3 min tests-rpc 📄log
✔️ bc7e638 #6 2024-10-08 10:13:22 ~3 min ios 📦zip
✖️ 694148a #7 2024-10-08 10:14:40 ~2 min tests 📄log
✔️ 694148a #7 2024-10-08 10:14:51 ~2 min android 📦aar
✔️ 694148a #7 2024-10-08 10:15:11 ~2 min linux 📦zip
✔️ 694148a #7 2024-10-08 10:17:07 ~3 min ios 📦zip
✔️ 694148a #7 2024-10-08 10:17:10 ~3 min tests-rpc 📄log
✖️ 60ab2ea #8 2024-10-08 10:31:47 ~2 min tests 📄log
✔️ 60ab2ea #8 2024-10-08 10:32:21 ~2 min android 📦aar
✔️ 60ab2ea #8 2024-10-08 10:32:27 ~2 min linux 📦zip
✔️ 60ab2ea #8 2024-10-08 10:33:13 ~3 min tests-rpc 📄log
✔️ 60ab2ea #8 2024-10-08 10:33:15 ~3 min ios 📦zip
✖️ 3680586 #9 2024-10-08 11:58:03 ~2 min tests 📄log
✔️ 3680586 #9 2024-10-08 11:58:16 ~2 min android 📦aar
✔️ 3680586 #9 2024-10-08 11:58:28 ~2 min linux 📦zip
✔️ 3680586 #9 2024-10-08 11:59:02 ~3 min ios 📦zip
✔️ 3680586 #9 2024-10-08 11:59:22 ~3 min tests-rpc 📄log
✔️ c817bef #10 2024-10-08 15:06:08 ~2 min android 📦aar
✔️ c817bef #10 2024-10-08 15:06:21 ~2 min linux 📦zip
✔️ c817bef #10 2024-10-08 15:07:14 ~3 min tests-rpc 📄log
✔️ c817bef #10 2024-10-08 15:07:33 ~3 min ios 📦zip
✖️ c817bef #10 2024-10-08 15:35:27 ~31 min tests 📄log
✔️ 5b29745 #11 2024-10-08 15:19:22 ~2 min android 📦aar
✔️ 5b29745 #11 2024-10-08 15:19:39 ~2 min linux 📦zip
✔️ 5b29745 #11 2024-10-08 15:20:23 ~3 min ios 📦zip
✔️ 5b29745 #11 2024-10-08 15:20:39 ~3 min tests-rpc 📄log
92c5dbc #12 2024-10-08 15:33:47 ~45 sec ios 📄log
92c5dbc #12 2024-10-08 15:33:53 ~53 sec android 📄log
92c5dbc #12 2024-10-08 15:34:01 ~59 sec linux 📄log
✖️ 92c5dbc #12 2024-10-08 15:35:18 ~2 min tests-rpc 📄log
✖️ 92c5dbc #11 2024-10-08 15:37:49 ~2 min tests 📄log
9f5569a #14 2024-10-08 15:51:46 ~46 sec ios 📄log
9f5569a #14 2024-10-08 15:51:55 ~58 sec android 📄log
9f5569a #13 2024-10-08 15:52:54 ~2 min linux 📄log
✖️ 9f5569a #13 2024-10-08 15:52:58 ~2 min tests-rpc 📄log
✖️ 9f5569a #14 2024-10-08 15:53:47 ~37 sec tests-rpc 📄log
✖️ 9f5569a #12 2024-10-08 15:53:47 ~2 min tests 📄log
9f5569a #14 2024-10-08 15:53:59 ~50 sec linux 📄log
✖️ 9f5569a #13 2024-10-08 15:55:45 ~1 min tests 📄log
✔️ b0651df #15 2024-10-08 19:09:15 ~2 min android 📦aar
✔️ b0651df #15 2024-10-08 19:09:26 ~2 min linux 📦zip
✔️ b0651df #15 2024-10-08 19:09:54 ~3 min ios 📦zip
✔️ b0651df #15 2024-10-08 19:10:10 ~3 min tests-rpc 📄log
✖️ b0651df #14 2024-10-08 19:38:30 ~31 min tests 📄log
✔️ cd640b3 #16 2024-10-09 09:42:50 ~3 min ios 📦zip
✔️ cd640b3 #16 2024-10-09 09:45:12 ~6 min linux 📦zip
✔️ cd640b3 #16 2024-10-09 09:45:29 ~6 min tests-rpc 📄log
✔️ cd640b3 #16 2024-10-09 09:46:18 ~7 min android 📦aar
✖️ cd640b3 #15 2024-10-09 10:14:11 ~35 min tests 📄log
✖️ cd640b3 #16 2024-10-09 16:45:21 ~32 min tests 📄log
✔️ eb10b20 #17 2024-10-09 17:09:35 ~2 min android 📦aar
✔️ eb10b20 #17 2024-10-09 17:10:00 ~2 min linux 📦zip
✔️ eb10b20 #17 2024-10-09 17:10:39 ~3 min ios 📦zip
✔️ eb10b20 #17 2024-10-09 17:10:40 ~3 min tests-rpc 📄log
✔️ eb10b20 #17 2024-10-09 17:39:26 ~32 min tests 📄log
7f26231 #18 2024-10-11 17:02:51 ~20 sec android 📄log
7f26231 #18 2024-10-11 17:02:56 ~21 sec linux 📄log
7f26231 #18 2024-10-11 17:02:57 ~24 sec ios 📄log
✖️ 7f26231 #18 2024-10-11 17:03:11 ~33 sec tests 📄log
✖️ 7f26231 #18 2024-10-11 17:03:50 ~1 min tests-rpc 📄log
✖️ 08acd98 #19 2024-10-14 14:07:28 ~2 min tests 📄log
✔️ 08acd98 #19 2024-10-14 14:08:03 ~3 min android 📦aar
✔️ 08acd98 #19 2024-10-14 14:08:23 ~3 min linux 📦zip
✔️ 08acd98 #19 2024-10-14 14:08:49 ~3 min ios 📦zip
✔️ 08acd98 #19 2024-10-14 14:10:30 ~5 min tests-rpc 📄log
✔️ e4aabe5 #20 2024-10-14 14:30:53 ~2 min linux 📦zip
✔️ e4aabe5 #20 2024-10-14 14:31:28 ~3 min ios 📦zip
✔️ e4aabe5 #20 2024-10-14 14:33:08 ~4 min android 📦aar
✔️ e4aabe5 #20 2024-10-14 14:33:44 ~5 min tests-rpc 📄log
✔️ e4aabe5 #20 2024-10-14 15:00:56 ~32 min tests 📄log
✔️ 78e50fe #21 2024-10-15 10:04:07 ~2 min android 📦aar
✔️ 78e50fe #21 2024-10-15 10:04:26 ~2 min linux 📦zip
✔️ 78e50fe #21 2024-10-15 10:05:13 ~3 min ios 📦zip
✔️ 78e50fe #21 2024-10-15 10:06:52 ~5 min tests-rpc 📄log
✔️ 78e50fe #21 2024-10-15 10:33:47 ~32 min tests 📄log
✔️ e072746 #22 2024-10-15 10:13:27 ~2 min android 📦aar
✔️ e072746 #22 2024-10-15 10:13:38 ~2 min linux 📦zip
✔️ e072746 #22 2024-10-15 10:14:16 ~3 min ios 📦zip
✔️ e072746 #22 2024-10-15 10:15:59 ~5 min tests-rpc 📄log
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ 2dd9cbe #23 2024-10-15 10:29:16 ~2 min android 📦aar
✔️ 2dd9cbe #23 2024-10-15 10:30:06 ~3 min ios 📦zip
✔️ 2dd9cbe #23 2024-10-15 10:30:48 ~4 min linux 📦zip
✔️ 2dd9cbe #23 2024-10-15 10:31:51 ~5 min tests-rpc 📄log
✔️ 2dd9cbe #22 2024-10-15 11:06:00 ~31 min tests 📄log
✔️ cf501e5 #24 2024-10-15 11:17:54 ~3 min android 📦aar
✔️ cf501e5 #24 2024-10-15 11:18:51 ~3 min ios 📦zip
✔️ cf501e5 #24 2024-10-15 11:20:04 ~5 min linux 📦zip
✔️ cf501e5 #24 2024-10-15 11:20:12 ~5 min tests-rpc 📄log
✔️ cf501e5 #23 2024-10-15 11:48:48 ~33 min tests 📄log

Copy link

codecov bot commented Oct 7, 2024

Codecov Report

Attention: Patch coverage is 88.23529% with 64 lines in your changes missing coverage. Please review.

Project coverage is 47.60%. Comparing base (4dbad72) to head (cf501e5).
Report is 1 commits behind head on develop.

✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
healthmanager/provider_errors/provider_errors.go 75.92% 13 Missing and 13 partials ⚠️
rpc/client.go 75.00% 7 Missing and 5 partials ⚠️
healthmanager/providers_health_manager.go 80.35% 11 Missing ⚠️
...althmanager/provider_errors/rpc_provider_errors.go 82.85% 3 Missing and 3 partials ⚠️
healthmanager/blockchain_health_manager.go 95.65% 4 Missing and 1 partial ⚠️
circuitbreaker/circuit_breaker.go 91.30% 1 Missing and 1 partial ⚠️
services/wallet/common/mock/feed_subscription.go 90.00% 2 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff             @@
##           develop    #5924      +/-   ##
===========================================
+ Coverage    47.03%   47.60%   +0.56%     
===========================================
  Files          832      842      +10     
  Lines       137644   138253     +609     
===========================================
+ Hits         64746    65816    +1070     
+ Misses       65389    64658     -731     
- Partials      7509     7779     +270     
Flag Coverage Δ
functional 10.59% <66.86%> (?)
unit 46.91% <88.23%> (-0.13%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
healthmanager/aggregator/aggregator.go 100.00% <100.00%> (ø)
healthmanager/rpcstatus/provider_status.go 100.00% <100.00%> (ø)
node/get_status_node.go 52.39% <100.00%> (+2.54%) ⬆️
rpc/chain/client.go 44.52% <100.00%> (+18.47%) ⬆️
services/wallet/market/mock/mock_price_provider.go 100.00% <100.00%> (ø)
circuitbreaker/circuit_breaker.go 97.84% <91.30%> (+3.04%) ⬆️
services/wallet/common/mock/feed_subscription.go 90.00% <90.00%> (ø)
healthmanager/blockchain_health_manager.go 95.65% <95.65%> (ø)
...althmanager/provider_errors/rpc_provider_errors.go 82.85% <82.85%> (ø)
healthmanager/providers_health_manager.go 80.35% <80.35%> (ø)
... and 2 more

... and 113 files with indirect coverage changes

@friofry friofry requested a review from saledjenic October 7, 2024 15:41
@friofry friofry changed the title RPC providers detailed statuses #5923 feat: RPC providers detailed statuses #5923 Oct 8, 2024
@friofry friofry changed the title feat: RPC providers detailed statuses #5923 feat_: RPC providers detailed statuses #5923 Oct 8, 2024
@friofry friofry force-pushed the ab/issue-5923-rpc-status branch from ac6650f to 5164e3d Compare October 8, 2024 08:34
Copy link
Contributor

@saledjenic saledjenic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Much cleaner approach than we had.


// Subscribe allows providers to receive notifications about changes.
func (p *ProvidersHealthManager) Subscribe() chan struct{} {
p.mu.Lock()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If p.mu is used to guard p. aggregator could we use another mutex to guard p. subscribers only?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it shouldn't be a problem to protect the whole struct state with the same mutext, unless there is frequent access to Update and Subscribe methods at the same time.

Ideally we should not use 2 mutexes in the same struct to avoid unintentional deadlocks. Otherwise we have to ensure consistent locking order. Or I can use a sync.Map for subscribers

// Subscribe allows clients to receive notifications about changes.
func (b *BlockchainHealthManager) Subscribe() chan struct{} {
ch := make(chan struct{}, 1)
b.mu.Lock()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The same here, does it make sense to have separate mutex for subscribers?

@friofry friofry force-pushed the ab/issue-5923-rpc-status branch 15 times, most recently from cd640b3 to eb10b20 Compare October 9, 2024 17:06
@friofry friofry force-pushed the ab/issue-5923-rpc-status branch from eb10b20 to 7f26231 Compare October 11, 2024 17:02
@friofry friofry force-pushed the ab/issue-5923-rpc-status branch 2 times, most recently from 08acd98 to e4aabe5 Compare October 14, 2024 14:27
@friofry friofry requested a review from dlipicar October 14, 2024 15:14
@churik
Copy link
Member

churik commented Oct 15, 2024

@friofry should we just check it on regression and you'll check that all required data is logged to healthmanager? or you'll provide instructions on testing for us?

@friofry friofry force-pushed the ab/issue-5923-rpc-status branch 2 times, most recently from 78e50fe to e072746 Compare October 15, 2024 10:10
@friofry friofry force-pushed the ab/issue-5923-rpc-status branch from e072746 to 2dd9cbe Compare October 15, 2024 10:26
@friofry friofry requested a review from dlipicar October 15, 2024 10:27
@friofry
Copy link
Contributor Author

friofry commented Oct 15, 2024

@friofry should we just check it on regression and you'll check that all required data is logged to healthmanager? or you'll provide instructions on testing for us?

I've added logs to rpc/client.go. They will look like:

./data/geth.log:102043:DEBUG[10-15|11:12:19.190|github.com/status-im/status-go/rpc/client.go:208]                                           Sending blockchain health status event   package=status-go/rpc.Client status="{\"status\":{\"name\":\"blockchain\",\"last_success_at\":\"2024-10-15T15:12:19.190633+04:00\",\"last_error_at\":\"2024-10-15T15:12:17.097294+04:0

To make them look like this you can use echo "copy_escaped_json_from_logs_here" | jq .

{
  "status": {
    "name": "blockchain",
    "last_success_at": "2024-10-15T15:12:19.190633+04:00",
    "last_error_at": "2024-10-15T15:12:17.097294+04:00",
    "last_error": {
      "Op": "Post",
      "URL": "https://optimism-goerli.infura.io/v3/f581d0087132480b8f8b08b3f790839b",
      "Err": {
        "Op": "dial",
        "Net": "tcp",
        "Source": null,
        "Addr": null,
        "Err": {
          "Err": "no such host",
          "Name": "optimism-goerli.infura.io",
          "Server": "",
          "IsTimeout": false,
          "IsTemporary": false,
          "IsNotFound": true
        }
      }
    },
    "status": "up"
  },
  "statusPerChain": {
    "1": {
      "name": "1",
      "last_success_at": "2024-10-15T15:12:18.270261+04:00",
      "last_error_at": "2024-10-15T15:12:17.743854+04:00",
      "last_error": {
        "StatusCode": 401,
        "Status": "401 Unauthorized",
        "Body": "PGh0bWw+DQo8aGVhZD48dGl0bGU+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L3RpdGxlPjwvaGVhZD4NCjxib2R5Pg0KPGNlbnRlcj48aDE+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L2gxPjwvY2VudGVyPg0KPGhyPjxjZW50ZXI+bmdpbngvMS4yNi4yPC9jZW50ZXI+DQo8L2JvZHk+DQo8L2h0bWw+DQo="
      },
      "status": "up"
    },
    "11155111": {
      "name": "11155111",
      "last_success_at": "2024-10-15T15:12:19.170257+04:00",
      "last_error_at": "2024-10-15T15:12:17.956126+04:00",
      "last_error": {
        "StatusCode": 401,
        "Status": "401 Unauthorized",
        "Body": "PGh0bWw+DQo8aGVhZD48dGl0bGU+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L3RpdGxlPjwvaGVhZD4NCjxib2R5Pg0KPGNlbnRlcj48aDE+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L2gxPjwvY2VudGVyPg0KPGhyPjxjZW50ZXI+bmdpbngvMS4yNi4yPC9jZW50ZXI+DQo8L2JvZHk+DQo8L2h0bWw+DQo="
      },
      "status": "up"
    },
    "11155420": {
      "name": "11155420",
      "last_success_at": "2024-10-15T15:12:19.19068+04:00",
      "last_error_at": "2024-10-15T15:12:18.63128+04:00",
      "last_error": {
        "Value": "string",
        "Type": {},
        "Offset": 86,
        "Struct": "jsonrpcMessage",
        "Field": "error"
      },
      "status": "up"
    },
    "420": {
      "name": "420",
      "last_success_at": "0001-01-01T00:00:00Z",
      "last_error_at": "2024-10-15T15:12:17.097294+04:00",
      "last_error": {
        "Op": "Post",
        "URL": "https://optimism-goerli.infura.io/v3/f581d0087132480b8f8b08b3f790839b",
        "Err": {
          "Op": "dial",
          "Net": "tcp",
          "Source": null,
          "Addr": null,
          "Err": {
            "Err": "no such host",
            "Name": "optimism-goerli.infura.io",
            "Server": "",
            "IsTimeout": false,
            "IsTemporary": false,
            "IsNotFound": true
          }
        }
      },
      "status": "down"
    },
    "421614": {
      "name": "421614",
      "last_success_at": "2024-10-15T15:12:19.182573+04:00",
      "last_error_at": "2024-10-15T15:12:18.094382+04:00",
      "last_error": {
        "StatusCode": 401,
        "Status": "401 Unauthorized",
        "Body": "PGh0bWw+DQo8aGVhZD48dGl0bGU+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L3RpdGxlPjwvaGVhZD4NCjxib2R5Pg0KPGNlbnRlcj48aDE+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L2gxPjwvY2VudGVyPg0KPGhyPjxjZW50ZXI+bmdpbngvMS4yNi4yPC9jZW50ZXI+DQo8L2JvZHk+DQo8L2h0bWw+DQo="
      },
      "status": "up"
    }
  },
  "statusPerChainPerProvider": {
    "1": {
      "eth-archival.rpc.grove.city": {
        "name": "eth-archival.rpc.grove.city",
        "last_success_at": "2024-10-15T15:12:18.270261+04:00",
        "last_error_at": "0001-01-01T00:00:00Z",
        "last_error": null,
        "status": "up"
      },
      "status-proxy-0": {
        "name": "status-proxy-0",
        "last_success_at": "0001-01-01T00:00:00Z",
        "last_error_at": "2024-10-15T15:12:17.345342+04:00",
        "last_error": {
          "StatusCode": 401,
          "Status": "401 Unauthorized",
          "Body": "PGh0bWw+DQo8aGVhZD48dGl0bGU+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L3RpdGxlPjwvaGVhZD4NCjxib2R5Pg0KPGNlbnRlcj48aDE+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L2gxPjwvY2VudGVyPg0KPGhyPjxjZW50ZXI+bmdpbngvMS4yNi4yPC9jZW50ZXI+DQo8L2JvZHk+DQo8L2h0bWw+DQo="
        },
        "status": "down"
      },
      "status-proxy-fallback-1": {
        "name": "status-proxy-fallback-1",
        "last_success_at": "0001-01-01T00:00:00Z",
        "last_error_at": "2024-10-15T15:12:17.558183+04:00",
        "last_error": {
          "StatusCode": 401,
          "Status": "401 Unauthorized",
          "Body": "PGh0bWw+DQo8aGVhZD48dGl0bGU+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L3RpdGxlPjwvaGVhZD4NCjxib2R5Pg0KPGNlbnRlcj48aDE+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L2gxPjwvY2VudGVyPg0KPGhyPjxjZW50ZXI+bmdpbngvMS4yNi4yPC9jZW50ZXI+DQo8L2JvZHk+DQo8L2h0bWw+DQo="
        },
        "status": "down"
      },
      "status-proxy-fallback2-2": {
        "name": "status-proxy-fallback2-2",
        "last_success_at": "0001-01-01T00:00:00Z",
        "last_error_at": "2024-10-15T15:12:17.743854+04:00",
        "last_error": {
          "StatusCode": 401,
          "Status": "401 Unauthorized",
          "Body": "PGh0bWw+DQo8aGVhZD48dGl0bGU+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L3RpdGxlPjwvaGVhZD4NCjxib2R5Pg0KPGNlbnRlcj48aDE+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L2gxPjwvY2VudGVyPg0KPGhyPjxjZW50ZXI+bmdpbngvMS4yNi4yPC9jZW50ZXI+DQo8L2JvZHk+DQo8L2h0bWw+DQo="
        },
        "status": "down"
      }
    },
    "11155111": {
      "sepolia-archival.rpc.grove.city": {
        "name": "sepolia-archival.rpc.grove.city",
        "last_success_at": "2024-10-15T15:12:19.170257+04:00",
        "last_error_at": "0001-01-01T00:00:00Z",
        "last_error": null,
        "status": "up"
      },
      "status-proxy-0": {
        "name": "status-proxy-0",
        "last_success_at": "0001-01-01T00:00:00Z",
        "last_error_at": "2024-10-15T15:12:17.406256+04:00",
        "last_error": {
          "StatusCode": 401,
          "Status": "401 Unauthorized",
          "Body": "PGh0bWw+DQo8aGVhZD48dGl0bGU+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L3RpdGxlPjwvaGVhZD4NCjxib2R5Pg0KPGNlbnRlcj48aDE+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L2gxPjwvY2VudGVyPg0KPGhyPjxjZW50ZXI+bmdpbngvMS4yNi4yPC9jZW50ZXI+DQo8L2JvZHk+DQo8L2h0bWw+DQo="
        },
        "status": "down"
      },
      "status-proxy-fallback-1": {
        "name": "status-proxy-fallback-1",
        "last_success_at": "0001-01-01T00:00:00Z",
        "last_error_at": "2024-10-15T15:12:17.762572+04:00",
        "last_error": {
          "StatusCode": 401,
          "Status": "401 Unauthorized",
          "Body": "PGh0bWw+DQo8aGVhZD48dGl0bGU+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L3RpdGxlPjwvaGVhZD4NCjxib2R5Pg0KPGNlbnRlcj48aDE+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L2gxPjwvY2VudGVyPg0KPGhyPjxjZW50ZXI+bmdpbngvMS4yNi4yPC9jZW50ZXI+DQo8L2JvZHk+DQo8L2h0bWw+DQo="
        },
        "status": "down"
      },
      "status-proxy-fallback2-2": {
        "name": "status-proxy-fallback2-2",
        "last_success_at": "0001-01-01T00:00:00Z",
        "last_error_at": "2024-10-15T15:12:17.956126+04:00",
        "last_error": {
          "StatusCode": 401,
          "Status": "401 Unauthorized",
          "Body": "PGh0bWw+DQo8aGVhZD48dGl0bGU+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L3RpdGxlPjwvaGVhZD4NCjxib2R5Pg0KPGNlbnRlcj48aDE+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L2gxPjwvY2VudGVyPg0KPGhyPjxjZW50ZXI+bmdpbngvMS4yNi4yPC9jZW50ZXI+DQo8L2JvZHk+DQo8L2h0bWw+DQo="
        },
        "status": "down"
      }
    },
    "11155420": {
      "optimism-sepolia-archival.rpc.grove.city": {
        "name": "optimism-sepolia-archival.rpc.grove.city",
        "last_success_at": "0001-01-01T00:00:00Z",
        "last_error_at": "2024-10-15T15:12:18.63128+04:00",
        "last_error": {
          "Value": "string",
          "Type": {},
          "Offset": 86,
          "Struct": "jsonrpcMessage",
          "Field": "error"
        },
        "status": "down"
      },
      "optimism-sepolia.infura.io": {
        "name": "optimism-sepolia.infura.io",
        "last_success_at": "2024-10-15T15:12:19.19068+04:00",
        "last_error_at": "0001-01-01T00:00:00Z",
        "last_error": null,
        "status": "up"
      },
      "status-proxy-0": {
        "name": "status-proxy-0",
        "last_success_at": "0001-01-01T00:00:00Z",
        "last_error_at": "2024-10-15T15:12:17.431878+04:00",
        "last_error": {
          "StatusCode": 401,
          "Status": "401 Unauthorized",
          "Body": "PGh0bWw+DQo8aGVhZD48dGl0bGU+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L3RpdGxlPjwvaGVhZD4NCjxib2R5Pg0KPGNlbnRlcj48aDE+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L2gxPjwvY2VudGVyPg0KPGhyPjxjZW50ZXI+bmdpbngvMS4yNi4yPC9jZW50ZXI+DQo8L2JvZHk+DQo8L2h0bWw+DQo="
        },
        "status": "down"
      },
      "status-proxy-fallback-1": {
        "name": "status-proxy-fallback-1",
        "last_success_at": "0001-01-01T00:00:00Z",
        "last_error_at": "2024-10-15T15:12:17.62544+04:00",
        "last_error": {
          "StatusCode": 401,
          "Status": "401 Unauthorized",
          "Body": "PGh0bWw+DQo8aGVhZD48dGl0bGU+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L3RpdGxlPjwvaGVhZD4NCjxib2R5Pg0KPGNlbnRlcj48aDE+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L2gxPjwvY2VudGVyPg0KPGhyPjxjZW50ZXI+bmdpbngvMS4yNi4yPC9jZW50ZXI+DQo8L2JvZHk+DQo8L2h0bWw+DQo="
        },
        "status": "down"
      },
      "status-proxy-fallback2-2": {
        "name": "status-proxy-fallback2-2",
        "last_success_at": "0001-01-01T00:00:00Z",
        "last_error_at": "2024-10-15T15:12:17.815739+04:00",
        "last_error": {
          "StatusCode": 401,
          "Status": "401 Unauthorized",
          "Body": "PGh0bWw+DQo8aGVhZD48dGl0bGU+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L3RpdGxlPjwvaGVhZD4NCjxib2R5Pg0KPGNlbnRlcj48aDE+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L2gxPjwvY2VudGVyPg0KPGhyPjxjZW50ZXI+bmdpbngvMS4yNi4yPC9jZW50ZXI+DQo8L2JvZHk+DQo8L2h0bWw+DQo="
        },
        "status": "down"
      }
    },
    "420": {
      "optimism-goerli.infura.io": {
        "name": "optimism-goerli.infura.io",
        "last_success_at": "0001-01-01T00:00:00Z",
        "last_error_at": "2024-10-15T15:12:17.097294+04:00",
        "last_error": {
          "Op": "Post",
          "URL": "https://optimism-goerli.infura.io/v3/f581d0087132480b8f8b08b3f790839b",
          "Err": {
            "Op": "dial",
            "Net": "tcp",
            "Source": null,
            "Addr": null,
            "Err": {
              "Err": "no such host",
              "Name": "optimism-goerli.infura.io",
              "Server": "",
              "IsTimeout": false,
              "IsTemporary": false,
              "IsNotFound": true
            }
          }
        },
        "status": "down"
      }
    },
    "421614": {
      "arbitrum-sepolia-archival.rpc.grove.city": {
        "name": "arbitrum-sepolia-archival.rpc.grove.city",
        "last_success_at": "2024-10-15T15:12:19.182573+04:00",
        "last_error_at": "0001-01-01T00:00:00Z",
        "last_error": null,
        "status": "up"
      },
      "status-proxy-0": {
        "name": "status-proxy-0",
        "last_success_at": "0001-01-01T00:00:00Z",
        "last_error_at": "2024-10-15T15:12:17.710213+04:00",
        "last_error": {
          "StatusCode": 401,
          "Status": "401 Unauthorized",
          "Body": "PGh0bWw+DQo8aGVhZD48dGl0bGU+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L3RpdGxlPjwvaGVhZD4NCjxib2R5Pg0KPGNlbnRlcj48aDE+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L2gxPjwvY2VudGVyPg0KPGhyPjxjZW50ZXI+bmdpbngvMS4yNi4yPC9jZW50ZXI+DQo8L2JvZHk+DQo8L2h0bWw+DQo="
        },
        "status": "down"
      },
      "status-proxy-fallback-1": {
        "name": "status-proxy-fallback-1",
        "last_success_at": "0001-01-01T00:00:00Z",
        "last_error_at": "2024-10-15T15:12:17.909217+04:00",
        "last_error": {
          "StatusCode": 401,
          "Status": "401 Unauthorized",
          "Body": "PGh0bWw+DQo8aGVhZD48dGl0bGU+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L3RpdGxlPjwvaGVhZD4NCjxib2R5Pg0KPGNlbnRlcj48aDE+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L2gxPjwvY2VudGVyPg0KPGhyPjxjZW50ZXI+bmdpbngvMS4yNi4yPC9jZW50ZXI+DQo8L2JvZHk+DQo8L2h0bWw+DQo="
        },
        "status": "down"
      },
      "status-proxy-fallback2-2": {
        "name": "status-proxy-fallback2-2",
        "last_success_at": "0001-01-01T00:00:00Z",
        "last_error_at": "2024-10-15T15:12:18.094382+04:00",
        "last_error": {
          "StatusCode": 401,
          "Status": "401 Unauthorized",
          "Body": "PGh0bWw+DQo8aGVhZD48dGl0bGU+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L3RpdGxlPjwvaGVhZD4NCjxib2R5Pg0KPGNlbnRlcj48aDE+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L2gxPjwvY2VudGVyPg0KPGhyPjxjZW50ZXI+bmdpbngvMS4yNi4yPC9jZW50ZXI+DQo8L2JvZHk+DQo8L2h0bWw+DQo="
        },
        "status": "down"
      }
    }
  }
}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is there a good reason not to use an autogenerated mock here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

as per discussed in discord, It will be added in status-im/status-mobile#21071

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Rpc provider status aggregator with detailed info
5 participants