mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-02-17 08:50:58 -05:00
parent
b125f9b2fa
commit
93f940e196
4 changed files with 62 additions and 33 deletions
22
server/middleware/healthcheck.coffee
Normal file
22
server/middleware/healthcheck.coffee
Normal file
|
@ -0,0 +1,22 @@
|
|||
wrap = require 'co-express'
|
||||
errors = require '../commons/errors'
|
||||
|
||||
module.exports = wrap (req, res) ->
|
||||
User = require '../models/User'
|
||||
user = yield User.findOne({})
|
||||
throw new errors.InternalServerError('No users found') unless user
|
||||
hcUser = yield User.findOne(slug: 'healthcheck')
|
||||
if not hcUser
|
||||
hcUser = new User({
|
||||
anonymous: false
|
||||
name: 'healthcheck'
|
||||
nameLower: 'healthcheck'
|
||||
slug: 'healthcheck'
|
||||
email: 'rob+healthcheck@codecombat.com'
|
||||
emailLower: 'rob+healthcheck@codecombat.com'
|
||||
})
|
||||
hcUser.set 'testGroupNumber', Math.floor(Math.random() * 256) # also in app/core/auth
|
||||
yield hcUser.save()
|
||||
activity = hcUser.trackActivity('healthcheck', 1)
|
||||
yield hcUser.update({activity: activity})
|
||||
res.status(200).send('OK')
|
|
@ -7,6 +7,7 @@ module.exports =
|
|||
courseInstances: require './course-instances'
|
||||
courses: require './courses'
|
||||
files: require './files'
|
||||
healthcheck: require './healthcheck'
|
||||
named: require './named'
|
||||
patchable: require './patchable'
|
||||
rest: require './rest'
|
||||
|
|
|
@ -86,36 +86,4 @@ module.exports.setup = (app) ->
|
|||
app.get('/db/trial.request/:handle', mw.auth.checkHasPermission(['admin']), mw.rest.getByHandle(TrialRequest))
|
||||
app.put('/db/trial.request/:handle', mw.auth.checkHasPermission(['admin']), mw.trialRequests.put)
|
||||
|
||||
app.get '/healthcheck', (req, res) ->
|
||||
try
|
||||
async = require 'async'
|
||||
User = require '../models/User'
|
||||
async.waterfall [
|
||||
(callback) ->
|
||||
User.find({}).limit(1).exec(callback)
|
||||
, (last, callback) ->
|
||||
return("No users found") unless callback.length > 0
|
||||
User.findOne(slug: 'healthcheck').exec(callback)
|
||||
, (hcuser, callback) ->
|
||||
# Create health check user if it doesnt exist
|
||||
return callback(null, hcuser) if hcuser
|
||||
user = new User
|
||||
anonymous: false
|
||||
name: 'healthcheck'
|
||||
nameLower: 'healthcheck'
|
||||
slug: 'healthcheck'
|
||||
email: 'rob+healthcheck@codecombat.com'
|
||||
emailLower: 'rob+healthcheck@codecombat.com'
|
||||
user.set 'testGroupNumber', Math.floor(Math.random() * 256) # also in app/core/auth
|
||||
user.save (err) ->
|
||||
return callback(err) if err
|
||||
callback(null, user)
|
||||
|
||||
, (hcuser, callback) ->
|
||||
activity = hcuser.trackActivity 'healthcheck', 1
|
||||
hcuser.update {activity: activity}, callback
|
||||
], (err) ->
|
||||
return res.status(500).send(err.toString()) if err
|
||||
res.send("OK")
|
||||
catch error
|
||||
res.status(500).send(error.toString())
|
||||
app.get('/healthcheck', mw.healthcheck)
|
||||
|
|
38
spec/server/functional/healthcheck.spec.coffee
Normal file
38
spec/server/functional/healthcheck.spec.coffee
Normal file
|
@ -0,0 +1,38 @@
|
|||
common = require '../common'
|
||||
request = require '../request'
|
||||
utils = require '../utils'
|
||||
User = require '../../../server/models/User'
|
||||
|
||||
url = getURL('/healthcheck')
|
||||
|
||||
describe 'GET /healthcheck', ->
|
||||
it 'returns 500 if there are no users in the db', utils.wrap (done) ->
|
||||
yield utils.clearModels([User])
|
||||
[res, body] = yield request.getAsync url, {json: true}
|
||||
expect(res.statusCode).toBe(500)
|
||||
done()
|
||||
|
||||
it 'returns 200 if there is at least one user in the db', utils.wrap (done) ->
|
||||
yield utils.clearModels([User])
|
||||
yield utils.initUser()
|
||||
[res, body] = yield request.getAsync url, {json: true}
|
||||
expect(res.statusCode).toBe(200)
|
||||
done()
|
||||
|
||||
it 'produces a healthcheck user and tracks how often it is healthchecked', utils.wrap (done) ->
|
||||
yield utils.clearModels([User])
|
||||
user = yield User.findOne({slug: 'healthcheck'})
|
||||
expect(user).toBeNull()
|
||||
|
||||
yield utils.initUser()
|
||||
[res, body] = yield request.getAsync url, {json: true}
|
||||
expect(res.statusCode).toBe(200)
|
||||
user = yield User.findOne({slug: 'healthcheck'})
|
||||
expect(user).toBeTruthy()
|
||||
expect(user.get('activity').healthcheck.count).toBe(1)
|
||||
|
||||
[res, body] = yield request.getAsync url, {json: true}
|
||||
expect(res.statusCode).toBe(200)
|
||||
user = yield User.findOne({slug: 'healthcheck'})
|
||||
expect(user.get('activity').healthcheck.count).toBe(2)
|
||||
done()
|
Loading…
Reference in a new issue