58
58
)
59
59
@click .option ("--opensearch-index" , help = "OpenSearch index" , default = "events" )
60
60
@click .option ("--output" , help = "File where the scores will be written" , type = click .File ("w" ), default = sys .stdout )
61
+ @click .option (
62
+ "--repository-timeout" ,
63
+ type = int ,
64
+ help = "Timeout in seconds to wait for a repository to be analyzed" ,
65
+ default = 3600 ,
66
+ )
61
67
@click .option (
62
68
"--from-date" ,
63
69
type = click .DateTime (formats = ["%Y-%m-%d" ]),
@@ -79,6 +85,7 @@ def trustable_grimoirelab_score(
79
85
opensearch_url : str ,
80
86
opensearch_index : str ,
81
87
output : str ,
88
+ repository_timeout : int ,
82
89
from_date : datetime .datetime | None = None ,
83
90
to_date : datetime .datetime | None = None ,
84
91
verify_certs : bool = False ,
@@ -116,7 +123,14 @@ def trustable_grimoirelab_score(
116
123
schedule_repositories (git_urls , grimoirelab_client )
117
124
118
125
metrics = generate_metrics_when_ready (
119
- grimoirelab_client , git_urls , opensearch_url , opensearch_index , from_date , to_date , verify_certs
126
+ grimoirelab_client = grimoirelab_client ,
127
+ repositories = git_urls ,
128
+ opensearch_url = opensearch_url ,
129
+ opensearch_index = opensearch_index ,
130
+ from_date = from_date ,
131
+ to_date = to_date ,
132
+ verify_certs = verify_certs ,
133
+ timeout = repository_timeout ,
120
134
)
121
135
122
136
package_metrics = {"packages" : {}}
@@ -188,6 +202,7 @@ def generate_metrics_when_ready(
188
202
from_date : datetime .datetime | None = None ,
189
203
to_date : datetime .datetime | None = None ,
190
204
verify_certs : bool = False ,
205
+ timeout : int = 3600 ,
191
206
) -> dict [str :Any ]:
192
207
"""Generate metrics once the repositories have finished the collection.
193
208
@@ -198,9 +213,12 @@ def generate_metrics_when_ready(
198
213
:param from_date: Start date for metrics.
199
214
:param to_date: End date for metrics.
200
215
:param verify_certs: Verify SSL/TLS certificates.
216
+ :param timeout: Seconds to wait before failing getting metrics
201
217
"""
202
218
logging .info ("Generating metrics" )
203
219
220
+ limit_time = time .time () + timeout
221
+
204
222
after_date = datetime .datetime .now (datetime .UTC ) - datetime .timedelta (days = 7 )
205
223
pending_repositories = set (repositories )
206
224
metrics = {"repositories" : {}}
@@ -221,10 +239,15 @@ def generate_metrics_when_ready(
221
239
222
240
pending_repositories -= processed
223
241
224
- if pending_repositories :
242
+ if pending_repositories and time . time () < limit_time :
225
243
logging .info (f"Waiting for { len (pending_repositories )} repositories to be ready" )
226
244
logging .debug (f"Repositories not ready: { pending_repositories } " )
227
245
time .sleep (25 )
246
+ else :
247
+ break
248
+
249
+ for repository in pending_repositories :
250
+ logging .warning (f"Timeout waiting for repository { repository } to be ready" )
228
251
229
252
return metrics
230
253
0 commit comments