Skip to content
This repository has been archived by the owner on Jul 30, 2024. It is now read-only.

Commit

Permalink
add squad-show-or-cancel-jobs
Browse files Browse the repository at this point in the history
This script show jobs that isn't fetched, that has job status 'Running',
'Scheduled' or 'Submitted'.
With this script its possible to cancel any of the jobs with that
status. Filtering can be done by group, project, environment, job
status and days. Days will list all jobs older than today - X days
back, default 10.

Signed-off-by: Anders Roxell <[email protected]>
  • Loading branch information
roxell committed Apr 12, 2024
1 parent d7348db commit 70b6ee9
Showing 1 changed file with 107 additions and 0 deletions.
107 changes: 107 additions & 0 deletions squad-show-or-cancel-jobs
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
#!/usr/bin/env python3
# vim: set ts=4
#
# Copyright 2024-present Linaro Limited
#
# SPDX-License-Identifier: MIT

import argparse
import logging
import sys
from squad_client.core.api import SquadApi
from squad_client.core.models import Squad
from datetime import datetime
from datetime import timedelta

SquadApi.configure(cache=3600, url="https://qa-reports.linaro.org/")

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)


def arg_parser():
parser = argparse.ArgumentParser(description="Show's jobs that is not fetched.")

parser.add_argument(
"--group",
required=True,
help="squad group",
)

parser.add_argument(
"--project",
required=True,
help="squad project",
)

parser.add_argument(
"--days",
required=False,
default=10,
help="environment",
)

parser.add_argument(
"--job-status",
required=False,
default="Submitted, Scheduled, Running",
help="Job status separated by comma ','. The job status can be, 'Submitted, Scheduled, Running",
)

parser.add_argument(
"--environments",
required=False,
default="",
help="Environments separated by comma ','",
)

parser.add_argument(
"--cancel",
action="store_true",
default=False,
help="Cancel jobs",
)

parser.add_argument(
"--debug",
action="store_true",
default=False,
help="Display debug messages",
)

return parser


def run():
args = arg_parser().parse_args()
if args.debug:
logger.setLevel(level=logging.DEBUG)

group = Squad().group(args.group)
if group is None:
logger.error(f"Get group failed. Group not found: '{args.group}'.")
return -1

project = group.project(args.project)
if project is None:
logger.error(f"Get project failed. Project not found: '{args.project}'.")
return -1

n_days_ago = str(datetime.now() - timedelta(days=int(args.days))).replace(" ", "T")
jobs = Squad().testjobs(
target__id=project.id,
fetched=False,
created_at__lt=n_days_ago,
count=500,
job_status__in=args.job_status,
ordering="-id",
environment__in=args.environments,
).values()
for j in jobs:
print(f"{j.id} : {j.external_url} : {j.job_status}, {j.created_at}, {j.environment}")
if args.cancel:
j.cancel()


if __name__ == "__main__":
sys.exit(run())

0 comments on commit 70b6ee9

Please sign in to comment.