/impl/conf/language/MessageResources.properties |
---|
504,6 → 504,7 |
##TAREFAS AGENDADAS |
configuration.jobtask=Tarefa Executada |
configuration.jobtasks=Tarefas Executadas |
configuration.tasks=Tarefas Agendadas |
configuration.task=Tarefa Agendada |
527,6 → 528,7 |
configuration.task.FINISHED=Terminada |
configuration.task.FAILED=Falhada |
configuration.task.UNKNOWN_ERROR=Terminada com erro desconhecido |
configuration.task.unknown=Desconhecido |
targetService.pt.estgp.estgweb.services.sigesimports.ImportTeachersService=Importação de Professores |
targetService.pt.estgp.estgweb.services.sigesimports.ImportStudentsService=Importação de Alunos |
547,7 → 549,10 |
weekday.day=às |
day.time=às |
job.schedule.inactive=Tarefa está inativa |
job.schedule.active=Tarefa reativada |
job.schedule.deleted=Tarefa apagada das agendadas |
job.schedule.for.now=Agendada para correr assim que for possivel |
job.status.PENDING=Pendente |
job.status.STARTED=Iniciado |
job.status.FINISHED=Terminado |
/impl/conf/berserk/sd.xml |
---|
2175,6 → 2175,47 |
</filterChains> |
</service> |
<service> |
<name>RunNowJobServiceTaskScheduller</name> |
<implementationClass>pt.estgp.estgweb.services.jobs.JobScheduleService</implementationClass> |
<description></description> |
<isTransactional>true</isTransactional> |
<defaultMethod>runNow</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="Admins"/> |
</filterChains> |
</service> |
<service> |
<name>ToggleActiveJobServiceTaskScheduller</name> |
<implementationClass>pt.estgp.estgweb.services.jobs.JobScheduleService</implementationClass> |
<description></description> |
<isTransactional>true</isTransactional> |
<defaultMethod>toggleActive</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="Admins"/> |
</filterChains> |
</service> |
<service> |
<name>DeleteJobServiceTaskScheduller</name> |
<implementationClass>pt.estgp.estgweb.services.jobs.JobScheduleService</implementationClass> |
<description></description> |
<isTransactional>true</isTransactional> |
<defaultMethod>delete</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="Admins"/> |
</filterChains> |
</service> |
</serviceDefinitions> |
/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportStudentsService.java |
---|
188,8 → 188,7 |
logger.error(e,e); |
logMessages.addMessage(new DefaultLogMessage("import.error",e.toString(), "see log for details", LogMessageTypeEnum.ERROR)); |
serviceLogError(e.toString(),e); |
String cause = e.getCause() == null ? "" : e.getCause().toString(); |
sendNotificationAdmin("Erro de importacao de alunos",cause); |
sendNotificationAdmin("Erro de importacao de alunos",e.toString()); |
} |
/impl/src/java/pt/estgp/estgweb/services/jobs/JobServiceInterfaces.java |
---|
18,7 → 18,7 |
/*Class regular log*/ |
private static final Logger logger = Logger.getLogger("JobServiceTaskLog"); |
private static final Logger logger = Logger.getLogger(JobServiceInterfaces.class); |
public JobServiceTaskSchedulerImpl loadJobServiceTaskScheduler(Long id, UserSession sess) |
/impl/src/java/pt/estgp/estgweb/services/jobs/JobScheduleService.java |
---|
1,6 → 1,7 |
package pt.estgp.estgweb.services.jobs; |
import jomm.dao.impl.AbstractDao; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.domain.*; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.services.sigesimports.*; |
18,6 → 19,8 |
public class JobScheduleService implements IService |
{ |
private static final Logger logger = Logger.getLogger(JobScheduleService.class); |
private static JobScheduleService instance = new JobScheduleService(); |
public static JobScheduleService getInstance() |
103,6 → 106,43 |
} |
} |
public void runNow(Long schedulerId, UserSession sess) |
{ |
JobServiceTaskScheduler persistent = DaoFactory.getJobServiceTaskSchedulerDaoImpl().load(schedulerId); |
logger.info("Will run now task " + persistent.getTargetService() + " id:" + schedulerId); |
persistent.setNow(true); |
} |
public JobServiceTaskScheduler toggleActive(Long schedulerId, UserSession sess) |
{ |
JobServiceTaskScheduler persistent = DaoFactory.getJobServiceTaskSchedulerDaoImpl().load(schedulerId); |
if(persistent.isActive()) |
logger.info("Will deactivate task " + persistent.getTargetService() + " id:" + schedulerId); |
else |
logger.info("Will activate task " + persistent.getTargetService() + " id:" + schedulerId); |
persistent.setActive(!persistent.isActive()); |
return persistent; |
} |
public void delete(Long schedulerId, UserSession sess) |
{ |
JobServiceTaskScheduler persistent = DaoFactory.getJobServiceTaskSchedulerDaoImpl().load(schedulerId); |
logger.warn("Will delete task " + persistent.getTargetService() + " id:" + schedulerId); |
Set<JobServiceTaskSchedulerParameter> params = persistent.getServiceTaskSchedulerParameters(); |
if(params != null) |
{ |
Iterator<JobServiceTaskSchedulerParameter> iterParam = params.iterator(); |
while(iterParam.hasNext()) { |
JobServiceTaskSchedulerParameter next = iterParam.next(); |
next.setJobServiceTaskScheduler(null); |
iterParam.remove(); |
DaoFactory.getJobServiceTaskSchedulerParameterDaoImpl().delete(next); |
} |
} |
DaoFactory.getJobServiceTaskSchedulerDaoImpl().delete(persistent); |
} |
public static void main(String[] args) throws SQLException |
{ |
AbstractDao.getCurrentSession().beginTransaction(); |
/impl/src/java/pt/estgp/estgweb/services/jobs/JobDeamon.java |
---|
120,6 → 120,7 |
jobServiceTask.setRequestStop(false); |
jobServiceTask.setOwner(schedule.getCreatedBy()); |
jobServiceTask.setJobHandler(new SerializableNullJobHandler()); |
jobServiceTask.setProgress(0); |
DaoFactory.getJobServiceTaskDaoImpl().save(jobServiceTask); |
schedule.setLastJobServiceTask(jobServiceTask); |
try { |
148,17 → 149,18 |
//a partir do momento que e' agendado o trabalho ele vai correr portanto |
//e' esta a hora que se considera para a corrida |
schedule.setLastScheduleDate(new Date()); |
if(schedule.isNow()) |
{ |
schedule.setNow(false); |
} |
} |
//Remove Now Schedules |
if(schedule.isNow()) |
{ |
DaoFactory.getJobServiceTaskSchedulerDaoImpl().delete(schedule); |
} |
} |
} |
private boolean isRunnableNow(JobServiceTaskScheduler schedule,Date lastDate) |
{ |
if(!schedule.isActive()) |
return false; |
if(lastDate == null) |
lastDate = new Date(0); |
GregorianCalendar gC = new GregorianCalendar(); |
/impl/src/java/pt/estgp/estgweb/web/controllers/configuration/SchedulerTasksController.java |
---|
5,6 → 5,7 |
import org.apache.struts.action.ActionForward; |
import org.apache.struts.action.ActionMapping; |
import pt.estgp.estgweb.domain.JobServiceTaskImpl; |
import pt.estgp.estgweb.domain.JobServiceTaskScheduler; |
import pt.estgp.estgweb.domain.JobServiceTaskSchedulerImpl; |
import pt.estgp.estgweb.services.directories.xsd.*; |
import pt.estgp.estgweb.web.UserSessionProxy; |
40,10 → 41,7 |
throws Throwable |
{ |
if(!UserSessionProxy.loadUserSessionFromRequest(request).getUser().isAdmin() && !UserSessionProxy.loadUserSessionFromRequest(request).getUser().hasRole("ci")) |
{ |
return mapping.findForward("error401"); |
} |
SchedulleTasksForm sf = (SchedulleTasksForm) form; |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
73,10 → 71,7 |
throws Throwable |
{ |
if(!UserSessionProxy.loadUserSessionFromRequest(request).getUser().isAdmin() && !UserSessionProxy.loadUserSessionFromRequest(request).getUser().hasRole("ci")) |
{ |
return mapping.findForward("error401"); |
} |
SchedulleTasksForm sf = (SchedulleTasksForm) form; |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
101,6 → 96,105 |
else |
return mapping.findForward("taskLog"); |
} |
public ActionForward runNow(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable |
{ |
SchedulleTasksForm sf = (SchedulleTasksForm) form; |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
Object[] args = new Object[]{sf.getId()}; |
try |
{ |
sm.execute(RequestUtils.getRequester(request, response), "RunNowJobServiceTaskScheduller", args, names); |
addMessage(request,"job.schedule.for.now"); |
} |
catch (FilterChainFailedException e) |
{ |
return mapping.findForward("error401"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
throw e; |
} |
return mapping.findForward("tasks"); |
} |
public ActionForward toggleActive(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable |
{ |
SchedulleTasksForm sf = (SchedulleTasksForm) form; |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
Object[] args = new Object[]{sf.getId()}; |
try |
{ |
JobServiceTaskScheduler scheduler = (JobServiceTaskScheduler) sm.execute(RequestUtils.getRequester(request, response), "ToggleActiveJobServiceTaskScheduller", args, names); |
if(scheduler.isActive()) |
addMessage(request,"job.schedule.active"); |
else |
addMessage(request,"job.schedule.inactive"); |
} |
catch (FilterChainFailedException e) |
{ |
return mapping.findForward("error401"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
throw e; |
} |
return mapping.findForward("tasks"); |
} |
public ActionForward delete(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable |
{ |
SchedulleTasksForm sf = (SchedulleTasksForm) form; |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
Object[] args = new Object[]{sf.getId()}; |
try |
{ |
sm.execute(RequestUtils.getRequester(request, response), "DeleteJobServiceTaskScheduller", args, names); |
addMessage(request,"job.schedule.deleted"); |
} |
catch (FilterChainFailedException e) |
{ |
return mapping.findForward("error401"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
throw e; |
} |
return mapping.findForward("tasks"); |
} |
public ActionForward addLeaf(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
/impl/src/hbm/pt/estgp/estgweb/domain/Job.hbm.xml |
---|
62,6 → 62,9 |
<property name="description" type="string"/> |
<!--ScheduleInformation--> |
<property name="active" type="boolean"> |
<column name="active" default="true"/> |
</property> |
<property name="now" type="boolean"/> |
<property name="daily" type="boolean"/> |
<property name="weekly" type="boolean"/> |
/impl/src/web/admin/configuration/taskLog.jsp |
---|
46,7 → 46,7 |
$(".progress-bar").attr("aria-valuenow",data.progress); |
$(".progress-bar").html(data.progress + "%"); |
if(data.status == "STARTED" || data.status == "PENDDING") |
if(data.status == "STARTED" || data.status == "PENDING") |
setTimeout("updateStatus()",2000); |
}); |
/impl/src/web/admin/configuration/tasks.jsp |
---|
15,8 → 15,6 |
<html:errors/> |
<!--<jsp:include page="/layout/scriptsBootstrapSoft.jsp"/>--> |
<% |
AbstractDao.getCurrentSession().beginTransaction(); |
List<JobServiceTaskScheduler> schedulledTasks = DaoFactory.getJobServiceTaskSchedulerDaoImpl().findAll(); |
29,13 → 27,17 |
<div class="panel panel-default"> |
<div class="panel-heading"> |
<bean:message key="configuration.tasks"/> |
<a href="<%=request.getContextPath()%>/user/configurationJobTasks.do" style="float:right" class="btn btn-default"><span class="glyphicon glyphicon-list-alt">Consultar Todos os Logs</span></a> |
<button type="button" style="float:right" class="btn btn-success" onclick="set(form,'new');form.submit();"><span class="glyphicon glyphicon-plus">Agendar</span></button> |
<a href="<%=request.getContextPath()%>/user/configurationSchedulleTasks.do" class="btn btn-success"><span class="glyphicon glyphicon-refresh"></span></a> |
</div> |
<div class="panel-body"> |
<table id="myTable" class="tablesorter"> |
<thead> |
<tr> |
<th>Agora</th> |
<th><bean:message key="configuration.task"/></th> |
<th>Tipo</th> |
<th>Calendarização</th> |
50,6 → 52,11 |
<tbody> |
<logic:iterate id="task" name="tasks" type="pt.estgp.estgweb.domain.JobServiceTaskSchedulerImpl"> |
<tr> |
<td> |
<a href="<%=request.getContextPath()%>/user/configurationTasks.do?dispatch=runNow&id=${task.id}" class="btn btn-default"> |
<span class="glyphicon glyphicon-play"></span> |
</a> |
</td> |
<td><bean:message key="targetService.${task.targetService}"/></td> |
<td><bean:message key="configuration.task.${task.typeMsgKey}"/></td> |
<td> |
96,7 → 103,20 |
</a> |
</logic:notEmpty> |
<logic:equal value="true" name="task" property="active"> |
<a alt="Desactivar" class="btn btn-success" href="<%=request.getContextPath()%>/user/configurationTasks.do?dispatch=toggleActive&id=${task.id}" > |
<span class="glyphicon glyphicon-ok"></span> |
</a> |
</logic:equal> |
<logic:equal value="false" name="task" property="active"> |
<a alt="Activar" class="btn btn-warning" href="<%=request.getContextPath()%>/user/configurationTasks.do?dispatch=toggleActive&id=${task.id}" > |
<span class="glyphicon glyphicon-ban-circle"></span> |
</a> |
</logic:equal> |
<a alt="Apagar" class="btn btn-danger" onclick="return confirm('Tem a certeza que deseja apagar esta tarefa? <bean:message key="targetService.${task.targetService}"/>')" href="<%=request.getContextPath()%>/user/configurationTasks.do?dispatch=delete&id=${task.id}"> |
<span class="glyphicon glyphicon-remove"></span> |
</a> |
</td> |
</tr> |
/impl/src/web/admin/configuration/jobTasks.jsp |
---|
35,7 → 35,7 |
<table id="myTable" class="tablesorter"> |
<thead> |
<tr> |
<th class="filter-true"><bean:message key="configuration.jobtask"/></th> |
<th class="filter-true"><bean:message key="configuration.jobtasks"/></th> |
<th class="filter-true">Data Inicio</th> |
<th class="filter-true">Criador</th> |
<th class="filter-true">Parametros</th> |