You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.7 KiB
66 lines
1.7 KiB
import dayjs from 'dayjs'
|
|
import Db from './_db.ts'
|
|
import Docket from './_docket.ts'
|
|
|
|
import { resolveActionClass } from './helpers/resolver.ts'
|
|
import logger from './helpers/logger.ts'
|
|
import State from './_state.ts'
|
|
|
|
/**
|
|
* run through a single config, getting each action with config
|
|
* and run them, the docket will be used to hold data and configs
|
|
*
|
|
* @author Björn Hase <me@herr-hase.wtf>
|
|
* @license http://opensource.org/licenses/MIT The MIT License
|
|
* @link https://git.node001.net/HerrHase/super-hog.git
|
|
*
|
|
*/
|
|
async function run(config: object) {
|
|
|
|
let db = new Db(config.slug)
|
|
let docket = new Docket(config, db)
|
|
|
|
// update db
|
|
await db.update({
|
|
'date_started_at': dayjs().toISOString()
|
|
})
|
|
|
|
logger(config.slug).info('has started')
|
|
|
|
for (const actionConfig of config.actions) {
|
|
|
|
// resolve action class
|
|
const ActionClass = await import(resolveActionClass(actionConfig.class))
|
|
|
|
// options are exists, add to docket
|
|
if (actionConfig.hasOwnProperty('options')) {
|
|
docket.setOptions(action.options)
|
|
}
|
|
|
|
try {
|
|
const action = new ActionClass.default(docket)
|
|
|
|
logger(config.slug).info('action / ' + actionConfig.class)
|
|
|
|
await action.run()
|
|
docket = action.getDocket()
|
|
|
|
} catch(error) {
|
|
logger(config.slug).error('action / ' + actionConfig.class + ' / ' + error)
|
|
}
|
|
}
|
|
|
|
logger(config.slug).info('has finished')
|
|
|
|
// update db only state FINISHED is set
|
|
if (docket.hasState(State.FINISHED)) {
|
|
await db.update({
|
|
'date_finished_at': dayjs().toISOString()
|
|
})
|
|
}
|
|
|
|
return docket
|
|
}
|
|
|
|
export default run
|