mirror of
https://gitlab.com/Shinobi-Systems/ShinobiCE.git
synced 2025-03-09 15:40:15 +00:00
Son Goku
- Rebased sql, test, web, defintions, languages, INSTALL, and libs folders.
This commit is contained in:
parent
24de55e45a
commit
d0b12e92e7
362 changed files with 21716 additions and 7018 deletions
263
libs/scheduler.js
Normal file
263
libs/scheduler.js
Normal file
|
|
@ -0,0 +1,263 @@
|
|||
module.exports = function(s,config,lang,app,io){
|
||||
s.schedules = {}
|
||||
//Get all Schedules
|
||||
s.getAllSchedules = function(callback){
|
||||
s.schedules = {}
|
||||
s.sqlQuery('SELECT * FROM Schedules',function(err,rows){
|
||||
rows.forEach(function(schedule){
|
||||
s.updateSchedule(schedule)
|
||||
})
|
||||
if(callback)callback()
|
||||
})
|
||||
}
|
||||
//update schedule
|
||||
s.updateSchedule = function(row){
|
||||
var schedule = Object.assign(row,{})
|
||||
if(!s.schedules[schedule.ke])s.schedules[schedule.ke] = {}
|
||||
s.checkDetails(schedule)
|
||||
if(!s.schedules[schedule.ke][schedule.name]){
|
||||
s.schedules[schedule.ke][schedule.name] = schedule
|
||||
}else{
|
||||
s.schedules[schedule.ke][schedule.name] = Object.assign(s.schedules[schedule.ke][schedule.name],schedule)
|
||||
}
|
||||
}
|
||||
//check time in schedule
|
||||
s.checkTimeAgainstSchedule = function(start,end,callback){
|
||||
try{
|
||||
if(
|
||||
start
|
||||
){
|
||||
var checkStartTime = new Date()
|
||||
var startSplit = start.split(':')
|
||||
var startHour = parseInt(startSplit[0])
|
||||
var startMin = parseInt(startSplit[1])
|
||||
checkStartTime.setHours(startHour)
|
||||
checkStartTime.setMinutes(startMin)
|
||||
if(end){
|
||||
var checkEndTime = new Date()
|
||||
var endSplit = end.split(':')
|
||||
var endHour = parseInt(endSplit[0])
|
||||
var endMin = parseInt(endSplit[1])
|
||||
checkEndTime.setHours(endHour)
|
||||
checkEndTime.setMinutes(endMin)
|
||||
}
|
||||
var currentDate = new Date()
|
||||
if(
|
||||
(
|
||||
currentDate >= checkStartTime &&
|
||||
currentDate <= checkEndTime
|
||||
) ||
|
||||
currentDate >= checkStartTime && !end
|
||||
){
|
||||
callback()
|
||||
}else{
|
||||
callback({
|
||||
currentDate : currentDate,
|
||||
startTime : checkStartTime,
|
||||
endTime : checkEndTime
|
||||
})
|
||||
}
|
||||
}else{
|
||||
callback()
|
||||
}
|
||||
}catch(err){
|
||||
console.log(err)
|
||||
callback()
|
||||
}
|
||||
}
|
||||
//check all Schedules
|
||||
s.checkSchedules = function(v,callback){
|
||||
var groupKeys = Object.keys(s.schedules)
|
||||
groupKeys.forEach(function(key){
|
||||
var scheduleNames = Object.keys(s.schedules[key])
|
||||
scheduleNames.forEach(function(name){
|
||||
var schedule = s.schedules[key][name]
|
||||
if(!schedule.active && schedule.enabled === 1 && schedule.start && schedule.details.monitorStates){
|
||||
s.checkTimeAgainstSchedule(schedule.start,schedule.end,function(err){
|
||||
if(!err){
|
||||
schedule.active = true
|
||||
var monitorStates = schedule.details.monitorStates
|
||||
monitorStates.forEach(function(stateName){
|
||||
s.activateMonitorStates(key,stateName,{
|
||||
ke: key,
|
||||
uid: 'System',
|
||||
details: {},
|
||||
permissions: {},
|
||||
lang: lang
|
||||
},function(endData){
|
||||
// console.log(endData)
|
||||
})
|
||||
})
|
||||
}else{
|
||||
schedule.active = false
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
//
|
||||
s.findSchedule = function(groupKey,name,callback){
|
||||
//presetQueryVals = [ke, type, name]
|
||||
s.sqlQuery("SELECT * FROM Schedules WHERE ke=? AND name=? LIMIT 1",[groupKey,name],function(err,schedules){
|
||||
var schedule
|
||||
var notFound = false
|
||||
if(schedules && schedules[0]){
|
||||
schedule = schedules[0]
|
||||
s.checkDetails(schedule)
|
||||
}else{
|
||||
notFound = true
|
||||
}
|
||||
callback(notFound,schedule)
|
||||
})
|
||||
}
|
||||
//
|
||||
var onProcessReady = function(){
|
||||
s.getAllSchedules(function(){
|
||||
s.checkSchedules()
|
||||
})
|
||||
setInterval(function(){
|
||||
s.checkSchedules()
|
||||
},1000 * 60 * 5)
|
||||
}
|
||||
/**
|
||||
* WebServerPath : API : Get Schedule
|
||||
*/
|
||||
app.all([
|
||||
config.webPaths.apiPrefix+':auth/schedule/:ke',
|
||||
config.webPaths.adminApiPrefix+':auth/schedule/:ke',
|
||||
config.webPaths.apiPrefix+':auth/schedule/:ke/:name',
|
||||
config.webPaths.adminApiPrefix+':auth/schedule/:ke/:name',
|
||||
config.webPaths.apiPrefix+':auth/schedules/:ke',
|
||||
config.webPaths.adminApiPrefix+':auth/schedules/:ke',
|
||||
config.webPaths.apiPrefix+':auth/schedules/:ke/:name',
|
||||
config.webPaths.adminApiPrefix+':auth/schedules/:ke/:name',
|
||||
],function (req,res){
|
||||
s.auth(req.params,function(user){
|
||||
var endData = {
|
||||
ok : false
|
||||
}
|
||||
if(user.details.sub){
|
||||
endData.msg = user.lang['Not Permitted']
|
||||
s.closeJsonResponse(res,endData)
|
||||
return
|
||||
}
|
||||
var theQuery = "SELECT * FROM Schedules WHERE ke=?"
|
||||
var theQueryValues = [req.params.ke]
|
||||
if(req.params.name){
|
||||
theQuery += ' AND name=?'
|
||||
theQueryValues.push(req.params.name)
|
||||
}
|
||||
s.sqlQuery(theQuery,theQueryValues,function(err,schedules){
|
||||
if(schedules && schedules[0]){
|
||||
endData.ok = true
|
||||
schedules.forEach(function(schedule){
|
||||
s.checkDetails(schedule)
|
||||
})
|
||||
endData.schedules = schedules
|
||||
}else{
|
||||
endData.msg = user.lang['Not Found']
|
||||
}
|
||||
s.closeJsonResponse(res,endData)
|
||||
})
|
||||
})
|
||||
})
|
||||
/**
|
||||
* WebServerPath : API : Update Schedule
|
||||
*/
|
||||
app.all([
|
||||
config.webPaths.apiPrefix+':auth/schedule/:ke/:name/:action',
|
||||
config.webPaths.adminApiPrefix+':auth/schedule/:ke/:name/:action',
|
||||
config.webPaths.apiPrefix+':auth/schedules/:ke/:name/:action',
|
||||
config.webPaths.adminApiPrefix+':auth/schedules/:ke/:name/:action'
|
||||
],function (req,res){
|
||||
s.auth(req.params,function(user){
|
||||
var endData = {
|
||||
ok : false
|
||||
}
|
||||
if(user.details.sub){
|
||||
endData.msg = user.lang['Not Permitted']
|
||||
s.closeJsonResponse(res,endData)
|
||||
return
|
||||
}
|
||||
switch(req.params.action){
|
||||
case'insert':case'edit':
|
||||
var form = s.getPostData(req)
|
||||
s.checkDetails(form)
|
||||
if(!form || !form.details){
|
||||
endData.msg = user.lang['Form Data Not Found']
|
||||
s.closeJsonResponse(res,endData)
|
||||
return
|
||||
}
|
||||
form.enabled = parseInt(form.enabled) || 1;
|
||||
s.findSchedule(req.params.ke,req.params.name,function(notFound,preset){
|
||||
if(notFound === true){
|
||||
endData.msg = lang["Inserted Schedule Configuration"]
|
||||
var insertData = {
|
||||
ke: req.params.ke,
|
||||
name: req.params.name,
|
||||
details: s.stringJSON(form.details),
|
||||
start: form.start,
|
||||
end: form.end,
|
||||
enabled: form.enabled
|
||||
}
|
||||
s.sqlQuery('INSERT INTO Schedules ('+Object.keys(insertData).join(',')+') VALUES (?,?,?,?,?,?)',Object.values(insertData))
|
||||
s.tx({
|
||||
f: 'add_schedule',
|
||||
insertData: insertData,
|
||||
ke: req.params.ke,
|
||||
name: req.params.name
|
||||
},'GRP_'+req.params.ke)
|
||||
}else{
|
||||
endData.msg = lang["Edited Schedule Configuration"]
|
||||
var insertData = {
|
||||
details: s.stringJSON(form.details),
|
||||
start: form.start,
|
||||
end: form.end,
|
||||
enabled: form.enabled,
|
||||
ke: req.params.ke,
|
||||
name: req.params.name
|
||||
}
|
||||
s.sqlQuery('UPDATE Schedules SET details=?,start=?,end=?,enabled=? WHERE ke=? AND name=?',Object.values(insertData))
|
||||
s.tx({
|
||||
f: 'edit_schedule',
|
||||
insertData: insertData,
|
||||
ke: req.params.ke,
|
||||
name: req.params.name
|
||||
},'GRP_'+req.params.ke)
|
||||
}
|
||||
s.updateSchedule({
|
||||
ke: req.params.ke,
|
||||
name: req.params.name,
|
||||
details: s.stringJSON(form.details),
|
||||
start: form.start,
|
||||
end: form.end,
|
||||
enabled: form.enabled
|
||||
})
|
||||
endData.ok = true
|
||||
s.closeJsonResponse(res,endData)
|
||||
})
|
||||
break;
|
||||
case'delete':
|
||||
s.findSchedule(req.params.ke,req.params.name,function(notFound,schedule){
|
||||
if(notFound === true){
|
||||
endData.msg = user.lang['Schedule Configuration Not Found']
|
||||
s.closeJsonResponse(res,endData)
|
||||
}else{
|
||||
s.sqlQuery('DELETE FROM Schedules WHERE ke=? AND name=?',[req.params.ke,req.params.name],function(err){
|
||||
if(!err){
|
||||
endData.msg = lang["Deleted Schedule Configuration"]
|
||||
endData.ok = true
|
||||
if(s.schedules[schedule.ke])delete(s.schedules[schedule.ke][schedule.name])
|
||||
}
|
||||
s.closeJsonResponse(res,endData)
|
||||
})
|
||||
}
|
||||
})
|
||||
break;
|
||||
}
|
||||
})
|
||||
})
|
||||
//bind events
|
||||
s.onProcessReady(onProcessReady)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue