UNPKG

agentstack

Version:

Enterprise Application Stack for TypeScript

113 lines (82 loc) 3.94 kB
AgentStack for es6/typescript ================================= [![Coverage Status](https://coveralls.io/repos/github/agentframework/agentstack/badge.svg?branch=master)](https://coveralls.io/github/agentframework/agentstack?branch=master) ### What is this? - Application Stack for Enterprise Applications ### What is this actually??? - [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` ### 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 ```bash npm install agentstack --save ``` OR ```bash yarn add agentstack ``` ### Show me the code ```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 ``` ### 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 } ```