93 lines
2.6 KiB
JavaScript
93 lines
2.6 KiB
JavaScript
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,
|
|
}
|