def schedule_task(task_id: int) -> Response:
    """Add a task to scheduler."""
    submit_executor("enable_task", task_id)

    flash("Scheduling task.")

    return redirect(url_for("task_bp.one_task", task_id=task_id))
def delete_project(project_id: int) -> Response:
    """Delete a project."""
    cache.clear()

    # get tasks
    tasks = [
        x[0] for x in (db.session.query().select_from(Task).filter(
            Task.project_id == project_id).add_columns(text("task.id")).all())
    ]

    submit_executor("disable_project", project_id)

    # delete logs
    db.session.query(TaskLog).filter(TaskLog.task_id.in_(
        tasks)).delete(  # type: ignore[attr-defined, union-attr]
            synchronize_session=False)
    db.session.commit()

    # delete file links
    db.session.query(TaskFile).filter(TaskFile.task_id.in_(
        tasks)).delete(  # type: ignore[attr-defined,union-attr]
            synchronize_session=False)

    # delete tasks
    db.session.query(Task).filter(Task.project_id == project_id).delete(
        synchronize_session=False)
    db.session.commit()

    # delete project
    Project.query.filter_by(id=project_id).delete(synchronize_session=False)
    db.session.commit()

    flash("Project deleted.")
    return redirect(url_for("project_bp.all_projects"))
def task_endretry(task_id: int) -> Response:
    """Stop a task from performing the scheduled retry.

    First, remove the redis key for reruns
    Then, force the task to reschedule, which will
    clear any scheduled jobs that do not belong to
    the primary schedule.
    """
    task = Task.query.filter_by(id=task_id).first()
    if task:

        if task.enabled == 1:
            submit_executor("enable_task", task_id)
        else:
            submit_executor("disable_task", task_id)

        log = TaskLog(  # type: ignore[call-arg]
            status_id=7,
            task_id=task_id,
            message="%s: Task retry canceled." %
            (current_user.full_name or "none"),
        )
        db.session.add(log)
        db.session.commit()

        return redirect(url_for("task_bp.one_task", task_id=task_id))

    flash("Task does not exist.")
    return redirect(url_for("task_bp.all_tasks"))
def delete_task(task_id: int) -> Response:
    """Delete a task."""
    task = Task.query.filter_by(id=task_id).first()

    if task:
        project_id = task.project_id

        submit_executor("disable_task", task_id)

        TaskLog.query.filter_by(task_id=task_id).delete()
        db.session.commit()
        TaskFile.query.filter_by(task_id=task_id).delete()
        db.session.commit()
        Task.query.filter_by(id=task_id).delete()
        db.session.commit()

        log = TaskLog(  # type: ignore[call-arg]
            status_id=7,
            message=(current_user.full_name or "none") + ": Task deleted. (" +
            str(task_id) + ")",
        )
        db.session.add(log)
        db.session.commit()

        flash("Deleting task.")

        return redirect(
            url_for("project_bp.one_project", project_id=project_id))

    flash("Task does not exist.")
    return redirect(url_for("task_bp.all_tasks"))
