@@ -94,7 +94,7 @@ class TestDeleteMetrics:
9494 @pytest .mark .asyncio
9595 @pytest .mark .parametrize ("test_db" , ["sqlite" , "postgres" ], indirect = True )
9696 @freeze_time (datetime (2023 , 1 , 2 , 3 , 5 , 20 , tzinfo = timezone .utc ))
97- async def test_deletes_old_metrics (self , test_db , session : AsyncSession ):
97+ async def test_deletes_old_metrics_running_job (self , test_db , session : AsyncSession ):
9898 user = await create_user (session = session , global_role = GlobalRole .USER )
9999 project = await create_project (session = session , owner = user )
100100 await add_project_member (
@@ -113,6 +113,8 @@ async def test_deletes_old_metrics(self, test_db, session: AsyncSession):
113113 job = await create_job (
114114 session = session ,
115115 run = run ,
116+ status = JobStatus .RUNNING ,
117+ last_processed_at = datetime (2023 , 1 , 2 , 3 , 5 , 0 , tzinfo = timezone .utc ),
116118 )
117119 await create_job_metrics_point (
118120 session = session ,
@@ -135,3 +137,50 @@ async def test_deletes_old_metrics(self, test_db, session: AsyncSession):
135137 points = res .scalars ().all ()
136138 assert len (points ) == 1
137139 assert points [0 ].id == last_metric .id
140+
141+ @pytest .mark .asyncio
142+ @pytest .mark .parametrize ("test_db" , ["sqlite" , "postgres" ], indirect = True )
143+ @freeze_time (datetime (2023 , 1 , 2 , 3 , 5 , 20 , tzinfo = timezone .utc ))
144+ async def test_deletes_old_metrics_finished_job (self , test_db , session : AsyncSession ):
145+ user = await create_user (session = session , global_role = GlobalRole .USER )
146+ project = await create_project (session = session , owner = user )
147+ await add_project_member (
148+ session = session , project = project , user = user , project_role = ProjectRole .USER
149+ )
150+ repo = await create_repo (
151+ session = session ,
152+ project_id = project .id ,
153+ )
154+ run = await create_run (
155+ session = session ,
156+ project = project ,
157+ repo = repo ,
158+ user = user ,
159+ )
160+ job = await create_job (
161+ session = session ,
162+ run = run ,
163+ status = JobStatus .FAILED ,
164+ last_processed_at = datetime (2023 , 1 , 2 , 3 , 5 , 0 , tzinfo = timezone .utc ),
165+ )
166+ await create_job_metrics_point (
167+ session = session ,
168+ job_model = job ,
169+ timestamp = datetime (2023 , 1 , 2 , 3 , 4 , 30 , tzinfo = timezone .utc ),
170+ )
171+ await create_job_metrics_point (
172+ session = session ,
173+ job_model = job ,
174+ timestamp = datetime (2023 , 1 , 2 , 3 , 4 , 40 , tzinfo = timezone .utc ),
175+ )
176+ last_metric = await create_job_metrics_point (
177+ session = session ,
178+ job_model = job ,
179+ timestamp = datetime (2023 , 1 , 2 , 3 , 4 , 50 , tzinfo = timezone .utc ),
180+ )
181+ with patch .object (settings , "SERVER_METRICS_WINDOW_SECONDS" , 15 ):
182+ await delete_metrics ()
183+ res = await session .execute (select (JobMetricsPoint ))
184+ points = res .scalars ().all ()
185+ assert len (points ) == 1
186+ assert points [0 ].id == last_metric .id
0 commit comments