From ec0d0203ae452c497ad4ae1c1d9845a320c0cf02 Mon Sep 17 00:00:00 2001 From: Ali BARIN Date: Wed, 7 Sep 2022 18:35:20 +0200 Subject: [PATCH] feat(cli): add start-worker command --- packages/backend/src/worker.ts | 2 +- packages/backend/src/workers/processor.ts | 2 +- packages/backend/worker.d.ts | 1 + packages/backend/worker.js | 2 + packages/cli/src/commands/start-worker.ts | 49 +++++++++++++++++++++++ 5 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 packages/backend/worker.d.ts create mode 100644 packages/backend/worker.js create mode 100644 packages/cli/src/commands/start-worker.ts diff --git a/packages/backend/src/worker.ts b/packages/backend/src/worker.ts index 6e4f7ba0..1c670aba 100644 --- a/packages/backend/src/worker.ts +++ b/packages/backend/src/worker.ts @@ -1,2 +1,2 @@ import './config/orm'; -import './workers/processor'; +export { worker } from './workers/processor'; diff --git a/packages/backend/src/workers/processor.ts b/packages/backend/src/workers/processor.ts index 27eac2a4..17c24e52 100644 --- a/packages/backend/src/workers/processor.ts +++ b/packages/backend/src/workers/processor.ts @@ -4,7 +4,7 @@ import redisConfig from '../config/redis'; import Flow from '../models/flow'; import logger from '../helpers/logger'; -const worker = new Worker( +export const worker = new Worker( 'processor', async (job) => { const flow = await Flow.query().findById(job.data.flowId).throwIfNotFound(); diff --git a/packages/backend/worker.d.ts b/packages/backend/worker.d.ts new file mode 100644 index 00000000..980540e4 --- /dev/null +++ b/packages/backend/worker.d.ts @@ -0,0 +1 @@ +export * from './dist/src/worker'; diff --git a/packages/backend/worker.js b/packages/backend/worker.js new file mode 100644 index 00000000..15989d5c --- /dev/null +++ b/packages/backend/worker.js @@ -0,0 +1,2 @@ +/* eslint-disable */ +module.exports = require('./dist/src/worker.js'); diff --git a/packages/cli/src/commands/start-worker.ts b/packages/cli/src/commands/start-worker.ts new file mode 100644 index 00000000..8aace9d4 --- /dev/null +++ b/packages/cli/src/commands/start-worker.ts @@ -0,0 +1,49 @@ +import { readFileSync } from 'fs'; +import { Command, Flags } from '@oclif/core'; +import * as dotenv from 'dotenv'; + +export default class StartWorker extends Command { + static description = 'Run automatisch worker'; + + static flags = { + env: Flags.string({ + multiple: true, + char: 'e', + }), + 'env-file': Flags.string(), + } + + async prepareEnvVars(): Promise { + const { flags } = await this.parse(StartWorker); + + if (flags['env-file']) { + const envFile = readFileSync(flags['env-file'], 'utf8'); + const envConfig = dotenv.parse(envFile); + + for (const key in envConfig) { + const value = envConfig[key]; + process.env[key] = value; + } + } + + if (flags.env) { + for (const env of flags.env) { + const [key, value] = env.split('='); + process.env[key] = value; + } + } + + // must serve until more customization is introduced + delete process.env.SERVE_WEB_APP_SEPARATELY; + } + + async runWorker(): Promise { + await import('@automatisch/backend/worker'); + } + + async run(): Promise { + await this.prepareEnvVars(); + + await this.runWorker(); + } +}