Implemented debugging mechanism to log requests and responses when exception occurs
This commit is contained in:
1 parent
e5d1a97375
commit
aa76e027f2
4 files changed
+43
-11
No files matched your search
+38
-4
@@ -9,6 +9,7 @@ Memcached = require 'memcached'
|
||||
memcached = new Memcached(config.MEMCACHED_SOCKET)
|
||||
sanitize = require('./sanitize').sanitize
|
||||
|
||||
currentClientIP = null
|
||||
|
||||
# Create MongoDB connections
|
||||
dbserver = new mongo.Server(config.MONGODB_SOCKET, 0, {auto_reconnect: true})
|
||||
@@ -27,6 +28,16 @@ db.open( (err, db) ->
|
||||
)
|
||||
|
||||
|
||||
writeResponse = (serverResponse, res) ->
|
||||
if config.DEBUG
|
||||
s = "# RESPONSE #{new Date(Date.now())}\n" + JSON.stringify(res.headers) + "\n#{res.data}\n\n"
|
||||
memcached.append("debug-#{currentClientIP}", s, (err, result) ->
|
||||
)
|
||||
|
||||
serverResponse.writeHead(res.code, res.headers)
|
||||
serverResponse.end(res.data)
|
||||
|
||||
|
||||
updateDevice = (deviceId, actions, callback) ->
|
||||
if not actions?
|
||||
callback() if callback?
|
||||
@@ -71,7 +82,8 @@ runTask = (sessionId, deviceId, task, reqParams, response) ->
|
||||
|
||||
if Object.keys(resParams).length > 0
|
||||
memcached.set(String(task._id), task, config.CACHE_DURATION, (err, result) ->
|
||||
tr069.response(reqParams.sessionId, response, resParams, {task : String(task._id)})
|
||||
res = tr069.response(reqParams.sessionId, resParams, {task : String(task._id)})
|
||||
writeResponse response, res
|
||||
)
|
||||
return
|
||||
|
||||
@@ -80,7 +92,6 @@ runTask = (sessionId, deviceId, task, reqParams, response) ->
|
||||
tasksCollection.remove({'_id' : mongo.ObjectID(task._id)}, {safe: true}, (err, removed) ->
|
||||
util.log("#{deviceId}: completed task #{task.name}(#{task._id})")
|
||||
cookies = {task : null}
|
||||
tr069.response(sessionId, response, resParams, cookies)
|
||||
nextTask(sessionId, deviceId, response, cookies)
|
||||
)
|
||||
|
||||
@@ -91,7 +102,8 @@ nextTask = (sessionId, deviceId, response, cookies) ->
|
||||
reqParams = {}
|
||||
resParams = {}
|
||||
if not task
|
||||
tr069.response(sessionId, response, resParams, cookies)
|
||||
res = tr069.response(sessionId, resParams, cookies)
|
||||
writeResponse response, res
|
||||
return
|
||||
|
||||
util.log("#{deviceId}: started task #{task.name}(#{task._id})")
|
||||
@@ -117,6 +129,18 @@ if cluster.isMaster
|
||||
for i in [1 .. numCPUs]
|
||||
cluster.fork()
|
||||
else
|
||||
if config.DEBUG
|
||||
process.on('uncaughtException', (err) ->
|
||||
# dump request/response logs and stack trace
|
||||
util.log("Unexpected error occured. Writing log to debug/#{currentClientIP}.log.")
|
||||
memcached.get("debug-#{currentClientIP}", (er, l) ->
|
||||
fs = require 'fs'
|
||||
fs.writeFile("debug/#{currentClientIP}.log", l + "\n\n" + err.stack, (err) ->
|
||||
process.exit(1)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
server = http.createServer (request, response) ->
|
||||
if request.method != 'POST'
|
||||
#console.log '>>> 405 Method Not Allowed'
|
||||
@@ -145,6 +169,15 @@ else
|
||||
return body.toString(encoding || 'utf8', 0, body.byteLength)
|
||||
|
||||
request.addListener 'end', () ->
|
||||
currentClientIP = request.connection.remoteAddress
|
||||
if config.DEBUG
|
||||
s = "# REQUEST #{new Date(Date.now())}\n" + JSON.stringify(request.headers) + "\n#{request.getBody()}\n\n"
|
||||
memcached.append("debug-#{currentClientIP}", s, (err, result) ->
|
||||
if err == 'Item is not stored'
|
||||
memcached.set("debug-#{currentClientIP}", s, 10, (err, result) ->
|
||||
)
|
||||
)
|
||||
|
||||
resParams = {}
|
||||
reqParams = tr069.request(request.headers, request.getBody())
|
||||
|
||||
@@ -162,7 +195,8 @@ else
|
||||
)
|
||||
|
||||
updateDevice(deviceId, {'inform' : true, 'parameterValues' : reqParams.informParameterValues}, (err) ->
|
||||
tr069.response(reqParams.sessionId, response, resParams, cookies)
|
||||
res = tr069.response(reqParams.sessionId, resParams, cookies)
|
||||
writeResponse response, res
|
||||
)
|
||||
)
|
||||
return
|
||||
|
||||
+2
-1
@@ -3,7 +3,8 @@ exports.ACS_PORT = 7547 # same as AP Manager's port
|
||||
exports.ACS_INTERFACE = '0.0.0.0'
|
||||
exports.API_PORT = 7557
|
||||
exports.API_INTERFACE = '0.0.0.0'
|
||||
exports.CACHE_DURATION = 60000
|
||||
exports.CACHE_DURATION = 60 # in seconds
|
||||
exports.MONGODB_SOCKET = '/tmp/mongodb-27017.sock'
|
||||
exports.MEMCACHED_SOCKET = '/tmp/memcached.sock'
|
||||
exports.WORKER_RESPAWN_TIME = 3000
|
||||
exports.DEBUG = false
|
||||
Whitespace-only changes.
+3
-6
@@ -140,7 +140,7 @@ exports.request = (headers, data) ->
|
||||
return req
|
||||
|
||||
|
||||
exports.response = (sessionId, response, params, cookies = null) ->
|
||||
exports.response = (sessionId, params, cookies = null) ->
|
||||
headers = {
|
||||
'Content-Type' : 'text/xml; charset="utf-8"',
|
||||
'Server' : SERVER_NAME,
|
||||
@@ -154,9 +154,7 @@ exports.response = (sessionId, response, params, cookies = null) ->
|
||||
#console.log '>>> EMPTY RESPONSE'
|
||||
# send empty response
|
||||
headers['Content-Length'] = 0
|
||||
response.writeHead 204, headers
|
||||
response.end()
|
||||
return
|
||||
return {code: 204, headers: headers, data: null}
|
||||
|
||||
xml = libxmljs.Document()
|
||||
env = xml.node('soap-env:Envelope')
|
||||
@@ -201,5 +199,4 @@ exports.response = (sessionId, response, params, cookies = null) ->
|
||||
#console.dir headers
|
||||
#console.log data
|
||||
|
||||
response.writeHead 200, headers
|
||||
response.end(data)
|
||||
return {code: 200, headers: headers, data: data}
|
||||
Reference in new issue
Block a user