def edit_project(project_id: int) -> Response:
    """Save project edits."""
    cache.clear()

    project = get_or_create(db.session, Project, id=project_id)

    # get filter query for update
    me = Project.query.filter_by(id=project.id)

    form = request.form

    me.update(
        dict(  # noqa: C408
            name=form.get("project_name", "undefined", type=str).strip(),
            description=form.get("project_desc", "", type=str),
            owner_id=(current_user.id
                      if form.get("project_ownership", 0, type=int) == 1 else
                      me.first().owner_id),
            updater_id=current_user.id,
            global_params=form.get("globalParams", "").strip(),
            sequence_tasks=form.get("run_tasks_in_sequence", 0, type=int),
            cron=form.get("project_cron", 0, type=int),
            cron_year=form.get("project_cron_year", None, type=int),
            cron_month=form.get("project_cron_mnth", None, type=int),
            cron_week=form.get("project_cron_week", None, type=int),
            cron_day=form.get("project_cron_day", None, type=int),
            cron_week_day=form.get("project_cron_wday", None, type=int),
            cron_hour=form.get("project_cron_hour", None, type=int),
            cron_min=form.get("project_cron_min", None, type=int),
            cron_sec=form.get("project_cron_sec", None, type=int),
            cron_start_date=form_to_date(
                form.get("project_cron_sdate", None, type=str)),
            cron_end_date=form_to_date(
                form.get("project_cron_edate", None, type=str)),
            intv=form.get("project_intv", 0, type=int),
            intv_value=form.get("project_intv_value", None, type=int),
            intv_type=form.get("project_intv_intv", None, type=str),
            intv_start_date=form_to_date(
                form.get("project_intv_sdate", None, type=str)),
            intv_end_date=form_to_date(
                form.get("project_intv_edate", None, type=str)),
            ooff=form.get("project_ooff", 0, type=int),
            ooff_date=form_to_date(
                form.get("project_ooff_date", None, type=str)),
        ))

    db.session.commit()

    # reschedule any jobs.
    submit_executor("schedule_project", project_id)

    flash("Changes saved.")
    return redirect(url_for("project_bp.one_project", project_id=project_id))
Exemple #6
0
def reschedule_tasks() -> Response:
    """Emtpy scheduler and re-add all enabled jobs."""
    try:
        output = json.loads(requests.get(app.config["SCHEDULER_HOST"] + "/delete").text)

        msg = output["message"]
        add_user_log(msg, 0)

    except requests.exceptions.ConnectionError:
        msg = "Failed to remove jobs from scheduler. Scheduler offline."
        add_user_log(msg, 1)

    submit_executor("schedule_enabled_tasks")

    flash(msg)
    return redirect(url_for("admin_bp.admin"))
