chore: rename Schedule integration as Scheduler

This commit is contained in:
Ali BARIN
2022-05-07 21:25:15 +02:00
parent 54152a3564
commit 9d5060f902
10 changed files with 5 additions and 5 deletions

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 24 24"><path fill="#1976d2" d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path><path fill="#1976d2" d="M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z"></path></svg>

After

Width:  |  Height:  |  Size: 345 B

View File

View File

@@ -0,0 +1,18 @@
import Triggers from './triggers';
import {
IService,
IApp,
IJSONObject,
} from '@automatisch/types';
export default class Scheduler implements IService {
triggers: Triggers;
constructor(
appData: IApp,
connectionData: IJSONObject,
parameters: IJSONObject
) {
this.triggers = new Triggers(connectionData, parameters);
}
}

View File

@@ -0,0 +1,606 @@
{
"name": "Scheduler",
"key": "scheduler",
"iconUrl": "{BASE_URL}/apps/scheduler/assets/favicon.svg",
"docUrl": "https://automatisch.io/docs/scheduler",
"primaryColor": "0059F7",
"requiresAuthentication": false,
"triggers": [
{
"name": "Every hour",
"key": "everyHour",
"description": "Triggers every hour.",
"substeps": [
{
"key": "chooseTrigger",
"name": "Set up a trigger",
"arguments": [
{
"label": "Trigger on weekends?",
"key": "triggersOnWeekend",
"type": "dropdown",
"description": "Should this flow trigger on Saturday and Sunday?",
"required": true,
"value": true,
"variables": false,
"options": [
{
"label": "Yes",
"value": true
},
{
"label": "No",
"value": false
}
]
}
]
},
{
"key": "testStep",
"name": "Test trigger"
}
]
},
{
"name": "Every day",
"key": "everyDay",
"description": "Triggers every day.",
"substeps": [
{
"key": "chooseTrigger",
"name": "Set up a trigger",
"arguments": [
{
"label": "Trigger on weekends?",
"key": "triggersOnWeekend",
"type": "dropdown",
"description": "Should this flow trigger on Saturday and Sunday?",
"required": true,
"value": true,
"variables": false,
"options": [
{
"label": "Yes",
"value": true
},
{
"label": "No",
"value": false
}
]
},
{
"label": "Time of day",
"key": "hour",
"type": "dropdown",
"required": true,
"value": null,
"variables": false,
"options": [
{
"label": "00:00",
"value": 0
},
{
"label": "01:00",
"value": 1
},
{
"label": "02:00",
"value": 2
},
{
"label": "03:00",
"value": 3
},
{
"label": "04:00",
"value": 4
},
{
"label": "05:00",
"value": 5
},
{
"label": "06:00",
"value": 6
},
{
"label": "07:00",
"value": 7
},
{
"label": "08:00",
"value": 8
},
{
"label": "09:00",
"value": 9
},
{
"label": "10:00",
"value": 10
},
{
"label": "11:00",
"value": 11
},
{
"label": "12:00",
"value": 12
},
{
"label": "13:00",
"value": 13
},
{
"label": "14:00",
"value": 14
},
{
"label": "15:00",
"value": 15
},
{
"label": "16:00",
"value": 16
},
{
"label": "17:00",
"value": 17
},
{
"label": "18:00",
"value": 18
},
{
"label": "19:00",
"value": 19
},
{
"label": "20:00",
"value": 20
},
{
"label": "21:00",
"value": 21
},
{
"label": "22:00",
"value": 22
},
{
"label": "23:00",
"value": 23
}
]
}
]
},
{
"key": "testStep",
"name": "Test trigger"
}
]
},
{
"name": "Every week",
"key": "everyWeek",
"description": "Triggers every week.",
"substeps": [
{
"key": "chooseTrigger",
"name": "Set up a trigger",
"arguments": [
{
"label": "Day of the week",
"key": "weekday",
"type": "dropdown",
"required": true,
"value": null,
"variables": false,
"options": [
{
"label": "Monday",
"value": 1
},
{
"label": "Tuesday",
"value": 2
},
{
"label": "Wednesday",
"value": 3
},
{
"label": "Thursday",
"value": 4
},
{
"label": "Friday",
"value": 5
},
{
"label": "Saturday",
"value": 6
},
{
"label": "Sunday",
"value": 0
}
]
},
{
"label": "Time of day",
"key": "hour",
"type": "dropdown",
"required": true,
"value": null,
"variables": false,
"options": [
{
"label": "00:00",
"value": 0
},
{
"label": "01:00",
"value": 1
},
{
"label": "02:00",
"value": 2
},
{
"label": "03:00",
"value": 3
},
{
"label": "04:00",
"value": 4
},
{
"label": "05:00",
"value": 5
},
{
"label": "06:00",
"value": 6
},
{
"label": "07:00",
"value": 7
},
{
"label": "08:00",
"value": 8
},
{
"label": "09:00",
"value": 9
},
{
"label": "10:00",
"value": 10
},
{
"label": "11:00",
"value": 11
},
{
"label": "12:00",
"value": 12
},
{
"label": "13:00",
"value": 13
},
{
"label": "14:00",
"value": 14
},
{
"label": "15:00",
"value": 15
},
{
"label": "16:00",
"value": 16
},
{
"label": "17:00",
"value": 17
},
{
"label": "18:00",
"value": 18
},
{
"label": "19:00",
"value": 19
},
{
"label": "20:00",
"value": 20
},
{
"label": "21:00",
"value": 21
},
{
"label": "22:00",
"value": 22
},
{
"label": "23:00",
"value": 23
}
]
}
]
},
{
"key": "testStep",
"name": "Test trigger"
}
]
},
{
"name": "Every month",
"key": "everyMonth",
"description": "Triggers every month.",
"substeps": [
{
"key": "chooseTrigger",
"name": "Set up a trigger",
"arguments": [
{
"label": "Day of the month",
"key": "day",
"type": "dropdown",
"required": true,
"value": null,
"variables": false,
"options": [
{
"label": 1,
"value": 1
},
{
"label": 2,
"value": 2
},
{
"label": 3,
"value": 3
},
{
"label": 4,
"value": 4
},
{
"label": 5,
"value": 5
},
{
"label": 6,
"value": 6
},
{
"label": 7,
"value": 7
},
{
"label": 8,
"value": 8
},
{
"label": 9,
"value": 9
},
{
"label": 10,
"value": 10
},
{
"label": 11,
"value": 11
},
{
"label": 12,
"value": 12
},
{
"label": 13,
"value": 13
},
{
"label": 14,
"value": 14
},
{
"label": 15,
"value": 15
},
{
"label": 16,
"value": 16
},
{
"label": 17,
"value": 17
},
{
"label": 18,
"value": 18
},
{
"label": 19,
"value": 19
},
{
"label": 20,
"value": 20
},
{
"label": 21,
"value": 21
},
{
"label": 22,
"value": 22
},
{
"label": 23,
"value": 23
},
{
"label": 24,
"value": 24
},
{
"label": 25,
"value": 25
},
{
"label": 26,
"value": 26
},
{
"label": 27,
"value": 27
},
{
"label": 28,
"value": 28
},
{
"label": 29,
"value": 29
},
{
"label": 30,
"value": 30
},
{
"label": 31,
"value": 31
}
]
},
{
"label": "Time of day",
"key": "hour",
"type": "dropdown",
"required": true,
"value": null,
"variables": false,
"options": [
{
"label": "00:00",
"value": 0
},
{
"label": "01:00",
"value": 1
},
{
"label": "02:00",
"value": 2
},
{
"label": "03:00",
"value": 3
},
{
"label": "04:00",
"value": 4
},
{
"label": "05:00",
"value": 5
},
{
"label": "06:00",
"value": 6
},
{
"label": "07:00",
"value": 7
},
{
"label": "08:00",
"value": 8
},
{
"label": "09:00",
"value": 9
},
{
"label": "10:00",
"value": 10
},
{
"label": "11:00",
"value": 11
},
{
"label": "12:00",
"value": 12
},
{
"label": "13:00",
"value": 13
},
{
"label": "14:00",
"value": 14
},
{
"label": "15:00",
"value": 15
},
{
"label": "16:00",
"value": 16
},
{
"label": "17:00",
"value": 17
},
{
"label": "18:00",
"value": 18
},
{
"label": "19:00",
"value": 19
},
{
"label": "20:00",
"value": 20
},
{
"label": "21:00",
"value": 21
},
{
"label": "22:00",
"value": 22
},
{
"label": "23:00",
"value": 23
}
]
}
]
},
{
"key": "testStep",
"name": "Test trigger"
}
]
}
]
}

