@olympeio-extensions/scheduler 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/import/dcInitConfig.json +1 -0
  2. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/.Scheduler.newInst.json +1 -0
  3. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/.Scheduler.newRel.json +1 -0
  4. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/Create_Scheduled_Task.newInst.json +1 -0
  5. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/Create_Scheduled_Task.newRel.json +1 -0
  6. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/Create_Scheduled_Task.updateInst.json +1 -0
  7. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/Create_Scheduled_Task_2.newInst.json +1 -0
  8. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/Create_Scheduled_Task_2.newRel.json +1 -0
  9. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/Find_Scheduled_Tasks.newInst.json +1 -0
  10. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/Find_Scheduled_Tasks.newRel.json +1 -0
  11. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/Find_Scheduled_Tasks.updateInst.json +1 -0
  12. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/Lambda_Scheduled_Task.newInst.json +1 -0
  13. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/Lambda_Scheduled_Task.newRel.json +1 -0
  14. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/Scheduled_Task.newInst.json +1 -0
  15. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/Scheduled_Task.newRel.json +1 -0
  16. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/Scheduled_Tasks_List.newInst.json +1 -0
  17. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/Scheduled_Tasks_List.newRel.json +1 -0
  18. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/Scheduled_Tasks_List.updateInst.json +1 -0
  19. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/Scheduler_Engine.newInst.json +1 -0
  20. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/Scheduler_Engine.newRel.json +1 -0
  21. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/Scheduler_Service.newInst.json +1 -0
  22. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/Scheduler_Service.newRel.json +1 -0
  23. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/Scheduler_Service.updateInst.json +1 -0
  24. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/Stop_Scheduled_Task.newInst.json +1 -0
  25. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/Stop_Scheduled_Task.newRel.json +1 -0
  26. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/test/.test.newInst.json +1 -0
  27. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/test/.test.newRel.json +1 -0
  28. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/test/Attach_Data_To_Project.newInst.json +1 -0
  29. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/test/Attach_Data_To_Project.newRel.json +1 -0
  30. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/test/Scheduler_test.newInst.json +1 -0
  31. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/test/Scheduler_test.newRel.json +1 -0
  32. package/import/extensions.scheduler/Home/Olympe/Extensions/Others/Scheduler/test/Scheduler_test.updateInst.json +1 -0
  33. package/main-node.js +330 -0
  34. package/main-node.js.map +1 -0
  35. package/main-web.js +330 -0
  36. package/main-web.js.map +1 -0
  37. package/package.json +1 -0
