// Verify the application.ADFscheduler structure exists if ( !StructKeyExists(application,"ADFscheduler") ) application.ADFscheduler = StructNew(); // Verify the schedule structure exists if ( !StructKeyExists(application,"ADFscheduler") ) application.ADFscheduler = StructNew(); return application.ADFscheduler; var defaultScheduleParams = StructNew();//Default Values defaultScheduleParams.delay = 5; //minutes till next schedule item defaultScheduleParams.tasksPerBatch = 1; //how many tasks to do per iteration defaultScheduleParams.scheduleStart = 1; //Where in the command list to start processing defaultScheduleParams.scheduleStop = ArrayLen(commands); //When to stop processing (say stop at position 11) //Override defaults with passed in values if( !StructIsEmpty(arguments.scheduleParams) ) { for(key in arguments.scheduleParams){ if(StructKeyExists(defaultScheduleParams,key)) { defaultScheduleParams[key] = arguments.scheduleParams[key]; } else { //Invalid parameters passed in... throw error in the future? } } } // Verify the schedule structure exists if( !StructKeyExists(application,"ADFscheduler") ) application.ADFscheduler = StructNew(); //Verify the schedule exists, if it does wipe it out if( !StructKeyExists(application.ADFscheduler,arguments.scheduleName) ) { StructInsert(application.ADFscheduler,arguments.scheduleName,StructNew() ); } else { application.ADFscheduler[arguments.scheduleName] = StructNew(); } //Set schedule application.ADFscheduler[arguments.scheduleName].commands = arguments.commands; application.ADFscheduler[arguments.scheduleName].scheduleParams = defaultScheduleParams; application.ADFscheduler[arguments.scheduleName].status = "active"; application.ADFscheduler[arguments.scheduleName].scheduleProgress = defaultScheduleParams.scheduleStart; // Check if want to start the procecing now or set the schedule if ( arguments.startProcessNow ) { //BEGIN! processNextScheduleItem(arguments.scheduleName); } else { setSchedule(arguments.scheduleName); } var cfcatchDump = ''; var currentSchedule = ""; var errorScheduleItem = ""; var scheduleURL = ""; var currentCommand = ""; var siteName = request.site.name; var logFilePrefix = dateFormat(now(), "yyyymmdd") & "." & siteName & "."; var schedLogFileName = logFilePrefix & "scheduledStatus-" & arguments.scheduleName & ".log"; // Verify the schedule structure exists if ( !StructKeyExists(application,"ADFscheduler") ) application.ADFscheduler = StructNew(); //Log the scheduled process start variables.utils.logAppend("Scheduled process started '#arguments.scheduleName#' Progress: #currentSchedule.scheduleProgress#/#ArrayLen(currentSchedule.commands)#","scheduledProcess-#arguments.scheduleName#.txt"); if(isStruct(currentCommand) and StructKeyExists(currentCommand,"bean") and StructKeyExists(currentCommand,"method")) { if(!StructKeyExists(currentCommand,"args")) { currentCommand.args = ""; } if ( StructKeyExists(currentCommand,"app") ) variables.utils.runCommand(beanName=currentCommand.bean,methodName=currentCommand.method,args=currentCommand.args,appName=currentCommand.app); else variables.utils.runCommand(beanName=currentCommand.bean,methodName=currentCommand.method,args=currentCommand.args); } else { errorScheduleItem = variables.utils.doDump(currentCommand,"Failed Schedule Item","false",true); variables.utils.logAppend("Scheduled process error '#arguments.scheduleName#'. Schedule item missing struct key 'bean' or 'method' while processing Schedule Item:
'#errorScheduleItem#'