Exemple #7
0
def task_new(project_id: int) -> Union[str, Response]:
    """Create a new task."""
    cache.clear()
    # create tasks
    form = request.form

    me = Task(
        name=form.get("name", "undefined").strip(),
        project_id=project_id,
        creator_id=current_user.id,
        updater_id=current_user.id,
        max_retries=form.get("task-retry", 0, type=int),
        order=form.get("task-rank", 0, type=int),
        source_type_id=form.get("sourceType", None, type=int),
        source_database_id=form.get("task-source-database", None, type=int),
        source_query_include_header=form.get(
            "task_include_query_headers", None, type=int
        ),
        source_smb_id=form.get("task-source-smb", None, type=int),
        source_smb_file=form.get("sourceSmbFile", None, type=str),
        source_smb_ignore_delimiter=form.get("task_smb_ignore_delimiter", 0, type=int),
        source_smb_delimiter=form.get("sourceSmbDelimiter", None, type=str),
        source_sftp_id=form.get("task-source-sftp", None, type=int),
        source_sftp_file=form.get("sourceSftpFile", None, type=str),
        source_sftp_ignore_delimiter=form.get(
            "task_sftp_ignore_delimiter", None, type=int
        ),
        enable_source_cache=form.get("task_enable_source_cache", None, type=int),
        source_require_sql_output=form.get("task_require_sql_output", None, type=int),
        source_sftp_delimiter=form.get("sourceSftpDelimiter", None, type=str),
        source_ftp_id=form.get("task-source-ftp", None, type=int),
        source_ftp_file=form.get("sourceFtpFile", None, type=str),
        source_ftp_ignore_delimiter=form.get(
            "task_ftp_ignore_delimiter", None, type=int
        ),
        source_ftp_delimiter=form.get("sourceFtpDelimiter", None, type=str),
        source_ssh_id=form.get("task-source-ssh", None, type=int),
        source_query_type_id=form.get("sourceQueryType", None, type=int),
        query_params=form.get("taskParams", "", type=str).strip(),
        source_git=form.get("sourceGit", None, type=str),
        query_smb_file=form.get("sourceQuerySmbFile", None, type=str),
        query_smb_id=form.get("task-query-smb", None, type=int),
        query_sftp_file=form.get("sourceQuerySftpFile", None, type=str),
        query_sftp_id=form.get("task-query-sftp", None, type=int),
        query_ftp_file=form.get("sourceQueryFtpFile", None, type=str),
        query_ftp_id=form.get("task-query-ftp", None, type=int),
        source_url=form.get("sourceURL", None, type=str),
        source_code=form.get("sourceCode", None, type=str),
        processing_type_id=form.get("processingType", None, type=int),
        processing_smb_file=form.get("processingSmbFile", None, type=str),
        processing_smb_id=form.get("task-processing-smb", None, type=int),
        processing_sftp_file=form.get("processingSftpFile", None, type=str),
        processing_sftp_id=form.get("task-processing-sftp", None, type=int),
        processing_ftp_file=form.get("processingFtpFile", None, type=str),
        processing_ftp_id=form.get("task-processing-ftp", None, type=int),
        processing_git=form.get("processingGit", None, type=str),
        processing_url=form.get("processingUrl", None, type=str),
        processing_code=form.get("processingCode", None, type=str),
        processing_command=form.get("processingCommand", None, type=str),
        destination_quote_level_id=form.get("quoteLevel", 3, type=int),
        destination_file_type_id=form.get("fileType", None, type=int),
        destination_file_name=form.get(
            "destinationFileName", form.get("name", "undefined", type=str), type=str
        ),
        destination_create_zip=form.get("task_create_zip", None, type=int),
        destination_zip_name=form.get(
            "destinationZipName", form.get("name", "undefined", type=str), type=str
        ),
        destination_file_delimiter=form.get("fileDelimiter", None, type=str),
        destination_file_line_terminator=form.get("fileTerminator", None, type=str),
        destination_ignore_delimiter=form.get(
            "task_ignore_file_delimiter", None, type=int
        ),
        file_gpg=form.get("task_file_gpg", 0, type=int),
        file_gpg_id=form.get("task-file-gpg", None, type=int),
        destination_sftp=form.get("task_save_sftp", 0, type=int),
        destination_sftp_id=form.get("task-destination-sftp", None, type=int),
        destination_sftp_overwrite=form.get("task_overwrite_sftp", None, type=int),
        destination_sftp_dont_send_empty_file=form.get(
            "task_sftp_dont_send_empty", 0, type=int
        ),
        destination_ftp=form.get("task_save_ftp", 0, type=int),
        destination_ftp_id=form.get("task-destination-ftp", None, type=int),
        destination_ftp_overwrite=form.get("task_overwrite_ftp", None, type=int),
        destination_ftp_dont_send_empty_file=form.get(
            "task_ftp_dont_send_empty", 0, type=int
        ),
        destination_smb=form.get("task_save_smb", 0, type=int),
        destination_smb_id=form.get("task-destination-smb", None, type=int),
        destination_smb_overwrite=form.get("task_overwrite_smb", None, type=int),
        destination_smb_dont_send_empty_file=form.get(
            "task_smb_dont_send_empty", 0, type=int
        ),
        email_completion=form.get("task_send_completion_email", 0, type=int),
        email_completion_recipients=form.get("completionEmailRecip", "", type=str),
        email_completion_message=form.get("completion_email_msg", "", type=str),
        email_completion_log=form.get("task_send_completion_email_log", 0, type=int),
        email_completion_file=form.get("task_send_output", 0, type=int),
        email_completion_dont_send_empty_file=form.get(
            "task_dont_send_empty", 0, type=int
        ),
        email_completion_file_embed=form.get("task_embed_output", 0, type=int),
        email_error=form.get("task_send_error_email", 0, type=int),
        email_error_recipients=form.get("errorEmailRecip", "", type=str),
        email_error_message=form.get("errorEmailMsg", "", type=str),
        enabled=form.get("task-ooff", 0, type=int),
    )

    db.session.add(me)
    db.session.commit()

    log = TaskLog(
        task_id=me.id,
        status_id=7,
        message=(current_user.full_name or "none") + ": Task created.",
    )
    db.session.add(log)
    db.session.commit()

    if me.enabled == 1:
        submit_executor("enable_task", me.id)

    return redirect(url_for("task_bp.one_task", task_id=me.id))
