380 lines
17 KiB
Python
Raw Permalink Normal View History

import os
from time import time
from datetime import datetime, timedelta
NOW = datetime.now()
2023-11-01 14:02:29 +02:00
SAMPLE_INPUTS = [
{"description": "A simple string", "value": "Hello World!"},
{"description": "An integer", "value": "1234567890"},
{"description": "A dictionary", "value": '{"key": "value"}'},
{"description": "Chinese characters", "value": "这是一些中文"},
{"description": "Emojis", "value": "🚀🌟✨"},
{"description": "Lorem ipsum text", "value": "Lorem ipsum dolor sit amet"},
{"description": "HTML content", "value": "<html><body>Hello</body></html>"},
{"description": "Cyrillic characters", "value": "\u041f\u0440\u0438\u0432\u0435\u0442"},
{"description": "Base64 encoded string", "value": "Base64==dGVzdA=="},
{"description": "Binary data", "value": "d29ya2luZyB3aXRoIGJpbmFyeSBkYXRh: \x50\x51"},
{"description": "Special characters with whitespace", "value": "\t\nSpecial\tCharacters\n"},
{"description": "Boolean false as a string", "value": "False"},
{"description": "A float number", "value": "3.1415926535"},
{"description": "A list", "value": "[1, 2, 3, 4, 5]"},
{"description": "Hexadecimal number as a string", "value": "0xDEADBEEF"},
{"description": "Email format", "value": "user@example.com"},
{"description": "URL format", "value": "http://example.com"},
{"description": "Date and time in ISO format", "value": "2023-11-01T12:00:00Z"},
2025-10-08 13:33:24 +03:00
{"description": "String with escaped quotes", "value": '"Escaped" \\"quotes\\"'},
{"description": "A regular expression", "value": "Regular expression: ^[a-z0-9_-]{3,16}$"},
{"description": "A very long string", "value": "x" * 1000},
{"description": "A JSON string", "value": '{"name": "John", "age": 30, "city": "New York"}'},
{"description": "A Unix path", "value": "/usr/local/bin"},
2025-10-08 13:33:24 +03:00
{"description": "A Windows path", "value": "C:\\Windows\\System32"},
{"description": "An SQL query", "value": "SELECT * FROM users WHERE id = 1;"},
{"description": "JavaScript code snippet", "value": "function test() { console.log('Hello World'); }"},
{"description": "A CSS snippet", "value": "body { background-color: #fff; }"},
{"description": "A Python one-liner", "value": "print('Hello World')"},
{"description": "An IP address", "value": "192.168.1.1"},
{"description": "A domain name", "value": "www.example.com"},
{"description": "A user agent string", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"},
{"description": "A credit card number", "value": "1234-5678-9012-3456"},
{"description": "A phone number", "value": "+1234567890"},
{"description": "A UUID", "value": "123e4567-e89b-12d3-a456-426614174000"},
{"description": "A hashtag", "value": "#helloWorld"},
{"description": "A Twitter handle", "value": "@username"},
{"description": "A password", "value": "P@ssw0rd!"},
{"description": "A date in common format", "value": "01/11/2023"},
{"description": "A time string", "value": "12:00:00"},
{"description": "A mathematical equation", "value": "E = mc^2"},
]
INVALID_PAYLOADS = [
{"description": "Empty string", "value": ""},
{"description": "Unecoded text", "value": "Hello World!"},
{"description": "A dictionary", "value": {"key": "YWFh"}},
{"description": "An integer", "value": 1234567890},
{"description": "A list", "value": ["YWFh"]},
{"description": "A bool", "value": True},
]
INVALID_CONTENT_TOPICS = [
{"description": "Empty string", "value": ""},
{"description": "A dictionary", "value": {"key": "YWFh"}},
{"description": "An integer", "value": 1234567890},
{"description": "A list", "value": ["YWFh"]},
{"description": "A bool", "value": True},
]
CONTENT_TOPICS_DIFFERENT_SHARDS = [
"/myapp/1/latest/proto", # resolves to shard 0
"/waku/2/content/test.js", # resolves to shard 1
"/app/22/sometopic/someencoding", # resolves to shard 2
"/toychat/2/huilong/proto", # resolves to shard 3
"/statusim/1/community/cbor", # resolves to shard 4
"/app/27/sometopic/someencoding", # resolves to shard 5
"/app/29/sometopic/someencoding", # resolves to shard 6
"/app/20/sometopic/someencoding", # resolves to shard 7
]
CONTENT_TOPICS_SHARD_0 = [
"/newsService/1.0/weekly/protobuf",
"/newsService/1.0/alerts/xml",
"/newsService/1.0/updates/json",
"/newsService/2.0/alerts/json",
"/newsService/2.0/summaries/xml",
"/newsService/2.0/highlights/yaml",
"/newsService/3.0/weekly/json",
"/newsService/3.0/summaries/xml",
]
CONTENT_TOPICS_SHARD_7 = [
"/newsService/2.0/alerts/yaml",
"/newsService/2.0/highlights/xml",
"/newsService/3.0/daily/protobuf",
"/newsService/3.0/alerts/xml",
"/newsService/3.0/updates/protobuf",
"/newsService/3.0/reviews/xml",
"/newsService/4.0/alerts/yaml",
"/newsService/4.0/updates/yaml",
]
DEFAULT_CLUSTER_ID = "198"
VALID_PUBSUB_TOPICS = [
f"/waku/2/rs/{DEFAULT_CLUSTER_ID}/0",
f"/waku/2/rs/{DEFAULT_CLUSTER_ID}/1",
f"/waku/2/rs/{DEFAULT_CLUSTER_ID}/9",
f"/waku/2/rs/{DEFAULT_CLUSTER_ID}/25",
f"/waku/2/rs/{DEFAULT_CLUSTER_ID}/1000",
]
FLEET_CLUSTER_ID = "1"
FLEET_PUBSUB_TOPICS = [f"/waku/2/rs/{FLEET_CLUSTER_ID}/{i}" for i in range(8)]
PUBSUB_TOPICS_STORE = [
f"/waku/2/rs/{DEFAULT_CLUSTER_ID}/0",
f"/waku/2/rs/{DEFAULT_CLUSTER_ID}/1",
f"/waku/2/rs/{DEFAULT_CLUSTER_ID}/2",
f"/waku/2/rs/{DEFAULT_CLUSTER_ID}/3",
f"/waku/2/rs/{DEFAULT_CLUSTER_ID}/4",
f"/waku/2/rs/{DEFAULT_CLUSTER_ID}/5",
f"/waku/2/rs/{DEFAULT_CLUSTER_ID}/6",
f"/waku/2/rs/{DEFAULT_CLUSTER_ID}/7",
f"/waku/2/rs/{DEFAULT_CLUSTER_ID}/8",
]
INVALID_PUBSUB_TOPICS = ["/test/2/rs/0/1", "/waku/3/rs/0/1", "/waku/2/test/0/1", "/waku/2/rs/3/b", "/waku/2/rs/0"]
PUBSUB_TOPICS_DIFFERENT_CLUSTERS = [
"/waku/2/rs/2/0",
"/waku/2/rs/2/1",
"/waku/2/rs/5/0",
"/waku/2/rs/5/1",
"/waku/2/rs/5/999",
"/waku/2/rs/8/0",
"/waku/2/rs/999/999",
]
PUBSUB_TOPICS_SAME_CLUSTER = [
"/waku/2/rs/199/0",
"/waku/2/rs/199/1",
"/waku/2/rs/199/2",
"/waku/2/rs/199/3",
"/waku/2/rs/199/4",
"/waku/2/rs/199/5",
"/waku/2/rs/199/6",
"/waku/2/rs/199/7",
]
PUBSUB_TOPICS_WRONG_FORMAT = [
{"description": "A dictionary", "value": {"key": "YWFh"}},
{"description": "An integer", "value": 1234567890},
{"description": "A list", "value": ["YWFh"]},
{"description": "A bool", "value": True},
]
def get_sample_timestamps():
"""Return timestamp test-cases with values evaluated fresh at call time.
This factory function MUST be called from inside each test (never at module
import time) so that the "Now" value reflects the actual time when the
message is published.
Valid_for semantics:
``["nwaku"]`` accepted by nwaku in the current run mode.
``[]`` rejected by nwaku in the current run mode (either
structurally invalid type, or out-of-epoch in fleet/RLN
mode).
"""
now_ns = int(time() * 1e9)
now_dt = datetime.now()
fleet_mode = os.getenv("FLEET_BOOTSTRAP", "false").lower() == "true"
standalone_valid = [] if fleet_mode else ["nwaku"]
return [
{"description": "Now", "value": now_ns, "valid_for": ["nwaku"]},
# 10 years from now
{"description": "Far future", "value": int((now_dt + timedelta(days=365 * 10)).timestamp() * 1e9), "valid_for": standalone_valid},
# 1 hour ago
{"description": "Recent past", "value": int((now_dt - timedelta(hours=1)).timestamp() * 1e9), "valid_for": standalone_valid},
# 1 hour ahead
{"description": "Near future", "value": int((now_dt + timedelta(hours=1)).timestamp() * 1e9), "valid_for": standalone_valid},
{"description": "Positive number", "value": 1, "valid_for": standalone_valid},
{"description": "Negative number", "value": -1, "valid_for": standalone_valid},
# DST starts
{"description": "DST change", "value": int(datetime(2020, 3, 8, 2, 0, 0).timestamp() * 1e9), "valid_for": standalone_valid},
{"description": "Timestamp as string number", "value": str(now_ns), "valid_for": []},
{"description": "Invalid large number", "value": 2**63, "valid_for": []},
{"description": "Float number", "value": float(now_ns), "valid_for": []},
{"description": "Array instead of timestamp", "value": [now_ns], "valid_for": []},
{"description": "Object instead of timestamp", "value": {"time": now_ns}, "valid_for": []},
{"description": "ISO 8601 timestamp", "value": "2023-12-26T10:58:51", "valid_for": []},
{"description": "Missing", "value": None, "valid_for": []},
]
chore: RLN relay tests (#30) * fix: add get_multiaddr_with_id step - temporarily use local docker images * fix: discard containers used for RLN registration * fix: switch to use cluster ID 1 for RLN * test: publish at slow and spam rate * fix: shorten test data set * fix: move RLN related code into separate class * fix: use send only publish function - add spam and alternate rate tests * fix: use math.trunc instead of rounding * fix: first message without delay * fix: add one more second to messages with delay * fix: add methods to setup non default RLN nodes * fix: rewrite tests using steps rather than fixtures - prepare for non default settings for RLN * test: random epoch with valid_payloads_at_slow_rate * test: random user message limit with valid payloads * fix: skip test "random user message limit with valid payloads" * fix: mark flaky "at variable_rate with valid payloads" * fix: rename tests for easier debugging * fix: mark valid_payloads_dynamic_at_slow_rate to skip * fix: forgot to add actual file * test: valid payloads dynamic(on chain) at spam rate - extend timeout for ensure_ready() to 600s - add ensure_healthy() for future use - add text content based rest call - remove NODE1, NODE2 imports * fix: revert env_vars to source images from Harbor * fix: reuse setup first and second rln relay node for setup_main_rln_relay_nodes * fix: reuse register_rln_single_node for register_main_rln_relay_nodes * fix: start using src.steps.common - removed RLN test class inheritance from StepsRelay * fix: test using whole data set at test payloads_at_slow_rate * fix: switch to send msg and check for slow rate tests * fix: add comment for skip check at first message * fix: refactor payloads_at_variable_rate to use only one payload pattern * fix: remove the plural from payloads_at_variable_rate * fix: multiple class inheritance for TestRelayRLN * test: node1 with rln node2 without rln at spam rate * test: mixed epoch at slow rate * test: add lightpush methods * test: send valid payloads lightpush at spam rate * fix: node1 to act as light push receiving node - add setup lightpush node to spin off node2 with lightpush support * fix: use NODE1 NODE2 instead of DEFAULT_NWAKU * fix: no lightpush param required for plain RLN relay * fix: comment for lightpush * fix: comment for lightpush - wait for implementation * fix: comment on chain tests * fix: add lightpush case to publish_message * fix: remove check_light_pushed_message_reaches_receiving_peer from StepsRLN * fix: change comment for mixed_epoch_at_slow_rate * test: happy and common case with 5 nodes * fix: add all required fixtures explicitly * fix: add timeout param to ensure_ready * fix: skip RLN tests for go-waku * fix: reformated with pre-commit * fix: uncomment skip for debugging * fix: put the skip back * fix: change comment for on chain tests * fix: run RLN tests in serial - add grouping of tests to runner - use smaller dataset for spam rate tests * test: Nim to Nim workflow * test: check also additional nodes for go-waku * test: all nodes are nwaku * fix: string quotes * fix: remove additional nodes * fix: re-arrange skip conditions * test: RLN only * fix: change default additional nodes to nwaku only * fix: change additional nodes rather at top level workflow * fix: enable all tests * test: problems with current workdir * test: rln only * test: correct typo * test: re-enable all tests - remove current dir debug * fix: nwaku additional nodes for nim to nim worklfow * fix: re-able discord notification - delete test workflow * fix: add get_multiaddr_with_id step - temporarily use local docker images * fix: discard containers used for RLN registration * fix: switch to use cluster ID 1 for RLN * test: publish at slow and spam rate * fix: shorten test data set * fix: rebase onto master * fix: use send only publish function - add spam and alternate rate tests * fix: use math.trunc instead of rounding * fix: first message without delay * fix: add one more second to messages with delay * fix: add methods to setup non default RLN nodes * fix: rewrite tests using steps rather than fixtures - prepare for non default settings for RLN * test: random epoch with valid_payloads_at_slow_rate * test: random user message limit with valid payloads * fix: skip test "random user message limit with valid payloads" * fix: mark flaky "at variable_rate with valid payloads" * fix: rename tests for easier debugging * fix: mark valid_payloads_dynamic_at_slow_rate to skip * fix: forgot to add actual file * test: valid payloads dynamic(on chain) at spam rate - extend timeout for ensure_ready() to 600s - add ensure_healthy() for future use - add text content based rest call - remove NODE1, NODE2 imports * fix: revert env_vars to source images from Harbor * fix: reuse setup first and second rln relay node for setup_main_rln_relay_nodes * fix: reuse register_rln_single_node for register_main_rln_relay_nodes * fix: start using src.steps.common - removed RLN test class inheritance from StepsRelay * fix: test using whole data set at test payloads_at_slow_rate * fix: switch to send msg and check for slow rate tests * fix: add comment for skip check at first message * fix: refactor payloads_at_variable_rate to use only one payload pattern * fix: remove the plural from payloads_at_variable_rate * fix: multiple class inheritance for TestRelayRLN * test: node1 with rln node2 without rln at spam rate * test: mixed epoch at slow rate * test: add lightpush methods * test: send valid payloads lightpush at spam rate * fix: node1 to act as light push receiving node - add setup lightpush node to spin off node2 with lightpush support * fix: use NODE1 NODE2 instead of DEFAULT_NWAKU * fix: no lightpush param required for plain RLN relay * fix: comment for lightpush * fix: comment for lightpush - wait for implementation * fix: comment on chain tests * fix: add lightpush case to publish_message * fix: remove check_light_pushed_message_reaches_receiving_peer from StepsRLN * fix: change comment for mixed_epoch_at_slow_rate * test: happy and common case with 5 nodes * fix: add all required fixtures explicitly * fix: add timeout param to ensure_ready * fix: skip RLN tests for go-waku * fix: uncomment skip for debugging * fix: put the skip back * fix: change comment for on chain tests * fix: run RLN tests in serial - add grouping of tests to runner - use smaller dataset for spam rate tests * test: Nim to Nim workflow * test: check also additional nodes for go-waku * test: all nodes are nwaku * fix: string quotes * fix: remove additional nodes * fix: re-arrange skip conditions * test: RLN only * fix: change default additional nodes to nwaku only * fix: change additional nodes rather at top level workflow * fix: enable all tests * test: problems with current workdir * test: rln only * test: correct typo * test: re-enable all tests - remove current dir debug * fix: nwaku additional nodes for nim to nim worklfow * fix: re-able discord notification - delete test workflow * test: re-test again after rebase * fix: wait longer for credential store * test: try again with Discord report off * fix: enable Discord - delete test workflow
2024-05-07 08:31:12 +08:00
PUBSUB_TOPICS_RLN = [f"/waku/2/rs/{DEFAULT_CLUSTER_ID}/0"]
LOG_ERROR_KEYWORDS = [
"crash",
"fatal",
"panic",
"abort",
"segfault",
"corrupt",
"terminated",
"unhandled",
"stacktrace",
"deadlock",
"SIGSEGV",
"SIGABRT",
"stack overflow",
"index out of bounds",
"nil pointer dereference",
"goroutine exit",
"nil pointer",
"runtime error",
"goexit",
"race condition",
"double free",
]
2024-08-30 14:15:45 +03:00
METRICS_WITH_INITIAL_VALUE_ZERO = [
"libp2p_peers",
"libp2p_failed_upgrades_incoming_total",
"libp2p_failed_upgrades_outgoing_total",
"libp2p_total_dial_attempts_total",
"libp2p_successful_dials_total",
"libp2p_failed_dials_total",
"waku_rln_messages_total_total",
"waku_rln_spam_messages_total_total",
"waku_rln_proof_verification_total_total",
"waku_rln_number_registered_memberships",
"waku_rln_proof_verification_duration_seconds",
"waku_rln_proof_generation_duration_seconds",
"waku_rln_instance_creation_duration_seconds",
"waku_rln_membership_insertion_duration_seconds",
"waku_rln_membership_credentials_import_duration_seconds",
2025-03-18 09:30:27 +02:00
"waku_rln_remaining_proofs_per_epoch",
"waku_rln_total_generated_proofs",
2024-08-30 14:15:45 +03:00
"libp2p_pubsub_sig_verify_success_total",
"libp2p_pubsub_sig_verify_failure_total",
"libp2p_pubsub_disconnects_over_non_priority_queue_limit_total",
"libp2p_pubsub_peers",
"libp2p_pubsub_unsubscriptions_total",
"libp2p_pubsub_validation_success_total",
"libp2p_pubsub_validation_failure_total",
"libp2p_pubsub_validation_ignore_total",
"libp2p_pubsub_broadcast_iwant_total",
"libp2p_pubsub_received_iwant_total",
"libp2p_gossipsub_cache_window_size",
'libp2p_gossipsub_peers_per_topic_mesh{topic="other"}',
'libp2p_gossipsub_peers_per_topic_fanout{topic="other"}',
'libp2p_gossipsub_peers_per_topic_gossipsub{topic="other"}',
"libp2p_gossipsub_low_peers_topics",
"libp2p_gossipsub_healthy_peers_topics",
"libp2p_gossipsub_failed_publish_total",
"libp2p_gossipsub_invalid_topic_subscription_total",
"libp2p_gossipsub_duplicate_during_validation_total",
"libp2p_gossipsub_idontwant_saved_messages_total",
"libp2p_gossipsub_duplicate_total",
"libp2p_gossipsub_received_total",
"libp2p_rendezvous_register_total",
"libp2p_rendezvous_discover_total",
"libp2p_rendezvous_registered",
"libp2p_rendezvous_namespaces",
"waku_peer_store_size",
"waku_total_unique_peers",
"presto_server_missing_requests_count",
"presto_server_invalid_requests_count",
'waku_archive_messages{type="stored"}',
"waku_archive_insert_duration_seconds_sum",
"waku_archive_insert_duration_seconds_count",
'waku_archive_insert_duration_seconds_bucket{le="0.005"}',
'waku_archive_insert_duration_seconds_bucket{le="0.01"}',
'waku_archive_insert_duration_seconds_bucket{le="0.025"}',
'waku_archive_insert_duration_seconds_bucket{le="0.05"}',
'waku_archive_insert_duration_seconds_bucket{le="0.075"}',
'waku_archive_insert_duration_seconds_bucket{le="0.1"}',
'waku_archive_insert_duration_seconds_bucket{le="0.25"}',
'waku_archive_insert_duration_seconds_bucket{le="0.5"}',
'waku_archive_insert_duration_seconds_bucket{le="0.75"}',
'waku_archive_insert_duration_seconds_bucket{le="1.0"}',
'waku_archive_insert_duration_seconds_bucket{le="2.5"}',
'waku_archive_insert_duration_seconds_bucket{le="5.0"}',
'waku_archive_insert_duration_seconds_bucket{le="7.5"}',
'waku_archive_insert_duration_seconds_bucket{le="10.0"}',
'waku_archive_insert_duration_seconds_bucket{le="+Inf"}',
"waku_archive_query_duration_seconds_sum",
"waku_archive_query_duration_seconds_count",
'waku_archive_query_duration_seconds_bucket{le="0.005"}',
'waku_archive_query_duration_seconds_bucket{le="0.01"}',
'waku_archive_query_duration_seconds_bucket{le="0.025"}',
'waku_archive_query_duration_seconds_bucket{le="0.05"}',
'waku_archive_query_duration_seconds_bucket{le="0.075"}',
'waku_archive_query_duration_seconds_bucket{le="0.1"}',
'waku_archive_query_duration_seconds_bucket{le="0.25"}',
'waku_archive_query_duration_seconds_bucket{le="0.5"}',
'waku_archive_query_duration_seconds_bucket{le="0.75"}',
'waku_archive_query_duration_seconds_bucket{le="1.0"}',
'waku_archive_query_duration_seconds_bucket{le="2.5"}',
'waku_archive_query_duration_seconds_bucket{le="5.0"}',
'waku_archive_query_duration_seconds_bucket{le="7.5"}',
'waku_archive_query_duration_seconds_bucket{le="10.0"}',
'waku_archive_query_duration_seconds_bucket{le="+Inf"}',
"waku_filter_subscriptions",
"waku_filter_handle_message_duration_seconds_sum",
"waku_filter_handle_message_duration_seconds_count",
'waku_filter_handle_message_duration_seconds_bucket{le="0.005"}',
'waku_filter_handle_message_duration_seconds_bucket{le="0.01"}',
'waku_filter_handle_message_duration_seconds_bucket{le="0.025"}',
'waku_filter_handle_message_duration_seconds_bucket{le="0.05"}',
'waku_filter_handle_message_duration_seconds_bucket{le="0.075"}',
'waku_filter_handle_message_duration_seconds_bucket{le="0.1"}',
'waku_filter_handle_message_duration_seconds_bucket{le="0.25"}',
'waku_filter_handle_message_duration_seconds_bucket{le="0.5"}',
'waku_filter_handle_message_duration_seconds_bucket{le="0.75"}',
'waku_filter_handle_message_duration_seconds_bucket{le="1.0"}',
'waku_filter_handle_message_duration_seconds_bucket{le="2.5"}',
'waku_filter_handle_message_duration_seconds_bucket{le="5.0"}',
'waku_filter_handle_message_duration_seconds_bucket{le="7.5"}',
'waku_filter_handle_message_duration_seconds_bucket{le="10.0"}',
'waku_filter_handle_message_duration_seconds_bucket{le="+Inf"}',
"discovery_session_lru_cache_hits_total",
"discovery_session_lru_cache_misses_total",
"discovery_session_decrypt_failures_total",
"discovery_unsolicited_messages_total",
"discovery_enr_auto_update_total",
"waku_px_peers_received_total",
"waku_px_peers_received_unknown",
2024-10-04 09:09:40 +03:00
"waku_px_peers_sent_total",
"waku_px_peers",
2024-08-30 14:15:45 +03:00
"waku_histogram_message_size_sum",
"waku_histogram_message_size_count",
'waku_histogram_message_size_bucket{le="0.0"}',
2024-10-31 10:11:25 +02:00
'waku_histogram_message_size_bucket{le="1.0"}',
'waku_histogram_message_size_bucket{le="3.0"}',
2024-08-30 14:15:45 +03:00
'waku_histogram_message_size_bucket{le="5.0"}',
'waku_histogram_message_size_bucket{le="15.0"}',
'waku_histogram_message_size_bucket{le="50.0"}',
'waku_histogram_message_size_bucket{le="75.0"}',
'waku_histogram_message_size_bucket{le="100.0"}',
'waku_histogram_message_size_bucket{le="125.0"}',
'waku_histogram_message_size_bucket{le="150.0"}',
2024-10-31 10:11:25 +02:00
'waku_histogram_message_size_bucket{le="500.0"}',
2024-08-30 14:15:45 +03:00
'waku_histogram_message_size_bucket{le="700.0"}',
'waku_histogram_message_size_bucket{le="1000.0"}',
'waku_histogram_message_size_bucket{le="+Inf"}',
"waku_lightpush_peers",
"waku_filter_peers",
"waku_store_peers",
"waku_px_peers",
"waku_dnsdisc_discovered",
"rendezvousPeerFoundTotal_total",
"reconciliation_roundtrips_sum",
"reconciliation_roundtrips_count",
"reconciliation_differences_sum",
"reconciliation_differences_count",
'reconciliation_roundtrips_bucket{le="1.0"}',
'reconciliation_roundtrips_bucket{le="2.0"}',
'reconciliation_roundtrips_bucket{le="3.0"}',
'reconciliation_roundtrips_bucket{le="5.0"}',
'reconciliation_roundtrips_bucket{le="8.0"}',
'reconciliation_roundtrips_bucket{le="13.0"}',
'reconciliation_roundtrips_bucket{le="+Inf"}',
'reconciliation_differences_bucket{le="0.0"}',
'reconciliation_differences_bucket{le="10.0"}',
'reconciliation_differences_bucket{le="50.0"}',
'reconciliation_differences_bucket{le="100.0"}',
'reconciliation_differences_bucket{le="500.0"}',
'reconciliation_differences_bucket{le="1000.0"}',
'reconciliation_differences_bucket{le="5000.0"}',
'reconciliation_differences_bucket{le="+Inf"}',
'waku_filter_handle_message_duration_seconds_bucket{le="15.0"}',
'waku_filter_handle_message_duration_seconds_bucket{le="20.0"}',
'waku_filter_handle_message_duration_seconds_bucket{le="30.0"}',
2025-04-25 09:43:57 +03:00
"total_messages_cached",
2025-08-05 18:16:37 +03:00
"waku_store_queries_total",
2025-09-17 11:49:01 +03:00
"mix_pool_size",
"libp2p_gossipsub_imreceiving_saved_messages_total",
"postgres_payload_size_bytes",
2024-08-30 14:15:45 +03:00
]