judoscale-node-core
Version:
Core dependencies for NodeJS adapters for the JudoScale autoscaling add-on for Heroku
54 lines (44 loc) • 1.53 kB
JavaScript
const winston = require('winston')
const packageInfo = require('../package.json')
class Config {
constructor(options = {}) {
Object.assign(this, getDefaultOptions(), options)
if (!this.logger) this.logger = getLogger(this.log_level)
}
}
function getDefaultOptions() {
const defaultLogLevel = process.env.JUDOSCALE_LOG_LEVEL || 'info'
let apiBaseUrl = process.env.JUDOSCALE_URL
let containerID
if (process.env.DYNO) {
containerID = process.env.DYNO
} else if (process.env.RENDER_INSTANCE_ID) {
apiBaseUrl ||= `https://adapter.judoscale.com/api/${process.env.RENDER_SERVICE_ID}`
containerID = process.env.RENDER_INSTANCE_ID.replace(`${process.env.RENDER_SERVICE_ID}-`, '')
} else if (process.env.ECS_CONTAINER_METADATA_URI) {
const parts = process.env.ECS_CONTAINER_METADATA_URI.split('/')
containerID = parts[parts.length - 1]
} else if (process.env.FLY_MACHINE_ID) {
containerID = process.env.FLY_MACHINE_ID
} else if (process.env.RAILWAY_REPLICA_ID) {
containerID = process.env.RAILWAY_REPLICA_ID
}
return {
// TODO: camelCase these for internal use, snake_case for reporting
version: packageInfo.version,
api_base_url: apiBaseUrl,
log_level: defaultLogLevel,
container: containerID,
report_interval_seconds: 10,
}
}
function getLogger(level) {
const logger = winston.createLogger({ level })
logger.add(
new winston.transports.Console({
format: winston.format.simple(),
})
)
return logger
}
module.exports = Config