UNPKG

vmsnap

Version:

A Node based backup and backup rotation tool for KVM domains.

3 lines (2 loc) 1.78 kB
#!/usr/bin/env node import a,{exit as m}from"process";import{exec as p}from"child_process";import c from"util";import{tmpdir as f}from"os";import{sep as l}from"path";import R from"yargs";import{lock as d,unlock as x}from"lockfile";import*as o from"winston";import{consoleFormat as E}from"winston-console-format";import _ from"yocto-spinner";import{checkCommand as g,checkDependencies as k,scrubCheckpointsAndBitmaps as u}from"./libs/general.js";import{performBackup as v}from"./libs/libnbdbackup.js";import{printStatusCheck as y,SCREEN_SIZE as S}from"./libs/print.js";export const ERR_DOMAINS=1,ERR_OUTPUT_DIR=2,ERR_MAIN=3,ERR_REQS=4,ERR_SCRUB=5,ERR_LOCK_RELEASE=6,ERR_TOO_MANY_COMMANDS=7,ERR_INVALID_SCRUB_TYPE=8,spinner=_();const s=`${f()}${l}vmsnap.lock`;export const asyncExec=c.promisify(p);const t=R(a.argv.slice(2)).argv;let i=[],n=[o.format.printf(e=>`${e.message}`)];t.verbose&&(i=[o.format.timestamp(),o.format.errors({stack:!0}),o.format.splat(),o.format.json(),o.format.ms()],n=[o.format.colorize(),o.format.splat({depth:1/0}),E({showMeta:!0,metaStrip:["timestamp","service"],inspectOptions:{depth:1/0,colors:!0,maxArrayLength:1/0,breakLength:S,compact:1/0}})]);export const logger=o.createLogger({format:o.format.combine(...i),defaultMeta:{service:"vmsnap"},transports:[new o.transports.Console({levels:o.config.cli.levels,silent:!1,format:o.format.combine(...n)})]});let r=0;d(s,{retries:10,retryWait:1e4},async()=>{try{await k(),t.verbose&&logger.info("Dependencies are installed"),g(t),t.scrub?await u(t):t.backup?await v(t):await y(t)}catch(e){spinner.stop(),logger.error(e.message),r=e.code||ERR_MAIN}finally{spinner.stop(),r===void 0&&logger.info("No exit code provided for lock release"),x(s,e=>{e&&(logger.error(e),r=ERR_LOCK_RELEASE),m(r||ERR_MAIN)})}});