Remove use of domains for error handling
This commit is contained in:
1 parent
eb6d107b8d
commit
ee40a44339
4 files changed
+117
-146
No files matched your search
+4
-1
@@ -92,6 +92,7 @@ refresh = (callback) ->
|
|||||||
return callback()
|
return callback()
|
||||||
|
|
||||||
lock('presets_hash_lock', 3000, (err, unlockOrExtend) ->
|
lock('presets_hash_lock', 3000, (err, unlockOrExtend) ->
|
||||||
|
return callback(err) if err
|
||||||
counter = 4
|
counter = 4
|
||||||
db.presetsCollection.find().toArray((err, res) ->
|
db.presetsCollection.find().toArray((err, res) ->
|
||||||
if err
|
if err
|
||||||
@@ -145,7 +146,9 @@ refresh = (callback) ->
|
|||||||
when 'provision'
|
when 'provision'
|
||||||
_provisions.push([c.name].concat(c.args or []))
|
_provisions.push([c.name].concat(c.args or []))
|
||||||
else
|
else
|
||||||
throw new Error("Unknown configuration type #{c.type}")
|
callback(new Error("Unknown configuration type #{c.type}")) if -- counter >= 0
|
||||||
|
counter = 0
|
||||||
|
return
|
||||||
|
|
||||||
presets.push({name: preset._id, channel: preset.channel or 'default', schedule: schedule, events: events, precondition: precondition, provisions: _provisions})
|
presets.push({name: preset._id, channel: preset.channel or 'default', schedule: schedule, events: events, precondition: precondition, provisions: _provisions})
|
||||||
|
|
||||||
|
|||||||
+32
-24
@@ -53,11 +53,19 @@ cache = require './cache'
|
|||||||
db = require './db'
|
db = require './db'
|
||||||
|
|
||||||
|
|
||||||
|
throwError = (err, httpResponse) ->
|
||||||
|
if httpResponse
|
||||||
|
httpResponse.writeHead(500, {'Connection' : 'close'})
|
||||||
|
httpResponse.end("#{err.name}: #{err.message}")
|
||||||
|
|
||||||
|
throw err
|
||||||
|
|
||||||
|
|
||||||
writeResponse = (currentRequest, res) ->
|
writeResponse = (currentRequest, res) ->
|
||||||
if config.get('DEBUG', currentRequest.sessionData.deviceId)
|
if config.get('DEBUG', currentRequest.sessionData.deviceId)
|
||||||
dump = "# RESPONSE #{new Date(Date.now())}\n" + JSON.stringify(res.headers) + "\n#{res.data}\n\n"
|
dump = "# RESPONSE #{new Date(Date.now())}\n" + JSON.stringify(res.headers) + "\n#{res.data}\n\n"
|
||||||
require('fs').appendFile("./debug/#{currentRequest.sessionData.deviceId}.dump", dump, (err) ->
|
require('fs').appendFile("./debug/#{currentRequest.sessionData.deviceId}.dump", dump, (err) ->
|
||||||
throw err if err
|
throwError(err) if err
|
||||||
)
|
)
|
||||||
|
|
||||||
# respond using the same content-encoding as the request
|
# respond using the same content-encoding as the request
|
||||||
@@ -72,7 +80,7 @@ writeResponse = (currentRequest, res) ->
|
|||||||
|
|
||||||
if compress?
|
if compress?
|
||||||
compress(res.data, (err, data) ->
|
compress(res.data, (err, data) ->
|
||||||
throw err if err
|
return throwError(err, currentRequest.httpResponse) if err
|
||||||
res.headers['Content-Length'] = data.length
|
res.headers['Content-Length'] = data.length
|
||||||
currentRequest.httpResponse.writeHead(res.code, res.headers)
|
currentRequest.httpResponse.writeHead(res.code, res.headers)
|
||||||
currentRequest.httpResponse.end(data)
|
currentRequest.httpResponse.end(data)
|
||||||
@@ -123,7 +131,7 @@ inform = (currentRequest, cwmpRequest) ->
|
|||||||
util.log("#{currentRequest.sessionData.deviceId}: Inform (#{cwmpRequest.methodRequest.event}); retry count #{cwmpRequest.methodRequest.retryCount}")
|
util.log("#{currentRequest.sessionData.deviceId}: Inform (#{cwmpRequest.methodRequest.event}); retry count #{cwmpRequest.methodRequest.retryCount}")
|
||||||
|
|
||||||
session.inform(currentRequest.sessionData, cwmpRequest.methodRequest, (err, rpcResponse) ->
|
session.inform(currentRequest.sessionData, cwmpRequest.methodRequest, (err, rpcResponse) ->
|
||||||
throw err if err
|
return throwError(err, currentRequest.httpResponse) if err
|
||||||
res = soap.response({
|
res = soap.response({
|
||||||
id : cwmpRequest.id,
|
id : cwmpRequest.id,
|
||||||
methodResponse : rpcResponse,
|
methodResponse : rpcResponse,
|
||||||
@@ -141,7 +149,7 @@ inform = (currentRequest, cwmpRequest) ->
|
|||||||
|
|
||||||
transferComplete = (currentRequest, cwmpRequest) ->
|
transferComplete = (currentRequest, cwmpRequest) ->
|
||||||
session.transferComplete(currentRequest.sessionData, cwmpRequest.methodRequest, (err, rpcResponse, fault, operation) ->
|
session.transferComplete(currentRequest.sessionData, cwmpRequest.methodRequest, (err, rpcResponse, fault, operation) ->
|
||||||
throw err if err
|
return throwError(err, currentRequest.httpResponse) if err
|
||||||
|
|
||||||
if fault
|
if fault
|
||||||
for k, v of operation.retries
|
for k, v of operation.retries
|
||||||
@@ -207,7 +215,7 @@ appendProvisions = (original, toAppend) ->
|
|||||||
|
|
||||||
applyPresets = (currentRequest) ->
|
applyPresets = (currentRequest) ->
|
||||||
cache.getPresets((err, presetsHash, presets) ->
|
cache.getPresets((err, presetsHash, presets) ->
|
||||||
throw err if err
|
return throwError(err, currentRequest.httpResponse) if err
|
||||||
|
|
||||||
# Filter presets based on existing faults
|
# Filter presets based on existing faults
|
||||||
blackList = {}
|
blackList = {}
|
||||||
@@ -267,7 +275,7 @@ applyPresets = (currentRequest) ->
|
|||||||
declarations.push([v, 1, {value: 1}])
|
declarations.push([v, 1, {value: 1}])
|
||||||
|
|
||||||
session.rpcRequest(currentRequest.sessionData, declarations, (err, fault, id, rpcRequest) ->
|
session.rpcRequest(currentRequest.sessionData, declarations, (err, fault, id, rpcRequest) ->
|
||||||
throw err if err
|
return throwError(err, currentRequest.httpResponse) if err
|
||||||
|
|
||||||
if fault
|
if fault
|
||||||
recordFault(currentRequest.sessionData, fault, currentRequest.sessionData.provisions, currentRequest.sessionData.channels)
|
recordFault(currentRequest.sessionData, fault, currentRequest.sessionData.provisions, currentRequest.sessionData.channels)
|
||||||
@@ -304,7 +312,7 @@ applyPresets = (currentRequest) ->
|
|||||||
currentRequest.sessionData.faultsTouched[channel] = true
|
currentRequest.sessionData.faultsTouched[channel] = true
|
||||||
|
|
||||||
session.rpcRequest(currentRequest.sessionData, null, (err, fault, id, rpcRequest) ->
|
session.rpcRequest(currentRequest.sessionData, null, (err, fault, id, rpcRequest) ->
|
||||||
throw err if err
|
return throwError(err, currentRequest.httpResponse) if err
|
||||||
|
|
||||||
if fault
|
if fault
|
||||||
recordFault(currentRequest.sessionData, fault, currentRequest.sessionData.provisions, currentRequest.sessionData.channels)
|
recordFault(currentRequest.sessionData, fault, currentRequest.sessionData.provisions, currentRequest.sessionData.channels)
|
||||||
@@ -329,7 +337,7 @@ applyPresets = (currentRequest) ->
|
|||||||
|
|
||||||
nextRpc = (currentRequest) ->
|
nextRpc = (currentRequest) ->
|
||||||
session.rpcRequest(currentRequest.sessionData, null, (err, fault, id, rpcRequest) ->
|
session.rpcRequest(currentRequest.sessionData, null, (err, fault, id, rpcRequest) ->
|
||||||
throw err if err
|
return throwError(err, currentRequest.httpResponse) if err
|
||||||
|
|
||||||
if fault
|
if fault
|
||||||
for channel of currentRequest.sessionData.channels
|
for channel of currentRequest.sessionData.channels
|
||||||
@@ -392,7 +400,7 @@ nextRpc = (currentRequest) ->
|
|||||||
when 'download'
|
when 'download'
|
||||||
session.addProvisions(currentRequest.sessionData, "_task_#{task._id}", [['_task', task._id, 'download', task.fileType, task.fileName, task.targetFileName]])
|
session.addProvisions(currentRequest.sessionData, "_task_#{task._id}", [['_task', task._id, 'download', task.fileType, task.fileName, task.targetFileName]])
|
||||||
else
|
else
|
||||||
throw new Error('Task name not recognized')
|
return throwError(new Error('Task name not recognized'), currentRequest.httpResponse) if err
|
||||||
|
|
||||||
return nextRpc(currentRequest)
|
return nextRpc(currentRequest)
|
||||||
|
|
||||||
@@ -403,14 +411,14 @@ nextRpc = (currentRequest) ->
|
|||||||
sendRpcRequest = (currentRequest, id, rpcRequest) ->
|
sendRpcRequest = (currentRequest, id, rpcRequest) ->
|
||||||
if not rpcRequest?
|
if not rpcRequest?
|
||||||
session.end(currentRequest.sessionData, (err, isNew) ->
|
session.end(currentRequest.sessionData, (err, isNew) ->
|
||||||
throw err if err
|
return throwError(err, currentRequest.httpResponse) if err
|
||||||
|
|
||||||
delete currentSessions.get(currentRequest.httpRequest.connection)[currentRequest.sessionData.sessionId]
|
delete currentSessions.get(currentRequest.httpRequest.connection)[currentRequest.sessionData.sessionId]
|
||||||
if isNew
|
if isNew
|
||||||
util.log("#{currentRequest.sessionData.deviceId}: New device registered")
|
util.log("#{currentRequest.sessionData.deviceId}: New device registered")
|
||||||
|
|
||||||
db.clearTasks(currentRequest.sessionData.doneTasks, (err) ->
|
db.clearTasks(currentRequest.sessionData.doneTasks, (err) ->
|
||||||
throw err if err
|
return throwError(err, currentRequest.httpResponse) if err
|
||||||
|
|
||||||
counter = 1
|
counter = 1
|
||||||
|
|
||||||
@@ -421,7 +429,7 @@ sendRpcRequest = (currentRequest, id, rpcRequest) ->
|
|||||||
db.saveFault(currentRequest.sessionData.deviceId, k, currentRequest.sessionData.faults[k], (err) ->
|
db.saveFault(currentRequest.sessionData.deviceId, k, currentRequest.sessionData.faults[k], (err) ->
|
||||||
-- counter
|
-- counter
|
||||||
if err and counter >= 0
|
if err and counter >= 0
|
||||||
throw err
|
return throwError(err, currentRequest.httpResponse) if err
|
||||||
|
|
||||||
if counter == 0
|
if counter == 0
|
||||||
return writeResponse(currentRequest, soap.response(null))
|
return writeResponse(currentRequest, soap.response(null))
|
||||||
@@ -430,7 +438,7 @@ sendRpcRequest = (currentRequest, id, rpcRequest) ->
|
|||||||
db.deleteFault(currentRequest.sessionData.deviceId, k, (err) ->
|
db.deleteFault(currentRequest.sessionData.deviceId, k, (err) ->
|
||||||
-- counter
|
-- counter
|
||||||
if err and counter >= 0
|
if err and counter >= 0
|
||||||
throw err
|
return throwError(err, currentRequest.httpResponse) if err
|
||||||
|
|
||||||
if counter == 0
|
if counter == 0
|
||||||
return writeResponse(currentRequest, soap.response(null))
|
return writeResponse(currentRequest, soap.response(null))
|
||||||
@@ -454,7 +462,7 @@ sendRpcRequest = (currentRequest, id, rpcRequest) ->
|
|||||||
|
|
||||||
if not rpcRequest.fileSize?
|
if not rpcRequest.fileSize?
|
||||||
return cache.getFiles((err, hash, files) ->
|
return cache.getFiles((err, hash, files) ->
|
||||||
throw err if err
|
return throwError(err, currentRequest.httpResponse) if err
|
||||||
|
|
||||||
if rpcRequest.fileName of files
|
if rpcRequest.fileName of files
|
||||||
rpcRequest.fileSize = files[rpcRequest.fileName].length
|
rpcRequest.fileSize = files[rpcRequest.fileName].length
|
||||||
@@ -510,10 +518,10 @@ onConnection = (socket) ->
|
|||||||
sessions = currentSessions.get(socket)
|
sessions = currentSessions.get(socket)
|
||||||
for sessionId, sessionData of sessions
|
for sessionId, sessionData of sessions
|
||||||
session.serialize(sessionData, (err, sessionDataString) ->
|
session.serialize(sessionData, (err, sessionDataString) ->
|
||||||
throw err if err
|
return throwError(err) if err
|
||||||
# TODO don't set if process is shutting down
|
# TODO don't set if process is shutting down
|
||||||
db.redisClient.setex("session_#{sessionId}", sessionData.timeout, sessionDataString, (err) ->
|
db.redisClient.setex("session_#{sessionId}", sessionData.timeout, sessionDataString, (err) ->
|
||||||
throw err if err
|
return throwError(err) if err
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -559,7 +567,7 @@ listener = (httpRequest, httpResponse) ->
|
|||||||
stream.on('end', () ->
|
stream.on('end', () ->
|
||||||
cwmpRequest = null
|
cwmpRequest = null
|
||||||
getSession(httpRequest, f = (err, sessionData) ->
|
getSession(httpRequest, f = (err, sessionData) ->
|
||||||
throw err if err
|
return throwError(err, httpResponse) if err
|
||||||
cwmpRequest ?= soap.request(httpRequest, sessionData?.cwmpVersion)
|
cwmpRequest ?= soap.request(httpRequest, sessionData?.cwmpVersion)
|
||||||
if not sessionData?
|
if not sessionData?
|
||||||
if cwmpRequest.methodRequest?.type isnt 'Inform'
|
if cwmpRequest.methodRequest?.type isnt 'Inform'
|
||||||
@@ -569,7 +577,7 @@ listener = (httpRequest, httpResponse) ->
|
|||||||
|
|
||||||
deviceId = common.generateDeviceId(cwmpRequest.methodRequest.deviceId)
|
deviceId = common.generateDeviceId(cwmpRequest.methodRequest.deviceId)
|
||||||
return session.init(deviceId, cwmpRequest.cwmpVersion, cwmpRequest.sessionTimeout ? config.get('SESSION_TIMEOUT', deviceId), (err, sessionData) ->
|
return session.init(deviceId, cwmpRequest.cwmpVersion, cwmpRequest.sessionTimeout ? config.get('SESSION_TIMEOUT', deviceId), (err, sessionData) ->
|
||||||
throw err if err
|
return throwError(err, httpResponse) if err
|
||||||
|
|
||||||
sessionData.sessionId = crypto.randomBytes(8).toString('hex')
|
sessionData.sessionId = crypto.randomBytes(8).toString('hex')
|
||||||
|
|
||||||
@@ -578,7 +586,7 @@ listener = (httpRequest, httpResponse) ->
|
|||||||
httpRequest.connection.setTimeout(sessionData.timeout * 1000)
|
httpRequest.connection.setTimeout(sessionData.timeout * 1000)
|
||||||
|
|
||||||
db.getDueTasksAndFaultsAndOperations(deviceId, sessionData.timestamp, (err, dueTasks, faults, operations) ->
|
db.getDueTasksAndFaultsAndOperations(deviceId, sessionData.timestamp, (err, dueTasks, faults, operations) ->
|
||||||
throw err if err
|
return throwError(err, httpResponse) if err
|
||||||
sessionData.tasks = dueTasks
|
sessionData.tasks = dueTasks
|
||||||
sessionData.faults = faults
|
sessionData.faults = faults
|
||||||
sessionData.retries = {}
|
sessionData.retries = {}
|
||||||
@@ -606,7 +614,7 @@ listener = (httpRequest, httpResponse) ->
|
|||||||
if config.get('DEBUG', currentRequest.sessionData.deviceId)
|
if config.get('DEBUG', currentRequest.sessionData.deviceId)
|
||||||
dump = "# REQUEST #{new Date(Date.now())}\n" + JSON.stringify(httpRequest.headers) + "\n#{httpRequest.getBody()}\n\n"
|
dump = "# REQUEST #{new Date(Date.now())}\n" + JSON.stringify(httpRequest.headers) + "\n#{httpRequest.getBody()}\n\n"
|
||||||
require('fs').appendFile("./debug/#{currentRequest.sessionData.deviceId}.dump", dump, (err) ->
|
require('fs').appendFile("./debug/#{currentRequest.sessionData.deviceId}.dump", dump, (err) ->
|
||||||
throw err if err
|
return throwError(err) if err
|
||||||
)
|
)
|
||||||
|
|
||||||
if cwmpRequest.methodRequest?
|
if cwmpRequest.methodRequest?
|
||||||
@@ -623,15 +631,15 @@ listener = (httpRequest, httpResponse) ->
|
|||||||
})
|
})
|
||||||
writeResponse(currentRequest, res)
|
writeResponse(currentRequest, res)
|
||||||
else if cwmpRequest.methodRequest.type is 'TransferComplete'
|
else if cwmpRequest.methodRequest.type is 'TransferComplete'
|
||||||
throw new Error('ACS method not supported')
|
return throwError(new Error('ACS method not supported'), currentRequest.httpResponse) if err
|
||||||
else if cwmpRequest.methodResponse?
|
else if cwmpRequest.methodResponse?
|
||||||
session.rpcResponse(currentRequest.sessionData, cwmpRequest.id, cwmpRequest.methodResponse, (err) ->
|
session.rpcResponse(currentRequest.sessionData, cwmpRequest.id, cwmpRequest.methodResponse, (err) ->
|
||||||
throw err if err
|
return throwError(err, currentRequest.httpResponse) if err
|
||||||
nextRpc(currentRequest)
|
nextRpc(currentRequest)
|
||||||
)
|
)
|
||||||
else if cwmpRequest.fault?
|
else if cwmpRequest.fault?
|
||||||
session.rpcFault(currentRequest.sessionData, cwmpRequest.id, cwmpRequest.fault, (err, fault) ->
|
session.rpcFault(currentRequest.sessionData, cwmpRequest.id, cwmpRequest.fault, (err, fault) ->
|
||||||
throw err if err
|
return throwError(err, currentRequest.httpResponse) if err
|
||||||
|
|
||||||
if fault
|
if fault
|
||||||
for channel of currentRequest.sessionData.channels
|
for channel of currentRequest.sessionData.channels
|
||||||
@@ -649,7 +657,7 @@ listener = (httpRequest, httpResponse) ->
|
|||||||
)
|
)
|
||||||
else # CPE sent empty response
|
else # CPE sent empty response
|
||||||
session.timeoutOperations(currentRequest.sessionData, (err, faults, operations) ->
|
session.timeoutOperations(currentRequest.sessionData, (err, faults, operations) ->
|
||||||
throw err if err
|
return throwError(err, currentRequest.httpResponse) if err
|
||||||
|
|
||||||
for fault, i in faults
|
for fault, i in faults
|
||||||
for k, v of operations[i].retries
|
for k, v of operations[i].retries
|
||||||
|
|||||||
+73
-101
@@ -63,8 +63,13 @@ VIRTUAL_PARAMETERS_REGEX = /^\/virtual_parameters\/([a-zA-Z0-9\-\_\%]+)\/?$/
|
|||||||
FAULTS_REGEX = /^\/faults\/([a-zA-Z0-9\-\_\%\:]+)\/?$/
|
FAULTS_REGEX = /^\/faults\/([a-zA-Z0-9\-\_\%\:]+)\/?$/
|
||||||
|
|
||||||
|
|
||||||
errorToString = (err) ->
|
|
||||||
"#{err.name}: #{err.message}"
|
throwError = (err, httpResponse) ->
|
||||||
|
if httpResponse
|
||||||
|
httpResponse.writeHead(500, {'Connection' : 'close'})
|
||||||
|
httpResponse.end("#{err.name}: #{err.message}")
|
||||||
|
|
||||||
|
throw err
|
||||||
|
|
||||||
|
|
||||||
listener = (request, response) ->
|
listener = (request, response) ->
|
||||||
@@ -95,27 +100,21 @@ listener = (request, response) ->
|
|||||||
preset._id = presetName
|
preset._id = presetName
|
||||||
|
|
||||||
db.presetsCollection.save(preset, (err) ->
|
db.presetsCollection.save(preset, (err) ->
|
||||||
|
return throwError(err, response) if err
|
||||||
db.redisClient.del('presets_hash', (err) ->
|
db.redisClient.del('presets_hash', (err) ->
|
||||||
throw err if err
|
return throwError(err, response) if err
|
||||||
|
response.writeHead(200)
|
||||||
|
response.end()
|
||||||
)
|
)
|
||||||
if err
|
|
||||||
response.writeHead(500)
|
|
||||||
response.end(errorToString(err))
|
|
||||||
return
|
|
||||||
response.writeHead(200)
|
|
||||||
response.end()
|
|
||||||
)
|
)
|
||||||
else if request.method == 'DELETE'
|
else if request.method == 'DELETE'
|
||||||
db.presetsCollection.remove({'_id' : presetName}, (err) ->
|
db.presetsCollection.remove({'_id' : presetName}, (err) ->
|
||||||
|
return throwError(err, response) if err
|
||||||
db.redisClient.del('presets_hash', (err) ->
|
db.redisClient.del('presets_hash', (err) ->
|
||||||
throw err if err
|
return throwError(err, response) if err
|
||||||
|
response.writeHead(200)
|
||||||
|
response.end()
|
||||||
)
|
)
|
||||||
if err
|
|
||||||
response.writeHead(500)
|
|
||||||
response.end(errorToString(err))
|
|
||||||
return
|
|
||||||
response.writeHead(200)
|
|
||||||
response.end()
|
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
response.writeHead 405, {'Allow': 'PUT, DELETE'}
|
response.writeHead 405, {'Allow': 'PUT, DELETE'}
|
||||||
@@ -127,27 +126,21 @@ listener = (request, response) ->
|
|||||||
object._id = objectName
|
object._id = objectName
|
||||||
|
|
||||||
db.objectsCollection.save(object, (err) ->
|
db.objectsCollection.save(object, (err) ->
|
||||||
|
return throwError(err, response) if err
|
||||||
db.redisClient.del('objects', 'presets_hash', (err) ->
|
db.redisClient.del('objects', 'presets_hash', (err) ->
|
||||||
throw err if err
|
return throwError(err, response) if err
|
||||||
|
response.writeHead(200)
|
||||||
|
response.end()
|
||||||
)
|
)
|
||||||
if err
|
|
||||||
response.writeHead(500)
|
|
||||||
response.end(errorToString(err))
|
|
||||||
return
|
|
||||||
response.writeHead(200)
|
|
||||||
response.end()
|
|
||||||
)
|
)
|
||||||
else if request.method == 'DELETE'
|
else if request.method == 'DELETE'
|
||||||
db.objectsCollection.remove({'_id' : objectName}, (err) ->
|
db.objectsCollection.remove({'_id' : objectName}, (err) ->
|
||||||
|
return throwError(err, response) if err
|
||||||
db.redisClient.del('objects', 'presets_hash', (err) ->
|
db.redisClient.del('objects', 'presets_hash', (err) ->
|
||||||
throw err if err
|
return throwError(err, response) if err
|
||||||
|
response.writeHead(200)
|
||||||
|
response.end()
|
||||||
)
|
)
|
||||||
if err
|
|
||||||
response.writeHead(500)
|
|
||||||
response.end(errorToString(err))
|
|
||||||
return
|
|
||||||
response.writeHead(200)
|
|
||||||
response.end()
|
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
response.writeHead 405, {'Allow': 'PUT, DELETE'}
|
response.writeHead 405, {'Allow': 'PUT, DELETE'}
|
||||||
@@ -161,27 +154,21 @@ listener = (request, response) ->
|
|||||||
}
|
}
|
||||||
|
|
||||||
db.provisionsCollection.save(object, (err) ->
|
db.provisionsCollection.save(object, (err) ->
|
||||||
|
return throwError(err, response) if err
|
||||||
db.redisClient.del('presets_hash', (err) ->
|
db.redisClient.del('presets_hash', (err) ->
|
||||||
throw err if err
|
return throwError(err, response) if err
|
||||||
|
response.writeHead(200)
|
||||||
|
response.end()
|
||||||
)
|
)
|
||||||
if err
|
|
||||||
response.writeHead(500)
|
|
||||||
response.end(errorToString(err))
|
|
||||||
return
|
|
||||||
response.writeHead(200)
|
|
||||||
response.end()
|
|
||||||
)
|
)
|
||||||
else if request.method == 'DELETE'
|
else if request.method == 'DELETE'
|
||||||
db.provisionsCollection.remove({'_id' : provisionName}, (err) ->
|
db.provisionsCollection.remove({'_id' : provisionName}, (err) ->
|
||||||
|
return throwError(err, response) if err
|
||||||
db.redisClient.del('presets_hash', (err) ->
|
db.redisClient.del('presets_hash', (err) ->
|
||||||
throw err if err
|
return throwError(err, response) if err
|
||||||
|
response.writeHead(200)
|
||||||
|
response.end()
|
||||||
)
|
)
|
||||||
if err
|
|
||||||
response.writeHead(500)
|
|
||||||
response.end(errorToString(err))
|
|
||||||
return
|
|
||||||
response.writeHead(200)
|
|
||||||
response.end()
|
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
response.writeHead 405, {'Allow': 'PUT, DELETE'}
|
response.writeHead 405, {'Allow': 'PUT, DELETE'}
|
||||||
@@ -195,27 +182,21 @@ listener = (request, response) ->
|
|||||||
}
|
}
|
||||||
|
|
||||||
db.virtualParametersCollection.save(object, (err) ->
|
db.virtualParametersCollection.save(object, (err) ->
|
||||||
|
return throwError(err, response) if err
|
||||||
db.redisClient.del('presets_hash', (err) ->
|
db.redisClient.del('presets_hash', (err) ->
|
||||||
throw err if err
|
return throwError(err, response) if err
|
||||||
|
response.writeHead(200)
|
||||||
|
response.end()
|
||||||
)
|
)
|
||||||
if err
|
|
||||||
response.writeHead(500)
|
|
||||||
response.end(errorToString(err))
|
|
||||||
return
|
|
||||||
response.writeHead(200)
|
|
||||||
response.end()
|
|
||||||
)
|
)
|
||||||
else if request.method == 'DELETE'
|
else if request.method == 'DELETE'
|
||||||
db.virtualParametersCollection.remove({'_id' : virtualParameterName}, (err) ->
|
db.virtualParametersCollection.remove({'_id' : virtualParameterName}, (err) ->
|
||||||
|
return throwError(err, response) if err
|
||||||
db.redisClient.del('presets_hash', (err) ->
|
db.redisClient.del('presets_hash', (err) ->
|
||||||
throw err if err
|
return throwError(err, response) if err
|
||||||
|
response.writeHead(200)
|
||||||
|
response.end()
|
||||||
)
|
)
|
||||||
if err
|
|
||||||
response.writeHead(500)
|
|
||||||
response.end(errorToString(err))
|
|
||||||
return
|
|
||||||
response.writeHead(200)
|
|
||||||
response.end()
|
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
response.writeHead 405, {'Allow': 'PUT, DELETE'}
|
response.writeHead 405, {'Allow': 'PUT, DELETE'}
|
||||||
@@ -226,27 +207,21 @@ listener = (request, response) ->
|
|||||||
tag = querystring.unescape(r[2])
|
tag = querystring.unescape(r[2])
|
||||||
if request.method == 'POST'
|
if request.method == 'POST'
|
||||||
db.devicesCollection.update({'_id' : deviceId}, {'$addToSet' : {'_tags' : tag}}, {safe: true}, (err) ->
|
db.devicesCollection.update({'_id' : deviceId}, {'$addToSet' : {'_tags' : tag}}, {safe: true}, (err) ->
|
||||||
|
return throwError(err, response) if err
|
||||||
db.redisClient.del("#{deviceId}_presets_hash", (err) ->
|
db.redisClient.del("#{deviceId}_presets_hash", (err) ->
|
||||||
throw err if err
|
return throwError(err, response) if err
|
||||||
|
response.writeHead(200)
|
||||||
|
response.end()
|
||||||
)
|
)
|
||||||
if err
|
|
||||||
response.writeHead(500)
|
|
||||||
response.end(errorToString(err))
|
|
||||||
return
|
|
||||||
response.writeHead(200)
|
|
||||||
response.end()
|
|
||||||
)
|
)
|
||||||
else if request.method == 'DELETE'
|
else if request.method == 'DELETE'
|
||||||
db.devicesCollection.update({'_id' : deviceId}, {'$pull' : {'_tags' : tag}}, {safe: true}, (err) ->
|
db.devicesCollection.update({'_id' : deviceId}, {'$pull' : {'_tags' : tag}}, {safe: true}, (err) ->
|
||||||
|
return throwError(err, response) if err
|
||||||
db.redisClient.del("#{deviceId}_presets_hash", (err) ->
|
db.redisClient.del("#{deviceId}_presets_hash", (err) ->
|
||||||
throw err if err
|
return throwError(err, response) if err
|
||||||
|
response.writeHead(200)
|
||||||
|
response.end()
|
||||||
)
|
)
|
||||||
if err
|
|
||||||
response.writeHead(500)
|
|
||||||
response.end(errorToString(err))
|
|
||||||
return
|
|
||||||
response.writeHead(200)
|
|
||||||
response.end()
|
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
response.writeHead 405, {'Allow': 'POST, DELETE'}
|
response.writeHead 405, {'Allow': 'POST, DELETE'}
|
||||||
@@ -257,12 +232,16 @@ listener = (request, response) ->
|
|||||||
deviceId = faultId.split(':', 1)[0]
|
deviceId = faultId.split(':', 1)[0]
|
||||||
channel = faultId.slice(deviceId.length + 1)
|
channel = faultId.slice(deviceId.length + 1)
|
||||||
db.redisClient.del("#{deviceId}_faults", (err) ->
|
db.redisClient.del("#{deviceId}_faults", (err) ->
|
||||||
|
return throwError(err, response) if err
|
||||||
db.faultsCollection.remove({_id : faultId}, (err) ->
|
db.faultsCollection.remove({_id : faultId}, (err) ->
|
||||||
throw err if err
|
return throwError(err, response) if err
|
||||||
if channel.startsWith('_task_')
|
if channel.startsWith('_task_')
|
||||||
return db.tasksCollection.remove({_id : new mongodb.ObjectID(channel.slice(6))}, (err) ->
|
return db.tasksCollection.remove({_id : new mongodb.ObjectID(channel.slice(6))}, (err) ->
|
||||||
throw err if err
|
return throwError(err, response) if err
|
||||||
|
response.writeHead(200)
|
||||||
|
response.end()
|
||||||
)
|
)
|
||||||
|
|
||||||
response.writeHead(200)
|
response.writeHead(200)
|
||||||
response.end()
|
response.end()
|
||||||
)
|
)
|
||||||
@@ -277,9 +256,9 @@ listener = (request, response) ->
|
|||||||
task = JSON.parse(body)
|
task = JSON.parse(body)
|
||||||
task.device = deviceId
|
task.device = deviceId
|
||||||
apiFunctions.insertTasks(task, (err) ->
|
apiFunctions.insertTasks(task, (err) ->
|
||||||
throw err if err
|
return throwError(err, response) if err
|
||||||
db.redisClient.del("#{deviceId}_no_tasks", (err) ->
|
db.redisClient.del("#{deviceId}_no_tasks", (err) ->
|
||||||
throw err if err
|
return throwError(err, response) if err
|
||||||
|
|
||||||
if urlParts.query.connection_request?
|
if urlParts.query.connection_request?
|
||||||
apiFunctions.connectionRequest(deviceId, (err) ->
|
apiFunctions.connectionRequest(deviceId, (err) ->
|
||||||
@@ -288,20 +267,14 @@ listener = (request, response) ->
|
|||||||
response.end(JSON.stringify(task))
|
response.end(JSON.stringify(task))
|
||||||
else
|
else
|
||||||
apiFunctions.watchTask(task._id, config.get('DEVICE_ONLINE_THRESHOLD', deviceId), (err, status) ->
|
apiFunctions.watchTask(task._id, config.get('DEVICE_ONLINE_THRESHOLD', deviceId), (err, status) ->
|
||||||
if err
|
return throwError(err, response) if err
|
||||||
response.writeHead(500)
|
|
||||||
response.end(errorToString(err))
|
|
||||||
return
|
|
||||||
|
|
||||||
if status is 'timeout'
|
if status is 'timeout'
|
||||||
response.writeHead(202, 'Task queued but not processed', {'Content-Type' : 'application/json'})
|
response.writeHead(202, 'Task queued but not processed', {'Content-Type' : 'application/json'})
|
||||||
response.end(JSON.stringify(task))
|
response.end(JSON.stringify(task))
|
||||||
else if status is 'fault'
|
else if status is 'fault'
|
||||||
db.tasksCollection.findOne({_id : task._id}, (err, task) ->
|
db.tasksCollection.findOne({_id : task._id}, (err, task) ->
|
||||||
if err
|
return throwError(err, response) if err
|
||||||
response.writeHead(500)
|
|
||||||
response.end(errorToString(err))
|
|
||||||
return
|
|
||||||
|
|
||||||
response.writeHead(202, 'Task faulted', {'Content-Type' : 'application/json'})
|
response.writeHead(202, 'Task faulted', {'Content-Type' : 'application/json'})
|
||||||
response.end(JSON.stringify(task))
|
response.end(JSON.stringify(task))
|
||||||
@@ -321,7 +294,7 @@ listener = (request, response) ->
|
|||||||
apiFunctions.connectionRequest(deviceId, (err) ->
|
apiFunctions.connectionRequest(deviceId, (err) ->
|
||||||
if err
|
if err
|
||||||
response.writeHead 504
|
response.writeHead 504
|
||||||
response.end(errorToString(err))
|
response.end("#{err.name}: #{err.message}")
|
||||||
return
|
return
|
||||||
response.writeHead 200
|
response.writeHead 200
|
||||||
response.end()
|
response.end()
|
||||||
@@ -339,12 +312,12 @@ listener = (request, response) ->
|
|||||||
if not action? or action is '/'
|
if not action? or action is '/'
|
||||||
if request.method == 'DELETE'
|
if request.method == 'DELETE'
|
||||||
db.tasksCollection.findOne({'_id' : taskId}, {'device' : 1}, (err, task) ->
|
db.tasksCollection.findOne({'_id' : taskId}, {'device' : 1}, (err, task) ->
|
||||||
throw err if err
|
return throwError(err, response) if err
|
||||||
deviceId = task.device
|
deviceId = task.device
|
||||||
db.tasksCollection.remove({'_id' : taskId}, (err) ->
|
db.tasksCollection.remove({'_id' : taskId}, (err) ->
|
||||||
throw err if err
|
return throwError(err, response) if err
|
||||||
db.faultsCollection.remove({_id : "#{deviceId}:_task_#{String(taskId)}"}, (err) ->
|
db.faultsCollection.remove({_id : "#{deviceId}:_task_#{String(taskId)}"}, (err) ->
|
||||||
throw err if err
|
return throwError(err, response) if err
|
||||||
response.writeHead(200)
|
response.writeHead(200)
|
||||||
response.end()
|
response.end()
|
||||||
)
|
)
|
||||||
@@ -356,14 +329,14 @@ listener = (request, response) ->
|
|||||||
else if action is '/retry'
|
else if action is '/retry'
|
||||||
if request.method == 'POST'
|
if request.method == 'POST'
|
||||||
db.tasksCollection.findOne({'_id' : taskId}, {'device' : 1}, (err, task) ->
|
db.tasksCollection.findOne({'_id' : taskId}, {'device' : 1}, (err, task) ->
|
||||||
throw err if err
|
return throwError(err, response) if err
|
||||||
deviceId = task.device
|
deviceId = task.device
|
||||||
db.tasksCollection.update({_id : taskId}, {$unset : {fault : 1}, $set : {timestamp : new Date()}}, (err, count) ->
|
db.tasksCollection.update({_id : taskId}, {$unset : {fault : 1}, $set : {timestamp : new Date()}}, (err, count) ->
|
||||||
throw err if err
|
return throwError(err, response) if err
|
||||||
db.faultsCollection.remove({_id : "#{deviceId}:_task_#{String(taskId)}"}, (err) ->
|
db.faultsCollection.remove({_id : "#{deviceId}:_task_#{String(taskId)}"}, (err) ->
|
||||||
throw err if err
|
return throwError(err, response) if err
|
||||||
db.redisClient.del("#{deviceId}_no_tasks", "#{deviceId}_faults", (err) ->
|
db.redisClient.del("#{deviceId}_no_tasks", "#{deviceId}_faults", (err) ->
|
||||||
throw err if err
|
return throwError(err, response) if err
|
||||||
response.writeHead(200)
|
response.writeHead(200)
|
||||||
response.end()
|
response.end()
|
||||||
)
|
)
|
||||||
@@ -389,9 +362,9 @@ listener = (request, response) ->
|
|||||||
gs = new mongodb.GridStore(db.mongoDb, filename, filename, 'w', {metadata : metadata})
|
gs = new mongodb.GridStore(db.mongoDb, filename, filename, 'w', {metadata : metadata})
|
||||||
gs.open((err, gs) ->
|
gs.open((err, gs) ->
|
||||||
gs.write(body, (err, res) ->
|
gs.write(body, (err, res) ->
|
||||||
throw err if err
|
return throwError(err, response) if err
|
||||||
gs.close((err) ->
|
gs.close((err) ->
|
||||||
throw err if err
|
return throwError(err, response) if err
|
||||||
response.writeHead(201)
|
response.writeHead(201)
|
||||||
response.end()
|
response.end()
|
||||||
)
|
)
|
||||||
@@ -410,7 +383,7 @@ listener = (request, response) ->
|
|||||||
require('child_process').exec("ping -w 1 -i 0.2 -c 3 #{host}", (err, stdout, stderr) ->
|
require('child_process').exec("ping -w 1 -i 0.2 -c 3 #{host}", (err, stdout, stderr) ->
|
||||||
if err
|
if err
|
||||||
response.writeHead(404, {'Cache-Control' : 'no-cache'})
|
response.writeHead(404, {'Cache-Control' : 'no-cache'})
|
||||||
response.end(errorToString(err))
|
response.end("#{err.name}: #{err.message}")
|
||||||
return
|
return
|
||||||
response.writeHead(200, {'Content-Type' : 'text/plain', 'Cache-Control' : 'no-cache'})
|
response.writeHead(200, {'Content-Type' : 'text/plain', 'Cache-Control' : 'no-cache'})
|
||||||
response.end(stdout)
|
response.end(stdout)
|
||||||
@@ -423,10 +396,7 @@ listener = (request, response) ->
|
|||||||
|
|
||||||
deviceId = querystring.unescape(DELETE_DEVICE_REGEX.exec(urlParts.pathname)[1])
|
deviceId = querystring.unescape(DELETE_DEVICE_REGEX.exec(urlParts.pathname)[1])
|
||||||
apiFunctions.deleteDevice(deviceId, (err) ->
|
apiFunctions.deleteDevice(deviceId, (err) ->
|
||||||
if err
|
return throwError(err, response) if err
|
||||||
response.writeHead(500)
|
|
||||||
response.end(errorToString(err))
|
|
||||||
return
|
|
||||||
response.writeHead(200)
|
response.writeHead(200)
|
||||||
response.end()
|
response.end()
|
||||||
)
|
)
|
||||||
@@ -456,7 +426,7 @@ listener = (request, response) ->
|
|||||||
q = JSON.parse(urlParts.query.query)
|
q = JSON.parse(urlParts.query.query)
|
||||||
catch err
|
catch err
|
||||||
response.writeHead(400)
|
response.writeHead(400)
|
||||||
response.end(errorToString(err))
|
response.end("#{err.name}: #{err.message}")
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
q = {}
|
q = {}
|
||||||
@@ -503,7 +473,9 @@ listener = (request, response) ->
|
|||||||
response.write("[\n")
|
response.write("[\n")
|
||||||
i = 0
|
i = 0
|
||||||
cur.each((err, item) ->
|
cur.each((err, item) ->
|
||||||
throw err if err
|
if err
|
||||||
|
throwError(err, response)
|
||||||
|
return false
|
||||||
|
|
||||||
if item?
|
if item?
|
||||||
response.write(",\n") if i++
|
response.write(",\n") if i++
|
||||||
|
|||||||
+8
-20
@@ -15,7 +15,6 @@
|
|||||||
# along with GenieACS. If not, see <http://www.gnu.org/licenses/>.
|
# along with GenieACS. If not, see <http://www.gnu.org/licenses/>.
|
||||||
###
|
###
|
||||||
|
|
||||||
domain = require 'domain'
|
|
||||||
util = require 'util'
|
util = require 'util'
|
||||||
cluster = require 'cluster'
|
cluster = require 'cluster'
|
||||||
config = require './config'
|
config = require './config'
|
||||||
@@ -31,7 +30,7 @@ networkInterface = config.get("#{service.toUpperCase()}_INTERFACE")
|
|||||||
port = config.get("#{service.toUpperCase()}_PORT")
|
port = config.get("#{service.toUpperCase()}_PORT")
|
||||||
useHttps = config.get("#{service.toUpperCase()}_SSL")
|
useHttps = config.get("#{service.toUpperCase()}_SSL")
|
||||||
|
|
||||||
serviceListener = require("./#{service}").listener
|
listener = require("./#{service}").listener
|
||||||
onConnection = require("./#{service}").onConnection
|
onConnection = require("./#{service}").onConnection
|
||||||
|
|
||||||
server = null
|
server = null
|
||||||
@@ -48,25 +47,14 @@ exit = () ->
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
listener = (httpRequest, httpResponse) ->
|
process.on('uncaughtException', (err) ->
|
||||||
d = domain.create()
|
try
|
||||||
|
|
||||||
d.on('error', (err) ->
|
|
||||||
util.error("#{new Date().toISOString()} - #{err.stack}\n")
|
util.error("#{new Date().toISOString()} - #{err.stack}\n")
|
||||||
try
|
exit()
|
||||||
exit()
|
catch err
|
||||||
httpResponse.writeHead(500, {'Connection' : 'close'})
|
util.error("#{new Date().toISOString()} - #{err2.stack}\n")
|
||||||
httpResponse.end("#{err.name}: #{err.message}")
|
throw err
|
||||||
catch err2
|
)
|
||||||
util.error("#{new Date().toISOString()} - #{err2.stack}\n")
|
|
||||||
)
|
|
||||||
|
|
||||||
d.add(httpRequest)
|
|
||||||
d.add(httpResponse)
|
|
||||||
|
|
||||||
d.run(() ->
|
|
||||||
serviceListener(httpRequest, httpResponse)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
if useHttps
|
if useHttps
|
||||||
|
|||||||
Reference in new issue
Block a user