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)
|
memcached = new Memcached(config.MEMCACHED_SOCKET)
|
||||||
sanitize = require('./sanitize').sanitize
|
sanitize = require('./sanitize').sanitize
|
||||||
|
|
||||||
|
currentClientIP = null
|
||||||
|
|
||||||
# Create MongoDB connections
|
# Create MongoDB connections
|
||||||
dbserver = new mongo.Server(config.MONGODB_SOCKET, 0, {auto_reconnect: true})
|
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) ->
|
updateDevice = (deviceId, actions, callback) ->
|
||||||
if not actions?
|
if not actions?
|
||||||
callback() if callback?
|
callback() if callback?
|
||||||
@@ -71,7 +82,8 @@ runTask = (sessionId, deviceId, task, reqParams, response) ->
|
|||||||
|
|
||||||
if Object.keys(resParams).length > 0
|
if Object.keys(resParams).length > 0
|
||||||
memcached.set(String(task._id), task, config.CACHE_DURATION, (err, result) ->
|
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
|
return
|
||||||
|
|
||||||
@@ -80,7 +92,6 @@ runTask = (sessionId, deviceId, task, reqParams, response) ->
|
|||||||
tasksCollection.remove({'_id' : mongo.ObjectID(task._id)}, {safe: true}, (err, removed) ->
|
tasksCollection.remove({'_id' : mongo.ObjectID(task._id)}, {safe: true}, (err, removed) ->
|
||||||
util.log("#{deviceId}: completed task #{task.name}(#{task._id})")
|
util.log("#{deviceId}: completed task #{task.name}(#{task._id})")
|
||||||
cookies = {task : null}
|
cookies = {task : null}
|
||||||
tr069.response(sessionId, response, resParams, cookies)
|
|
||||||
nextTask(sessionId, deviceId, response, cookies)
|
nextTask(sessionId, deviceId, response, cookies)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -91,7 +102,8 @@ nextTask = (sessionId, deviceId, response, cookies) ->
|
|||||||
reqParams = {}
|
reqParams = {}
|
||||||
resParams = {}
|
resParams = {}
|
||||||
if not task
|
if not task
|
||||||
tr069.response(sessionId, response, resParams, cookies)
|
res = tr069.response(sessionId, resParams, cookies)
|
||||||
|
writeResponse response, res
|
||||||
return
|
return
|
||||||
|
|
||||||
util.log("#{deviceId}: started task #{task.name}(#{task._id})")
|
util.log("#{deviceId}: started task #{task.name}(#{task._id})")
|
||||||
@@ -117,6 +129,18 @@ if cluster.isMaster
|
|||||||
for i in [1 .. numCPUs]
|
for i in [1 .. numCPUs]
|
||||||
cluster.fork()
|
cluster.fork()
|
||||||
else
|
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) ->
|
server = http.createServer (request, response) ->
|
||||||
if request.method != 'POST'
|
if request.method != 'POST'
|
||||||
#console.log '>>> 405 Method Not Allowed'
|
#console.log '>>> 405 Method Not Allowed'
|
||||||
@@ -145,6 +169,15 @@ else
|
|||||||
return body.toString(encoding || 'utf8', 0, body.byteLength)
|
return body.toString(encoding || 'utf8', 0, body.byteLength)
|
||||||
|
|
||||||
request.addListener 'end', () ->
|
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 = {}
|
resParams = {}
|
||||||
reqParams = tr069.request(request.headers, request.getBody())
|
reqParams = tr069.request(request.headers, request.getBody())
|
||||||
|
|
||||||
@@ -162,7 +195,8 @@ else
|
|||||||
)
|
)
|
||||||
|
|
||||||
updateDevice(deviceId, {'inform' : true, 'parameterValues' : reqParams.informParameterValues}, (err) ->
|
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
|
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.ACS_INTERFACE = '0.0.0.0'
|
||||||
exports.API_PORT = 7557
|
exports.API_PORT = 7557
|
||||||
exports.API_INTERFACE = '0.0.0.0'
|
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.MONGODB_SOCKET = '/tmp/mongodb-27017.sock'
|
||||||
exports.MEMCACHED_SOCKET = '/tmp/memcached.sock'
|
exports.MEMCACHED_SOCKET = '/tmp/memcached.sock'
|
||||||
exports.WORKER_RESPAWN_TIME = 3000
|
exports.WORKER_RESPAWN_TIME = 3000
|
||||||
|
exports.DEBUG = false
|
||||||
Whitespace-only changes.
+3
-6
@@ -140,7 +140,7 @@ exports.request = (headers, data) ->
|
|||||||
return req
|
return req
|
||||||
|
|
||||||
|
|
||||||
exports.response = (sessionId, response, params, cookies = null) ->
|
exports.response = (sessionId, params, cookies = null) ->
|
||||||
headers = {
|
headers = {
|
||||||
'Content-Type' : 'text/xml; charset="utf-8"',
|
'Content-Type' : 'text/xml; charset="utf-8"',
|
||||||
'Server' : SERVER_NAME,
|
'Server' : SERVER_NAME,
|
||||||
@@ -154,9 +154,7 @@ exports.response = (sessionId, response, params, cookies = null) ->
|
|||||||
#console.log '>>> EMPTY RESPONSE'
|
#console.log '>>> EMPTY RESPONSE'
|
||||||
# send empty response
|
# send empty response
|
||||||
headers['Content-Length'] = 0
|
headers['Content-Length'] = 0
|
||||||
response.writeHead 204, headers
|
return {code: 204, headers: headers, data: null}
|
||||||
response.end()
|
|
||||||
return
|
|
||||||
|
|
||||||
xml = libxmljs.Document()
|
xml = libxmljs.Document()
|
||||||
env = xml.node('soap-env:Envelope')
|
env = xml.node('soap-env:Envelope')
|
||||||
@@ -201,5 +199,4 @@ exports.response = (sessionId, response, params, cookies = null) ->
|
|||||||
#console.dir headers
|
#console.dir headers
|
||||||
#console.log data
|
#console.log data
|
||||||
|
|
||||||
response.writeHead 200, headers
|
return {code: 200, headers: headers, data: data}
|
||||||
response.end(data)
|
|
||||||
Reference in new issue
Block a user