2022-08-18 15:11:09 -05:00
## -*- coding: utf-8; -*-
<%inherit file="/configure.mako" />
<%def name="form_content()">
${h.hidden('overnight_tasks', **{':value': 'JSON.stringify(overnightTasks)'})}
2022-08-23 23:27:47 -05:00
${h.hidden('backfill_tasks', **{':value': 'JSON.stringify(backfillTasks)'})}
2022-08-18 15:11:09 -05:00
2022-08-23 23:27:47 -05:00
<div class="level">
<div class="level-left">
<div class="level-item">
<h3 class="is-size-3">Overnight Tasks</h3>
</div>
<div class="level-item">
<b-button type="is-primary"
icon-pack="fas"
icon-left="plus"
@click="overnightTaskCreate()">
New Task
</b-button>
</div>
</div>
</div>
2022-08-18 15:11:09 -05:00
<div class="block" style="padding-left: 2rem; display: flex;">
2024-04-24 16:13:14 -05:00
<${b}-table :data="overnightTasks">
<!-- <${b}-table-column field="key" -->
2023-02-01 18:44:55 -06:00
<!-- label="Key" -->
<!-- sortable> -->
<!-- {{ props.row.key }} -->
2024-04-24 16:13:14 -05:00
<!-- </${b}-table-column> -->
<${b}-table-column field="key"
2023-02-01 18:44:55 -06:00
label="Key"
v-slot="props">
{{ props.row.key }}
2024-04-24 16:13:14 -05:00
</${b}-table-column>
<${b}-table-column field="description"
2023-02-01 18:44:55 -06:00
label="Description"
v-slot="props">
{{ props.row.description }}
2024-04-24 16:13:14 -05:00
</${b}-table-column>
<${b}-table-column field="class_name"
2023-02-01 18:44:55 -06:00
label="Class Name"
v-slot="props">
{{ props.row.class_name }}
2024-04-24 16:13:14 -05:00
</${b}-table-column>
<${b}-table-column field="script"
2023-02-01 18:44:55 -06:00
label="Script"
v-slot="props">
{{ props.row.script }}
2024-04-24 16:13:14 -05:00
</${b}-table-column>
<${b}-table-column label="Actions"
2023-02-01 18:44:55 -06:00
v-slot="props">
<a href="#"
@click.prevent="overnightTaskEdit(props.row)">
2024-04-24 16:13:14 -05:00
% if request.use_oruga:
<o-icon icon="edit" />
% else:
<i class="fas fa-edit"></i>
% endif
2023-02-01 18:44:55 -06:00
Edit
</a>
<a href="#"
class="has-text-danger"
@click.prevent="overnightTaskDelete(props.row)">
2024-04-24 16:13:14 -05:00
% if request.use_oruga:
<o-icon icon="trash" />
% else:
<i class="fas fa-trash"></i>
% endif
2023-02-01 18:44:55 -06:00
Delete
</a>
2024-04-24 16:13:14 -05:00
</${b}-table-column>
</${b}-table>
2022-08-18 15:11:09 -05:00
2022-08-23 23:27:47 -05:00
<b-modal has-modal-card
:active.sync="overnightTaskShowDialog">
<div class="modal-card">
<header class="modal-card-head">
<p class="modal-card-title">Overnight Task</p>
</header>
<section class="modal-card-body">
2022-11-20 13:58:39 -06:00
<b-field label="Key"
:type="overnightTaskKey ? null : 'is-danger'">
<b-input v-model.trim="overnightTaskKey"
2024-04-26 11:02:22 -05:00
ref="overnightTaskKey"
expanded />
2022-11-20 13:58:39 -06:00
</b-field>
2022-08-23 23:27:47 -05:00
<b-field label="Description"
:type="overnightTaskDescription ? null : 'is-danger'">
<b-input v-model.trim="overnightTaskDescription"
2024-04-26 11:02:22 -05:00
ref="overnightTaskDescription"
expanded />
2022-08-23 23:27:47 -05:00
</b-field>
2022-11-20 19:37:29 -06:00
<b-field label="Module">
2024-04-26 11:02:22 -05:00
<b-input v-model.trim="overnightTaskModule"
expanded />
2022-11-20 19:37:29 -06:00
</b-field>
<b-field label="Class Name">
2024-04-26 11:02:22 -05:00
<b-input v-model.trim="overnightTaskClass"
expanded />
2022-11-20 19:37:29 -06:00
</b-field>
<b-field label="Script">
2024-04-26 11:02:22 -05:00
<b-input v-model.trim="overnightTaskScript"
expanded />
2022-08-23 23:27:47 -05:00
</b-field>
<b-field label="Notes">
<b-input v-model.trim="overnightTaskNotes"
2024-04-26 11:02:22 -05:00
type="textarea"
expanded />
2022-08-23 23:27:47 -05:00
</b-field>
</section>
2022-08-18 15:11:09 -05:00
2022-08-23 23:27:47 -05:00
<footer class="modal-card-foot">
<b-button type="is-primary"
icon-pack="fas"
icon-left="save"
@click="overnightTaskSave()"
2022-11-20 19:37:29 -06:00
:disabled="!overnightTaskKey || !overnightTaskDescription">
2022-08-23 23:27:47 -05:00
Save
</b-button>
<b-button @click="overnightTaskShowDialog = false">
Cancel
</b-button>
</footer>
</div>
</b-modal>
</div>
<div class="level">
<div class="level-left">
<div class="level-item">
<h3 class="is-size-3">Backfill Tasks</h3>
</div>
<div class="level-item">
<b-button type="is-primary"
icon-pack="fas"
icon-left="plus"
@click="backfillTaskCreate()">
New Task
</b-button>
</div>
2022-08-18 15:11:09 -05:00
</div>
</div>
2022-08-23 23:27:47 -05:00
<div class="block" style="padding-left: 2rem; display: flex;">
2024-04-24 16:13:14 -05:00
<${b}-table :data="backfillTasks">
<${b}-table-column field="key"
2023-02-01 18:44:55 -06:00
label="Key"
v-slot="props">
{{ props.row.key }}
2024-04-24 16:13:14 -05:00
</${b}-table-column>
<${b}-table-column field="description"
2023-02-01 18:44:55 -06:00
label="Description"
v-slot="props">
{{ props.row.description }}
2024-04-24 16:13:14 -05:00
</${b}-table-column>
<${b}-table-column field="script"
2023-02-01 18:44:55 -06:00
label="Script"
v-slot="props">
{{ props.row.script }}
2024-04-24 16:13:14 -05:00
</${b}-table-column>
<${b}-table-column field="forward"
2023-02-01 18:44:55 -06:00
label="Orientation"
v-slot="props">
{{ props.row.forward ? "Forward" : "Backward" }}
2024-04-24 16:13:14 -05:00
</${b}-table-column>
<${b}-table-column field="target_date"
2023-02-01 18:44:55 -06:00
label="Target Date"
v-slot="props">
{{ props.row.target_date }}
2024-04-24 16:13:14 -05:00
</${b}-table-column>
<${b}-table-column label="Actions"
2023-02-01 18:44:55 -06:00
v-slot="props">
<a href="#"
@click.prevent="backfillTaskEdit(props.row)">
2024-04-24 16:13:14 -05:00
% if request.use_oruga:
<o-icon icon="edit" />
% else:
<i class="fas fa-edit"></i>
% endif
2023-02-01 18:44:55 -06:00
Edit
</a>
<a href="#"
class="has-text-danger"
@click.prevent="backfillTaskDelete(props.row)">
2024-04-24 16:13:14 -05:00
% if request.use_oruga:
<o-icon icon="trash" />
% else:
<i class="fas fa-trash"></i>
% endif
2023-02-01 18:44:55 -06:00
Delete
</a>
2024-04-24 16:13:14 -05:00
</${b}-table-column>
</${b}-table>
2022-08-23 23:27:47 -05:00
<b-modal has-modal-card
:active.sync="backfillTaskShowDialog">
<div class="modal-card">
<header class="modal-card-head">
<p class="modal-card-title">Backfill Task</p>
</header>
<section class="modal-card-body">
2022-11-20 13:58:39 -06:00
<b-field label="Key"
:type="backfillTaskKey ? null : 'is-danger'">
<b-input v-model.trim="backfillTaskKey"
2024-04-26 11:02:22 -05:00
ref="backfillTaskKey"
expanded />
2022-11-20 13:58:39 -06:00
</b-field>
2022-08-23 23:27:47 -05:00
<b-field label="Description"
:type="backfillTaskDescription ? null : 'is-danger'">
<b-input v-model.trim="backfillTaskDescription"
2024-04-26 11:02:22 -05:00
ref="backfillTaskDescription"
expanded />
2022-08-23 23:27:47 -05:00
</b-field>
<b-field label="Script"
:type="backfillTaskScript ? null : 'is-danger'">
2024-04-26 11:02:22 -05:00
<b-input v-model.trim="backfillTaskScript"
expanded />
2022-08-23 23:27:47 -05:00
</b-field>
<b-field grouped>
<b-field label="Orientation">
<b-select v-model="backfillTaskForward">
<option :value="false">Backward</option>
<option :value="true">Forward</option>
</b-select>
</b-field>
<b-field label="Target Date">
<tailbone-datepicker v-model="backfillTaskTargetDate">
</tailbone-datepicker>
</b-field>
</b-field>
<b-field label="Notes">
<b-input v-model.trim="backfillTaskNotes"
2024-04-26 11:02:22 -05:00
type="textarea"
expanded />
2022-08-23 23:27:47 -05:00
</b-field>
</section>
<footer class="modal-card-foot">
<b-button type="is-primary"
icon-pack="fas"
icon-left="save"
@click="backfillTaskSave()"
2022-11-20 13:58:39 -06:00
:disabled="!backfillTaskKey || !backfillTaskDescription || !backfillTaskScript">
2022-08-23 23:27:47 -05:00
Save
</b-button>
<b-button @click="backfillTaskShowDialog = false">
Cancel
</b-button>
</footer>
</div>
</b-modal>
</div>
2022-08-18 15:11:09 -05:00
<h3 class="is-size-3">Luigi Proper</h3>
<div class="block" style="padding-left: 2rem;">
<b-field label="Luigi URL"
message="This should be the URL to Luigi Task Visualiser web user interface."
expanded>
2022-08-23 23:27:47 -05:00
<b-input name="rattail.luigi.url"
v-model="simpleSettings['rattail.luigi.url']"
2024-04-26 11:02:22 -05:00
@input="settingsNeedSaved = true"
expanded>
2022-08-18 15:11:09 -05:00
</b-input>
</b-field>
<b-field label="Supervisor Process Name"
message="This should be the complete name, including group - e.g. luigi:luigid"
expanded>
2022-08-23 23:27:47 -05:00
<b-input name="rattail.luigi.scheduler.supervisor_process_name"
v-model="simpleSettings['rattail.luigi.scheduler.supervisor_process_name']"
2024-04-26 11:02:22 -05:00
@input="settingsNeedSaved = true"
expanded>
2022-08-18 15:11:09 -05:00
</b-input>
</b-field>
<b-field label="Restart Command"
message="This will run as '${system_user}' system user - please configure sudoers as needed. Typical command is like: sudo supervisorctl restart luigi:luigid"
expanded>
2022-08-23 23:27:47 -05:00
<b-input name="rattail.luigi.scheduler.restart_command"
v-model="simpleSettings['rattail.luigi.scheduler.restart_command']"
2024-04-26 11:02:22 -05:00
@input="settingsNeedSaved = true"
expanded>
2022-08-18 15:11:09 -05:00
</b-input>
</b-field>
</div>
</%def>
<%def name="modify_this_page_vars()">
${parent.modify_this_page_vars()}
<script type="text/javascript">
ThisPageData.overnightTasks = ${json.dumps(overnight_tasks)|n}
ThisPageData.overnightTaskShowDialog = false
ThisPageData.overnightTask = null
2022-08-23 23:27:47 -05:00
ThisPageData.overnightTaskCounter = 0
2022-08-18 15:11:09 -05:00
ThisPageData.overnightTaskKey = null
2022-08-23 23:27:47 -05:00
ThisPageData.overnightTaskDescription = null
2022-11-20 19:37:29 -06:00
ThisPageData.overnightTaskModule = null
ThisPageData.overnightTaskClass = null
2022-08-23 23:27:47 -05:00
ThisPageData.overnightTaskScript = null
ThisPageData.overnightTaskNotes = null
2022-08-18 15:11:09 -05:00
ThisPage.methods.overnightTaskCreate = function() {
2022-11-20 13:58:39 -06:00
this.overnightTask = {key: null, isNew: true}
2022-08-18 15:11:09 -05:00
this.overnightTaskKey = null
2022-08-23 23:27:47 -05:00
this.overnightTaskDescription = null
2022-11-20 19:37:29 -06:00
this.overnightTaskModule = null
this.overnightTaskClass = null
2022-08-23 23:27:47 -05:00
this.overnightTaskScript = null
this.overnightTaskNotes = null
2022-08-18 15:11:09 -05:00
this.overnightTaskShowDialog = true
this.$nextTick(() => {
2022-11-20 13:58:39 -06:00
this.$refs.overnightTaskKey.focus()
2022-08-18 15:11:09 -05:00
})
}
2022-08-23 23:27:47 -05:00
ThisPage.methods.overnightTaskEdit = function(task) {
this.overnightTask = task
this.overnightTaskKey = task.key
this.overnightTaskDescription = task.description
2022-11-20 19:37:29 -06:00
this.overnightTaskModule = task.module
this.overnightTaskClass = task.class_name
2022-08-23 23:27:47 -05:00
this.overnightTaskScript = task.script
this.overnightTaskNotes = task.notes
this.overnightTaskShowDialog = true
}
2022-08-18 15:11:09 -05:00
ThisPage.methods.overnightTaskSave = function() {
2022-11-20 13:58:39 -06:00
this.overnightTask.key = this.overnightTaskKey
2022-08-23 23:27:47 -05:00
this.overnightTask.description = this.overnightTaskDescription
2022-11-20 19:37:29 -06:00
this.overnightTask.module = this.overnightTaskModule
this.overnightTask.class_name = this.overnightTaskClass
2022-08-23 23:27:47 -05:00
this.overnightTask.script = this.overnightTaskScript
this.overnightTask.notes = this.overnightTaskNotes
2022-11-20 13:58:39 -06:00
if (this.overnightTask.isNew) {
2022-08-23 23:27:47 -05:00
this.overnightTasks.push(this.overnightTask)
2022-11-20 13:58:39 -06:00
this.overnightTask.isNew = false
2022-08-18 15:11:09 -05:00
}
2022-08-23 23:27:47 -05:00
2022-08-18 15:11:09 -05:00
this.overnightTaskShowDialog = false
this.settingsNeedSaved = true
}
2022-08-23 23:27:47 -05:00
ThisPage.methods.overnightTaskDelete = function(task) {
if (confirm("Really delete this task?")) {
let i = this.overnightTasks.indexOf(task)
this.overnightTasks.splice(i, 1)
this.settingsNeedSaved = true
}
}
ThisPageData.backfillTasks = ${json.dumps(backfill_tasks)|n}
ThisPageData.backfillTaskShowDialog = false
ThisPageData.backfillTask = null
ThisPageData.backfillTaskCounter = 0
ThisPageData.backfillTaskKey = null
ThisPageData.backfillTaskDescription = null
ThisPageData.backfillTaskScript = null
ThisPageData.backfillTaskForward = false
ThisPageData.backfillTaskTargetDate = null
ThisPageData.backfillTaskNotes = null
ThisPage.methods.backfillTaskCreate = function() {
2022-11-20 13:58:39 -06:00
this.backfillTask = {key: null, isNew: true}
this.backfillTaskKey = null
2022-08-23 23:27:47 -05:00
this.backfillTaskDescription = null
this.backfillTaskScript = null
this.backfillTaskForward = false
this.backfillTaskTargetDate = null
this.backfillTaskNotes = null
this.backfillTaskShowDialog = true
this.$nextTick(() => {
2022-11-20 13:58:39 -06:00
this.$refs.backfillTaskKey.focus()
2022-08-23 23:27:47 -05:00
})
}
ThisPage.methods.backfillTaskEdit = function(task) {
this.backfillTask = task
2022-11-20 13:58:39 -06:00
this.backfillTaskKey = task.key
2022-08-23 23:27:47 -05:00
this.backfillTaskDescription = task.description
this.backfillTaskScript = task.script
this.backfillTaskForward = task.forward
this.backfillTaskTargetDate = task.target_date
this.backfillTaskNotes = task.notes
this.backfillTaskShowDialog = true
}
ThisPage.methods.backfillTaskDelete = function(task) {
if (confirm("Really delete this task?")) {
let i = this.backfillTasks.indexOf(task)
this.backfillTasks.splice(i, 1)
this.settingsNeedSaved = true
}
}
ThisPage.methods.backfillTaskSave = function() {
2022-11-20 13:58:39 -06:00
this.backfillTask.key = this.backfillTaskKey
2022-08-23 23:27:47 -05:00
this.backfillTask.description = this.backfillTaskDescription
this.backfillTask.script = this.backfillTaskScript
this.backfillTask.forward = this.backfillTaskForward
this.backfillTask.target_date = this.backfillTaskTargetDate
this.backfillTask.notes = this.backfillTaskNotes
2022-11-20 13:58:39 -06:00
if (this.backfillTask.isNew) {
2022-08-23 23:27:47 -05:00
this.backfillTasks.push(this.backfillTask)
2022-11-20 13:58:39 -06:00
this.backfillTask.isNew = false
2022-08-23 23:27:47 -05:00
}
this.backfillTaskShowDialog = false
this.settingsNeedSaved = true
}
2022-08-18 15:11:09 -05:00
</script>
</%def>
${parent.body()}