package/main-web.js ADDED
@@ -0,0 +1,330 @@
1
+ (function webpackUniversalModuleDefinition(root, factory) {
2
+ if(typeof exports === 'object' && typeof module === 'object')
3
+ module.exports = factory(require("olympe"));
4
+ else if(typeof define === 'function' && define.amd)
5
+ define(["olympe"], factory);
6
+ else if(typeof exports === 'object')
7
+ exports["@olympeio-extensions/scheduler"] = factory(require("olympe"));
8
+ else
9
+ root["@olympeio-extensions/scheduler"] = factory(root["olympe"]);
10
+ })(this, (__WEBPACK_EXTERNAL_MODULE_olympe__) => {
11
+ return /******/ (() => { // webpackBootstrap
12
+ /******/ "use strict";
13
+ /******/ var __webpack_modules__ = ({
14
+
15
+ /***/ "./src/common/ScheduledTask.js":
16
+ /*!*************************************!*\
17
+ !*** ./src/common/ScheduledTask.js ***!
18
+ \*************************************/
19
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
20
+
21
+ __webpack_require__.r(__webpack_exports__);
22
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
23
+ /* harmony export */ "default": () => (/* binding */ ScheduledTask)
24
+ /* harmony export */ });
25
+ /* harmony import */ var olympe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! olympe */ "olympe");
26
+ /* harmony import */ var olympe__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(olympe__WEBPACK_IMPORTED_MODULE_0__);
27
+
28
+
29
+
30
+ /**
31
+ * @extends {Sync}
32
+ */
33
+ class ScheduledTask extends olympe__WEBPACK_IMPORTED_MODULE_0__.Sync {
34
+
35
+ /**
36
+ * @return {string}
37
+ */
38
+ getLambdaTag() {
39
+ return this.getProperty(ScheduledTask.lambdaTagProp);
40
+ }
41
+
42
+ /**
43
+ * @return {Date}
44
+ */
45
+ getDate() {
46
+ return this.getProperty(ScheduledTask.dateProp);
47
+ }
48
+
49
+ /**
50
+ * @return {string}
51
+ */
52
+ getCron() {
53
+ return this.getProperty(ScheduledTask.cronProp);
54
+ }
55
+
56
+ /**
57
+ * @return {Sync}
58
+ */
59
+ getData() {
60
+ const dataTag = olympe__WEBPACK_IMPORTED_MODULE_0__.DBView.get().getUniqueRelated(this.getTag(), ScheduledTask.dataRel);
61
+ return dataTag !== null ? olympe__WEBPACK_IMPORTED_MODULE_0__.Sync.getInstance(dataTag) : null;
62
+ }
63
+
64
+ }
65
+
66
+ // Hardcoded tags
67
+ ScheduledTask.entry = (0,olympe__WEBPACK_IMPORTED_MODULE_0__.registerSync)('017f4095855bdedbd48d', ScheduledTask);
68
+ ScheduledTask.lambdaTagProp = '017f4097710c22367bf1';
69
+ ScheduledTask.dateProp = '017f4095ffeba49740dc';
70
+ ScheduledTask.cronProp = '017f4095c636fa2e3aff';
71
+ ScheduledTask.dataRel = ScheduledTask.entry.addRelation('017f4097c7f6b5bc1cd7', olympe__WEBPACK_IMPORTED_MODULE_0__.Direction.DESTINATION);
72
+
73
+
74
+
75
+ /***/ }),
76
+
77
+ /***/ "./src/common/SchedulerEngine.js":
78
+ /*!***************************************!*\
79
+ !*** ./src/common/SchedulerEngine.js ***!
80
+ \***************************************/
81
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
82
+
83
+ __webpack_require__.r(__webpack_exports__);
84
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
85
+ /* harmony export */ "default": () => (/* binding */ SchedulerEngine)
86
+ /* harmony export */ });
87
+ /* harmony import */ var olympe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! olympe */ "olympe");
88
+ /* harmony import */ var olympe__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(olympe__WEBPACK_IMPORTED_MODULE_0__);
89
+ /* harmony import */ var cron__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! cron */ "cron");
90
+ /* harmony import */ var cron__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(cron__WEBPACK_IMPORTED_MODULE_1__);
91
+ /* harmony import */ var _ScheduledTask__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ScheduledTask */ "./src/common/ScheduledTask.js");
92
+ /* harmony import */ var _olympeio_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @olympeio/core */ "@olympeio/core");
93
+ /* harmony import */ var _olympeio_core__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_olympeio_core__WEBPACK_IMPORTED_MODULE_3__);
94
+
95
+
96
+
97
+
98
+
99
+ class SchedulerEngine extends olympe__WEBPACK_IMPORTED_MODULE_0__.ActionBrick {
100
+
101
+ /**
102
+ * @override
103
+ */
104
+ init($) {
105
+ this.logger = (0,_olympeio_core__WEBPACK_IMPORTED_MODULE_3__.getLogger)('SchedulerEngine');
106
+ }
107
+
108
+ /**
109
+ * @override
110
+ * @protected
111
+ * @param {!BrickContext} $
112
+ * @param {!Array} inputs
113
+ * @param {function()} forwardEvent
114
+ */
115
+ update($, inputs, [forwardEvent]) {
116
+
117
+ // subscribe to all scheduled tasks
118
+ olympe__WEBPACK_IMPORTED_MODULE_0__.CloudObject.getInstancesOf(_ScheduledTask__WEBPACK_IMPORTED_MODULE_2__["default"]).forEach(task => {
119
+ this.logger.debug(`Handle task ${task.getTag()}`);
120
+
121
+ task = /** @type {ScheduledTask} */(task);
122
+ const cron = task.getCron();
123
+ const date = task.getDate();
124
+
125
+ // safety checks that necessary data is provided
126
+ if(cron !== null && date !== null) {
127
+ this.logger.warn('Both cron string and date are defined. Running task at given date is ignored.');
128
+ } else if(cron === null && date === null) {
129
+ this.logger.error(`Task ${task.getTag()} has no cron or date defined.`);
130
+ this.deleteTask(task);
131
+ return;
132
+ }
133
+ this.logger.info(`Schedule task ${task.getTag()} for ${cron || date}`);
134
+
135
+ // function run everytime the cron applies
136
+ let job;
137
+ const onTick = () => {
138
+ // in case task was canceled by user (=deleted), do not run
139
+ if(!olympe__WEBPACK_IMPORTED_MODULE_0__.DBView.get().exist(task)) {
140
+ this.logger.info(`Task ${task.getTag()} was deleted outside from this Engine. Abort its execution`);
141
+ job.stop();
142
+ return;
143
+ }
144
+
145
+ this.logger.info(`Running Task ${task.getTag()}`);
146
+ try {
147
+ this.runLambda($, task.getLambdaTag(), task.getData());
148
+ }
149
+ catch(e) {
150
+ this.logger.error(`Running Task ${task.getTag()} caused an error:\n${e.message}`);
151
+ }
152
+
153
+ // in case job was run at a specific date only, we can delete it
154
+ if(date !== null && cron === null) {
155
+ this.deleteTask(task);
156
+ }
157
+ };
158
+
159
+ // start the cron
160
+ try {
161
+ job = new cron__WEBPACK_IMPORTED_MODULE_1__.CronJob(cron || date, onTick);
162
+ job.start();
163
+ } catch (e) {
164
+ this.logger.error(`Scheduling Task ${task.getTag()} caused an error:\n${e.message}`);
165
+ this.deleteTask(task);
166
+ }
167
+
168
+ });
169
+
170
+ forwardEvent();
171
+ }
172
+
173
+ /**
174
+ * @param {BrickContext} $
175
+ * @param {string} lambdaCallTag
176
+ * @param {CloudObject} data
177
+ */
178
+ runLambda($, lambdaCallTag, data) {
179
+ const lambdaFunction = /** @type {Brick} */ olympe__WEBPACK_IMPORTED_MODULE_0__.CloudObject.get(lambdaCallTag);
180
+ const [startInput, dataInput] = lambdaFunction.getInputs();
181
+ const [end] = lambdaFunction.getOutputs();
182
+ const lambdaContext = $.runner(lambdaFunction);
183
+ lambdaContext.set(dataInput, data);
184
+ lambdaContext.trigger(startInput);
185
+ lambdaContext.waitFor(end).finally(() => {
186
+ lambdaContext.destroy();
187
+ });
188
+ }
189
+
190
+ /**
191
+ * @private
192
+ * @param {ScheduledTask} task
193
+ */
194
+ deleteTask(task) {
195
+ this.logger.debug(`Delete Task ${task.getTag()}`);
196
+ const transaction = new olympe__WEBPACK_IMPORTED_MODULE_0__.Transaction();
197
+ transaction.delete(task);
198
+ transaction.execute();
199
+ }
200
+ }
201
+
202
+ (0,olympe__WEBPACK_IMPORTED_MODULE_0__.registerBrick)('017f40bd1c0e9f295dfc', SchedulerEngine);
203
+
204
+
205
+ /***/ }),
206
+
207
+ /***/ "@olympeio/core":
208
+ /*!*********************************!*\
209
+ !*** external "@olympeio/core" ***!
210
+ \*********************************/
211
+ /***/ ((module) => {
212
+
213
+ module.exports = require("@olympeio/core");
214
+
215
+ /***/ }),
216
+
217
+ /***/ "cron":
218
+ /*!***********************!*\
219
+ !*** external "cron" ***!
220
+ \***********************/
221
+ /***/ ((module) => {
222
+
223
+ module.exports = require("cron");
224
+
225
+ /***/ }),
226
+
227
+ /***/ "olympe":
228
+ /*!*************************!*\
229
+ !*** external "olympe" ***!
230
+ \*************************/
231
+ /***/ ((module) => {
232
+
233
+ module.exports = __WEBPACK_EXTERNAL_MODULE_olympe__;
234
+
235
+ /***/ })
236
+
237
+ /******/ });
238
+ /************************************************************************/
239
+ /******/ // The module cache
240
+ /******/ var __webpack_module_cache__ = {};
241
+ /******/
242
+ /******/ // The require function
243
+ /******/ function __webpack_require__(moduleId) {
244
+ /******/ // Check if module is in cache
245
+ /******/ var cachedModule = __webpack_module_cache__[moduleId];
246
+ /******/ if (cachedModule !== undefined) {
247
+ /******/ return cachedModule.exports;
248
+ /******/ }
249
+ /******/ // Create a new module (and put it into the cache)
250
+ /******/ var module = __webpack_module_cache__[moduleId] = {
251
+ /******/ // no module.id needed
252
+ /******/ // no module.loaded needed
253
+ /******/ exports: {}
254
+ /******/ };
255
+ /******/
256
+ /******/ // Execute the module function
257
+ /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
258
+ /******/
259
+ /******/ // Return the exports of the module
260
+ /******/ return module.exports;
261
+ /******/ }
262
+ /******/
263
+ /************************************************************************/
264
+ /******/ /* webpack/runtime/compat get default export */
265
+ /******/ (() => {
266
+ /******/ // getDefaultExport function for compatibility with non-harmony modules
267
+ /******/ __webpack_require__.n = (module) => {
268
+ /******/ var getter = module && module.__esModule ?
269
+ /******/ () => (module['default']) :
270
+ /******/ () => (module);
271
+ /******/ __webpack_require__.d(getter, { a: getter });
272
+ /******/ return getter;
273
+ /******/ };
274
+ /******/ })();
275
+ /******/
276
+ /******/ /* webpack/runtime/define property getters */
277
+ /******/ (() => {
278
+ /******/ // define getter functions for harmony exports
279
+ /******/ __webpack_require__.d = (exports, definition) => {
280
+ /******/ for(var key in definition) {
281
+ /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
282
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
283
+ /******/ }
284
+ /******/ }
285
+ /******/ };
286
+ /******/ })();
287
+ /******/
288
+ /******/ /* webpack/runtime/hasOwnProperty shorthand */
289
+ /******/ (() => {
290
+ /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
291
+ /******/ })();
292
+ /******/
293
+ /******/ /* webpack/runtime/make namespace object */
294
+ /******/ (() => {
295
+ /******/ // define __esModule on exports
296
+ /******/ __webpack_require__.r = (exports) => {
297
+ /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
298
+ /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
299
+ /******/ }
300
+ /******/ Object.defineProperty(exports, '__esModule', { value: true });
301
+ /******/ };
302
+ /******/ })();
303
+ /******/
304
+ /************************************************************************/
305
+ var __webpack_exports__ = {};
306
+ // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
307
+ (() => {
308
+ /*!*************************!*\
309
+ !*** ./src/main-web.js ***!
310
+ \*************************/
311
+ __webpack_require__.r(__webpack_exports__);
312
+ /* harmony import */ var olympe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! olympe */ "olympe");
313
+ /* harmony import */ var olympe__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(olympe__WEBPACK_IMPORTED_MODULE_0__);
314
+ /* harmony import */ var _common_ScheduledTask_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common/ScheduledTask.js */ "./src/common/ScheduledTask.js");
315
+ /* harmony import */ var _common_SchedulerEngine_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./common/SchedulerEngine.js */ "./src/common/SchedulerEngine.js");
316
+ // Import Olympe runtime or DRAW
317
+
318
+
319
+ // Import project bricks (we use webpack-import-glob-loader to import all bricks)
320
+
321
+ ;
322
+
323
+
324
+ })();
325
+
326
+ /******/ return __webpack_exports__;
327
+ /******/ })()
328
+ ;
329
+ });
330
+ //# sourceMappingURL=main-web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main-web.js","mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;;;;;;;;;;;;ACT6D;;AAE7D;AACA,aAAa;AACb;AACe,4BAA4B,wCAAI;;AAE/C;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA,wBAAwB,8CAAU;AAClC,kCAAkC,oDAAgB;AAClD;;AAEA;;AAEA;AACA,sBAAsB,oDAAY;AAClC;AACA;AACA;AACA,gFAAgF,yDAAqB;;;;;;;;;;;;;;;;;;;;;;;AC5CI;AAC5E;AACe;AACH;;AAE1B,8BAA8B,+CAAW;;AAExD;AACA;AACA;AACA;AACA,sBAAsB,yDAAS;AAC/B;;AAEA;AACA;AACA;AACA,eAAe,eAAe;AAC9B,eAAe,QAAQ;AACvB,eAAe,YAAY;AAC3B;AACA;;AAEA;AACA,QAAQ,8DAA0B,CAAC,sDAAa;AAChD,6CAA6C,cAAc;;AAE3D,8BAA8B,eAAe;AAC7C;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd,0CAA0C,eAAe;AACzD;AACA;AACA;AACA,8CAA8C,eAAe,MAAM,aAAa;;AAEhF;AACA;AACA;AACA;AACA,oBAAoB,8CAAU;AAC9B,6CAA6C,eAAe;AAC5D;AACA;AACA;;AAEA,iDAAiD,cAAc;AAC/D;AACA;AACA;AACA;AACA,sDAAsD,eAAe,oBAAoB,UAAU;AACnG;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B,yCAAO;AACjC;AACA,cAAc;AACd,qDAAqD,eAAe,oBAAoB,UAAU;AAClG;AACA;;AAEA,SAAS;;AAET;AACA;;AAEA;AACA,eAAe,cAAc;AAC7B,eAAe,QAAQ;AACvB,eAAe,aAAa;AAC5B;AACA;AACA,0CAA0C,OAAO,GAAG,mDAAe;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA,eAAe,eAAe;AAC9B;AACA;AACA,yCAAyC,cAAc;AACvD,gCAAgC,+CAAW;AAC3C;AACA;AACA;AACA;;AAEA,qDAAa;;;;;;;;;;;AC5Gb;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;UCAA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;ACNA;AACgB;;AAEhB;AACmC,CAAsC;AACzE","sources":["webpack://@olympeio-extensions/scheduler/webpack/universalModuleDefinition","webpack://@olympeio-extensions/scheduler/./src/common/ScheduledTask.js","webpack://@olympeio-extensions/scheduler/./src/common/SchedulerEngine.js","webpack://@olympeio-extensions/scheduler/external commonjs \"@olympeio/core\"","webpack://@olympeio-extensions/scheduler/external commonjs \"cron\"","webpack://@olympeio-extensions/scheduler/external umd \"olympe\"","webpack://@olympeio-extensions/scheduler/webpack/bootstrap","webpack://@olympeio-extensions/scheduler/webpack/runtime/compat get default export","webpack://@olympeio-extensions/scheduler/webpack/runtime/define property getters","webpack://@olympeio-extensions/scheduler/webpack/runtime/hasOwnProperty shorthand","webpack://@olympeio-extensions/scheduler/webpack/runtime/make namespace object","webpack://@olympeio-extensions/scheduler/./src/main-web.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"olympe\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"olympe\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"@olympeio-extensions/scheduler\"] = factory(require(\"olympe\"));\n\telse\n\t\troot[\"@olympeio-extensions/scheduler\"] = factory(root[\"olympe\"]);\n})(this, (__WEBPACK_EXTERNAL_MODULE_olympe__) => {\nreturn ","\nimport {Sync, DBView, registerSync, Direction} from 'olympe';\n\n/**\n * @extends {Sync}\n */\nexport default class ScheduledTask extends Sync {\n\n /**\n * @return {string}\n */\n getLambdaTag() {\n return this.getProperty(ScheduledTask.lambdaTagProp);\n }\n\n /**\n * @return {Date}\n */\n getDate() {\n return this.getProperty(ScheduledTask.dateProp);\n }\n\n /**\n * @return {string}\n */\n getCron() {\n return this.getProperty(ScheduledTask.cronProp);\n }\n\n /**\n * @return {Sync}\n */\n getData() {\n const dataTag = DBView.get().getUniqueRelated(this.getTag(), ScheduledTask.dataRel);\n return dataTag !== null ? Sync.getInstance(dataTag) : null;\n }\n\n}\n\n// Hardcoded tags\nScheduledTask.entry = registerSync('017f4095855bdedbd48d', ScheduledTask);\nScheduledTask.lambdaTagProp = '017f4097710c22367bf1';\nScheduledTask.dateProp = '017f4095ffeba49740dc';\nScheduledTask.cronProp = '017f4095c636fa2e3aff';\nScheduledTask.dataRel = ScheduledTask.entry.addRelation('017f4097c7f6b5bc1cd7', Direction.DESTINATION);\n\n","import {ActionBrick, registerBrick, CloudObject, BrickContext, Brick, Transaction, DBView} from 'olympe';\nimport {CronJob} from 'cron';\nimport ScheduledTask from './ScheduledTask';\nimport {getLogger} from '@olympeio/core';\n\nexport default class SchedulerEngine extends ActionBrick {\n\n /**\n * @override\n */\n init($) {\n this.logger = getLogger('SchedulerEngine');\n }\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!Array} inputs\n * @param {function()} forwardEvent\n */\n update($, inputs, [forwardEvent]) {\n\n // subscribe to all scheduled tasks\n CloudObject.getInstancesOf(ScheduledTask).forEach(task => {\n this.logger.debug(`Handle task ${task.getTag()}`);\n\n task = /** @type {ScheduledTask} */(task);\n const cron = task.getCron();\n const date = task.getDate();\n\n // safety checks that necessary data is provided\n if(cron !== null && date !== null) {\n this.logger.warn('Both cron string and date are defined. Running task at given date is ignored.');\n } else if(cron === null && date === null) {\n this.logger.error(`Task ${task.getTag()} has no cron or date defined.`);\n this.deleteTask(task);\n return;\n }\n this.logger.info(`Schedule task ${task.getTag()} for ${cron || date}`);\n\n // function run everytime the cron applies\n let job;\n const onTick = () => {\n // in case task was canceled by user (=deleted), do not run\n if(!DBView.get().exist(task)) {\n this.logger.info(`Task ${task.getTag()} was deleted outside from this Engine. Abort its execution`);\n job.stop();\n return;\n }\n\n this.logger.info(`Running Task ${task.getTag()}`);\n try {\n this.runLambda($, task.getLambdaTag(), task.getData());\n }\n catch(e) {\n this.logger.error(`Running Task ${task.getTag()} caused an error:\\n${e.message}`);\n }\n\n // in case job was run at a specific date only, we can delete it\n if(date !== null && cron === null) {\n this.deleteTask(task);\n }\n };\n\n // start the cron\n try {\n job = new CronJob(cron || date, onTick);\n job.start();\n } catch (e) {\n this.logger.error(`Scheduling Task ${task.getTag()} caused an error:\\n${e.message}`);\n this.deleteTask(task);\n }\n\n });\n\n forwardEvent();\n }\n\n /**\n * @param {BrickContext} $\n * @param {string} lambdaCallTag\n * @param {CloudObject} data\n */\n runLambda($, lambdaCallTag, data) {\n const lambdaFunction = /** @type {Brick} */ CloudObject.get(lambdaCallTag);\n const [startInput, dataInput] = lambdaFunction.getInputs();\n const [end] = lambdaFunction.getOutputs();\n const lambdaContext = $.runner(lambdaFunction);\n lambdaContext.set(dataInput, data);\n lambdaContext.trigger(startInput);\n lambdaContext.waitFor(end).finally(() => {\n lambdaContext.destroy();\n });\n }\n\n /**\n * @private\n * @param {ScheduledTask} task\n */\n deleteTask(task) {\n this.logger.debug(`Delete Task ${task.getTag()}`);\n const transaction = new Transaction();\n transaction.delete(task);\n transaction.execute();\n }\n}\n\nregisterBrick('017f40bd1c0e9f295dfc', SchedulerEngine);\n","module.exports = require(\"@olympeio/core\");","module.exports = require(\"cron\");","module.exports = __WEBPACK_EXTERNAL_MODULE_olympe__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// Import Olympe runtime or DRAW\nimport 'olympe';\n\n// Import project bricks (we use webpack-import-glob-loader to import all bricks)\nimport './common/ScheduledTask.js'; import './common/SchedulerEngine.js';\n;\n\n"],"names":[],"sourceRoot":""}
package/package.json ADDED
@@ -0,0 +1 @@
1
+ {"name":"@olympeio-extensions/scheduler","version":"2.5.0","main":"main-node.js","browser":"main-web.js","dependencies":{"@olympeio/core":"2.5.0","@olympeio/runtime-web":"~9.5.0","@olympeio/runtime-node":"~9.5.0","cron":"^1.8.2"},"dcInitConfig":"import/dcInitConfig.json"}