","scheduledProcess-#arguments.scheduleName#.html"); }
errorScheduleItem = variables.utils.doDump(currentSchedule.commands[currentSchedule.scheduleProgress],"Failed Schedule Item","false",true); variables.utils.logAppend("Scheduled process error '#arguments.scheduleName#' while processing Schedule Item:
'#errorScheduleItem#'

","scheduledProcess-#arguments.scheduleName#.html"); application.ADFscheduler[arguments.scheduleName].status = "failure"; variables.utils.logAppend("#cfcatchDump#","scheduledProcessFailure-#arguments.scheduleName#.html"); return false;
//Horray! The scheduled process finished. Log it, increment the progress. variables.utils.logAppend("Scheduled process complete. '#arguments.scheduleName#' Progress: #currentSchedule.scheduleProgress#/#ArrayLen(currentSchedule.commands)#","scheduledProcess-#arguments.scheduleName#.txt"); currentSchedule.scheduleProgress = currentSchedule.scheduleProgress + 1; if(currentSchedule.scheduleProgress gt ArrayLen(currentSchedule.commands)){ variables.utils.logAppend("Scheduled complete '#arguments.scheduleName#'","scheduledProcess-#arguments.scheduleName#.txt"); currentSchedule.status = "complete"; // Delete CF Scheduled Task to Clean up when the Process has completed variables.utils.deleteScheduledTask(taskName=arguments.scheduleName); variables.utils.logAppend("CF Scheduled Task '#arguments.scheduleName#' has been removed!","scheduledProcess-#arguments.scheduleName#.txt"); return true; } //If this is a batch process do batchyness. if( currentSchedule.scheduleParams.tasksPerBatch gt 1 and currentSchedule.scheduleProgress mod currentSchedule.scheduleParams.tasksPerBatch - 1 neq 0 ) { processNextScheduleItem(arguments.scheduleName); } else { scheduleURL = "http://#cgi.server_name#:#cgi.server_port##application.ADF.ajaxProxy#?bean=scheduler_1_0&method=processNextScheduleItem&scheduleName=#arguments.scheduleName#"; //Schedule the next task variables.utils.setScheduledTask(scheduleURL,arguments.scheduleName,schedLogFileName,currentSchedule.scheduleParams.delay); //"ScheduledTaskError-#arguments.scheduleName#.html" } if(currentSchedule.scheduleProgress gt currentSchedule.scheduleParams.scheduleStop) { variables.utils.logAppend("Scheduled complete '#arguments.scheduleName#' stopping at position: #currentSchedule.scheduleProgress-1#/#ArrayLen(currentSchedule.commands)#","scheduledProcess-#arguments.scheduleName#.txt"); currentSchedule.status = "complete"; return true; }
var rtnStruct = StructNew(); var currentSchedule = StructNew(); //Set Defaults rtnStruct.currentTask = -1; rtnStruct.totalTasks = -1; rtnStruct.status = "nonexistant"; // Verify the scheduler structure exists if( !StructKeyExists(application,"ADFscheduler") ) application.ADFscheduler = StructNew(); //if there is an existing schedule get its current status information and return it! if ( StructKeyExists(application.ADFscheduler,arguments.scheduleName) ) { currentSchedule = application.ADFscheduler[arguments.scheduleName]; rtnStruct.currentTask = currentSchedule.scheduleProgress-1; rtnStruct.totalTasks = ArrayLen(currentSchedule.commands); rtnStruct.status = currentSchedule.status; rtnStruct.scheduleParams = currentSchedule.scheduleParams; } return rtnStruct; // Verify the schedule structure exists if ( !StructKeyExists(application,"ADFscheduler") ) application.ADFscheduler = StructNew(); if ( StructKeyExists(application.ADFscheduler,arguments.scheduleName) and application.ADFscheduler[arguments.scheduleName].status == "active" ) { application.ADFscheduler[arguments.scheduleName].status = "paused"; return true; } // Verify the schedule structure exists if ( !StructKeyExists(application,"ADFscheduler") ) application.ADFscheduler = StructNew(); //If the schedule exists, is paused and has remaining arguments resume it. if ( StructKeyExists(application.ADFscheduler,arguments.scheduleName) and application.ADFscheduler[arguments.scheduleName].status == "paused" and ArrayLen(application.ADFscheduler[arguments.scheduleName].commands) GTE application.ADFscheduler[arguments.scheduleName].scheduleProgress ) { application.ADFscheduler[arguments.scheduleName].status = "active"; processNextScheduleItem(arguments.scheduleName); return true; } var currentSchedule = ''; var scheduleID = ''; var rtnHTML = ''; var scheduleSuffix = ''; arguments.scheduleName = TRIM(arguments.scheduleName); // Verify the schedule structure exists if ( !StructKeyExists(application,"ADFscheduler") ) application.ADFscheduler = StructNew(); Schedule does not exist. currentSchedule = application.ADFscheduler[arguments.scheduleName]; scheduleSuffix = TRIM(ReReplace(scheduleName, '[^\w]','','all')); scheduleID = "scheduler_" & UCASE(scheduleSuffix); variables.scripts.loadJQuery(); variables.scripts.loadJQueryUI();
#currentSchedule.status#
var result = ArrayNew(1); var newResultA = ArrayNew(1); var newResultB = ArrayNew(1); var taskService = ""; var taskQuery = QueryNew("temp"); var i = 1; var taskName = ""; var cfmlEngineType = server.coldfusion.productname; var a = 1; var keyVal = ""; var logError = false; var schedArgs = StructNew(); // Convert the Scheduled task query from Railo to a Array of Struts result = variables.data.queryToArrayOfStructures(queryData=taskQuery,keysToLowercase=true); // Now convert Railo specific keys names to ACF compatible key names for ( a=1; a LTE ArrayLen(result); a=a+1 ) { for (key in result[a]) { keyVal = result[a][key]; if ( key EQ "startdate" ) newResultA[a]["start_date"] = keyVal; else if ( key EQ "starttime" ) newResultA[a]["start_time"] = keyVal; if ( key EQ "enddate" ) newResultA[a]["end_date"] = keyVal; else if ( key EQ "endtime" ) newResultA[a]["end_time"] = keyVal; else if ( key EQ "port" ) newResultA[a]["http_port"] = keyVal; else if ( key EQ "proxyport" ) newResultA[a]["http_proxy_port"] = keyVal; else if ( key EQ "timeout" ) newResultA[a]["request_time_out"] = keyVal; else newResultA[a][key] = keyVal; } } result = newResultA; if ( ArrayLen(result) ){ // If filter value is passed in loop over the Array of task and build a new array if ( LEN(TRIM(arguments.taskNameFilter)) ) { for ( i; i LTE ArrayLen(result); i=i+1 ) { taskName = result[i].task; // Only Add Tasks to the Result Array if they contain the filter value if ( FindNoCase(arguments.taskNameFilter,taskName,1) NEQ 0 ) { arrayAppend(newResultB,result[i]); } } result = newResultB; } } return result; var scheduleURL = "http://#cgi.server_name#:#cgi.server_port##application.ADF.ajaxProxy#?bean=scheduler_1_0&method=processNextScheduleItem&scheduleName=#arguments.scheduleName#"; var logFilePrefix = dateFormat(now(), "yyyymmdd") & "." & request.site.name & "."; var schedLogFileName = logFilePrefix & "scheduledStatus-" & arguments.scheduleName & ".log"; var currentSchedule = ""; // Verify the schedule structure exists if ( !StructKeyExists(application,"ADFscheduler") ) application.ADFscheduler = StructNew(); try { // Check if the schedule exists if ( StructKeyExists(application.ADFscheduler,arguments.scheduleName) ) { currentSchedule = application.ADFscheduler[arguments.scheduleName]; } // Schedule the task within CF variables.utils.setScheduledTask(scheduleURL,arguments.scheduleName,schedLogFileName,currentSchedule.scheduleParams.delay); //"ScheduledTaskError-#arguments.scheduleName#.html" return true; } catch ( Any e ) { //variables.utils.dodump(e,"e", true); return false; } // Verify the schedule structure exists if ( !StructKeyExists(application,"ADFscheduler") ) application.ADFscheduler = StructNew(); try { StructDelete(application.ADFscheduler, arguments.scheduleName, false); return true; } catch(Any e) { return false; }