mirror of
https://github.com/HackPlan/RootPanel.git
synced 2026-03-26 22:16:28 +08:00
use bunyan
This commit is contained in:
38
app.coffee
38
app.coffee
@@ -5,9 +5,11 @@ global.app = exports
|
||||
app.libs =
|
||||
_: require 'underscore'
|
||||
async: require 'async'
|
||||
bunyan: require 'bunyan'
|
||||
bodyParser: require 'body-parser'
|
||||
child_process: require 'child_process'
|
||||
cookieParser: require 'cookie-parser'
|
||||
expressBunyanLogger: require 'express-bunyan-logger'
|
||||
csrf: require 'csrf'
|
||||
crypto: require 'crypto'
|
||||
depd: require 'depd'
|
||||
@@ -17,7 +19,6 @@ app.libs =
|
||||
harp: require 'harp'
|
||||
jade: require 'jade'
|
||||
markdown: require('markdown').markdown
|
||||
middlewareInjector: require 'middleware-injector'
|
||||
moment: require 'moment-timezone'
|
||||
mongoose: require 'mongoose'
|
||||
morgan: require 'morgan'
|
||||
@@ -35,20 +36,25 @@ app.libs =
|
||||
ObjectId: (require 'mongoose').Schema.Types.ObjectId
|
||||
Mixed: (require 'mongoose').Schema.Types.Mixed
|
||||
|
||||
{cookieParser, crypto, bodyParser, depd, express, fs, harp, middlewareInjector, mongoose} = exports.libs
|
||||
{bunyan, cookieParser, crypto, bodyParser, depd, express, fs, harp, mongoose} = exports.libs
|
||||
{morgan, nodemailer, path, redis, _} = exports.libs
|
||||
|
||||
app.logger = do ->
|
||||
unless process.env.NODE_ENV == 'test'
|
||||
return console
|
||||
|
||||
return {
|
||||
log: ->
|
||||
error: console.error
|
||||
}
|
||||
|
||||
app.package = require './package'
|
||||
app.deprecate = depd 'rootpanel'
|
||||
app.utils = require './core/utils'
|
||||
|
||||
app.bunyanMongo = new app.utils.bunyanMongo()
|
||||
|
||||
app.logger = bunyan.createLogger
|
||||
name: app.package.name
|
||||
streams: [
|
||||
type: 'raw'
|
||||
level: 'info'
|
||||
stream: app.bunyanMongo
|
||||
,
|
||||
level: process.env.LOG_LEVEL ? 'debug'
|
||||
stream: process.stdout
|
||||
]
|
||||
|
||||
do ->
|
||||
config_path = path.join __dirname, 'config.coffee'
|
||||
@@ -79,7 +85,6 @@ app.express = express()
|
||||
|
||||
app.config = config
|
||||
app.db = require './core/db'
|
||||
app.utils = require './core/utils'
|
||||
app.cache = require './core/cache'
|
||||
app.i18n = require './core/i18n'
|
||||
app.pluggable = require './core/pluggable'
|
||||
@@ -98,15 +103,12 @@ app.billing = require './core/billing'
|
||||
app.middleware = require './core/middleware'
|
||||
app.notification = require './core/notification'
|
||||
|
||||
unless process.env.NODE_ENV == 'test'
|
||||
app.express.use morgan 'dev'
|
||||
|
||||
app.express.use bodyParser.json()
|
||||
app.express.use cookieParser()
|
||||
app.express.use middlewareInjector
|
||||
|
||||
app.express.use app.middleware.errorHandling
|
||||
app.express.use app.middleware.session()
|
||||
app.express.use app.middleware.logger()
|
||||
app.express.use app.middleware.errorHandling
|
||||
app.express.use app.middleware.csrf()
|
||||
app.express.use app.middleware.authenticate
|
||||
app.express.use app.middleware.accountHelpers
|
||||
@@ -141,7 +143,7 @@ exports.start = _.once ->
|
||||
app.pluggable.selectHook(null, 'app.started').forEach (hook) ->
|
||||
hook.action()
|
||||
|
||||
app.logger.log "RootPanel start at #{config.web.listen}"
|
||||
app.logger.info "RootPanel start at #{config.web.listen}"
|
||||
|
||||
unless module.parent
|
||||
exports.start()
|
||||
|
||||
@@ -14,7 +14,16 @@ mongoose.connection.on 'error', (err) ->
|
||||
console.error err if err
|
||||
|
||||
mongoose.connection.on 'connected', ->
|
||||
cOption = mongoose.connection.db.collection 'options'
|
||||
db = mongoose.connection.db
|
||||
|
||||
db.createCollection 'logs',
|
||||
capped: true
|
||||
size: 32 * 1024 * 1024
|
||||
, (err, cLogs) ->
|
||||
app.bunyanMongo.collection = cLogs
|
||||
app.bunyanMongo.dequeueCachedRecords()
|
||||
|
||||
cOption = db.collection 'options'
|
||||
|
||||
cOption.findOne
|
||||
key: 'db_version'
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{config} = app
|
||||
{_, expressSession, redisStore, path, fs, moment} = app.libs
|
||||
{_, expressSession, redisStore, path, fs, moment, expressBunyanLogger} = app.libs
|
||||
{Account} = app.models
|
||||
|
||||
exports.errorHandling = (req, res, next) ->
|
||||
@@ -9,6 +9,16 @@ exports.errorHandling = (req, res, next) ->
|
||||
|
||||
next()
|
||||
|
||||
exports.logger = ->
|
||||
return expressBunyanLogger
|
||||
logger: app.logger
|
||||
parseUA: false
|
||||
excludes: [
|
||||
'req', 'res', 'body', 'short-body', 'http-version',
|
||||
'incoming', 'req-headers', 'res-headers'
|
||||
]
|
||||
genReqId: (req) -> req.sessionID
|
||||
|
||||
exports.session = ->
|
||||
RedisStore = redisStore expressSession
|
||||
secret = fs.readFileSync(path.join __dirname, '../session.key').toString()
|
||||
@@ -108,7 +118,7 @@ exports.requireAuthenticate = (req, res, next) ->
|
||||
res.error 'auth_failed', null, 403
|
||||
|
||||
exports.requireAdminAuthenticate = (req, res, next) ->
|
||||
req.inject [exports.requireAuthenticate], ->
|
||||
exports.requireAuthenticate req, res, ->
|
||||
unless 'root' in req.account.groups
|
||||
if req.method == 'GET'
|
||||
return res.status(403).end()
|
||||
@@ -119,7 +129,7 @@ exports.requireAdminAuthenticate = (req, res, next) ->
|
||||
|
||||
exports.requireInService = (service_name) ->
|
||||
return (req, res, next) ->
|
||||
req.inject [exports.requireAuthenticate], ->
|
||||
exports.requireAuthenticate req, res, ->
|
||||
unless service_name in req.account.billing.services
|
||||
return res.error 'not_in_service'
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ describe 'app', ->
|
||||
mongoose.should.be.ok
|
||||
|
||||
it 'app.logger should be available', ->
|
||||
app.logger.log.should.be.a 'function'
|
||||
app.logger.info.should.be.a 'function'
|
||||
app.logger.error.should.be.a 'function'
|
||||
|
||||
it 'config.coffee should exists', ->
|
||||
|
||||
@@ -53,3 +53,19 @@ exports.pickErrorName = (error) ->
|
||||
return "#{err.path}_exist"
|
||||
|
||||
return err.message
|
||||
|
||||
exports.bunyanMongo = class BunyanMongo
|
||||
queue: []
|
||||
|
||||
collection: null
|
||||
|
||||
dequeueCachedRecords: ->
|
||||
while @queue.length
|
||||
@write @queue.shift()
|
||||
|
||||
write: (data) ->
|
||||
if @collection
|
||||
@collection.insert data, (err) ->
|
||||
console.error err if err
|
||||
else
|
||||
@queue.push data
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
}
|
||||
],
|
||||
"scripts": {
|
||||
"start": "./node_modules/.bin/coffee app.coffee",
|
||||
"start": "./node_modules/.bin/coffee app.coffee | ./node_modules/.bin/bunyan -o short",
|
||||
"migrate": "./node_modules/.bin/coffee bin/migrate.coffee",
|
||||
"reconfigure": "./node_modules/.bin/coffee bin/reconfigure.coffee",
|
||||
"test": "COV_TEST=true ./node_modules/.bin/mocha --compilers coffee:coffee-script/register --require test/env --reporter node_modules/mocha-reporter-cov-summary -- core/test/*.test.coffee core/test/*/*.test.coffee plugin/*/test",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
module.exports =
|
||||
web:
|
||||
t_name: 'plugins.rpvhost.'
|
||||
t_name: 'RootPanel'
|
||||
url: 'http://rp.rpvhost.net'
|
||||
listen: '/home/rpadmin/rootpanel.sock'
|
||||
repo: 'jysperm/RootPanel'
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
process.env.NODE_ENV = 'test'
|
||||
process.env.LOG_LEVEL = 'error'
|
||||
|
||||
global.config = require '../config'
|
||||
|
||||
|
||||
Reference in New Issue
Block a user