SIENTIAPDE-1314
Implement tag value registration in Gates activity and update related tests. Enhanced the write_metrics method to process and register tag values, improving metrics tracking. Adjusted tests to validate new functionality.
This commit is contained in:
@@ -284,6 +284,7 @@ class Gates(BaseActivity):
|
|||||||
metadata: dict[str, Any]
|
metadata: dict[str, Any]
|
||||||
"""
|
"""
|
||||||
metadata = input_data['metadata']
|
metadata = input_data['metadata']
|
||||||
|
tag_values = DataFrame(input_data['tag_values'])
|
||||||
|
|
||||||
self.info(f'Writing metrics for {metadata["model_name"]}', metadata=metadata)
|
self.info(f'Writing metrics for {metadata["model_name"]}', metadata=metadata)
|
||||||
|
|
||||||
@@ -293,4 +294,13 @@ class Gates(BaseActivity):
|
|||||||
pipeline_name=metadata['workflow_name'],
|
pipeline_name=metadata['workflow_name'],
|
||||||
).inc()
|
).inc()
|
||||||
|
|
||||||
|
# Register metrics
|
||||||
|
for _, row in tag_values.iterrows():
|
||||||
|
metrics.TAG_CHANGES_MONITOR.labels(
|
||||||
|
pod_id=self.pod_id,
|
||||||
|
model_name=metadata['model_name'],
|
||||||
|
pipeline_name=metadata['workflow_name'],
|
||||||
|
tag_name=row['variable'],
|
||||||
|
).set(row['value'])
|
||||||
|
|
||||||
self.info(f'Metrics written for {metadata["model_name"]}', metadata=metadata)
|
self.info(f'Metrics written for {metadata["model_name"]}', metadata=metadata)
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ with workflow.unsafe.imports_passed_through():
|
|||||||
from sientia_do.temporal.activities.redis_base import Redis as RedisBase
|
from sientia_do.temporal.activities.redis_base import Redis as RedisBase
|
||||||
from sientia_do.temporal.constants import DATETIME_FORMAT, now
|
from sientia_do.temporal.constants import DATETIME_FORMAT, now
|
||||||
|
|
||||||
from scouter import metrics
|
|
||||||
|
|
||||||
|
|
||||||
class Redis(RedisBase):
|
class Redis(RedisBase):
|
||||||
@@ -220,12 +219,10 @@ class Redis(RedisBase):
|
|||||||
data_hold = {tag: content for tag, content in data_hold.items() if tag in tags}
|
data_hold = {tag: content for tag, content in data_hold.items() if tag in tags}
|
||||||
self.debug(f'Data hold after removing removed tags: {data_hold}', metadata=metadata)
|
self.debug(f'Data hold after removing removed tags: {data_hold}', metadata=metadata)
|
||||||
|
|
||||||
to_register_metrics = []
|
|
||||||
for _, row in data.iterrows():
|
for _, row in data.iterrows():
|
||||||
value = row['value']
|
value = row['value']
|
||||||
|
|
||||||
data_hold[row['name']] = value
|
data_hold[row['name']] = value
|
||||||
to_register_metrics.append((row['name'], value))
|
|
||||||
|
|
||||||
if fill_missing_tags:
|
if fill_missing_tags:
|
||||||
self.debug('Filling missing tags in data package', metadata=metadata)
|
self.debug('Filling missing tags in data package', metadata=metadata)
|
||||||
@@ -240,16 +237,6 @@ class Redis(RedisBase):
|
|||||||
|
|
||||||
self.set(key, data_hold, ttl=retention_time)
|
self.set(key, data_hold, ttl=retention_time)
|
||||||
|
|
||||||
# Register metrics
|
|
||||||
self.debug(f'Metrics to register: {to_register_metrics}', metadata=metadata)
|
|
||||||
for metric in to_register_metrics:
|
|
||||||
metrics.TAG_CHANGES_MONITOR.labels(
|
|
||||||
pod_id=self.pod_id,
|
|
||||||
model_name=metadata['model_name'],
|
|
||||||
pipeline_name=metadata['workflow_name'],
|
|
||||||
tag_name=metric[0],
|
|
||||||
).set(metric[1])
|
|
||||||
|
|
||||||
data_hold_df = DataFrame(data_hold, index=[0])
|
data_hold_df = DataFrame(data_hold, index=[0])
|
||||||
data_hold_melted = data_hold_df.melt(
|
data_hold_melted = data_hold_df.melt(
|
||||||
id_vars='timestamp', var_name='variable', value_name='value'
|
id_vars='timestamp', var_name='variable', value_name='value'
|
||||||
|
|||||||
@@ -119,6 +119,7 @@ class CoreScouter:
|
|||||||
Activities.write_metrics,
|
Activities.write_metrics,
|
||||||
{
|
{
|
||||||
**metadata,
|
**metadata,
|
||||||
|
'tag_values': held_data,
|
||||||
},
|
},
|
||||||
retry_policy=retry_policy,
|
retry_policy=retry_policy,
|
||||||
start_to_close_timeout=timedelta(seconds=60),
|
start_to_close_timeout=timedelta(seconds=60),
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
from typing import Any
|
from typing import Any
|
||||||
from unittest.mock import ANY, MagicMock, Mock, patch
|
from unittest.mock import ANY, MagicMock, Mock, call, patch
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
@@ -359,10 +359,43 @@ async def test_aggregate_data_raise_exception(gates_fixture):
|
|||||||
@patch('scouter.activities.gates.metrics')
|
@patch('scouter.activities.gates.metrics')
|
||||||
async def test_write_metrics(mock_metrics, gates_fixture):
|
async def test_write_metrics(mock_metrics, gates_fixture):
|
||||||
"""Test write_metrics method."""
|
"""Test write_metrics method."""
|
||||||
input_data = {'metadata': metadata['metadata']}
|
input_data = {
|
||||||
|
'metadata': metadata['metadata'],
|
||||||
|
'tag_values': {
|
||||||
|
'variable': ['tag1', 'tag2'],
|
||||||
|
'value': [1.0, 2.0],
|
||||||
|
},
|
||||||
|
}
|
||||||
await gates_fixture.write_metrics(input_data)
|
await gates_fixture.write_metrics(input_data)
|
||||||
mock_metrics.LABORIOUS_DATA_WRITTEN_COUNT.labels.assert_called_once_with(
|
mock_metrics.LABORIOUS_DATA_WRITTEN_COUNT.labels.assert_called_once_with(
|
||||||
pod_id=gates_fixture.pod_id,
|
pod_id=gates_fixture.pod_id,
|
||||||
model_name=metadata['metadata']['model_name'],
|
model_name=metadata['metadata']['model_name'],
|
||||||
pipeline_name=metadata['metadata']['workflow_name'],
|
pipeline_name=metadata['metadata']['workflow_name'],
|
||||||
)
|
)
|
||||||
|
mock_metrics.LABORIOUS_DATA_WRITTEN_COUNT.labels.return_value.inc.assert_called_once()
|
||||||
|
|
||||||
|
mock_metrics.TAG_CHANGES_MONITOR.labels.return_value.set.assert_has_calls(
|
||||||
|
[
|
||||||
|
call(1.0),
|
||||||
|
call(2.0),
|
||||||
|
],
|
||||||
|
any_order=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
mock_metrics.TAG_CHANGES_MONITOR.labels.assert_has_calls(
|
||||||
|
[
|
||||||
|
call(
|
||||||
|
pod_id=gates_fixture.pod_id,
|
||||||
|
model_name=metadata['metadata']['model_name'],
|
||||||
|
pipeline_name=metadata['metadata']['workflow_name'],
|
||||||
|
tag_name='tag1',
|
||||||
|
),
|
||||||
|
call(
|
||||||
|
pod_id=gates_fixture.pod_id,
|
||||||
|
model_name=metadata['metadata']['model_name'],
|
||||||
|
pipeline_name=metadata['metadata']['workflow_name'],
|
||||||
|
tag_name='tag2',
|
||||||
|
),
|
||||||
|
],
|
||||||
|
any_order=True,
|
||||||
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user