add labels
This commit is contained in:
parent
c5b0262b32
commit
bb66722036
2 changed files with 88 additions and 13 deletions
|
@ -12,45 +12,79 @@ load_dotenv()
|
||||||
|
|
||||||
HA_STATES = ["active", "hot_standby", "unavailable", "maintenancemode"]
|
HA_STATES = ["active", "hot_standby", "unavailable", "maintenancemode"]
|
||||||
main_ha_state = Enum(
|
main_ha_state = Enum(
|
||||||
"opnsense_main_ha_state", "OPNSense HA state of the MAIN server", states=HA_STATES
|
"opnsense_main_ha_state",
|
||||||
|
"OPNSense HA state of the MAIN server",
|
||||||
|
[
|
||||||
|
"instance",
|
||||||
|
"host",
|
||||||
|
],
|
||||||
|
states=HA_STATES,
|
||||||
)
|
)
|
||||||
backup_ha_state = Enum(
|
backup_ha_state = Enum(
|
||||||
"opnsense_backup_ha_state",
|
"opnsense_backup_ha_state",
|
||||||
"OPNSense HA state of the BACKUP server",
|
"OPNSense HA state of the BACKUP server",
|
||||||
|
[
|
||||||
|
"instance",
|
||||||
|
"host",
|
||||||
|
],
|
||||||
states=HA_STATES,
|
states=HA_STATES,
|
||||||
)
|
)
|
||||||
active_server_bytes_received = Gauge(
|
active_server_bytes_received = Gauge(
|
||||||
"opnsense_active_server_bytes_received",
|
"opnsense_active_server_bytes_received",
|
||||||
"Active OPNSense server bytes received on WAN interface",
|
"Active OPNSense server bytes received on WAN interface",
|
||||||
|
[
|
||||||
|
"instance",
|
||||||
|
"host",
|
||||||
|
],
|
||||||
)
|
)
|
||||||
active_server_bytes_transmitted = Gauge(
|
active_server_bytes_transmitted = Gauge(
|
||||||
"opnsense_active_server_bytes_transmitted",
|
"opnsense_active_server_bytes_transmitted",
|
||||||
"Active OPNSense server bytes transmitted on WAN interface",
|
"Active OPNSense server bytes transmitted on WAN interface",
|
||||||
|
[
|
||||||
|
"instance",
|
||||||
|
"host",
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def process_requests(main, backup):
|
def process_requests(main, backup, exporter_instance: str = ""):
|
||||||
"""A dummy function that takes some time."""
|
"""A dummy function that takes some time."""
|
||||||
main_state = main.get_interface_vip_status()
|
main_state = main.get_interface_vip_status()
|
||||||
backup_sate = backup.get_interface_vip_status()
|
backup_sate = backup.get_interface_vip_status()
|
||||||
|
main_ha_state.labels(instance=exporter_instance, host=main.host)
|
||||||
main_ha_state.state(main_state)
|
main_ha_state.state(main_state)
|
||||||
|
backup_ha_state.labels(instance=exporter_instance, host=backup.host)
|
||||||
backup_ha_state.state(backup_sate)
|
backup_ha_state.state(backup_sate)
|
||||||
bytes_received = None
|
active_opnsense = None
|
||||||
bytes_transmitted = None
|
|
||||||
if main_state == "active":
|
if main_state == "active":
|
||||||
bytes_received, bytes_transmitted = main.get_wan_trafic()
|
active_opnsense = main
|
||||||
if backup_sate == "active":
|
if backup_sate == "active":
|
||||||
bytes_received, bytes_transmitted = backup.get_wan_trafic()
|
active_opnsense = backup
|
||||||
active_server_bytes_received.set(bytes_received or -1)
|
if active_opnsense:
|
||||||
active_server_bytes_transmitted.set(bytes_transmitted or -1)
|
bytes_received, bytes_transmitted = active_opnsense.get_wan_trafic()
|
||||||
|
if bytes_received or bytes_received == 0:
|
||||||
|
active_server_bytes_received.labels(
|
||||||
|
instance=exporter_instance, host=active_opnsense.host
|
||||||
|
)
|
||||||
|
active_server_bytes_received.set(bytes_received)
|
||||||
|
if bytes_transmitted or bytes_transmitted == 0:
|
||||||
|
active_server_bytes_transmitted.labels(
|
||||||
|
instance=exporter_instance, host=active_opnsense.host
|
||||||
|
)
|
||||||
|
active_server_bytes_transmitted.set(bytes_transmitted)
|
||||||
|
|
||||||
|
|
||||||
def start_server(main: OPNSenseAPI, backup: OPNSenseAPI, check_frequency: int = 1):
|
def start_server(
|
||||||
|
main: OPNSenseAPI,
|
||||||
|
backup: OPNSenseAPI,
|
||||||
|
check_frequency: int = 1,
|
||||||
|
exporter_instance: str = "",
|
||||||
|
):
|
||||||
# Start up the server to expose the metrics.
|
# Start up the server to expose the metrics.
|
||||||
start_http_server(8000)
|
start_http_server(8000)
|
||||||
# Generate some requests.
|
# Generate some requests.
|
||||||
while True:
|
while True:
|
||||||
process_requests(main, backup)
|
process_requests(main, backup, exporter_instance=exporter_instance)
|
||||||
time.sleep(check_frequency)
|
time.sleep(check_frequency)
|
||||||
|
|
||||||
|
|
||||||
|
@ -105,7 +139,7 @@ def run():
|
||||||
type=str,
|
type=str,
|
||||||
default=socket.gethostname(),
|
default=socket.gethostname(),
|
||||||
help=(
|
help=(
|
||||||
"Instance name, default value computed with hostname "
|
"Exporter Instance name, default value computed with hostname "
|
||||||
"where the server is running. Use to set the instance label."
|
"where the server is running. Use to set the instance label."
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
@ -115,4 +149,5 @@ def run():
|
||||||
OPNSenseAPI(arguments.main, arguments.user, arguments.password),
|
OPNSenseAPI(arguments.main, arguments.user, arguments.password),
|
||||||
OPNSenseAPI(arguments.backup, arguments.user, arguments.password),
|
OPNSenseAPI(arguments.backup, arguments.user, arguments.password),
|
||||||
check_frequency=arguments.frequency,
|
check_frequency=arguments.frequency,
|
||||||
|
exporter_instance=arguments.prom_instance,
|
||||||
)
|
)
|
||||||
|
|
|
@ -161,5 +161,45 @@ def test_process_no_active():
|
||||||
)
|
)
|
||||||
main_ha_state_mock.assert_called_once_with("maintenancemode")
|
main_ha_state_mock.assert_called_once_with("maintenancemode")
|
||||||
backup_ha_state_mock.assert_called_once_with("unavailable")
|
backup_ha_state_mock.assert_called_once_with("unavailable")
|
||||||
active_server_bytes_received_mock.assert_called_once_with(-1)
|
active_server_bytes_received_mock.assert_not_called()
|
||||||
active_server_bytes_transmitted_mock.assert_called_once_with(-1)
|
active_server_bytes_transmitted_mock.assert_not_called()
|
||||||
|
|
||||||
|
|
||||||
|
@responses.activate
|
||||||
|
def test_process_with_falsy_value():
|
||||||
|
responses.add(
|
||||||
|
responses.GET,
|
||||||
|
f"https://{MAIN_HOST}/api/diagnostics/interface/get_vip_status/",
|
||||||
|
body=generate_get_vip_status_paylaod("MASTER", "MASTER", False),
|
||||||
|
)
|
||||||
|
responses.add(
|
||||||
|
responses.GET,
|
||||||
|
f"https://{BACKUP_HOST}/api/diagnostics/interface/get_vip_status/",
|
||||||
|
body=generate_get_vip_status_paylaod("BACKUP", "BACKUP", False),
|
||||||
|
)
|
||||||
|
responses.add(
|
||||||
|
responses.GET,
|
||||||
|
f"https://{BACKUP_HOST}/api/diagnostics/traffic/interface",
|
||||||
|
body=generate_diagnostics_traffic_interface_paylaod(),
|
||||||
|
status=404,
|
||||||
|
)
|
||||||
|
with mock.patch(
|
||||||
|
"opnsense_exporter.server.main_ha_state.state"
|
||||||
|
) as main_ha_state_mock:
|
||||||
|
with mock.patch(
|
||||||
|
"opnsense_exporter.server.backup_ha_state.state"
|
||||||
|
) as backup_ha_state_mock:
|
||||||
|
with mock.patch(
|
||||||
|
"opnsense_exporter.server.active_server_bytes_received.set"
|
||||||
|
) as active_server_bytes_received_mock:
|
||||||
|
with mock.patch(
|
||||||
|
"opnsense_exporter.server.active_server_bytes_transmitted.set"
|
||||||
|
) as active_server_bytes_transmitted_mock:
|
||||||
|
process_requests(
|
||||||
|
OPNSenseAPI(MAIN_HOST, LOGIN, PASSWORD),
|
||||||
|
OPNSenseAPI(BACKUP_HOST, LOGIN, PASSWORD),
|
||||||
|
)
|
||||||
|
main_ha_state_mock.assert_called_once_with("active")
|
||||||
|
backup_ha_state_mock.assert_called_once_with("hot_standby")
|
||||||
|
active_server_bytes_received_mock.assert_not_called()
|
||||||
|
active_server_bytes_transmitted_mock.assert_not_called()
|
||||||
|
|
Loading…
Reference in a new issue