Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions pipeline/workflow/ingestion-helper/app_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,8 @@ def test_update_ingestion_status_v1(self, mock_get_ingestion_metrics):
'execution_time': 120,
'node_count': 1000,
'edge_count': 2000,
'obs_count': 500
'obs_count': 500,
'ts_count': 300,
}
mock_get_ingestion_metrics.return_value = mock_metrics

Expand Down Expand Up @@ -377,7 +378,8 @@ def test_update_ingestion_history_success(self, mock_get_ingestion_metrics):
'execution_time': 120,
'node_count': 1000,
'edge_count': 2000,
'obs_count': 500
'obs_count': 500,
'ts_count': 300,
}
mock_get_ingestion_metrics.return_value = mock_metrics

Expand Down Expand Up @@ -415,7 +417,8 @@ def test_update_ingestion_history_failure(self, mock_get_ingestion_metrics):
'execution_time': 120,
'node_count': 1000,
'edge_count': 2000,
'obs_count': 500
'obs_count': 500,
'ts_count': 300,
}
mock_get_ingestion_metrics.return_value = mock_metrics

Expand Down Expand Up @@ -451,7 +454,8 @@ def test_update_ingestion_history_retry(self, mock_get_ingestion_metrics):
'execution_time': 120,
'node_count': 1000,
'edge_count': 2000,
'obs_count': 500
'obs_count': 500,
'ts_count': 300,
}
mock_get_ingestion_metrics.return_value = mock_metrics

Expand Down
2 changes: 2 additions & 0 deletions pipeline/workflow/ingestion-helper/clients/schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ CREATE TABLE IngestionHistory (
NodeCount INT64,
EdgeCount INT64,
ObservationCount INT64,
TimeSeriesCount INT64,
Comment thread
vish-cs marked this conversation as resolved.
) PRIMARY KEY(WorkflowExecutionID);

CREATE TABLE ImportVersionHistory (
Expand All @@ -138,6 +139,7 @@ CREATE TABLE ImportVersionHistory (
NodeCount INT64,
EdgeCount INT64,
ObservationCount INT64,
TimeSeriesCount INT64,
Comment STRING(MAX),
) PRIMARY KEY (ImportName, UpdateTimestamp DESC);

Expand Down
15 changes: 10 additions & 5 deletions pipeline/workflow/ingestion-helper/clients/spanner.py
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,8 @@ def _insert(transaction: Transaction):
columns = [
"CompletionTimestamp", "IngestionFailure",
"WorkflowExecutionID", "DataflowJobID", "IngestedImports",
"ExecutionTime", "NodeCount", "EdgeCount", "ObservationCount"
"ExecutionTime", "NodeCount", "EdgeCount", "ObservationCount",
"TimeSeriesCount"
]
m = metrics if metrics else {}
values = [[
Expand All @@ -329,7 +330,8 @@ def _insert(transaction: Transaction):
m.get('execution_time'),
m.get('node_count'),
m.get('edge_count'),
m.get('obs_count')
m.get('obs_count'),
m.get('ts_count')
]]
transaction.insert_or_update(table="IngestionHistory",
columns=columns,
Expand Down Expand Up @@ -401,7 +403,8 @@ def _update(transaction: Transaction):
'execution_time': 'ExecutionTime',
'node_count': 'NodeCount',
'edge_count': 'EdgeCount',
'obs_count': 'ObservationCount'
'obs_count': 'ObservationCount',
'ts_count': 'TimeSeriesCount',
}
for key, column in metric_map.items():
if key in metrics:
Expand Down Expand Up @@ -446,7 +449,7 @@ def _insert(transaction: Transaction):
version_history_columns = [
"ImportName", "Version", "UpdateTimestamp",
"WorkflowExecutionID", "Status", "ExecutionTime", "NodeCount",
"EdgeCount", "ObservationCount", "Comment"
"EdgeCount", "ObservationCount", "TimeSeriesCount", "Comment"
]
m = metrics if metrics else {}
version_history_values = []
Expand All @@ -459,6 +462,7 @@ def _insert(transaction: Transaction):
m.get('node_count'),
m.get('edge_count'),
m.get('obs_count'),
m.get('ts_count'),
"ingestion-workflow:" + workflow_id
])

Expand Down Expand Up @@ -558,7 +562,7 @@ def _record(transaction: Transaction):
columns = [
"ImportName", "Version", "UpdateTimestamp",
"WorkflowExecutionID", "Status", "ExecutionTime", "NodeCount",
"EdgeCount", "ObservationCount", "Comment"
"EdgeCount", "ObservationCount", "TimeSeriesCount", "Comment"
]
m = metrics if metrics else {}
values = [[
Expand All @@ -568,6 +572,7 @@ def _record(transaction: Transaction):
m.get('node_count'),
m.get('edge_count'),
m.get('obs_count'),
m.get('ts_count'),
comment
]]
transaction.insert(table="ImportVersionHistory",
Expand Down
29 changes: 19 additions & 10 deletions pipeline/workflow/ingestion-helper/clients/spanner_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -444,7 +444,8 @@ def run_in_transaction_side_effect(callback, *args, **kwargs):
'execution_time': 120,
'node_count': 1000,
'edge_count': 2000,
'obs_count': 500
'obs_count': 500,
'ts_count': 300,
}
)