View File

@@ -0,0 +1,19 @@
import { IJSONObject } from '@automatisch/types';
import EveryHour from './triggers/every-hour';
import EveryDay from './triggers/every-day';
import EveryWeek from './triggers/every-week';
import EveryMonth from './triggers/every-month';
export default class Triggers {
everyHour: EveryHour;
everyDay: EveryDay;
everyWeek: EveryWeek;
everyMonth: EveryMonth;
constructor(connectionData: IJSONObject, parameters: IJSONObject) {
this.everyHour = new EveryHour(parameters);
this.everyDay = new EveryDay(parameters);
this.everyWeek = new EveryWeek(parameters);
this.everyMonth = new EveryMonth(parameters);
}
}

View File

@@ -0,0 +1,40 @@
import { DateTime } from 'luxon';
import type { IJSONObject, IJSONValue, ITrigger } from '@automatisch/types';
import { cronTimes, getNextCronDateTime, getDateTimeObjectRepresentation } from '../utils';
export default class EveryDay implements ITrigger {
triggersOnWeekend?: boolean;
hour?: number;
constructor(parameters: IJSONObject) {
if (parameters.triggersOnWeekend) {
this.triggersOnWeekend = parameters.triggersOnWeekend as boolean;
}
if (parameters.hour) {
this.hour = parameters.hour as number;
}
}
get interval() {
if (this.triggersOnWeekend) {
return cronTimes.everyDayAt(this.hour);
}
return cronTimes.everyDayExcludingWeekendsAt(this.hour);
}
async run(startDateTime: Date) {
const dateTime = DateTime.fromJSDate(startDateTime);
const dateTimeObjectRepresentation = getDateTimeObjectRepresentation(dateTime) as IJSONValue;
return [dateTimeObjectRepresentation] as IJSONValue;
}
async testRun() {
const nextCronDateTime = getNextCronDateTime(this.interval);
const dateTimeObjectRepresentation = getDateTimeObjectRepresentation(nextCronDateTime) as IJSONValue;
return [dateTimeObjectRepresentation] as IJSONValue;
}
}

