Skip to content

Commit 7d5e9dc

Browse files
authored
Merge branch 'main' into rebase/forgejo
2 parents dcd65db + 8893872 commit 7d5e9dc

3 files changed

Lines changed: 45 additions & 3 deletions

File tree

packit_service/worker/handlers/copr.py

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,15 @@ def get_checkers() -> tuple[type[Checker], ...]:
139139
return (AreOwnerAndProjectMatchingJob, IsPackageMatchingJobView)
140140

141141

142+
def report_long_runtime(method: str, length: int, start_time: datetime):
143+
end_time = datetime.now(timezone.utc)
144+
run_time = elapsed_seconds(start_time, end_time)
145+
if run_time > length:
146+
m = f"{method} run time takes {run_time} seconds."
147+
logger.info(m)
148+
sentry_integration.send_to_sentry(RuntimeWarning(m))
149+
150+
142151
@configured_as(job_type=JobType.copr_build)
143152
@reacts_to(event=copr.Start)
144153
class CoprBuildStartHandler(AbstractCoprBuildReportHandler):
@@ -165,6 +174,7 @@ def set_logs_url(self):
165174
self.build.set_build_logs_url(copr_build_logs)
166175

167176
def run(self):
177+
run_start_time = datetime.now(timezone.utc)
168178
if not self.build:
169179
model = "SRPMBuildDB" if self.copr_event.chroot == COPR_SRPM_CHROOT else "CoprBuildDB"
170180
msg = f"Copr build {self.copr_event.build_id} not in {model}."
@@ -201,6 +211,7 @@ def run(self):
201211
)
202212
msg = "SRPM build in Copr has started..."
203213
self.set_start_time()
214+
report_long_runtime("SRPM build start", 120, run_start_time)
204215
return TaskResults(success=True, details={"msg": msg})
205216

206217
self.pushgateway.copr_builds_started.inc()
@@ -220,6 +231,7 @@ def run(self):
220231
)
221232
msg = f"Build on {self.copr_event.chroot} in copr has started..."
222233
self.set_start_time()
234+
report_long_runtime("Copr build start", 120, run_start_time)
223235
return TaskResults(success=True, details={"msg": msg})
224236

225237

@@ -263,12 +275,15 @@ def measure_time_after_reporting(self):
263275
self.build.target,
264276
).ended_on
265277

278+
build_ended_on_datetime = datetime.fromtimestamp(build_ended_on, timezone.utc)
266279
reported_after_time = elapsed_seconds(
267-
begin=datetime.fromtimestamp(build_ended_on, timezone.utc),
280+
begin=build_ended_on_datetime,
268281
end=reported_time,
269282
)
270-
logger.debug(
271-
f"Copr build end reported after {reported_after_time / 60} minutes.",
283+
logger.info(
284+
f"Copr build {self.build.build_id} for {self.build.target} "
285+
f"reported after {reported_after_time / 60} minutes.\n"
286+
f"Copr build ended at {build_ended_on_datetime} and was reported at {reported_time}."
272287
)
273288

274289
self.pushgateway.copr_build_end_reported_after_time.observe(reported_after_time)
@@ -285,6 +300,13 @@ def set_built_packages(self):
285300
self.build.set_built_packages(built_packages)
286301

287302
def run(self):
303+
run_start_time = datetime.now(timezone.utc)
304+
logger.info(
305+
f"[CELERY_EXEC] CoprBuildEndHandler execution started for "
306+
f"build_id={self.copr_event.build_id} "
307+
f"chroot={self.copr_event.chroot} "
308+
f"at {run_start_time.isoformat()}"
309+
)
288310
if not self.build:
289311
# TODO: how could this happen?
290312
model = "SRPMBuildDB" if self.copr_event.chroot == COPR_SRPM_CHROOT else "CoprBuildDB"
@@ -338,6 +360,7 @@ def run(self):
338360
logs_url=self.build.build_logs_url,
339361
)
340362
self.build.set_status(BuildStatus.failure)
363+
report_long_runtime("Copr build failed end", 120, run_start_time)
341364
return TaskResults(success=False, details={"msg": failed_msg})
342365

343366
self.report_successful_build()
@@ -365,6 +388,7 @@ def run(self):
365388
f"as this is only experimental functionality for now.",
366389
)
367390

391+
report_long_runtime("Copr build end", 120, run_start_time)
368392
return TaskResults(success=True, details={})
369393

370394
def report_successful_build(self):

packit_service/worker/helpers/build/babysit.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,18 @@
5757

5858
def celery_run_async(signatures: list[Signature]) -> None:
5959
logger.debug("Signatures are going to be sent to Celery (from babysit task).")
60+
# Extract build_id from signatures for tracking
61+
build_ids = [
62+
str(build_id)
63+
for sig in signatures
64+
if sig.kwargs and (build_id := sig.kwargs.get("event", {}).get("build_id"))
65+
]
66+
build_ids_str = ", ".join(build_ids) if build_ids else "unknown"
67+
queued_time = datetime.now(timezone.utc)
68+
logger.info(
69+
f"[CELERY_QUEUE] Queuing {len(signatures)} task(s) for Copr build(s) {build_ids_str} "
70+
f"at {queued_time.isoformat()}"
71+
)
6072
# https://docs.celeryq.dev/en/stable/userguide/canvas.html#groups
6173
celery.group(signatures).apply_async()
6274
logger.debug("Signatures were sent to Celery.")

packit_service/worker/tasks.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ def setup_loggers(logger, *args, **kwargs):
120120
logging.getLogger("sandcastle").setLevel(logging.INFO)
121121
# easier debugging
122122
logging.getLogger("packit").setLevel(logging.DEBUG)
123+
logging.getLogger("packit_service").setLevel(logging.DEBUG)
123124

124125
class CustomFormatter(logging.Formatter):
125126
def format(self, record):
@@ -149,6 +150,11 @@ def format(self, record):
149150
project = getenv("PROJECT", "packit")
150151
handler.setFormatter(RFC5424Formatter(msgid=project))
151152
logger.addHandler(handler)
153+
# Also add to root logger to ensure all loggers (including child loggers) inherit it
154+
root_logger = logging.getLogger()
155+
# Check if handler already exists to avoid duplicates
156+
if not any(isinstance(h, logging.handlers.SysLogHandler) for h in root_logger.handlers):
157+
root_logger.addHandler(handler)
152158

153159
package_versions = [
154160
("OGR", ogr_version),

0 commit comments

Comments
 (0)