diff --git a/README.md b/README.md index 87d61bf..02ac288 100644 --- a/README.md +++ b/README.md @@ -104,12 +104,18 @@ You can setup env through `.env` file or environment variables with defined as d ## Changelog -### Version 0.5.1 (2023-09-01) +### Version 1.0.0 (UNRELEASED) + +- remove `opnsense_main_ha_state` and `opnsense_backup_ha_state` + metrics marked as deprecated on version 0.5.0 and replace + by `opnsense_server_ha_state` and `role` label + +### Version 0.5.1 (2023-09-04) - FIX `opnsense_server_ha_state` calls were not implemented -### Version 0.5.0 (2023-09-01) +### Version 0.5.0 (2023-09-04) - add role label in metrics - all to configure supervised interfaces using `--opnsense-interfaces` diff --git a/opnsense_exporter/server.py b/opnsense_exporter/server.py index d2037a1..fd9c7a9 100644 --- a/opnsense_exporter/server.py +++ b/opnsense_exporter/server.py @@ -15,33 +15,6 @@ load_dotenv() HA_STATES = [enum.value for enum in list(OPNSenseHAState)] -class DeprecatedPromEnum(Enum, DeprecationWarning): - def state(self, *args, **kwargs): - super().state(*args, **kwargs) - logger.warning("This metric %s will be removed in v1.0.0", self._name) - - -main_ha_state = DeprecatedPromEnum( - "opnsense_main_ha_state", - "OPNSense HA state of the MAIN server", - [ - "instance", - "host", - "role", - ], - states=HA_STATES, -) -backup_ha_state = DeprecatedPromEnum( - "opnsense_backup_ha_state", - "OPNSense HA state of the BACKUP server", - [ - "instance", - "host", - "role", - ], - states=HA_STATES, -) - opnsense_server_ha_state = Enum( "opnsense_server_ha_state", "OPNSense server HA state", @@ -85,12 +58,6 @@ class OPNSensePrometheusExporter: """A dummy function that takes some time.""" main_state = self.main.get_interface_vip_status() backup_sate = self.backup.get_interface_vip_status() - main_ha_state.labels(instance=self.exporter_instance, **self.main.labels).state( - main_state.value - ) - backup_ha_state.labels( - instance=self.exporter_instance, **self.backup.labels - ).state(backup_sate.value) opnsense_server_ha_state.labels( instance=self.exporter_instance, **self.main.labels ).state(main_state.value) @@ -111,9 +78,10 @@ class OPNSensePrometheusExporter: **traffic.labels ).set(traffic.value) - def start_server(self): + def start_server(self, port=8000): # Start up the server to expose the metrics. - start_http_server(8000) + start_http_server(port) + logger.info("listen port %s", port) # Generate some requests. while True: self.process_requests() diff --git a/tests/test_server.py b/tests/test_server.py index 5e67518..cadea0d 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -123,28 +123,22 @@ def test_process_requests(): body=generate_diagnostics_traffic_interface_paylaod(), ) - main_ha_state_mock = FakePromEnum() - backup_ha_state_mock = FakePromEnum() opnsense_server_ha_state_mock = FakePromEnum() opnsense_active_server_traffic_rate_mock = FakePromGauge() - with mock.patch("opnsense_exporter.server.main_ha_state", new=main_ha_state_mock): + with mock.patch( + "opnsense_exporter.server.opnsense_server_ha_state", + new=opnsense_server_ha_state_mock, + ): with mock.patch( - "opnsense_exporter.server.backup_ha_state", new=backup_ha_state_mock + "opnsense_exporter.server.opnsense_active_server_traffic_rate", + new=opnsense_active_server_traffic_rate_mock, ): - with mock.patch( - "opnsense_exporter.server.opnsense_server_ha_state", - new=opnsense_server_ha_state_mock, - ): - with mock.patch( - "opnsense_exporter.server.opnsense_active_server_traffic_rate", - new=opnsense_active_server_traffic_rate_mock, - ): - OPNSensePrometheusExporter( - OPNSenseAPI(OPNSenseRole.MAIN, MAIN_HOST, LOGIN, PASSWORD), - OPNSenseAPI(OPNSenseRole.BACKUP, BACKUP_HOST, LOGIN, PASSWORD), - "wan", - ).process_requests() + OPNSensePrometheusExporter( + OPNSenseAPI(OPNSenseRole.MAIN, MAIN_HOST, LOGIN, PASSWORD), + OPNSenseAPI(OPNSenseRole.BACKUP, BACKUP_HOST, LOGIN, PASSWORD), + "wan", + ).process_requests() assert opnsense_server_ha_state_mock.count_state_calls == 2 assert opnsense_server_ha_state_mock._labels_calls == [ @@ -160,21 +154,6 @@ def test_process_requests(): }, ] assert opnsense_server_ha_state_mock._state_calls == ["active", "hot_standby"] - assert main_ha_state_mock._state == "active" - assert main_ha_state_mock.count_state_calls == 1, main_ha_state_mock._state_calls - assert main_ha_state_mock._labels == { - "instance": "", - "host": MAIN_HOST, - "role": "main", - } - - assert backup_ha_state_mock._state == "hot_standby" - assert backup_ha_state_mock.count_state_calls == 1 - assert backup_ha_state_mock._labels == { - "instance": "", - "host": BACKUP_HOST, - "role": "backup", - } assert opnsense_active_server_traffic_rate_mock.count_set_calls == 2 assert opnsense_active_server_traffic_rate_mock._labels_calls == [ @@ -214,28 +193,22 @@ def test_process_requests_backup_active(): body=generate_diagnostics_traffic_interface_paylaod(), ) - main_ha_state_mock = FakePromEnum() - backup_ha_state_mock = FakePromEnum() opnsense_server_ha_state_mock = FakePromEnum() opnsense_active_server_traffic_rate_mock = FakePromGauge() - with mock.patch("opnsense_exporter.server.main_ha_state", new=main_ha_state_mock): + with mock.patch( + "opnsense_exporter.server.opnsense_server_ha_state", + new=opnsense_server_ha_state_mock, + ): with mock.patch( - "opnsense_exporter.server.backup_ha_state", new=backup_ha_state_mock + "opnsense_exporter.server.opnsense_active_server_traffic_rate", + new=opnsense_active_server_traffic_rate_mock, ): - with mock.patch( - "opnsense_exporter.server.opnsense_server_ha_state", - new=opnsense_server_ha_state_mock, - ): - with mock.patch( - "opnsense_exporter.server.opnsense_active_server_traffic_rate", - new=opnsense_active_server_traffic_rate_mock, - ): - OPNSensePrometheusExporter( - OPNSenseAPI(OPNSenseRole.MAIN, MAIN_HOST, LOGIN, PASSWORD), - OPNSenseAPI(OPNSenseRole.BACKUP, BACKUP_HOST, LOGIN, PASSWORD), - "wan", - ).process_requests() + OPNSensePrometheusExporter( + OPNSenseAPI(OPNSenseRole.MAIN, MAIN_HOST, LOGIN, PASSWORD), + OPNSenseAPI(OPNSenseRole.BACKUP, BACKUP_HOST, LOGIN, PASSWORD), + "wan", + ).process_requests() assert opnsense_server_ha_state_mock.count_state_calls == 2 assert opnsense_server_ha_state_mock._labels_calls == [ @@ -251,21 +224,6 @@ def test_process_requests_backup_active(): }, ] assert opnsense_server_ha_state_mock._state_calls == ["maintenancemode", "active"] - assert main_ha_state_mock._state == "maintenancemode" - assert main_ha_state_mock.count_state_calls == 1 - assert main_ha_state_mock._labels == { - "instance": "", - "host": MAIN_HOST, - "role": "main", - } - - assert backup_ha_state_mock._state == "active" - assert backup_ha_state_mock.count_state_calls == 1 - assert backup_ha_state_mock._labels == { - "instance": "", - "host": BACKUP_HOST, - "role": "backup", - } assert opnsense_active_server_traffic_rate_mock.count_set_calls == 2 opnsense_active_server_traffic_rate_mock._labels_calls == [ @@ -306,28 +264,22 @@ def test_process_no_active(): body=generate_diagnostics_traffic_interface_paylaod(), ) - main_ha_state_mock = FakePromEnum() - backup_ha_state_mock = FakePromEnum() opnsense_server_ha_state_mock = FakePromEnum() opnsense_active_server_traffic_rate_mock = FakePromGauge() - with mock.patch("opnsense_exporter.server.main_ha_state", new=main_ha_state_mock): + with mock.patch( + "opnsense_exporter.server.opnsense_server_ha_state", + new=opnsense_server_ha_state_mock, + ): with mock.patch( - "opnsense_exporter.server.backup_ha_state", new=backup_ha_state_mock + "opnsense_exporter.server.opnsense_active_server_traffic_rate", + new=opnsense_active_server_traffic_rate_mock, ): - with mock.patch( - "opnsense_exporter.server.opnsense_server_ha_state", - new=opnsense_server_ha_state_mock, - ): - with mock.patch( - "opnsense_exporter.server.opnsense_active_server_traffic_rate", - new=opnsense_active_server_traffic_rate_mock, - ): - OPNSensePrometheusExporter( - OPNSenseAPI(OPNSenseRole.MAIN, MAIN_HOST, LOGIN, PASSWORD), - OPNSenseAPI(OPNSenseRole.BACKUP, BACKUP_HOST, LOGIN, PASSWORD), - "wan", - ).process_requests() + OPNSensePrometheusExporter( + OPNSenseAPI(OPNSenseRole.MAIN, MAIN_HOST, LOGIN, PASSWORD), + OPNSenseAPI(OPNSenseRole.BACKUP, BACKUP_HOST, LOGIN, PASSWORD), + "wan", + ).process_requests() assert opnsense_server_ha_state_mock.count_state_calls == 2 assert opnsense_server_ha_state_mock._labels_calls == [ @@ -346,21 +298,6 @@ def test_process_no_active(): "maintenancemode", "unavailable", ] - assert main_ha_state_mock._state == "maintenancemode" - assert main_ha_state_mock.count_state_calls == 1 - assert main_ha_state_mock._labels == { - "instance": "", - "host": MAIN_HOST, - "role": "main", - } - - assert backup_ha_state_mock._state == "unavailable" - assert backup_ha_state_mock.count_state_calls == 1 - assert backup_ha_state_mock._labels == { - "instance": "", - "host": BACKUP_HOST, - "role": "backup", - } assert opnsense_active_server_traffic_rate_mock.count_set_calls == 0 @@ -384,28 +321,22 @@ def test_process_with_falsy_value(): status=404, ) - main_ha_state_mock = FakePromEnum() - backup_ha_state_mock = FakePromEnum() opnsense_server_ha_state_mock = FakePromEnum() opnsense_active_server_traffic_rate_mock = FakePromGauge() - with mock.patch("opnsense_exporter.server.main_ha_state", new=main_ha_state_mock): + with mock.patch( + "opnsense_exporter.server.opnsense_server_ha_state", + new=opnsense_server_ha_state_mock, + ): with mock.patch( - "opnsense_exporter.server.backup_ha_state", new=backup_ha_state_mock + "opnsense_exporter.server.opnsense_active_server_traffic_rate", + new=opnsense_active_server_traffic_rate_mock, ): - with mock.patch( - "opnsense_exporter.server.opnsense_server_ha_state", - new=opnsense_server_ha_state_mock, - ): - with mock.patch( - "opnsense_exporter.server.opnsense_active_server_traffic_rate", - new=opnsense_active_server_traffic_rate_mock, - ): - OPNSensePrometheusExporter( - OPNSenseAPI(OPNSenseRole.MAIN, MAIN_HOST, LOGIN, PASSWORD), - OPNSenseAPI(OPNSenseRole.BACKUP, BACKUP_HOST, LOGIN, PASSWORD), - "wan", - ).process_requests() + OPNSensePrometheusExporter( + OPNSenseAPI(OPNSenseRole.MAIN, MAIN_HOST, LOGIN, PASSWORD), + OPNSenseAPI(OPNSenseRole.BACKUP, BACKUP_HOST, LOGIN, PASSWORD), + "wan", + ).process_requests() assert opnsense_server_ha_state_mock.count_state_calls == 2 assert opnsense_server_ha_state_mock._labels_calls == [ @@ -421,20 +352,5 @@ def test_process_with_falsy_value(): }, ] assert opnsense_server_ha_state_mock._state_calls == ["active", "hot_standby"] - assert main_ha_state_mock._state == "active" - assert main_ha_state_mock.count_state_calls == 1 - assert main_ha_state_mock._labels == { - "instance": "", - "host": MAIN_HOST, - "role": "main", - } - - assert backup_ha_state_mock.count_state_calls == 1 - assert backup_ha_state_mock._state == "hot_standby" - assert backup_ha_state_mock._labels == { - "instance": "", - "host": BACKUP_HOST, - "role": "backup", - } assert opnsense_active_server_traffic_rate_mock.count_set_calls == 0