View File

@@ -0,0 +1,35 @@
import { DateTime } from 'luxon';
import type { IJSONObject, IJSONValue, ITrigger } from '@automatisch/types';
import { cronTimes, getNextCronDateTime, getDateTimeObjectRepresentation } from '../utils';
export default class EveryHour implements ITrigger {
triggersOnWeekend?: boolean | string;
constructor(parameters: IJSONObject) {
if (parameters.triggersOnWeekend) {
this.triggersOnWeekend = parameters.triggersOnWeekend as string;
}
}
get interval() {
if (this.triggersOnWeekend) {
return cronTimes.everyHour;
}
return cronTimes.everyHourExcludingWeekends;
}
async run(startDateTime: Date) {
const dateTime = DateTime.fromJSDate(startDateTime);
const dateTimeObjectRepresentation = getDateTimeObjectRepresentation(dateTime) as IJSONValue;
return [dateTimeObjectRepresentation] as IJSONValue;
}
async testRun() {
const nextCronDateTime = getNextCronDateTime(this.interval);
const dateTimeObjectRepresentation = getDateTimeObjectRepresentation(nextCronDateTime) as IJSONValue;
return [dateTimeObjectRepresentation] as IJSONValue;
}
}

View File

@@ -0,0 +1,36 @@
import { DateTime } from 'luxon';
import type { IJSONObject, IJSONValue, ITrigger } from '@automatisch/types';
import { cronTimes, getNextCronDateTime, getDateTimeObjectRepresentation } from '../utils';
export default class EveryMonth implements ITrigger {
day?: number;
hour?: number;
constructor(parameters: IJSONObject) {
if (parameters.day) {
this.day = parameters.day as number;
}
if (parameters.hour) {
this.hour = parameters.hour as number;
}
}
get interval() {
return cronTimes.everyMonthOnAndAt(this.day, this.hour);
}
async run(startDateTime: Date) {
const dateTime = DateTime.fromJSDate(startDateTime);
const dateTimeObjectRepresentation = getDateTimeObjectRepresentation(dateTime) as IJSONValue;
return [dateTimeObjectRepresentation] as IJSONValue;
}
async testRun() {
const nextCronDateTime = getNextCronDateTime(this.interval);
const dateTimeObjectRepresentation = getDateTimeObjectRepresentation(nextCronDateTime) as IJSONValue;
return [dateTimeObjectRepresentation] as IJSONValue;
}
}

