Merge pull request #14 from Aignosi/SIENTIAPDE-1174-mapear-e-implementar-metricas-a-serem-criadas

Sientiapde 1174 mapear e implementar metricas a serem criadas
This commit is contained in:
Bruno Domingues
2025-08-13 16:34:20 -03:00
committed by GitHub
16 changed files with 127 additions and 91 deletions

View File

@@ -66,7 +66,7 @@ def signal_handler(_signum, _frame):
def start_prometheus_server():
try:
port = int(os.getenv("HTTP_SERVER_PORT", 4840))
port = int(os.getenv("HTTP_METRICS_PORT", 9090))
start_http_server(port)
print(f"Prometheus server started on port {port}.")
metrics.APP_UP.labels(pod_id=POD_ID).set(1) # Mark app as UP

View File

@@ -74,6 +74,7 @@ class Ingestor:
'model_name': '-',
'workflow_name': 'OPC_INGESTOR',
'schema_name': 'OPC_INGESTOR',
'pod_id': self.pod_id,
}
self.ingestor_manager = None
@@ -136,7 +137,6 @@ class Ingestor:
},
lease_ttl=self.lease_ttl,
heartbeat_ttl=self.heartbeat_ttl,
pod_id=self.pod_id,
poll_interval=self.poll_interval,
mongo_connection_string=self.mongo_connection_string,
mongo_database=self.mongo_database,

View File

