22from typing import List , Dict , Optional
33from models .deploy import Deploy
44from datetime import datetime
5+ from bson import ObjectId
56from dependencies .database_connection import DatabaseConnection
67import logging
78
@@ -22,6 +23,7 @@ async def create_deploy(self, deploy: Dict) -> Deploy:
2223 deploy_data = deploy .copy ()
2324 deploy_data ["created_at" ] = datetime .now ()
2425 deploy_data ["updated_at" ] = datetime .now ()
26+ deploy_data ["status" ] = "success"
2527 try :
2628 result = await collection .insert_one (deploy_data )
2729 if result .inserted_id :
@@ -34,21 +36,59 @@ async def create_deploy(self, deploy: Dict) -> Deploy:
3436 logger .error (f"Error creating deployment record: { str (e )} " )
3537 raise
3638
37- async def get_deploy (self , repo_name : str , owner : str ) -> Optional [Deploy ]:
39+ async def get_deploys (self , owner : str , repo_name : str ) -> List [Deploy ]:
3840 """
39- Get a deploy record from the database.
41+ Get a deploys records from the database.
4042 """
4143 logger .info (f"Fetching deployment record for { owner } /{ repo_name } " )
4244 collection = await self .db .get_collection (self .collection )
45+
4346 try :
44- deploy = await collection .find_one ({"repo_name" : repo_name , "owner" : owner })
45- if deploy :
46- logger .info (f"Found deployment record for { owner } /{ repo_name } " )
47- return Deploy (** deploy )
48- else :
49- logger .warning (f"No deployment record found for { owner } /{ repo_name } " )
50- return None
47+ deploys = await collection .find ({"owner" : owner , "repo_name" : repo_name }).to_list (length = None )
48+ return [Deploy (** deploy ) for deploy in deploys ]
5149 except Exception as e :
5250 logger .error (f"Error fetching deployment record: { str (e )} " )
5351 raise
54-
52+
53+ # get a list of all the deploys for owner
54+ async def get_deploys_for_owner (self , owner : str ) -> List [Deploy ]:
55+ """
56+ Get a list of all the deploys for a given owner.
57+ """
58+ logger .info (f"Fetching all deployment records for { owner } " )
59+ collection = await self .db .get_collection (self .collection )
60+ try :
61+ deploys = await collection .find ({"owner" : owner }).to_list (length = None )
62+ print (f"deploys: { deploys } " )
63+ logger .info (f"Found { len (deploys )} deployment records for { owner } " )
64+ return [Deploy (** deploy ) for deploy in deploys ]
65+ except Exception as e :
66+ logger .error (f"Error fetching deployment records: { str (e )} " )
67+ raise
68+ # deployment statistics
69+ async def get_deployment_statistics (self , owner : str ) -> Dict :
70+ """
71+ Get deployment statistics for a specific owner.
72+ """
73+ logger .info (f"Fetching deployment statistics for owner: { owner } " )
74+ collection = await self .db .get_collection (self .collection )
75+ try :
76+ # Get total number of deployments for owner
77+ total_deployments = await collection .count_documents ({"owner" : owner })
78+ logger .info (f"Total deployments for { owner } : { total_deployments } " )
79+
80+ # Get total number of deployments by status for owner
81+ successful_deployments = await collection .count_documents ({"owner" : owner , "status" : "success" })
82+ failed_deployments = await collection .count_documents ({"owner" : owner , "status" : "failed" })
83+ pending_deployments = await collection .count_documents ({"owner" : owner , "status" : "pending" })
84+
85+ return {
86+ "total" : total_deployments ,
87+ "successful" : successful_deployments ,
88+ "failed" : failed_deployments ,
89+ "pending" : pending_deployments ,
90+ }
91+
92+ except Exception as e :
93+ logger .error (f"Error getting deployment statistics for { owner } : { str (e )} " )
94+ raise
0 commit comments