Expand All @@ -454,7 +455,8 @@ def run_in_transaction_side_effect(callback, *args, **kwargs):
self.assertEqual(kwargs['columns'], [
"CompletionTimestamp", "IngestionFailure",
"WorkflowExecutionID", "DataflowJobID", "IngestedImports",
"ExecutionTime", "NodeCount", "EdgeCount", "ObservationCount"
"ExecutionTime", "NodeCount", "EdgeCount", "ObservationCount",
"TimeSeriesCount"
])
self.assertEqual(kwargs['values'], [[
spanner.COMMIT_TIMESTAMP,
Expand All @@ -465,7 +467,8 @@ def run_in_transaction_side_effect(callback, *args, **kwargs):
120,
1000,
2000,
500
500,
300
]])

@patch('google.cloud.spanner.Client')
Expand Down Expand Up @@ -542,7 +545,8 @@ def run_in_transaction_side_effect(callback, *args, **kwargs):
'execution_time': 120,
'node_count': 1000,
'edge_count': 2000,
'obs_count': 500
'obs_count': 500,
'ts_count': 300,
}
)

Expand All @@ -559,13 +563,15 @@ def run_in_transaction_side_effect(callback, *args, **kwargs):
self.assertIn("DataflowJobID", kwargs['columns'])
self.assertIn("ExecutionTime", kwargs['columns'])
self.assertIn("NodeCount", kwargs['columns'])
self.assertIn("TimeSeriesCount", kwargs['columns'])

# Verify the specific values
wf_idx = kwargs['columns'].index("WorkflowExecutionID")
status_idx = kwargs['columns'].index("Status")
failure_idx = kwargs['columns'].index("IngestionFailure")
job_idx = kwargs['columns'].index("DataflowJobID")
node_idx = kwargs['columns'].index("NodeCount")
ts_idx = kwargs['columns'].index("TimeSeriesCount")
comp_time_idx = kwargs['columns'].index("CompletionTimestamp")

values = kwargs['values'][0]
Expand All @@ -574,6 +580,7 @@ def run_in_transaction_side_effect(callback, *args, **kwargs):
self.assertEqual(values[failure_idx], False)
self.assertEqual(values[job_idx], "job-456")
self.assertEqual(values[node_idx], 1000)
self.assertEqual(values[ts_idx], 300)
self.assertEqual(values[comp_time_idx], spanner.COMMIT_TIMESTAMP)

@patch('google.cloud.spanner.Client')
Expand All @@ -598,7 +605,8 @@ def run_in_transaction_side_effect(callback, *args, **kwargs):
'execution_time': 120,
'node_count': 1000,
'edge_count': 2000,
'obs_count': 500
'obs_count': 500,
'ts_count': 300,
}
)

Expand Down Expand Up @@ -663,7 +671,8 @@ def run_in_transaction_side_effect(callback, *args, **kwargs):
'execution_time': 120,
'node_count': 1000,
'edge_count': 2000,
'obs_count': 500
'obs_count': 500,
'ts_count': 300,
}
)

Expand Down Expand Up @@ -702,11 +711,11 @@ def run_in_transaction_side_effect(callback, *args, **kwargs):
self.assertEqual(kwargs['columns'], [
"ImportName", "Version", "UpdateTimestamp",
"WorkflowExecutionID", "Status", "ExecutionTime", "NodeCount",
"EdgeCount", "ObservationCount", "Comment"
"EdgeCount", "ObservationCount", "TimeSeriesCount", "Comment"
])
self.assertEqual(kwargs['values'], [[
"test_import", "v1.2.3", spanner.COMMIT_TIMESTAMP, "wf-123",
None, None, None, None, None, "ingestion-workflow:wf-123"
None, None, None, None, None, None, "ingestion-workflow:wf-123"
]])

@patch('google.cloud.spanner.Client')
Expand All @@ -730,11 +739,11 @@ def run_in_transaction_side_effect(callback, *args, **kwargs):
self.assertEqual(kwargs['columns'], [
"ImportName", "Version", "UpdateTimestamp",
"WorkflowExecutionID", "Status", "ExecutionTime", "NodeCount",
"EdgeCount", "ObservationCount", "Comment"
"EdgeCount", "ObservationCount", "TimeSeriesCount", "Comment"
])
self.assertEqual(kwargs['values'], [[
"test_import", "v1.2.3", spanner.COMMIT_TIMESTAMP, "wf-789",
None, None, None, None, None, "ingestion-workflow:wf-789"
None, None, None, None, None, None, "ingestion-workflow:wf-789"
]])

if __name__ == '__main__':
Expand Down
6 changes: 5 additions & 1 deletion pipeline/workflow/ingestion-helper/utils/imports.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,13 +127,14 @@ def get_ingestion_metrics(project_id, location, job_id):
job_id: The Dataflow job ID.

Returns:
A dictionary containing 'obs_count', 'node_count', 'edge_count', and 'execution_time'.
A dictionary containing 'obs_count', 'node_count', 'edge_count', 'ts_count', and 'execution_time'.
"""
dataflow = build('dataflow', 'v1b3', cache_discovery=False)
# Fetch Dataflow metrics
node_count = 0
edge_count = 0
obs_count = 0
ts_count = 0
execution_time = 0
if project_id and job_id:
try:
Expand Down Expand Up @@ -164,12 +165,15 @@ def get_ingestion_metrics(project_id, location, job_id):
edge_count += int(metric['scalar'])
elif name == 'graph_observation_count':
obs_count += int(metric['scalar'])
elif name == 'graph_timeseries_count':
ts_count += int(metric['scalar'])
except HttpError as e:
logging.error(
f"Error fetching dataflow metrics for job {job_id}: {e}")
return {
'obs_count': obs_count,
'node_count': node_count,
'edge_count': edge_count,
'ts_count': ts_count,
'execution_time': execution_time
}
Loading