61 lines
1.7 KiB
JavaScript
61 lines
1.7 KiB
JavaScript
/* triggers.js — HTTP и Cron триггеры */
|
|
|
|
function httpTriggerByFn(fnName) {
|
|
return (S.httpTriggers || []).find(function (t) {
|
|
return t.spec && t.spec.functionref && t.spec.functionref.name === fnName;
|
|
});
|
|
}
|
|
|
|
function timeTriggerByFn(fnName) {
|
|
return (S.timeTriggers || []).find(function (t) {
|
|
return t.spec && t.spec.functionref && t.spec.functionref.name === fnName;
|
|
});
|
|
}
|
|
|
|
function toggleScheduleFields(prefix) {
|
|
var enabled = !!document.getElementById(prefix + '-schedule-enabled').checked;
|
|
var cronEl = document.getElementById(prefix + '-cron');
|
|
cronEl.disabled = !enabled;
|
|
if (enabled && !cronEl.value.trim()) {
|
|
cronEl.value = '*/5 * * * *';
|
|
}
|
|
}
|
|
|
|
function schedulePayload(prefix) {
|
|
return {
|
|
enabled: !!document.getElementById(prefix + '-schedule-enabled').checked,
|
|
cron: (document.getElementById(prefix + '-cron').value || '').trim()
|
|
};
|
|
}
|
|
|
|
async function syncScheduleForFunction(name, prefix) {
|
|
var schedule = schedulePayload(prefix);
|
|
var existing = timeTriggerByFn(name);
|
|
var existingName = (existing && existing.metadata && existing.metadata.name) || name;
|
|
|
|
if (!schedule.enabled) {
|
|
if (existing) {
|
|
await requestJSON(API_BASE + '/timetriggers/' + encodeURIComponent(existingName), 'DELETE');
|
|
}
|
|
return;
|
|
}
|
|
|
|
if (!schedule.cron) {
|
|
throw new Error('cron is required');
|
|
}
|
|
|
|
var payload = {
|
|
name: existingName,
|
|
functionName: name,
|
|
cron: schedule.cron,
|
|
method: 'POST',
|
|
subpath: '/'
|
|
};
|
|
|
|
if (existing) {
|
|
await requestJSON(API_BASE + '/timetriggers/' + encodeURIComponent(existingName), 'PUT', payload);
|
|
} else {
|
|
await requestJSON(API_BASE + '/timetriggers', 'POST', payload);
|
|
}
|
|
}
|