const { readFileSync, writeFileSync } = require('node:fs') const { EOL } = require('node:os') const { resolve } = require('node:path') const dotenv = require('dotenv') const { EXIT } = require('./consts') const CLI = require('./cli') const help_message = 'Produce an .env file appropriate for stress testing.' const cli = CLI({ grammar: [ [['--help'], 'Show this help message'], [['--inenv', 'ENV'], 'Environment file path to read', '.env'], [['--outenv', 'ENV'], 'Environment file path to write', '.stress.env'], [['--dbuser', 'DBUSER'], 'Database username', 'postgres'], [['--dbpass', 'DBPASS'], 'Database password', 'postgres123'], [['--dbhost', 'DBHOST'], 'Database hostname', 'localhost'], [['--dbport', 'DBPORT'], 'Database port', '5432'], [['--dbname', 'DBNAME'], 'Database name', 'lamassu_stress'], ], }) const help = exit_code => { console.log('Usage: lamassu-server-stress-testing env ARGS...') console.log(help_message) cli.help() return exit_code } const env_read = path => { const envstr = readFileSync(path, { encoding: 'utf8' }) return dotenv.parse(envstr) //const entries = envstr // .split(EOL) // .flatMap((line) => { // line = line.trimStart() // const i = line.indexOf('=') // // if (line.startsWith('#') || i <= 0) // return [] // // const varname = line.substring(0, i) // const value = line.substring(i + 1) // return [[varname, value]] // }) //return Object.fromEntries(entries) } const env_write = (envvars, path) => { const envcontent = Object.entries(envvars) .map(([varname, value]) => [varname, value].join('=')) .join(EOL) + EOL writeFileSync(path, envcontent) } const run = async args => { const [err, options, positional] = cli.parse(args) if (err) { console.error(err) return help(EXIT.BADARGS) } if (options.help) return help(EXIT.OK) if (positional.length > 0) { console.error('Unknown arguments:', positional) return help(EXIT.BADARGS) } const inenvpath = resolve(process.cwd(), options.inenv ?? '.env') const inenvvars = env_read(inenvpath) const outenvpath = resolve(process.cwd(), options.outenv ?? '.stress.env') const outenvvars = { ...inenvvars, POSTGRES_USER: options.dbuser ?? 'postgres', POSTGRES_PASSWORD: options.dbpass ?? 'postgres123', POSTGRES_HOST: options.dbhost ?? 'localhost', POSTGRES_PORT: options.dbport ?? '5432', POSTGRES_DB: options.dbname ?? 'lamassu_stress', } env_write(outenvvars, outenvpath) return EXIT.OK } module.exports = { help_message, run, }