UNPKG

@salto-io/da-playa

Version:

Deploy locks management (CLI and Slackbot)

162 lines (146 loc) 4.99 kB
import { Command } from 'commander' import { RunningJobs } from '../running' import { log, prettify } from './common' export { RunningJobsModelDetails } from '../running' export const jobCommands = ( envDynamoDBRegion?: string ): Command => { const getJobs = async ({ jobname, ttl, dynamoDBRegion, skipped = false, json = false, }: { jobname: string dynamoDBRegion: string ttl?: number skipped?: boolean json?: boolean }): Promise<void> => { const runningJobs = await RunningJobs({ dynamoDBRegion }) const listOfJobs = await runningJobs[skipped ? 'getSkippedJobs' : 'getRunningJobs']({ ttl, jobname }) if (json) { log(JSON.stringify(listOfJobs)) return } log( `Found ${prettify.misc(listOfJobs.length)} job${listOfJobs.length > 1 || listOfJobs.length === 0 ? 's' : ''} for ${prettify.env( jobname, )}${listOfJobs.length > 0 ? ':' : ''}`, ) listOfJobs.forEach(job => { log( `User: ${prettify.user(job.user)}, Version: ${prettify.env(job.version)}`, ) }) } const program = new Command('jobs') .description('Manage running jobs') program .command('get') .description('get a job') .requiredOption('--jobname <jobname>', 'Name') .requiredOption('--gitversion <version>', 'Version') .option('--json', 'Output raw json') .option( '--dynamoDBRegion <dynamoDBRegion>', 'DynamoDB Region (Optional, Taken from DAPLAYA_AWS_REGION if set)', envDynamoDBRegion, ) .action(async ({ jobname, json, gitversion, ...rest }) => { const runningJobs = await RunningJobs(rest) const job = await runningJobs.getJob({ version: gitversion, jobname }) if (!job) { if (json) { return } log(`No job found for version ${gitversion} on job ${jobname}`) return } if (json) { log(JSON.stringify(job)) return } log( `Found job ${prettify.env( job.jobname, )} for ${prettify.user(job.user)} with version ${prettify.misc(job.version)}${prettify.error(job.skipped ? ' (skipped)' : '')}${prettify.user(job.ended !== undefined ? ' (ended)' : '')}`, ) }) program .command('start') .description('start a job') .requiredOption('--jobname <jobname>', 'Name') .requiredOption('--user <user>', 'Trigger user') .requiredOption('--gitversion <version>', 'Version') .option( '--dynamoDBRegion <dynamoDBRegion>', 'DynamoDB Region (Optional, Taken from DAPLAYA_AWS_REGION if set)', envDynamoDBRegion, ) .action(async ({ jobname, user, gitversion, ...rest }) => { const runningJobs = await RunningJobs(rest) const created = await runningJobs.startJob({ user, version: gitversion, jobname }) log( `Created job ${prettify.env( created.jobname, )} for ${prettify.user(created.user)} with version ${prettify.misc(created.version)}`, ) }) program .command('end') .description('end a job') .requiredOption('--jobname <jobname>', 'Name') .requiredOption('--user <user>', 'Trigger user') .requiredOption('--gitversion <version>', 'Version') .option( '--dynamoDBRegion <dynamoDBRegion>', 'DynamoDB Region (Optional, Taken from DAPLAYA_AWS_REGION if set)', envDynamoDBRegion, ) .option('--skipped', 'Set job as skipped') .action(async ({ jobname, user, gitversion, skipped, ...rest }) => { const runningJobs = await RunningJobs(rest) const ended = await runningJobs.endJob({ user, version: gitversion, jobname, skipped }) if (!ended) { log( 'Did not find any job to end!' ) } else { log( `Ended job ${prettify.env( ended.jobname, )} for ${prettify.user(ended.user)} with version ${prettify.misc(ended.version)}${skipped ? ` and marked as ${prettify.misc('skipped')}` : '' }`, ) } }) program .command('active') .description('Get\'s all running jobs') .requiredOption('--jobname <jobname>', 'Job name') .option( '--dynamoDBRegion <dynamoDBRegion>', 'DynamoDB Region (Optional, Taken from DAPLAYA_AWS_REGION if set)', envDynamoDBRegion, ) .option('--ttl <ttl>', 'Timeframe in milliseconds to lookup active jobs') .option('--json', 'Output raw json') .action(getJobs) program .command('skipped') .description('Get\'s all skipped jobs') .requiredOption('--jobname <jobname>', 'Job Name') .option( '--dynamoDBRegion <dynamoDBRegion>', 'DynamoDB Region (Optional, Taken from DAPLAYA_AWS_REGION if set)', envDynamoDBRegion, ) .option('--ttl <ttl>', 'Timeframe in milliseconds to lookup active jobs') .option('--json', 'Output raw json') .action(params => getJobs({ ...params, skipped: true })) return program }