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