Skip to content

Commit

Permalink
Updated scheduled-jobs to be a clusters command
Browse files Browse the repository at this point in the history
  • Loading branch information
Taliik committed Feb 5, 2024
1 parent 6b6b8f7 commit b47681e
Show file tree
Hide file tree
Showing 6 changed files with 270 additions and 256 deletions.
212 changes: 107 additions & 105 deletions croud/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,14 @@
clusters_snapshots_list,
clusters_snapshots_restore,
clusters_upgrade,
create_scheduled_job,
delete_scheduled_job,
edit_scheduled_job,
export_jobs_create,
export_jobs_delete,
export_jobs_list,
get_scheduled_job_log,
get_scheduled_jobs,
import_job_progress,
import_jobs_create_from_azure_blob_storage,
import_jobs_create_from_file,
Expand Down Expand Up @@ -109,13 +114,6 @@
project_users_remove,
)
from croud.regions.commands import regions_create, regions_delete, regions_list
from croud.scheduledjobs.commands import (
create_scheduled_job,
delete_scheduled_job,
edit_scheduled_job,
get_scheduled_job_log,
get_scheduled_jobs,
)
from croud.subscriptions.commands import (
subscription_delete,
subscriptions_create,
Expand Down Expand Up @@ -966,6 +964,108 @@
},
},
},
"scheduled-jobs": {
"help": "Manage your scheduled sql jobs.",
"commands": {
"create": {
"help": "Create a scheduled sql job to run at "
"specific times.",
"extra_args": [
Argument(
"--name", type=str, required=True,
help="Name of the sql job."
),
Argument(
"--cluster-id", type=str, required=True,
help="Cluster where the job should be run."
),
Argument(
"--cron", type=str, required=True,
help="Cron schedule of the sql job."
),
Argument(
"--sql", type=str, required=True,
help="The sql statement the job should run."
),
Argument(
"--enabled", type=str, required=True,
help="Enable or disable the job."
)
],
"resolver": create_scheduled_job,
},
"list": {
"help": "Get all scheduled sql jobs.",
"extra_args": [
Argument(
"--cluster-id", type=str, required=True,
help="The cluster of which jobs should be listed."
)
],
"resolver": get_scheduled_jobs,
},
"logs": {
"help": "Logs of a scheduled sql job.",
"extra_args": [
Argument(
"--job-id", type=str, required=True,
help="The job id of the job log to be listed."
),
Argument(
"--cluster-id", type=str, required=True,
help="The cluster of which the job log "
"should be listed."
)
],
"resolver": get_scheduled_job_log,
},
"delete": {
"help": "Delete specified scheduled sql job.",
"extra_args": [
Argument(
"--job-id", type=str, required=True,
help="The job id of the job to be deleted."
),
Argument(
"--cluster-id", type=str, required=True,
help="The cluster of which the job "
"should be deleted."
),
],
"resolver": delete_scheduled_job,
},
"edit": {
"help": "Edit specified scheduled sql job.",
"extra_args": [
Argument(
"--job-id", type=str, required=True,
help="The id of the job to edit."
),
Argument(
"--cluster-id", type=str, required=True,
help="The cluster id where the job was created."
),
Argument(
"--name", type=str, required=True,
help="The name of the sql job."
),
Argument(
"--sql", type=str, required=True,
help="The sql statement of the sql job."
),
Argument(
"--cron", type=str, required=True,
help="Cron schedule of the sql job."
),
Argument(
"--enabled", type=str, required=True,
help="Enable or disable the sql job."
),
],
"resolver": edit_scheduled_job,
}
}
},
},
},
"products": {
Expand Down Expand Up @@ -1475,104 +1575,6 @@
},
}
},
"scheduled-jobs": {
"help": "Manage your scheduled sql jobs.",
"commands": {
"create": {
"help": "Create a scheduled sql job to run at specific times.",
"extra_args": [
Argument(
"--name", type=str, required=True, help="Name of the sql job."
),
Argument(
"--cluster-id", type=str, required=True,
help="Cluster where the job should be run."
),
Argument(
"--cron", type=str, required=True,
help="Cron schedule of the sql job."
),
Argument(
"--sql", type=str, required=True,
help="The sql statement the job should run."
),
Argument(
"--enabled", type=str, required=True,
help="Enable or disable the job."
)
],
"resolver": create_scheduled_job,
},
"list": {
"help": "Get all scheduled sql jobs.",
"extra_args": [
Argument(
"--cluster-id", type=str, required=True,
help="The cluster of which jobs should be listed."
)
],
"resolver": get_scheduled_jobs,
},
"logs": {
"help": "Logs of a scheduled sql job.",
"extra_args": [
Argument(
"--job-id", type=str, required=True,
help="The job id of the job log to be listed."
),
Argument(
"--cluster-id", type=str, required=True,
help="The cluster of which the job log should be listed."
)
],
"resolver": get_scheduled_job_log,
},
"delete": {
"help": "Delete specified scheduled sql job.",
"extra_args": [
Argument(
"--job-id", type=str, required=True,
help="The job id of the job to be deleted."
),
Argument(
"--cluster-id", type=str, required=True,
help="The cluster of which the job should be deleted."
),
],
"resolver": delete_scheduled_job,
},
"edit": {
"help": "Edit specified scheduled sql job.",
"extra_args": [
Argument(
"--job-id", type=str, required=True,
help="The id of the job to edit."
),
Argument(
"--cluster-id", type=str, required=True,
help="The cluster id where the job was created."
),
Argument(
"--name", type=str, required=True,
help="The name of the sql job."
),
Argument(
"--sql", type=str, required=True,
help="The sql statement of the sql job."
),
Argument(
"--cron", type=str, required=True,
help="Cron schedule of the sql job."
),
Argument(
"--enabled", type=str, required=True,
help="Enable or disable the sql job."
),
],
"resolver": edit_scheduled_job,
}
}
},
"subscriptions": {
"help": "Manage subscriptions.",
"commands": {
Expand Down
109 changes: 107 additions & 2 deletions croud/clusters/commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,15 @@
import bitmath
import requests
from tqdm.auto import tqdm
from yarl import URL

from croud.api import Client
from croud.clusters.exceptions import AsyncOperationNotFound
from croud.config import get_output_format
from croud.config import CONFIG, get_output_format
from croud.organizations.commands import op_upload_file_to_org
from croud.printer import print_error, print_info, print_response, print_success
from croud.tools.spinner import HALO
from croud.util import require_confirmation
from croud.util import grand_central_jwt_token, require_confirmation


def clusters_get(args: Namespace) -> None:
Expand Down Expand Up @@ -799,6 +800,110 @@ def export_jobs_list(args: Namespace) -> None:
)


@grand_central_jwt_token
def get_scheduled_jobs(args: Namespace) -> None:
client = _get_gc_client(args)

data, errors = client.get("/api/scheduled-jobs/")

print_response(
data=data,
errors=errors,
keys=["name", "id", "cron", "sql", "enabled", "next_run_time"],
output_fmt=get_output_format(args),
)

if errors or not data:
return


@grand_central_jwt_token
def get_scheduled_job_log(args: Namespace) -> None:
client = _get_gc_client(args)

data, errors = client.get(f"/api/scheduled-jobs/{args.job_id}/log")
print_response(
data=data,
errors=errors,
keys=["job_id", "start", "end", "error", "statements"],
output_fmt=get_output_format(args),
)

if errors or not data:
return


@grand_central_jwt_token
def create_scheduled_job(args: Namespace) -> None:
body = {
"name": args.name,
"cron": args.cron,
"sql": args.sql,
"enabled": args.enabled,
}

client = _get_gc_client(args)

data, errors = client.post("/api/scheduled-jobs/", body=body)
print_response(
data=data,
errors=errors,
keys=["name", "id", "cron", "sql", "enabled"],
output_fmt=get_output_format(args),
)

if errors or not data:
return


@grand_central_jwt_token
def delete_scheduled_job(args: Namespace) -> None:
client = _get_gc_client(args)

data, errors = client.delete(f"/api/scheduled-jobs/{args.job_id}")
print_response(
data=data,
errors=errors,
success_message="Scheduled job deleted.",
output_fmt=get_output_format(args),
)


@grand_central_jwt_token
def edit_scheduled_job(args: Namespace) -> None:
body = {
"name": args.name,
"cron": args.cron,
"sql": args.sql,
"enabled": args.enabled,
}

client = _get_gc_client(args)

data, errors = client.put(f"/api/scheduled-jobs/{args.job_id}", body=body)
print_response(
data=data,
errors=errors,
keys=["name", "id", "sql", "cron", "enabled"],
output_fmt=get_output_format(args),
)

if errors or not data:
return


def _get_gc_client(args: Namespace) -> Client:
client = Client.from_args(args)
cluster, _ = client.get(f"/api/v2/clusters/{args.cluster_id}/")

url_region_cloud = cluster.get("fqdn").split(".", 1)[1][:-1] # type: ignore
gc_url = f"https://{cluster.get('name')}.gc.{url_region_cloud}" # type: ignore
client.base_url = URL(gc_url)
client.session.cookies.set("grand_central_session", CONFIG.gc_jwt_token)

return client


def _transform_export_job_source(field):
return field["table"]

Expand Down
Empty file removed croud/scheduledjobs/__init__.py
Empty file.
Loading

0 comments on commit b47681e

Please sign in to comment.