Minor cleanup in libs/monitor.js

install-with-shinobicctv-user-instead-of-root
Moe 2020-08-26 21:36:36 -07:00
parent 3e8d605de8
commit a446c0aa59
1 changed files with 69 additions and 42 deletions

View File

@ -456,7 +456,7 @@ module.exports = function(s,config,lang){
}
}
s.cameraCheckObjectsInDetails = function(e){
const checkObjectsInDetails = function(e){
//parse Objects
(['detector_cascades','cords','detector_filters','input_map_choices']).forEach(function(v){
if(e.details && e.details[v]){
@ -658,6 +658,23 @@ module.exports = function(s,config,lang){
})
})
}
const forceMonitorRestart = (monitor,restartMessage) => {
const monitorConfig = Object.assign(s.group[monitor.ke].rawMonitorConfigurations[monitor.mid],{})
s.sendMonitorStatus({
id: monitor.mid,
ke: monitor.ke,
status: lang.Restarting
})
launchMonitorProcesses(monitorConfig)
s.userLog({
ke: monitor.ke,
mid: monitor.mid,
},restartMessage)
s.orphanedVideoCheck({
ke: monitor.ke,
mid: monitor.mid,
},2,null,true)
}
s.stripAuthFromHost = function(e){
var host = e.host.split('@');
if(host[1]){
@ -669,7 +686,7 @@ module.exports = function(s,config,lang){
}
return host
}
s.resetRecordingCheck = function(e){
const resetRecordingCheck = function(e){
clearTimeout(s.group[e.ke].activeMonitors[e.id].recordingChecker)
var cutoff = e.cutoff + 0
if(e.type === 'dashcam'){
@ -677,10 +694,15 @@ module.exports = function(s,config,lang){
}
s.group[e.ke].activeMonitors[e.id].recordingChecker = setTimeout(function(){
if(s.group[e.ke].activeMonitors[e.id].isStarted === true && s.group[e.ke].rawMonitorConfigurations[e.id].mode === 'record'){
launchMonitorProcesses(s.cleanMonitorObject(e));
s.sendMonitorStatus({id:e.id,ke:e.ke,status:lang.Restarting});
s.userLog(e,{type:lang['Camera is not recording'],msg:{msg:lang['Restarting Process']}});
s.orphanedVideoCheck(e,2,null,true)
forceMonitorRestart({
ke: e.ke,
mid: e.id,
},{
type: lang['Camera is not recording'],
msg: {
msg: lang['Restarting Process']
}
})
}
},60000 * cutoff * 1.3);
}
@ -688,9 +710,15 @@ module.exports = function(s,config,lang){
clearTimeout(s.group[e.ke].activeMonitors[e.id].streamChecker)
s.group[e.ke].activeMonitors[e.id].streamChecker = setTimeout(function(){
if(s.group[e.ke].activeMonitors[e.id] && s.group[e.ke].activeMonitors[e.id].isStarted === true){
launchMonitorProcesses(s.cleanMonitorObject(e));
s.userLog(e,{type:lang['Camera is not streaming'],msg:{msg:lang['Restarting Process']}});
s.orphanedVideoCheck(e,2,null,true)
forceMonitorRestart({
ke: e.ke,
mid: e.id,
},{
type: lang['Camera is not streaming'],
msg: {
msg: lang['Restarting Process']
}
})
}
},60000*1);
}
@ -735,7 +763,7 @@ module.exports = function(s,config,lang){
if(e.details.loglevel!=='quiet'){
s.userLog(e,{type:lang['Process Unexpected Exit'],msg:{msg:lang['Process Crashed for Monitor'],cmd:s.group[e.ke].activeMonitors[e.id].ffmpeg}});
}
s.fatalCameraError(e,'Process Unexpected Exit');
fatalError(e,'Process Unexpected Exit');
s.orphanedVideoCheck(e,2,null,true)
s.onMonitorUnexpectedExitExtensions.forEach(function(extender){
extender(Object.assign(s.group[e.ke].rawMonitorConfigurations[e.id],{}),e)
@ -745,7 +773,7 @@ module.exports = function(s,config,lang){
s.group[e.ke].activeMonitors[e.id].spawn.on('end',s.group[e.ke].activeMonitors[e.id].spawn_exit)
s.group[e.ke].activeMonitors[e.id].spawn.on('exit',s.group[e.ke].activeMonitors[e.id].spawn_exit)
s.group[e.ke].activeMonitors[e.id].spawn.on('error',function(er){
s.userLog(e,{type:'Spawn Error',msg:er});s.fatalCameraError(e,'Spawn Error')
s.userLog(e,{type:'Spawn Error',msg:er});fatalError(e,'Spawn Error')
})
s.userLog(e,{type:lang['Process Started'],msg:{cmd:s.group[e.ke].activeMonitors[e.id].ffmpeg}})
if(s.isWin === false){
@ -1059,7 +1087,7 @@ module.exports = function(s,config,lang){
}
s.group[e.ke].activeMonitors[e.id].detector_motion_count = []
})
s.resetRecordingCheck(e)
resetRecordingCheck(e)
}
})
}
@ -1095,7 +1123,7 @@ module.exports = function(s,config,lang){
//restart
setTimeout(function(){
s.userLog(e,{type:lang['Connection timed out'],msg:lang['Retrying...']});
s.fatalCameraError(e,'Connection timed out');
fatalError(e,'Connection timed out');
},1000)
break;
// case checkLog(d,'Immediate exit requested'):
@ -1144,8 +1172,8 @@ module.exports = function(s,config,lang){
return Object.assign({},obj)
}
//set master based process launcher
launchMonitorProcesses = function(e){
const activeMonitor = s.group[e.ke].activeMonitors[e.id]
const launchMonitorProcesses = function(e){
const activeMonitor = s.group[e.ke].activeMonitors[e.id]
// e = monitor object
clearTimeout(activeMonitor.resetFatalErrorCountTimer)
activeMonitor.resetFatalErrorCountTimer = setTimeout(()=>{
@ -1206,7 +1234,7 @@ module.exports = function(s,config,lang){
activeMonitor.fswatch = fs.watch(e.dir, {encoding : 'utf8'}, (event, filename) => {
switch(event){
case'change':
s.resetRecordingCheck(e)
resetRecordingCheck(e)
break;
}
});
@ -1282,7 +1310,7 @@ module.exports = function(s,config,lang){
extender(Object.assign(s.group[e.ke].rawMonitorConfigurations[e.id],{}),e)
})
s.userLog(e,{type:lang["Ping Failed"],msg:lang.skipPingText1});
s.fatalCameraError(e,"Ping Failed");return;
fatalError(e,"Ping Failed");return;
}
}
if(
@ -1332,7 +1360,7 @@ module.exports = function(s,config,lang){
extender(Object.assign(s.group[e.ke].rawMonitorConfigurations[e.id],{}),e)
})
s.userLog(e,{type:lang["Ping Failed"],msg:lang.skipPingText1});
s.fatalCameraError(e,"Ping Failed");return;
fatalError(e,"Ping Failed");return;
}
})
}else{
@ -1380,7 +1408,7 @@ module.exports = function(s,config,lang){
console.log(err)
}
}
s.fatalCameraError = function(e,errorMessage){
const fatalError = function(e,errorMessage){
const activeMonitor = s.group[e.ke].activeMonitors[e.id]
clearTimeout(activeMonitor.err_fatal_timeout);
++activeMonitor.errorFatalCount;
@ -1400,27 +1428,27 @@ module.exports = function(s,config,lang){
extender(Object.assign(s.group[e.ke].rawMonitorConfigurations[e.id],{}),e)
})
}
s.isWatchCountable = function(d){
try{
var variableMethodsToAllow = [
'mp4ws', //Poseidon over Websocket
'flvws',
'h265ws',
];
var indefiniteIgnore = [
'mjpeg',
'h264',
];
var monConfig = s.group[d.ke].rawMonitorConfigurations[d.id]
if(
variableMethodsToAllow.indexOf(monConfig.details.stream_type + monConfig.details.stream_flv_type) > -1 &&
indefiniteIgnore.indexOf(monConfig.details.stream_type) === -1
){
return true
}
}catch(err){}
return false
}
// s.isWatchCountable = function(d){
// try{
// var variableMethodsToAllow = [
// 'mp4ws', //Poseidon over Websocket
// 'flvws',
// 'h265ws',
// ];
// var indefiniteIgnore = [
// 'mjpeg',
// 'h264',
// ];
// var monConfig = s.group[d.ke].rawMonitorConfigurations[d.id]
// if(
// variableMethodsToAllow.indexOf(monConfig.details.stream_type + monConfig.details.stream_flv_type) > -1 &&
// indefiniteIgnore.indexOf(monConfig.details.stream_type) === -1
// ){
// return true
// }
// }catch(err){}
// return false
// }
s.addOrEditMonitor = function(form,callback,user){
var endData = {
ok: false
@ -1535,7 +1563,7 @@ module.exports = function(s,config,lang){
e.functionMode = x
if(!e.mode){e.mode = x}
s.checkDetails(e)
s.cameraCheckObjectsInDetails(e)
checkObjectsInDetails(e)
s.initiateMonitorObject({ke:e.ke,mid:e.id})
switch(e.functionMode){
case'watch_on'://live streamers - join
@ -1705,7 +1733,6 @@ module.exports = function(s,config,lang){
table: "Monitors",
where: monitorQuery
},function(err,monitors){
console.log(err,monitors)
if(monitors && monitors[0]){
monitors.forEach(function(monitor){
s.checkDetails(monitor)