Merge branch 'dev' into 'master'
Breath of the Wild++ See merge request Shinobi-Systems/Shinobi!127merge-requests/129/merge
commit
a004ad8439
62
cron.js
62
cron.js
|
@ -144,7 +144,7 @@ s.debugLog = function(arg1,arg2){
|
||||||
}
|
}
|
||||||
|
|
||||||
//containers
|
//containers
|
||||||
s.overlapLock={};
|
var overlapLocks = {}
|
||||||
s.alreadyDeletedRowsWithNoVideosOnStart={};
|
s.alreadyDeletedRowsWithNoVideosOnStart={};
|
||||||
//functions
|
//functions
|
||||||
s.checkCorrectPathEnding=function(x){
|
s.checkCorrectPathEnding=function(x){
|
||||||
|
@ -194,7 +194,7 @@ s.getFileBinDirectory = function(e){
|
||||||
}
|
}
|
||||||
//filters set by the user in their dashboard
|
//filters set by the user in their dashboard
|
||||||
//deleting old videos is part of the filter - config.cron.deleteOld
|
//deleting old videos is part of the filter - config.cron.deleteOld
|
||||||
s.checkFilterRules = function(v,callback){
|
const checkFilterRules = function(v,callback){
|
||||||
//filters
|
//filters
|
||||||
if(!v.d.filters||v.d.filters==''){
|
if(!v.d.filters||v.d.filters==''){
|
||||||
v.d.filters={};
|
v.d.filters={};
|
||||||
|
@ -301,7 +301,7 @@ s.checkFilterRules = function(v,callback){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//database rows with no videos in the filesystem
|
//database rows with no videos in the filesystem
|
||||||
s.deleteRowsWithNoVideo = function(v,callback){
|
const deleteRowsWithNoVideo = function(v,callback){
|
||||||
if(
|
if(
|
||||||
config.cron.deleteNoVideo===true&&(
|
config.cron.deleteNoVideo===true&&(
|
||||||
config.cron.deleteNoVideoRecursion===true||
|
config.cron.deleteNoVideoRecursion===true||
|
||||||
|
@ -350,7 +350,7 @@ s.deleteRowsWithNoVideo = function(v,callback){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//info about what the application is doing
|
//info about what the application is doing
|
||||||
s.deleteOldLogs = function(v,callback){
|
const deleteOldLogs = function(v,callback){
|
||||||
if(!v.d.log_days||v.d.log_days==''){v.d.log_days=10}else{v.d.log_days=parseFloat(v.d.log_days)};
|
if(!v.d.log_days||v.d.log_days==''){v.d.log_days=10}else{v.d.log_days=parseFloat(v.d.log_days)};
|
||||||
if(config.cron.deleteLogs===true&&v.d.log_days!==0){
|
if(config.cron.deleteLogs===true&&v.d.log_days!==0){
|
||||||
s.sqlQuery("DELETE FROM Logs WHERE ke=? AND `time` < ?",[v.ke,s.sqlDate(v.d.log_days+' DAY')],function(err,rrr){
|
s.sqlQuery("DELETE FROM Logs WHERE ke=? AND `time` < ?",[v.ke,s.sqlDate(v.d.log_days+' DAY')],function(err,rrr){
|
||||||
|
@ -365,7 +365,7 @@ s.deleteOldLogs = function(v,callback){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//events - motion, object, etc. detections
|
//events - motion, object, etc. detections
|
||||||
s.deleteOldEvents = function(v,callback){
|
const deleteOldEvents = function(v,callback){
|
||||||
if(!v.d.event_days||v.d.event_days==''){v.d.event_days=10}else{v.d.event_days=parseFloat(v.d.event_days)};
|
if(!v.d.event_days||v.d.event_days==''){v.d.event_days=10}else{v.d.event_days=parseFloat(v.d.event_days)};
|
||||||
if(config.cron.deleteEvents===true&&v.d.event_days!==0){
|
if(config.cron.deleteEvents===true&&v.d.event_days!==0){
|
||||||
s.sqlQuery("DELETE FROM Events WHERE ke=? AND `time` < ?",[v.ke,s.sqlDate(v.d.event_days+' DAY')],function(err,rrr){
|
s.sqlQuery("DELETE FROM Events WHERE ke=? AND `time` < ?",[v.ke,s.sqlDate(v.d.event_days+' DAY')],function(err,rrr){
|
||||||
|
@ -380,7 +380,7 @@ s.deleteOldEvents = function(v,callback){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//check for temporary files (special archive)
|
//check for temporary files (special archive)
|
||||||
s.deleteOldFileBins = function(v,callback){
|
const deleteOldFileBins = function(v,callback){
|
||||||
if(!v.d.fileBin_days||v.d.fileBin_days==''){v.d.fileBin_days=10}else{v.d.fileBin_days=parseFloat(v.d.fileBin_days)};
|
if(!v.d.fileBin_days||v.d.fileBin_days==''){v.d.fileBin_days=10}else{v.d.fileBin_days=parseFloat(v.d.fileBin_days)};
|
||||||
if(config.cron.deleteFileBins===true&&v.d.fileBin_days!==0){
|
if(config.cron.deleteFileBins===true&&v.d.fileBin_days!==0){
|
||||||
var fileBinQuery = " FROM Files WHERE ke=? AND `time` < ?";
|
var fileBinQuery = " FROM Files WHERE ke=? AND `time` < ?";
|
||||||
|
@ -409,7 +409,7 @@ s.deleteOldFileBins = function(v,callback){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//check for files with no database row
|
//check for files with no database row
|
||||||
s.checkForOrphanedFiles = function(v,callback){
|
const checkForOrphanedFiles = function(v,callback){
|
||||||
if(config.cron.deleteOrphans === true){
|
if(config.cron.deleteOrphans === true){
|
||||||
console.log('"config.cron.deleteOrphans" has been removed. It has been replace by a one-time-run at startup with "config.insertOrphans". As the variable name suggests, instead of deleting, it will insert videos found without a database row.')
|
console.log('"config.cron.deleteOrphans" has been removed. It has been replace by a one-time-run at startup with "config.insertOrphans". As the variable name suggests, instead of deleting, it will insert videos found without a database row.')
|
||||||
console.log('By default "config.orphanedVideoCheckMax" will only check up to 20 video. You can raise this value to any number you choose but be careful as it will check that number of videos on every start.')
|
console.log('By default "config.orphanedVideoCheckMax" will only check up to 20 video. You can raise this value to any number you choose but be careful as it will check that number of videos on every start.')
|
||||||
|
@ -417,7 +417,7 @@ s.checkForOrphanedFiles = function(v,callback){
|
||||||
callback()
|
callback()
|
||||||
}
|
}
|
||||||
//user processing function
|
//user processing function
|
||||||
s.processUser = function(number,rows){
|
const processUser = function(number,rows){
|
||||||
var v = rows[number];
|
var v = rows[number];
|
||||||
if(!v){
|
if(!v){
|
||||||
//no user object given
|
//no user object given
|
||||||
|
@ -427,9 +427,9 @@ s.processUser = function(number,rows){
|
||||||
if(!s.alreadyDeletedRowsWithNoVideosOnStart[v.ke]){
|
if(!s.alreadyDeletedRowsWithNoVideosOnStart[v.ke]){
|
||||||
s.alreadyDeletedRowsWithNoVideosOnStart[v.ke]=false;
|
s.alreadyDeletedRowsWithNoVideosOnStart[v.ke]=false;
|
||||||
}
|
}
|
||||||
if(!s.overlapLock[v.ke]){
|
if(!overlapLocks[v.ke]){
|
||||||
// set overlap lock
|
// set overlap lock
|
||||||
s.overlapLock[v.ke]=true;
|
overlapLocks[v.ke] = true
|
||||||
//set permissions
|
//set permissions
|
||||||
v.d=JSON.parse(v.details);
|
v.d=JSON.parse(v.details);
|
||||||
//size
|
//size
|
||||||
|
@ -468,20 +468,20 @@ s.processUser = function(number,rows){
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
s.deleteOldLogs(v,function(){
|
deleteOldLogs(v,function(){
|
||||||
s.debugLog('--- deleteOldLogs Complete')
|
s.debugLog('--- deleteOldLogs Complete')
|
||||||
s.deleteOldFileBins(v,function(){
|
deleteOldFileBins(v,function(){
|
||||||
s.debugLog('--- deleteOldFileBins Complete')
|
s.debugLog('--- deleteOldFileBins Complete')
|
||||||
s.deleteOldEvents(v,function(){
|
deleteOldEvents(v,function(){
|
||||||
s.debugLog('--- deleteOldEvents Complete')
|
s.debugLog('--- deleteOldEvents Complete')
|
||||||
s.checkFilterRules(v,function(){
|
checkFilterRules(v,function(){
|
||||||
s.debugLog('--- checkFilterRules Complete')
|
s.debugLog('--- checkFilterRules Complete')
|
||||||
s.deleteRowsWithNoVideo(v,function(){
|
deleteRowsWithNoVideo(v,function(){
|
||||||
s.debugLog('--- deleteRowsWithNoVideo Complete')
|
s.debugLog('--- deleteRowsWithNoVideo Complete')
|
||||||
s.checkForOrphanedFiles(v,function(){
|
checkForOrphanedFiles(v,function(){
|
||||||
//done user, unlock current, and do next
|
//done user, unlock current, and do next
|
||||||
s.overlapLock[v.ke]=false;
|
overlapLocks[v.ke]=false;
|
||||||
s.processUser(number+1,rows)
|
processUser(number+1,rows)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -490,35 +490,39 @@ s.processUser = function(number,rows){
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}else{
|
}else{
|
||||||
s.processUser(number+1,rows)
|
processUser(number+1,rows)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//recursive function
|
//recursive function
|
||||||
s.cron=function(){
|
var theCronInterval = null
|
||||||
x={};
|
const setIntervalForCron = function(){
|
||||||
|
clearCronInterval()
|
||||||
|
theCronInterval = setInterval(doCronJobs,parseFloat(config.cron.interval)*60000*60)
|
||||||
|
}
|
||||||
|
const clearCronInterval = function(){
|
||||||
|
clearInterval(theCronInterval)
|
||||||
|
}
|
||||||
|
const doCronJobs = function(){
|
||||||
s.cx({f:'start',time:moment()})
|
s.cx({f:'start',time:moment()})
|
||||||
s.sqlQuery('SELECT ke,uid,details,mail FROM Users WHERE details NOT LIKE \'%"sub"%\'', function(err,rows) {
|
s.sqlQuery('SELECT ke,uid,details,mail FROM Users WHERE details NOT LIKE \'%"sub"%\'', function(err,rows) {
|
||||||
if(err){
|
if(err){
|
||||||
console.error(err)
|
console.error(err)
|
||||||
}
|
}
|
||||||
if(rows&&rows[0]){
|
if(rows&&rows[0]){
|
||||||
s.processUser(0,rows)
|
processUser(0,rows)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
s.timeout=setTimeout(function(){
|
|
||||||
s.cron();
|
|
||||||
},parseFloat(config.cron.interval)*60000*60)
|
|
||||||
}
|
}
|
||||||
s.cron();
|
setIntervalForCron()
|
||||||
|
doCronJobs()
|
||||||
//socket commander
|
//socket commander
|
||||||
io.on('f',function(d){
|
io.on('f',function(d){
|
||||||
switch(d.f){
|
switch(d.f){
|
||||||
case'start':case'restart':
|
case'start':case'restart':
|
||||||
clearTimeout(s.timeout);
|
setIntervalForCron()
|
||||||
s.cron();
|
|
||||||
break;
|
break;
|
||||||
case'stop':
|
case'stop':
|
||||||
clearTimeout(s.timeout);
|
clearCronInterval()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -179,9 +179,9 @@ module.exports = function(s,config,lang){
|
||||||
switch(monitor.protocol){
|
switch(monitor.protocol){
|
||||||
case'rtsp':
|
case'rtsp':
|
||||||
if(
|
if(
|
||||||
details.rtsp_transport
|
monitor.details.rtsp_transport
|
||||||
&& details.rtsp_transport !== ''
|
&& monitor.details.rtsp_transport !== ''
|
||||||
&& details.rtsp_transport !== 'no'
|
&& monitor.details.rtsp_transport !== 'no'
|
||||||
){
|
){
|
||||||
inputOptions.push('-rtsp_transport ' + monitor.details.rtsp_transport)
|
inputOptions.push('-rtsp_transport ' + monitor.details.rtsp_transport)
|
||||||
}
|
}
|
||||||
|
@ -211,7 +211,7 @@ module.exports = function(s,config,lang){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(options.useIcon === true){
|
if(options.useIcon === true){
|
||||||
checkExists(streamDir + 's.jpg',function(success){
|
checkExists(streamDir + 'icon.jpg',function(success){
|
||||||
if(success === false){
|
if(success === false){
|
||||||
noIconChecks()
|
noIconChecks()
|
||||||
}else{
|
}else{
|
||||||
|
@ -778,7 +778,7 @@ module.exports = function(s,config,lang){
|
||||||
}
|
}
|
||||||
s.group[e.ke].activeMonitors[e.id].recordingChecker = setTimeout(function(){
|
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'){
|
if(s.group[e.ke].activeMonitors[e.id].isStarted === true && s.group[e.ke].rawMonitorConfigurations[e.id].mode === 'record'){
|
||||||
s.launchMonitorProcesses(e);
|
s.launchMonitorProcesses(s.cleanMonitorObject(e));
|
||||||
s.sendMonitorStatus({id:e.id,ke:e.ke,status:lang.Restarting});
|
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.userLog(e,{type:lang['Camera is not recording'],msg:{msg:lang['Restarting Process']}});
|
||||||
s.orphanedVideoCheck(e,2,null,true)
|
s.orphanedVideoCheck(e,2,null,true)
|
||||||
|
@ -789,7 +789,7 @@ module.exports = function(s,config,lang){
|
||||||
clearTimeout(s.group[e.ke].activeMonitors[e.id].streamChecker)
|
clearTimeout(s.group[e.ke].activeMonitors[e.id].streamChecker)
|
||||||
s.group[e.ke].activeMonitors[e.id].streamChecker = setTimeout(function(){
|
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){
|
if(s.group[e.ke].activeMonitors[e.id] && s.group[e.ke].activeMonitors[e.id].isStarted === true){
|
||||||
s.launchMonitorProcesses(e);
|
s.launchMonitorProcesses(s.cleanMonitorObject(e));
|
||||||
s.userLog(e,{type:lang['Camera is not streaming'],msg:{msg:lang['Restarting Process']}});
|
s.userLog(e,{type:lang['Camera is not streaming'],msg:{msg:lang['Restarting Process']}});
|
||||||
s.orphanedVideoCheck(e,2,null,true)
|
s.orphanedVideoCheck(e,2,null,true)
|
||||||
}
|
}
|
||||||
|
@ -879,7 +879,7 @@ module.exports = function(s,config,lang){
|
||||||
}
|
}
|
||||||
if(e.details.fatal_max !== 0 && e.errorCount > e.details.fatal_max){
|
if(e.details.fatal_max !== 0 && e.errorCount > e.details.fatal_max){
|
||||||
clearTimeout(s.group[e.ke].activeMonitors[e.id].recordingSnapper)
|
clearTimeout(s.group[e.ke].activeMonitors[e.id].recordingSnapper)
|
||||||
s.launchMonitorProcesses(e)
|
s.launchMonitorProcesses(s.cleanMonitorObject(e))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -1451,7 +1451,7 @@ module.exports = function(s,config,lang){
|
||||||
if(e.details.fatal_max !== 0 && e.errorFatalCount > e.details.fatal_max){
|
if(e.details.fatal_max !== 0 && e.errorFatalCount > e.details.fatal_max){
|
||||||
s.camera('stop',{id:e.id,ke:e.ke})
|
s.camera('stop',{id:e.id,ke:e.ke})
|
||||||
}else{
|
}else{
|
||||||
s.launchMonitorProcesses(e)
|
s.launchMonitorProcesses(s.cleanMonitorObject(e))
|
||||||
};
|
};
|
||||||
},5000);
|
},5000);
|
||||||
}else{
|
}else{
|
||||||
|
|
|
@ -440,7 +440,7 @@ module.exports = function(s,config,lang,io){
|
||||||
s.sqlQuery('SELECT * FROM Monitors WHERE ke=?', [d.ke], function(err,r) {
|
s.sqlQuery('SELECT * FROM Monitors WHERE ke=?', [d.ke], function(err,r) {
|
||||||
if(r && r[0]){
|
if(r && r[0]){
|
||||||
r.forEach(function(monitor){
|
r.forEach(function(monitor){
|
||||||
s.cameraSendSnapshot({mid:monitor.mid,ke:monitor.ke,mon:monitor})
|
s.cameraSendSnapshot({mid:monitor.mid,ke:monitor.ke,mon:monitor},{useIcon: true})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue