haystack
1import datetime2from unittest.mock import Mock, patch3import pytest4
5from haystack import Pipeline, component6from haystack.telemetry._telemetry import pipeline_running7
8
9@patch("haystack.telemetry._telemetry.telemetry")10def test_pipeline_running(telemetry):11telemetry.send_event = Mock()12
13@component14class Component:15def _get_telemetry_data(self):16return {"key": "values"}17
18@component.output_types(value=int)19def run(self):20pass21
22pipe = Pipeline()23pipe.add_component("component", Component())24pipeline_running(pipe)25
26# First run is always sent27telemetry.send_event.assert_called_once_with(28"Pipeline run (2.x)",29{30"pipeline_id": str(id(pipe)),31"runs": 1,32"components": {"test.test_telemetry.Component": [{"name": "component", "key": "values"}]},33},34)35
36# Running again before one minute has passed should not send another event37telemetry.send_event.reset_mock()38pipeline_running(pipe)39telemetry.send_event.assert_not_called()40
41# Set the last telemetry sent time to pretend one minute has passed42pipe._last_telemetry_sent = pipe._last_telemetry_sent - datetime.timedelta(minutes=1)43
44telemetry.send_event.reset_mock()45pipeline_running(pipe)46telemetry.send_event.assert_called_once_with(47"Pipeline run (2.x)",48{49"pipeline_id": str(id(pipe)),50"runs": 3,51"components": {"test.test_telemetry.Component": [{"name": "component", "key": "values"}]},52},53)54