handle exception and restart pullingafter timeout

This commit is contained in:
Simon Zeyer 2024-09-26 14:14:23 +02:00
parent 5b923badf7
commit 388bcc6c2c
2 changed files with 44 additions and 31 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "Divera Status", "name": "Divera Status",
"version": "0.0.1", "version": "0.0.2",
"description": "Übernehmen des Status aus der Divera App in Alarmiator", "description": "Übernehmen des Status aus der Divera App in Alarmiator",
"main": "base.js", "main": "base.js",
"service": "service.js", "service": "service.js",

View File

@ -238,41 +238,54 @@ async function onStateChange(consumer_id, status_id){
} }
} }
function sleep(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
}
async function startAPI() { async function startAPI() {
let _auth = await auth() while(true){
if(_auth){ try{
global.logger.info('auth OK') let _auth = await auth()
var _pulled_data = await pull() if(_auth){
while(_pulled_data !== null){ global.logger.info('auth OK')
if(_pulled_data !== null){ var _pulled_data = await pull()
if(_pulled_data.success){ while(_pulled_data !== null){
var d = _pulled_data.data if(_pulled_data !== null){
if('cluster' in d){ if(_pulled_data.success){
pulled_data['consumer'] = d['cluster']['consumer'] var d = _pulled_data.data
pulled_data['status'] = d['cluster']['status'] if('cluster' in d){
} pulled_data['consumer'] = d['cluster']['consumer']
if('monitor' in d){ pulled_data['status'] = d['cluster']['status']
var m = d['monitor'][config.MONITOR_ID]
Object.entries(m).forEach(([key, value]) => {
// wenn 'monitor' nicht in pulled_data ist das der erste pull, dann alle status in ALARMiator abgleichen (betrifft hautsächlich den EB/NEB status)
if(!('monitor' in pulled_data) || ('monitor' in pulled_data && value.status !== pulled_data['monitor'][key]['status'])){
onStateChange(value.id,value.status )
} }
}); if('monitor' in d){
pulled_data['monitor'] = d['monitor'][config.MONITOR_ID] var m = d['monitor'][config.MONITOR_ID]
Object.entries(m).forEach(([key, value]) => {
// wenn 'monitor' nicht in pulled_data ist das der erste pull, dann alle status in ALARMiator abgleichen (betrifft hautsächlich den EB/NEB status)
if(!('monitor' in pulled_data) || ('monitor' in pulled_data && value.status !== pulled_data['monitor'][key]['status'])){
onStateChange(value.id,value.status )
}
});
pulled_data['monitor'] = d['monitor'][config.MONITOR_ID]
}
}
}
_pulled_data = await pull()
if(_pulled_data === null){
global.logger.debug('_pulled_data === null, reauth')
_auth = await auth()
_pulled_data = await pull()
if(_pulled_data === null){
global.logger.debug('_pulled_data === null after reauth, EXIT!!')
}
} }
} }
} }
_pulled_data = await pull() }catch(err){
if(_pulled_data === null){ console.error(err);
global.logger.debug('_pulled_data === null, reauth')
_auth = await auth()
_pulled_data = await pull()
if(_pulled_data === null){
global.logger.debug('_pulled_data === null after reauth, EXIT!!')
}
}
} }
await sleep(10000);
global.logger.info('auth mit API_KEY war nicht erfolgreich. Service ist gestoppt und startet nicht mehr automatisch??')
} }
global.logger.info('auth mit API_KEY war nicht erfolgreich. Service ist gestoppt und startet nicht mehr automatisch??')
} }