Skip to content

Commit 696e1bb

Browse files
committed
Adding a basic metrics service and some metrics to track
1 parent 7aa5f58 commit 696e1bb

6 files changed

Lines changed: 193 additions & 113 deletions

File tree

Pipfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ flake8 = "*"
1212

1313
[packages]
1414
python-dateutil = "*"
15+
prometheus-client = "*"
1516

1617
[requires]
1718
python_version = "3.6"

Pipfile.lock

Lines changed: 140 additions & 113 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

receptor/config.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import os
66
import ssl
77

8+
from prometheus_client import Counter, Gauge
9+
810
from .entrypoints import run_as_node, run_as_controller, run_as_ping, run_as_send
911
from .exceptions import ReceptorRuntimeError, ReceptorConfigError
1012

@@ -30,6 +32,12 @@
3032
},
3133
}
3234

35+
messages_received_counter = Counter("incoming_messages", "Messages received from Receptor Peers")
36+
connected_peers_guage = Gauge("connected_peers", "Number of active peer connections")
37+
work_counter = Counter("work_events", "A count of the number of work events that have been received")
38+
active_work_gauge = Gauge("active_work", "Amount of work currently being performed")
39+
route_counter = Counter("route_events", "A count of the number of messages that have been routed elsewhere in the mesh")
40+
3341

3442
def py_class(class_spec):
3543
if class_spec not in SINGLETONS:
@@ -137,6 +145,21 @@ def __init__(self, args=None):
137145
value_type='bool',
138146
hint='Disable the server function and only connect to configured peers',
139147
)
148+
self.add_config_option(
149+
section='node',
150+
key='stats_enable',
151+
default_value=None,
152+
set_value=True,
153+
value_type='bool',
154+
hint="Enable Prometheus style stats port",
155+
)
156+
self.add_config_option(
157+
section='node',
158+
key='stats_port',
159+
default_value=8889,
160+
value_type='int',
161+
hint='Port to listen for requests to show stats',
162+
)
140163
self.add_config_option(
141164
section='node',
142165
key='ping_interval',
@@ -192,6 +215,21 @@ def __init__(self, args=None):
192215
value_type='path',
193216
hint='Path to control socket for controller commands.',
194217
)
218+
self.add_config_option(
219+
section='controller',
220+
key='stats_enable',
221+
default_value=None,
222+
set_value=True,
223+
value_type='bool',
224+
hint="Enable Prometheus style stats port",
225+
)
226+
self.add_config_option(
227+
section='controller',
228+
key='stats_port',
229+
default_value=8889,
230+
value_type='int',
231+
hint='Port to listen for requests to show stats',
232+
)
195233
self.add_config_option(
196234
section='ping',
197235
key='count',

receptor/entrypoints.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import sys
55
import time
66

7+
from prometheus_client import start_http_server
8+
79
from .receptor import Receptor
810
from . import controller
911
from . import exceptions
@@ -15,12 +17,18 @@
1517
def run_as_controller(config):
1618
receptor = Receptor(config)
1719
logger.info(f'Starting up as node ID {receptor.node_id}')
20+
if config.controller_stats_enable:
21+
logger.info(f'Starting stats on port {config.controller_stats_port}')
22+
start_http_server(config.controller_stats_port)
1823
controller.mainloop(receptor, config.controller_socket_path)
1924

2025

2126
def run_as_node(config):
2227
receptor = Receptor(config)
2328
logger.info(f'Running as Receptor node with ID: {receptor.node_id}')
29+
if config.node_stats_enable:
30+
logger.info(f'Starting stats on port {config.node_stats_port}')
31+
start_http_server(config.node_stats_port)
2432
node.mainloop(receptor, config.node_ping_interval)
2533

2634

receptor/protocol.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
from .messages import envelope
1212
from .exceptions import ReceptorBufferError
13+
from .config import connected_peers_guage
1314

1415
logger = logging.getLogger(__name__)
1516

@@ -74,9 +75,11 @@ def connection_made(self, transport):
7475
self.transport = transport
7576
self.greeted = False
7677
self.incoming_buffer = DataBuffer()
78+
connected_peers_guage.inc()
7779
self.loop.create_task(self.wait_greeting())
7880

7981
def connection_lost(self, exc):
82+
connected_peers_guage.dec()
8083
self.receptor.remove_connection(self)
8184

8285
def data_received(self, data):
@@ -171,10 +174,12 @@ def __init__(self, receptor, loop):
171174

172175
def connection_made(self, transport):
173176
self.transport = transport
177+
connected_peers_guage.inc()
174178
if self not in self.receptor.controller_connections:
175179
self.receptor.controller_connections.append(self)
176180

177181
def connection_lost(self, exc):
182+
connected_peers_guage.dec()
178183
if self in self.receptor.controller_connections:
179184
self.receptor.controller_connections.remove(self)
180185

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
long_description_content_type='text/markdown',
2020
python_requires=">=3.6",
2121
install_requires=[
22+
"prometheus_client==0.7.1",
2223
],
2324
zip_safe=False,
2425
entry_points={

0 commit comments

Comments
 (0)