Exemple #8
0
def task_edit_post(task_id: int) -> Response:
    """Save task edits."""
    # pylint: disable=too-many-branches
    # pylint: disable=too-many-statements
    form = request.form

    task = get_or_create(db.session, Task, id=task_id)

    me = Task.query.filter_by(id=task.id)

    me.update(
        dict(  # noqa: C408
            name=form.get("name", "undefined").strip(),
            updater_id=current_user.id,
            max_retries=form.get("task-retry", 0, type=int),
            order=form.get("task-rank", 0, type=int),
            source_type_id=form.get("sourceType", None, type=int),
            source_database_id=form.get("task-source-database", None, type=int),
            source_query_include_header=form.get(
                "task_include_query_headers", None, type=int
            ),
            source_smb_id=form.get("task-source-smb", None, type=int),
            source_smb_file=form.get("sourceSmbFile", None, type=str),
            source_smb_ignore_delimiter=form.get(
                "task_smb_ignore_delimiter", 0, type=int
            ),
            source_smb_delimiter=form.get("sourceSmbDelimiter", None, type=str),
            source_sftp_id=form.get("task-source-sftp", None, type=int),
            source_sftp_file=form.get("sourceSftpFile", None, type=str),
            source_sftp_ignore_delimiter=form.get(
                "task_sftp_ignore_delimiter", None, type=int
            ),
            source_sftp_delimiter=form.get("sourceSftpDelimiter", None, type=str),
            source_ftp_id=form.get("task-source-ftp", None, type=int),
            source_ftp_file=form.get("sourceFtpFile", None, type=str),
            source_ftp_ignore_delimiter=form.get(
                "task_ftp_ignore_delimiter", None, type=int
            ),
            enable_source_cache=form.get("task_enable_source_cache", None, type=int),
            source_require_sql_output=form.get(
                "task_require_sql_output", None, type=int
            ),
            source_ftp_delimiter=form.get("sourceFtpDelimiter", None, type=str),
            source_ssh_id=form.get("task-source-ssh", None, type=int),
            source_query_type_id=form.get("sourceQueryType", None, type=int),
            query_params=form.get("taskParams", "", type=str).strip(),
            source_git=form.get("sourceGit", None, type=str),
            query_smb_file=form.get("sourceQuerySmbFile", None, type=str),
            query_smb_id=form.get("task-query-smb", None, type=int),
            query_sftp_file=form.get("sourceQuerySftpFile", None, type=str),
            query_sftp_id=form.get("task-query-sftp", None, type=int),
            query_ftp_file=form.get("sourceQueryFtpFile", None, type=str),
            query_ftp_id=form.get("task-query-ftp", None, type=int),
            source_url=form.get("sourceURL", None, type=str),
            source_code=form.get("sourceCode", None, type=str),
            processing_type_id=form.get("processingType", None, type=int),
            processing_smb_file=form.get("processingSmbFile", None, type=str),
            processing_smb_id=form.get("task-processing-smb", None, type=int),
            processing_sftp_file=form.get("processingSftpFile", None, type=str),
            processing_sftp_id=form.get("task-processing-sftp", None, type=int),
            processing_ftp_file=form.get("processingFtpFile", None, type=str),
            processing_ftp_id=form.get("task-processing-ftp", None, type=int),
            processing_git=form.get("processingGit", None, type=str),
            processing_url=form.get("processingUrl", None, type=str),
            processing_code=form.get("processingCode", None, type=str),
            processing_command=form.get("processingCommand", None, type=str),
            destination_quote_level_id=form.get("quoteLevel", 3, type=int),
            destination_file_type_id=form.get("fileType", None, type=int),
            destination_file_name=form.get(
                "destinationFileName", form.get("name", "undefined", type=str), type=str
            ),
            destination_create_zip=form.get("task_create_zip", None, type=int),
            destination_zip_name=form.get(
                "destinationZipName", form.get("name", "undefined", type=str), type=str
            ),
            destination_file_delimiter=form.get("fileDelimiter", None, type=str),
            destination_file_line_terminator=form.get("fileTerminator", None, type=str),
            destination_ignore_delimiter=form.get(
                "task_ignore_file_delimiter", None, type=int
            ),
            file_gpg=form.get("task_file_gpg", 0, type=int),
            file_gpg_id=form.get("task-file-gpg", None, type=int),
            destination_sftp=form.get("task_save_sftp", 0, type=int),
            destination_sftp_id=form.get("task-destination-sftp", None, type=int),
            destination_sftp_overwrite=form.get("task_overwrite_sftp", None, type=int),
            destination_sftp_dont_send_empty_file=form.get(
                "task_sftp_dont_send_empty", 0, type=int
            ),
            destination_ftp=form.get("task_save_ftp", 0, type=int),
            destination_ftp_id=form.get("task-destination-ftp", None, type=int),
            destination_ftp_overwrite=form.get("task_overwrite_ftp", None, type=int),
            destination_ftp_dont_send_empty_file=form.get(
                "task_ftp_dont_send_empty", 0, type=int
            ),
            destination_smb=form.get("task_save_smb", 0, type=int),
            destination_smb_id=form.get("task-destination-smb", None, type=int),
            destination_smb_overwrite=form.get("task_overwrite_smb", None, type=int),
            destination_smb_dont_send_empty_file=form.get(
                "task_smb_dont_send_empty", 0, type=int
            ),
            email_completion=form.get("task_send_completion_email", 0, type=int),
            email_completion_recipients=form.get("completionEmailRecip", "", type=str),
            email_completion_message=form.get("completion_email_msg", "", type=str),
            email_completion_log=form.get(
                "task_send_completion_email_log", 0, type=int
            ),
            email_completion_file=form.get("task_send_output", 0, type=int),
            email_completion_dont_send_empty_file=form.get(
                "task_dont_send_empty", 0, type=int
            ),
            email_completion_file_embed=form.get("task_embed_output", 0, type=int),
            email_error=form.get("task_send_error_email", 0, type=int),
            email_error_recipients=form.get("errorEmailRecip", "", type=str),
            email_error_message=form.get("errorEmailMsg", "", type=str),
            enabled=form.get("task-ooff", 0, type=int),
        )
    )

    db.session.commit()

    me = me.first()

    log = TaskLog(
        task_id=task_id,
        status_id=7,
        message=(current_user.full_name or "none") + ": Task edited.",
    )
    db.session.add(log)
    db.session.commit()

    if me.enabled == 1:
        log = TaskLog(
            task_id=task_id,
            status_id=7,
            message=(current_user.full_name or "none") + ": Task enabled.",
        )
        db.session.add(log)
        db.session.commit()

        submit_executor("enable_task", task_id)

    else:
        submit_executor("disable_task", task_id)

    return redirect(url_for("task_bp.one_task", task_id=task_id))
def run_all_project_tasks(project_id: int) -> Response:
    """Run all tasks in a project."""
    submit_executor("run_project", project_id)

    return redirect(url_for("project_bp.one_project", project_id=project_id))
def enable_all_project_tasks(project_id: int) -> Response:
    """Enable all tasks in a project."""
    submit_executor("enable_project", project_id)

    return redirect(url_for("project_bp.one_project", project_id=project_id))
def dash_scheduled_disable() -> Response:
    """Button to disable all scheduled tasks."""
    submit_executor("disabled_scheduled_tasks")

    return redirect(url_for("dashboard_bp.dash"))
def dash_errored_run() -> Response:
    """Button to run all errored tasks."""
    submit_executor("run_errored_tasks")

    return redirect(url_for("dashboard_bp.dash"))
Exemple #13
0
def refresh_cache(task_id: int) -> Response:
    """Get source code for a task."""
    submit_executor("refresh_cache", task_id)
    return redirect(url_for("task_bp.one_task", task_id=task_id))
def disable_task(task_id: int) -> str:
    """Disable a task."""
    submit_executor("disable_task", task_id)

    return "disabling task"
def enable_task(task_id: int) -> str:
    """Enable a task."""
    submit_executor("enable_task", task_id)

    return "enabling task"