Turn errors from scripts and extensions into faults
This commit is contained in:
1 parent
7ac94a5304
commit
9f85ead558
8 files changed
+254
-105
No files matched your search
+33
-3
@@ -207,9 +207,12 @@ applyPresets = (currentRequest) ->
|
||||
for k, v of parameters
|
||||
declarations.push([v, 1, {value: 1}])
|
||||
|
||||
session.rpcRequest(currentRequest.sessionData, declarations, (err, id, rpcRequest) ->
|
||||
session.rpcRequest(currentRequest.sessionData, declarations, (err, faults, id, rpcRequest) ->
|
||||
throw err if err
|
||||
|
||||
if faults?
|
||||
throw new Error('A fault occured while trying to discover parameters to test preset preconditions: ' + JSON.stringify(faults))
|
||||
|
||||
if rpcRequest?
|
||||
return sendRpcRequest(currentRequest, id, rpcRequest)
|
||||
|
||||
@@ -227,9 +230,18 @@ applyPresets = (currentRequest) ->
|
||||
if query.testFilter(parameters, p.precondition)
|
||||
session.addProvisions(currentRequest.sessionData, p.channel, p.provisions)
|
||||
|
||||
session.rpcRequest(currentRequest.sessionData, null, (err, id, rpcRequest, doneProvisions) ->
|
||||
session.rpcRequest(currentRequest.sessionData, null, (err, faults, id, rpcRequest, doneProvisions) ->
|
||||
throw err if err
|
||||
|
||||
if faults?
|
||||
for channel, fault of faults
|
||||
if not fault.retries? and Object.keys(faults).length == 1
|
||||
fault.retries = 0
|
||||
currentRequest.sessionData.faults[channel] = fault
|
||||
util.log("#{currentRequest.sessionData.deviceId}: Fault response for channel #{channel} (retries: #{fault.retries ? 0})")
|
||||
|
||||
return nextRpc(currentRequest)
|
||||
|
||||
for p, i in doneProvisions or []
|
||||
delete currentRequest.sessionData.faults[currentRequest.sessionData.channels[i]]
|
||||
|
||||
@@ -240,8 +252,26 @@ applyPresets = (currentRequest) ->
|
||||
|
||||
|
||||
nextRpc = (currentRequest) ->
|
||||
session.rpcRequest(currentRequest.sessionData, null, (err, id, rpcRequest, doneProvisions) ->
|
||||
session.rpcRequest(currentRequest.sessionData, null, (err, faults, id, rpcRequest, doneProvisions) ->
|
||||
throw err if err
|
||||
|
||||
if faults?
|
||||
for channel, fault of faults
|
||||
if channel.startsWith('_task_')
|
||||
taskId = channel.slice(6)
|
||||
for t, j in currentRequest.sessionData.tasks
|
||||
if t._id == taskId
|
||||
currentRequest.sessionData.tasks.splice(j, 1)
|
||||
fault.expiry = t.expiry if t.expiry?
|
||||
break
|
||||
|
||||
if not fault.retries? and Object.keys(faults).length == 1
|
||||
fault.retries = 0
|
||||
currentRequest.sessionData.faults[channel] = fault
|
||||
util.log("#{currentRequest.sessionData.deviceId}: Fault response for channel #{channel} (retries: #{fault.retries ? 0})")
|
||||
|
||||
return nextRpc(currentRequest)
|
||||
|
||||
if rpcRequest?
|
||||
return sendRpcRequest(currentRequest, id, rpcRequest)
|
||||
|
||||
|
||||
Reference in new issue
Block a user