agentstack
Version:
Enterprise Application Stack for TypeScript
113 lines (82 loc) • 3.94 kB
Markdown
AgentStack for es6/typescript
=================================
[](https://coveralls.io/github/agentframework/agentstack?branch=master)
- Application Stack for Enterprise Applications
- [x] Read configuration from `conf/settings.yaml`
- [x] Merge configuration from `conf/${NODE_ENV}.yaml`, `conf/${NODE_ENV}.local.yaml` and environment variables. (if have)
- [x] Merge configuration from `data/settings.json` (only when DATA_DIR was defined )
- [x] Print merged configuration on application start
- [x] Do not print sensitive configuration name with `_KEY`, `_PASSWORD`, `_SECRET` or `_TOKEN` postfix
- [x] Auto create missing dir if the configuration name ends with `_DIR`. (e.g. LOG_DIR folder)
- [x] Configuration with `_DIR` or `_FILE` will resolve to absolute path automatically
- [x] Provide a `app.settings` object for application to access the final configuration
- [x] Provide a `app.logger` object for application to use, available transporters: Console, File or Webhook
- [x] Provide nested error object `Exception` which will concat all the stacktrace for nested errors
- [x] When transporter itself got errors. It will automatically fallback to another available transporter
- [x] Trap linux signals `SIGHUP`, `SIGINT`, `SIGQUIT`, `SIGTERM`
- [x] Log nodejs process events `uncaughtException`
- [x] Provide universal application event `beforeExit`, `exiting`, `exit`
- [x] The original log called on failed transporter will logged using fallback logger
- [x] Add routing utils: `router`, `route`, `param`, `middleware`
- [x] Add container registry utils: `router`, `route`, `param`, `middleware`
- 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.
```bash
npm install agentstack --save
```
OR
```bash
yarn add agentstack
```
```js
// TypeScript 2.2+
import { Application } from 'agentstack';
// Node 6+
var Application = require('agentstack').Application;
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'
```js
// ES6 or TypeScript
import { CreateApplication } from 'agentstack';
// ES5
var CreateApplication = require('agentstack').CreateApplication;
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
```
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
}
```