View File

@@ -0,0 +1,36 @@
import { DateTime } from 'luxon';
import type { IJSONObject, IJSONValue, ITrigger } from '@automatisch/types';
import { cronTimes, getNextCronDateTime, getDateTimeObjectRepresentation } from '../utils';
export default class EveryWeek implements ITrigger {
weekday?: number;
hour?: number;
constructor(parameters: IJSONObject) {
if (parameters.weekday) {
this.weekday = parameters.weekday as number;
}
if (parameters.hour) {
this.hour = parameters.hour as number;
}
}
get interval() {
return cronTimes.everyWeekOnAndAt(this.weekday, this.hour);
}
async run(startDateTime: Date) {
const dateTime = DateTime.fromJSDate(startDateTime);
const dateTimeObjectRepresentation = getDateTimeObjectRepresentation(dateTime) as IJSONValue;
return [dateTimeObjectRepresentation] as IJSONValue;
}
async testRun() {
const nextCronDateTime = getNextCronDateTime(this.interval);
const dateTimeObjectRepresentation = getDateTimeObjectRepresentation(nextCronDateTime) as IJSONValue;
return [dateTimeObjectRepresentation] as IJSONValue;
}
}

View File

@@ -0,0 +1,32 @@
import { DateTime } from 'luxon';
import cronParser from 'cron-parser';
export const cronTimes = {
everyHour: '0 * * * *',
everyHourExcludingWeekends: '0 * * * 1-5',
everyDayAt: (hour: number) => `0 ${hour} * * *`,
everyDayExcludingWeekendsAt: (hour: number) => `0 ${hour} * * 1-5`,
everyWeekOnAndAt: (weekday: number, hour: number) => `0 ${hour} * * ${weekday}`,
everyMonthOnAndAt: (day: number, hour: number) => `0 ${hour} ${day} * *`,
};
export function getNextCronDateTime(cronString: string) {
const cronDate = cronParser.parseExpression(cronString);
const matchingNextCronDateTime = cronDate.next();
const matchingNextDateTime = DateTime.fromJSDate(matchingNextCronDateTime.toDate());
return matchingNextDateTime;
};
export function getDateTimeObjectRepresentation(dateTime: DateTime) {
const defaults = dateTime.toObject();
return {
...defaults,
ISO_date_time: dateTime.toISO(),
pretty_date: dateTime.toLocaleString(DateTime.DATE_MED),
pretty_time: dateTime.toLocaleString(DateTime.TIME_WITH_SECONDS),
pretty_day_of_week: dateTime.toFormat('cccc'),
day_of_week: dateTime.weekday,
};
}