package org.fenixedu.bennu.scheduler.api; import java.util.Map.Entry; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import org.fenixedu.bennu.core.groups.Group; import org.fenixedu.bennu.core.rest.BennuRestResource; import org.fenixedu.bennu.scheduler.annotation.Task; import org.fenixedu.bennu.scheduler.domain.SchedulerSystem; import org.fenixedu.bennu.scheduler.domain.TaskSchedule; import pt.ist.fenixframework.Atomic; import pt.ist.fenixframework.Atomic.TxMode; import com.google.gson.JsonArray; import com.google.gson.JsonObject; @Path("/bennu-scheduler/tasks") public class TaskResource extends BennuRestResource { @GET @Produces(MediaType.APPLICATION_JSON) public JsonObject getTasks() { accessControl(Group.managers()); final JsonObject objContainer = new JsonObject(); final JsonArray tasks = new JsonArray(); for (Entry<String, Task> taskEntry : SchedulerSystem.getTasks().entrySet()) { final JsonObject taskJson = new JsonObject(); taskJson.addProperty("type", taskEntry.getKey()); taskJson.addProperty("name", taskEntry.getValue().englishTitle()); tasks.add(taskJson); } objContainer.add("tasks", tasks); return objContainer; } @POST @Produces(MediaType.APPLICATION_JSON) @Path("/{name}") public Response runTaskNow(@PathParam("name") String name) { accessControl(Group.managers()); try { createRunOnceTaskSchedule(name); } catch (Exception e) { throw new WebApplicationException(Status.BAD_REQUEST); } return ok(); } @Atomic(mode = TxMode.WRITE) private TaskSchedule createRunOnceTaskSchedule(String name) { TaskSchedule taskSchedule = new TaskSchedule(name, Boolean.TRUE); return taskSchedule; } }