@@ -96,7 +96,8 @@ class DataManager(BaseActivity):
)
BaseActivity.__init__(self, logger=logger,
notification_handler=notification_handler)
notification_handler=notification_handler,
set_error_counter=True)
def shutdown(self):
"""Closes the Kafka producer connection."""
@@ -189,6 +190,12 @@ class DataManager(BaseActivity):
self.logger.debug(
f"Message inserted into MongoDB collection {topic}: {data}")
metrics.TAG_WRITTEN_COUNT.labels(
pod_id=self.pod_id,
tag_name=data["name"],
collection_name=topic
).inc()
except Exception as e:
trace = traceback.format_exc()
self.send_notification(

View File

@@ -14,7 +14,7 @@ import ingestor.metrics as metrics
class IngestorManager(BaseActivity):
def __init__(self,
kafka_servers: str, redis_data: dict,
lease_ttl: int, heartbeat_ttl: int, pod_id: str,
lease_ttl: int, heartbeat_ttl: int,
poll_interval: int, mongo_connection_string: str, mongo_database: str,
metadata: dict,
logger: Logger, notification_handler: NotificationHandler,
@@ -40,7 +40,6 @@ class IngestorManager(BaseActivity):
port=redis_port,
lease_ttl=lease_ttl,
heartbeat_ttl=heartbeat_ttl,
pod_id=pod_id,
metadata=metadata,
logger=logger,
notification_handler=notification_handler,
@@ -52,11 +51,11 @@ class IngestorManager(BaseActivity):
self.managed_tags = {}
self.opc_servers = {}
self.pod_id = pod_id
self.metadata = metadata
BaseActivity.__init__(self, logger=logger,
notification_handler=notification_handler)
notification_handler=notification_handler,
set_error_counter=True)
def initialize_opc_from_config(self, server_config: dict) -> OpcManager | None:
"""
@@ -87,7 +86,6 @@ class IngestorManager(BaseActivity):
logger=self.logger,
server_uri=server_config['server_uri'],
notification_handler=self.notification_handler,
pod_id=self.pod_id,
metadata=self.metadata,
cert_path=server_config.get('cert_path'),
private_key_path=server_config.get('private_key_path'),

View File

@@ -11,8 +11,8 @@ import ingestor.metrics as metrics
class OpcManager(BaseActivity):
def __init__(self, name: str, url: str, data_manager: DataManager,
logger: Logger, server_uri: str, notification_handler: NotificationHandler, pod_id: str, metadata: dict,
def __init__(self, name: str, url: str, data_manager: DataManager, logger: Logger,
server_uri: str, notification_handler: NotificationHandler, metadata: dict,
cert_path: str = None, private_key_path: str = None, server_cert_path: str = None):
self.url = url
self.name = name
@@ -26,17 +26,17 @@ class OpcManager(BaseActivity):
self.nodes = {}
self.subscriptions = {}
self.data_manager = data_manager
self.pod_id = pod_id
self.metadata = metadata
BaseActivity.__init__(self, logger=logger,
notification_handler=notification_handler,
set_error_counter=True)
metrics.OPC_CONNECTION_STATUS.labels(
pod_id=self.pod_id, server_name=self.name, server_url=self.url).set(0)
metrics.OPC_TAGS_SUBSCRIBED.labels(
pod_id=self.pod_id, server_name=self.name).set(0)
BaseActivity.__init__(self, logger=logger,
notification_handler=notification_handler)
def __str__(self):
return f"OpcManager(name={self.name}, url={self.url}, server_uri={self.server_uri})\n" \
f"nodes={self.nodes}, subscriptions={self.subscriptions}"

View File

@@ -16,14 +16,15 @@ class ResourceManager(BaseActivity):
port: int,
lease_ttl: int,
heartbeat_ttl: int,
pod_id: str,
metadata: dict,
logger: Logger,
notification_handler: NotificationHandler,
username: str | None = None,
password: str | None = None,
) -> None:
self.pod_id = pod_id
BaseActivity.__init__(self, logger=logger,
notification_handler=notification_handler,
set_error_counter=True)
try:
self.redis = Redis(
host=host,
@@ -35,7 +36,7 @@ class ResourceManager(BaseActivity):
self.redis.ping()
metrics.REDIS_CONNECTION_STATUS.labels(pod_id=self.pod_id).set(1)
except Exception as e:
logger.error(f"Failed to connect to Redis: {e}")
self.logger.error(f"Failed to connect to Redis: {e}")
metrics.REDIS_CONNECTION_STATUS.labels(pod_id=self.pod_id).set(0)
raise
@@ -43,9 +44,6 @@ class ResourceManager(BaseActivity):
self.heartbeat_ttl = heartbeat_ttl
self.metadata = metadata
BaseActivity.__init__(self, logger=logger,
notification_handler=notification_handler)
def _execute_redis_op(self, operation_name: str, func, *args, **kwargs):
"""Wrapper to execute Redis operations and record metrics."""
start_time = time()

View File

@@ -6,6 +6,15 @@ KAFKA_LABELS = ["pod_id", "topic"]
REDIS_LABELS = ["pod_id", "operation"]
NOTIFICATION_LABELS = ["pod_id", "level", "block"]
MAIN_LABELS = ["pod_id"]
# --- Reliability Metrics ---
TAG_WRITTEN_COUNT = Counter(
"ingestor_tag_written_count",
"Number of writing process to the collection",
[*MAIN_LABELS, "tag_name", "collection_name"],
)
# --- General Application Metrics ---
APP_LOOP_COUNT = Counter(

View File

@@ -1,5 +1,5 @@
asyncua==1.1.5
redis
git+ssh://git@github.com/Aignosi/sientia-dataops-library.git@1.3.5
git+ssh://git@github.com/Aignosi/sientia-dataops-library.git@1.3.8
prometheus_client
pymongo

View File

@@ -10,6 +10,7 @@ metadata = {
"model_name": "test_model",
"workflow_name": "test_workflow",
"schema_name": "test_schedule",
"pod_id": "localhost",
},
}
@@ -258,7 +259,10 @@ def test_publish_no_kafka(data_manager):
@patch("ingestor.managers.data_manager.traceback")
def test_publish_error(traceback, data_manager):
topic = "test_topic"
data = {"key": "value"}
data = {
"key": "value",
"name": "test_tag"
}
# Mock the send method of the Kafka producer to raise an exception
send_mock = MagicMock(side_effect=Exception("Test error"))

View File

@@ -25,7 +25,6 @@ def ingestor_manager(data_manager_mock, resource_manager_mock):
},
lease_ttl=60,
heartbeat_ttl=60,
pod_id="test_pod",
poll_interval=5,
mongo_connection_string="mongodb://localhost:27017",
mongo_database="sientia",
@@ -54,7 +53,6 @@ def test___init__(notification_handler_mock, resource_manager_mock, data_manager
},
lease_ttl=60,
heartbeat_ttl=60,
pod_id="test_pod",
poll_interval=5,
mongo_connection_string="mongodb://localhost:27017",
mongo_database="sientia",
@@ -79,7 +77,6 @@ def test___init__(notification_handler_mock, resource_manager_mock, data_manager
port=6379,
lease_ttl=60,
heartbeat_ttl=60,
pod_id="test_pod",
metadata=metadata["metadata"],
logger=ingestor.logger,
notification_handler=ingestor.notification_handler,
@@ -117,7 +114,6 @@ def test_initialize_opc_from_config(opc_manager, ingestor_manager):
logger=ingestor_manager.logger,
server_uri=server_config['server_uri'],
notification_handler=ingestor_manager.notification_handler,
pod_id=server_config['pod_id'],
cert_path=server_config['cert_path'],
private_key_path=server_config['private_key_path'],
server_cert_path=server_config['server_cert_path'],

View File

@@ -44,15 +44,15 @@ metadata = {
@fixture
def raw_opc_manager():
@patch("ingestor.managers.opc_manager.metrics")
def raw_opc_manager(mock_metrics):
return OpcManager(
"TestConnector",
"opc.tcp://localhost:4840",
MagicMock(),
MagicMock(),
"opc.tcp://localhost:4840",
MagicMock(),
"localhost",
name="TestConnector",
url="opc.tcp://localhost:4840",
data_manager=MagicMock(),
logger=MagicMock(),
server_uri="opc.tcp://localhost:4840",
notification_handler=MagicMock(),
metadata=metadata["metadata"],
)
@@ -512,21 +512,21 @@ def test_check_opc_listenning_error_notification_and_retry(metrics, opc_manager)
assert opc_manager.send_notification.call_count == 2
calls = opc_manager.send_notification.call_args_list
# First call: 5 cycles warning
assert calls[0].kwargs == dict(
notification_id=f"OPC_LISTENNING_STOPPED__{opc_manager.name}",
message=f"15 cycles without receive from OPC {opc_manager.name}. Tags: {json.dumps(opc_manager.nodes)}",
block="opc_manager",
level=NotificationLevel.ERROR,
metadata=metadata["metadata"],
)
assert calls[0].kwargs == {
"notification_id": f"OPC_LISTENNING_STOPPED__{opc_manager.name}",
"message": f"15 cycles without receive from OPC {opc_manager.name}. Tags: {json.dumps(opc_manager.nodes)}",
"block": "opc_manager",
"level": NotificationLevel.ERROR,
"metadata": metadata["metadata"],
}
# Second call: 15 cycles retry
assert calls[1].kwargs == dict(
notification_id=f"OPC_CONNECTION_RETRY__{opc_manager.name}",
message=f"Retrying to connect to server {opc_manager.name}",
block="opc_manager",
level=NotificationLevel.ERROR,
metadata=metadata["metadata"],
)
assert calls[1].kwargs == {
"notification_id": f"OPC_CONNECTION_RETRY__{opc_manager.name}",
"message": f"Retrying to connect to server {opc_manager.name}",
"block": "opc_manager",
"level": NotificationLevel.ERROR,
"metadata": metadata["metadata"],
}
assert result is True
metrics.OPC_CYCLES_WITHOUT_DATA.labels.assert_called_once_with(
@@ -544,7 +544,8 @@ def test_check_opc_listenning_error_notification_and_retry(metrics, opc_manager)
@patch("ingestor.managers.opc_manager.metrics")
def test_init_metrics_calls_correct_metric_methods(mock_metrics):
def test_init_metrics_calls_correct_metric_methods(metrics):
opc_manager = OpcManager(
name="TestInitConnector",
url="opc.tcp://init.test:4840",
@@ -552,23 +553,22 @@ def test_init_metrics_calls_correct_metric_methods(mock_metrics):
logger=MagicMock(),
server_uri="opc.tcp://init.test:4840/uri",
notification_handler=MagicMock(),
pod_id="init_pod_localhost",
metadata=metadata["metadata"],
)
mock_metrics.OPC_CONNECTION_STATUS.labels.assert_called_once_with(
metrics.OPC_CONNECTION_STATUS.labels.assert_called_with(
pod_id=opc_manager.pod_id,
server_name=opc_manager.name,
server_url=opc_manager.url,
)
mock_metrics.OPC_CONNECTION_STATUS.labels.return_value.set.assert_called_once_with(
metrics.OPC_CONNECTION_STATUS.labels.return_value.set.assert_called_once_with(
0)
mock_metrics.OPC_TAGS_SUBSCRIBED.labels.assert_called_once_with(
metrics.OPC_TAGS_SUBSCRIBED.labels.assert_called_once_with(
pod_id=opc_manager.pod_id,
server_name=opc_manager.name
)
mock_metrics.OPC_TAGS_SUBSCRIBED.labels.return_value.set.assert_called_once_with(
metrics.OPC_TAGS_SUBSCRIBED.labels.return_value.set.assert_called_once_with(
0)

View File

@@ -22,7 +22,6 @@ def resource_manager(redis):
port=6379,
lease_ttl=10,
heartbeat_ttl=10,
pod_id="pod_id",
metadata=metadata["metadata"],
logger=MagicMock(),
notification_handler=MagicMock(),
@@ -58,7 +57,7 @@ def test_ingestor_heartbeat(resource_manager):
resource_manager.redis.set.return_value = True
resource_manager.ingestor_heartbeat()
resource_manager.redis.set.assert_called_once_with(
"heartbeat:ingestor:pod_id", 1, ex=10
"heartbeat:ingestor:localhost", 1, ex=10
)
@@ -67,12 +66,12 @@ def test_lease_tag(resource_manager):
output = resource_manager.lease_tag("tag_id")
assert output is True
resource_manager.redis.set.assert_called_once_with(
"lease:opc_tags:tag_id", "pod_id", nx=True, ex=10
"lease:opc_tags:tag_id", "localhost", nx=True, ex=10
)
def test_renew_tag_lease_success(resource_manager):
resource_manager.redis.get.return_value = "pod_id"
resource_manager.redis.get.return_value = "localhost"
resource_manager.redis.expire.return_value = True
result = resource_manager.renew_tag_lease("tag_id")
assert result is True
@@ -136,13 +135,12 @@ def test_init_connection_failure(monkeypatch):
port=6379,
lease_ttl=10,
heartbeat_ttl=10,
pod_id="pod_id",
metadata=metadata["metadata"],
logger=MagicMock(),
notification_handler=MagicMock(),
)
mock_metrics.labels.assert_called_once_with(pod_id="pod_id")
mock_metrics.labels.assert_called_once_with(pod_id="localhost")
mock_status.set.assert_called_once_with(0)
@@ -166,13 +164,12 @@ def test_init_ping_failure(monkeypatch):
port=6379,
lease_ttl=10,
heartbeat_ttl=10,
pod_id="pod_id",
metadata=metadata["metadata"],
logger=MagicMock(),
notification_handler=MagicMock(),
)
mock_metrics.labels.assert_called_once_with(pod_id="pod_id")
mock_metrics.labels.assert_called_once_with(pod_id="localhost")
mock_status.set.assert_called_once_with(0)
@@ -198,12 +195,12 @@ def test_execute_redis_op_success(resource_manager):
mock_func.assert_called_once_with("arg1", kwarg1="value1")
mock_total.labels.assert_called_once_with(
pod_id="pod_id", operation="test_op"
pod_id="localhost", operation="test_op"
)
mock_total_labels.inc.assert_called_once()
mock_duration.labels.assert_called_once_with(
pod_id="pod_id", operation="test_op"
pod_id="localhost", operation="test_op"
)
mock_duration_labels.observe.assert_called_once_with(
0.5
@@ -226,7 +223,7 @@ def test_execute_redis_op_exception(resource_manager):
# Verify metrics and error handling
mock_errors.labels.assert_called_once_with(
pod_id="pod_id", operation="test_op"
pod_id="localhost", operation="test_op"
)
mock_errors_labels.inc.assert_called_once()
resource_manager.send_notification.assert_called_once_with(

View File

@@ -44,13 +44,15 @@ def mock_app_env(monkeypatch):
monkeypatch.setattr(
app.metrics.APP_UP,
"labels",
MagicMock(return_value=MagicMock(set=mocks["metrics_APP_UP_labels_set"])),
MagicMock(return_value=MagicMock(
set=mocks["metrics_APP_UP_labels_set"])),
)
monkeypatch.setattr(
app.metrics.APP_LOOP_COUNT,
"labels",
MagicMock(
return_value=MagicMock(inc=mocks["metrics_APP_LOOP_COUNT_labels_inc"])
return_value=MagicMock(
inc=mocks["metrics_APP_LOOP_COUNT_labels_inc"])
),
)
monkeypatch.setattr(
@@ -66,7 +68,8 @@ def mock_app_env(monkeypatch):
app.metrics.APP_ERRORS_TOTAL,
"labels",
MagicMock(
return_value=MagicMock(inc=mocks["metrics_APP_ERRORS_TOTAL_labels_inc"])
return_value=MagicMock(
inc=mocks["metrics_APP_ERRORS_TOTAL_labels_inc"])
),
)
@@ -74,7 +77,8 @@ def mock_app_env(monkeypatch):
monkeypatch.setattr(app, "time", mocks["time_time"])
monkeypatch.setattr(app, "sleep", mocks["time_sleep"])
monkeypatch.setattr(app.signal, "signal", mocks["signal_signal"])
monkeypatch.setattr(app.traceback, "print_exc", mocks["traceback_print_exc"])
monkeypatch.setattr(app.traceback, "print_exc",
mocks["traceback_print_exc"])
monkeypatch.setattr(app, "exit_signal", mocks["mock_exit_signal"])
monkeypatch.setattr(app, "POD_ID", "test_pod")
@@ -98,7 +102,7 @@ def test_main_successful_run_one_loop(mock_app_env, capsys):
app.main()
assert excinfo.value.code == 0
mock_app_env["start_http_server"].assert_called_once_with(4840)
mock_app_env["start_http_server"].assert_called_once_with(9090)
app.metrics.APP_UP.labels.assert_any_call(pod_id="test_pod")
set_calls = mock_app_env["metrics_APP_UP_labels_set"].call_args_list
assert call(1) in set_calls
@@ -115,7 +119,8 @@ def test_main_successful_run_one_loop(mock_app_env, capsys):
app.metrics.APP_LOOP_COUNT.labels.assert_called_with(pod_id="test_pod")
mock_app_env["metrics_APP_LOOP_COUNT_labels_inc"].assert_called_once()
mock_exit_signal.wait.assert_called_once_with(mock_ingestor_instance.poll_interval)
mock_exit_signal.wait.assert_called_once_with(
mock_ingestor_instance.poll_interval)
app.metrics.APP_LOOP_DURATION.labels.assert_called_with(pod_id="test_pod")
mock_app_env["metrics_APP_LOOP_DURATION_labels_observe"].assert_called_once_with(
@@ -125,15 +130,17 @@ def test_main_successful_run_one_loop(mock_app_env, capsys):
mock_ingestor_instance.shutdown.assert_called_once()
mock_app_env["time_sleep"].assert_called_once_with(5)
# CORREÇÃO APLICADA ABAIXO:
mock_ingestor_instance.logger.info.assert_any_call("Main loop exit_signaled.")
mock_ingestor_instance.logger.info.assert_any_call(
"Main loop exit_signaled.")
captured = capsys.readouterr()
assert "Prometheus server started on port 4840." in captured.out
assert "Prometheus server started on port 9090." in captured.out
def test_main_prometheus_server_fails_to_start(mock_app_env, capsys):
"""Test the scenario where starting the Prometheus server fails."""
mock_app_env["start_http_server"].side_effect = OSError("Port already in use")
mock_app_env["start_http_server"].side_effect = OSError(
"Port already in use")
with pytest.raises(OsExitCalled) as excinfo:
app.main()
@@ -229,7 +236,8 @@ def test_main_multiple_loop_iterations(mock_app_env):
mock_exit_signal = mock_app_env["mock_exit_signal"]
mock_exit_signal.is_set.side_effect = [False, False, False, True]
mock_app_env["time_time"].side_effect = [10.0, 10.1, 10.2, 10.3, 10.4, 10.5]
mock_app_env["time_time"].side_effect = [
10.0, 10.1, 10.2, 10.3, 10.4, 10.5]
with pytest.raises(OsExitCalled) as excinfo:
app.main()

View File

@@ -51,6 +51,7 @@ def test___init__(notification_handler, getenv):
"model_name": "-",
"workflow_name": "OPC_INGESTOR",
"schema_name": "OPC_INGESTOR",
"pod_id": "localhost1"
}
notification_handler.assert_called_once_with(
@@ -112,7 +113,6 @@ def test_prepare_ingestor(ingestor_manager_mock, ingestor):
},
lease_ttl=ingestor.lease_ttl,
heartbeat_ttl=ingestor.heartbeat_ttl,
pod_id=ingestor.pod_id,
poll_interval=ingestor.poll_interval,
mongo_connection_string=ingestor.mongo_connection_string,
mongo_database=ingestor.mongo_database,

View File

@@ -7,6 +7,15 @@ import ingestor.metrics as metrics
# --- Test Functions for Each Metric (Corrected for v0.22.0 _name behavior) ---
def test_ingestor_tag_written_count():
"""Verify the definition of INGESTOR_TAG_WRITTEN_COUNT."""
assert metrics.TAG_WRITTEN_COUNT is not None
assert isinstance(metrics.TAG_WRITTEN_COUNT, Counter)
assert metrics.TAG_WRITTEN_COUNT._name == "ingestor_tag_written_count"
assert set(metrics.TAG_WRITTEN_COUNT._labelnames) == {
"pod_id", "tag_name", "collection_name"}
def test_app_loop_count():
"""Verify the definition of APP_LOOP_COUNT."""
assert metrics.APP_LOOP_COUNT is not None
@@ -118,7 +127,8 @@ def test_opc_connections_total():
assert (
metrics.OPC_CONNECTIONS_TOTAL._name == "opc_connections_initiated"
) # REMOVED _total
assert set(metrics.OPC_CONNECTIONS_TOTAL._labelnames) == {"pod_id", "server_name"}
assert set(metrics.OPC_CONNECTIONS_TOTAL._labelnames) == {
"pod_id", "server_name"}
def test_opc_connections_failed():
@@ -128,7 +138,8 @@ def test_opc_connections_failed():
assert (
metrics.OPC_CONNECTIONS_FAILED._name == "opc_connections_failed"
) # REMOVED _total
assert set(metrics.OPC_CONNECTIONS_FAILED._labelnames) == {"pod_id", "server_name"}
assert set(metrics.OPC_CONNECTIONS_FAILED._labelnames) == {
"pod_id", "server_name"}
def test_opc_connection_status():
@@ -162,7 +173,8 @@ def test_opc_tags_subscribed():
assert metrics.OPC_TAGS_SUBSCRIBED is not None
assert isinstance(metrics.OPC_TAGS_SUBSCRIBED, Gauge)
assert metrics.OPC_TAGS_SUBSCRIBED._name == "opc_tags_subscribed_current"
assert set(metrics.OPC_TAGS_SUBSCRIBED._labelnames) == {"pod_id", "server_name"}
assert set(metrics.OPC_TAGS_SUBSCRIBED._labelnames) == {
"pod_id", "server_name"}
def test_opc_cycles_without_data():
@@ -170,7 +182,8 @@ def test_opc_cycles_without_data():
assert metrics.OPC_CYCLES_WITHOUT_DATA is not None
assert isinstance(metrics.OPC_CYCLES_WITHOUT_DATA, Gauge)
assert metrics.OPC_CYCLES_WITHOUT_DATA._name == "opc_cycles_without_data"
assert set(metrics.OPC_CYCLES_WITHOUT_DATA._labelnames) == {"pod_id", "server_name"}
assert set(metrics.OPC_CYCLES_WITHOUT_DATA._labelnames) == {
"pod_id", "server_name"}
def test_opc_reconnections_total():
@@ -180,7 +193,8 @@ def test_opc_reconnections_total():
assert (
metrics.OPC_RECONNECTIONS_TOTAL._name == "opc_reconnections_tried"
) # REMOVED _total
assert set(metrics.OPC_RECONNECTIONS_TOTAL._labelnames) == {"pod_id", "server_name"}
assert set(metrics.OPC_RECONNECTIONS_TOTAL._labelnames) == {
"pod_id", "server_name"}
def test_kafka_messages_sent():
@@ -198,7 +212,8 @@ def test_kafka_messages_errors():
assert (
metrics.KAFKA_MESSAGES_ERRORS._name == "kafka_messages_errors"
) # REMOVED _total
assert set(metrics.KAFKA_MESSAGES_ERRORS._labelnames) == {"pod_id", "topic"}
assert set(metrics.KAFKA_MESSAGES_ERRORS._labelnames) == {
"pod_id", "topic"}
def test_kafka_connection_status():
@@ -214,7 +229,8 @@ def test_redis_operations_total():
assert metrics.REDIS_OPERATIONS_TOTAL is not None
assert isinstance(metrics.REDIS_OPERATIONS_TOTAL, Counter)
assert metrics.REDIS_OPERATIONS_TOTAL._name == "redis_operations" # REMOVED _total
assert set(metrics.REDIS_OPERATIONS_TOTAL._labelnames) == {"pod_id", "operation"}
assert set(metrics.REDIS_OPERATIONS_TOTAL._labelnames) == {
"pod_id", "operation"}
def test_redis_operations_errors():
@@ -224,7 +240,8 @@ def test_redis_operations_errors():
assert (
metrics.REDIS_OPERATIONS_ERRORS._name == "redis_operations_errors"
) # REMOVED _total
assert set(metrics.REDIS_OPERATIONS_ERRORS._labelnames) == {"pod_id", "operation"}
assert set(metrics.REDIS_OPERATIONS_ERRORS._labelnames) == {
"pod_id", "operation"}
def test_redis_operations_duration():
@@ -234,7 +251,8 @@ def test_redis_operations_duration():
assert (
metrics.REDIS_OPERATIONS_DURATION._name == "redis_operations_duration_seconds"
)
assert set(metrics.REDIS_OPERATIONS_DURATION._labelnames) == {"pod_id", "operation"}
assert set(metrics.REDIS_OPERATIONS_DURATION._labelnames) == {
"pod_id", "operation"}
def test_redis_connection_status():
@@ -250,4 +268,5 @@ def test_notifications_sent():
assert metrics.NOTIFICATIONS_SENT is not None
assert isinstance(metrics.NOTIFICATIONS_SENT, Counter)
assert metrics.NOTIFICATIONS_SENT._name == "notifications_sent" # REMOVED _total
assert set(metrics.NOTIFICATIONS_SENT._labelnames) == {"pod_id", "level", "block"}
assert set(metrics.NOTIFICATIONS_SENT._labelnames) == {
"pod_id", "level", "block"}

View File

@@ -3,7 +3,7 @@
# Declare variables to be passed into your templates.
# This will set the replicaset count more information can be found here: https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/
replicaCount: 1
replicaCount: 3
# This sets the container image more information can be found here: https://kubernetes.io/docs/concepts/containers/images/
image:
@@ -11,7 +11,7 @@ image:
# This sets the pull policy for images.
pullPolicy: Always
# Overrides the image tag whose default is the chart appVersion.
tag: "0.2.7"
tag: "0.3.2"
# This is for the secrets for pulling an image from a private repository more information can be found here: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
imagePullSecrets:
@@ -158,7 +158,7 @@ env:
- name: GITHUB_REPO_URL
value: "git@github.com:Aignosi/sientia-dataops-opc-ingestor.git"
- name: GITHUB_BRANCH
value: "SIENTIAPDE-1172-criar-pipeline-de-alertas-orquestrador"
value: "SIENTIAPDE-1174-mapear-e-implementar-metricas-a-serem-criadas"
- name: PYTHON_APP
value: "ingestor.app"
@@ -190,7 +190,7 @@ env:
value: "10"
- name: LOG_LEVEL
value: "DEBUG"
- name: HTTP_SERVER_PORT
- name: HTTP_METRICS_PORT
value: "9090"
@@ -212,7 +212,7 @@ ssh:
# kubectl create secret docker-registry docker-hub-secret --namespace sientia --docker-server=http://aignosi.azurecr.io --docker-username=aignosi --docker-password=5I5zpQ6sRaHqX1hD3dr+2mo647yO3FRc359/wu6gsP+ACRDRz5mp
# helm upgrade --install sientia-opc-ingestor sientia/sientia-module -n sientia --create-namespace -f ./values.yaml --version 0.4.0-uat
# helm upgrade --install sientia-opc-ingestor sientia/sientia-module -n sientia --create-namespace -f ./values.yaml --version 0.4.0
# kubectl create secret generic git-ssh-key-sientia-opc-ingestor \
# --namespace sientia \