Enterprise Application Stack for TypeScript


Keywords
enterprise, conf, configuration, logger, logging, yaml, exception, es6
License
Other
Install
npm install agentstack@1.2.400

Documentation

AgentStack

Build Status Coverage Status

What is this?

  • Application Stack for Enterprise Applications

What is this actually???

  • Read configuration from conf/settings.yml
  • Merge configuration from conf/${NODE_ENV}.yml, conf/${NODE_ENV}.local.yml and environment variables. (if have)
  • Print merged configuration on application start
  • Do not print sensitive configuration name with _KEY, _PASSWORD, _SECRET or _TOKEN postfix
  • Auto create missing dir if the configuration name ends with _DIR. (e.g. LOG_DIR folder)
  • Provide a app.settings object for application to access the final configuration
  • Configuration with _DIR or _FILE will resolve to absolute path automatically
  • Provide a app.logger object for application to use, available transporters: Console, File or Webhook
  • Provide nested error object Exception which will concat all the stacktrace for nested errors
  • When transporter itself got errors. It will automatically fallback to another available transporter
  • Log nodejs process events beforeExit, exit, warning, uncaughtException, unhandledPromiseRejection
  • Trap linux signals SIGHUP, SIGINT, SIGQUIT, SIGTERM
  • Provide minimal system monitoring; disk full, memory full, cpu full or network error

Why doing this?

  • Because the things above is required for most enterprise applications. It should be shared across projects.
  • It's very important. But it's not as important as application logic. It can save your time to bootstrap a new project.
  • The same structure will make DevOps happy when doing deployment/monitoring on many projects. It should be standardized.
  • Together with Agent Framework; it can be automatically inject into other classes when required. It should be easy to use.

Installation

npm install agentstack --save

OR

yarn add agentstack

Show me the code

import { Application } from 'agentstack';

const app = new Application();

// enable config, logger support
app.init(); // default, same with `app.init({ confDir: 'conf', root: process.cwd() })`
// or
app.init({ confDir: 'settings' }); // if your configuration folder is not 'conf' 
// or
app.init({ confDir: 'settings', root: '/usr/share/myapp' }); // if your root folder is not current working folder 

console.log(app.settings);
app.logger.info('Hi, I am agent stack'); // the log will be automatically save in `LOG_DIR` folder 

or if you prefer using factory function instead of 'new'

import { CreateApplication } from 'agentstack';

var app = CreateApplication();
// or
var app = CreateApplication({ confDir: 'settings' });
// or
var app = CreateApplication({ confDir: 'settings', root: '/usr/share/myapp' });

console.log(app.settings);
app.logger.info('Hi, I am agent stack'); // the log will be automatically save in `LOG_DIR` folder in JSON format

Others

How do I rotate log files?

Consider we output our logs to /usr/share/myapp/logs/agent.log

We would rotate our log files with logrotate, by adding the following to /etc/logrotate.d/myapp:

/usr/share/myapp/logs/agent.log {
       su root
       daily
       rotate 7
       delaycompress
       compress
       notifempty
       missingok
       copytruncate
}