Search in sources :

Example 1 with Task

use of eu.bcvsolutions.idm.core.scheduler.api.dto.Task in project CzechIdMng by bcvsolutions.

the class AbstractScheduledTaskInitializer method initScheduledTask.

/**
 * Method initial default long running tasks. Task will be loaded from
 * resources.
 *
 * @param tasksInputStream
 */
protected void initScheduledTask(InputStream tasksInputStream) {
    if (tasksInputStream == null) {
        LOG.warn("For module: [{}] is empty parameter 'tasksInputStream', skip init tasks for this module.", getModule());
    }
    Unmarshaller jaxbUnmarshaller = null;
    // 
    try {
        jaxbUnmarshaller = jaxbContext.createUnmarshaller();
    } catch (JAXBException e) {
        throw new ResultCodeException(CoreResultCode.XML_JAXB_INIT_ERROR, e);
    }
    try {
        IdmScheduledTasksType tasks = (IdmScheduledTasksType) jaxbUnmarshaller.unmarshal(tasksInputStream);
        List<Task> allExistingTasks = schedulerService.getAllTasks();
        if (tasks != null) {
            for (IdmScheduledTaskType taskType : tasks.getTasks()) {
                try {
                    Task task = typeToTask(taskType);
                    LOG.debug("Task with type [{}] is successfully initialized. Try to save.", taskType.getTaskType());
                    if (existSimilarTask(task, allExistingTasks)) {
                        LOG.debug("Task with type [{}] already exist, skip save this task.", taskType.getTaskType());
                        continue;
                    }
                    LOG.info("Create new task with type [{}].", taskType.getTaskType());
                    task = schedulerService.createTask(task);
                    createAndSaveTriggers(task, taskType);
                } catch (ClassNotFoundException e) {
                    LOG.error("Scheduled task with task type [{}] can't be init. Skip this task. Error message: [{}]", taskType.getTaskType(), e.getMessage());
                }
            }
        }
    } catch (JAXBException e) {
        LOG.error("Scheduled task type validation failed, file name: {}, module: {}, error message: {}", getTasksXmlPath(), getModule(), e.getLocalizedMessage());
    }
}
Also used : Task(eu.bcvsolutions.idm.core.scheduler.api.dto.Task) IdmScheduledTaskType(eu.bcvsolutions.idm.core.scheduler.jaxb.IdmScheduledTaskType) IdmScheduledTasksType(eu.bcvsolutions.idm.core.scheduler.jaxb.IdmScheduledTasksType) JAXBException(javax.xml.bind.JAXBException) ResultCodeException(eu.bcvsolutions.idm.core.api.exception.ResultCodeException) Unmarshaller(javax.xml.bind.Unmarshaller)

Example 2 with Task

use of eu.bcvsolutions.idm.core.scheduler.api.dto.Task in project CzechIdMng by bcvsolutions.

the class SchedulerController method find.

/**
 * Finds scheduled tasks
 *
 * @return all tasks
 */
@SuppressWarnings({ "unchecked", "rawtypes" })
@ResponseBody
@RequestMapping(method = RequestMethod.GET)
@PreAuthorize("hasAuthority('" + CoreGroupPermission.SCHEDULER_READ + "')")
@ApiOperation(value = "Search scheduled tasks", nickname = "searchSchedulerTasks", tags = { SchedulerController.TAG }, authorizations = { @Authorization(value = SwaggerConfig.AUTHENTICATION_BASIC, scopes = { @AuthorizationScope(scope = CoreGroupPermission.SCHEDULER_READ, description = "") }), @Authorization(value = SwaggerConfig.AUTHENTICATION_CIDMST, scopes = { @AuthorizationScope(scope = CoreGroupPermission.SCHEDULER_READ, description = "") }) })
@ApiImplicitParams({ @ApiImplicitParam(name = "page", dataType = "string", paramType = "query", value = "Results page you want to retrieve (0..N)"), @ApiImplicitParam(name = "size", dataType = "string", paramType = "query", value = "Number of records per page."), @ApiImplicitParam(name = "sort", allowMultiple = true, dataType = "string", paramType = "query", value = "Sorting criteria in the format: property(,asc|desc). " + "Default sort order is ascending. " + "Multiple sort criteria are supported.") })
public Resources<Task> find(@RequestParam(required = false) MultiValueMap<String, Object> parameters, @PageableDefault Pageable pageable) {
    String text = getParameterConverter().toString(parameters, DataFilter.PARAMETER_TEXT);
    List<Task> tasks = schedulerService.getAllTasks().stream().filter(task -> {
        // filter - like name or description only
        return StringUtils.isEmpty(text) || task.getTaskType().getSimpleName().toLowerCase().contains(text.toLowerCase()) || (task.getDescription() != null && task.getDescription().toLowerCase().contains(text.toLowerCase()));
    }).sorted((taskOne, taskTwo) -> {
        Sort sort = pageable.getSort();
        if (pageable.getSort() == null) {
            return 0;
        }
        int compareAscValue = 0;
        boolean asc = true;
        // "naive" sort implementation
        if (sort.getOrderFor(PROPERTY_TASK_TYPE) != null) {
            asc = sort.getOrderFor(PROPERTY_TASK_TYPE).isAscending();
            compareAscValue = taskOne.getTaskType().getSimpleName().compareTo(taskTwo.getTaskType().getSimpleName());
        }
        if (sort.getOrderFor(PROPERTY_DESCRIPTION) != null) {
            asc = sort.getOrderFor(PROPERTY_DESCRIPTION).isAscending();
            compareAscValue = taskOne.getDescription().compareTo(taskTwo.getDescription());
        }
        if (sort.getOrderFor(PROPERTY_INSTANCE_ID) != null) {
            asc = sort.getOrderFor(PROPERTY_INSTANCE_ID).isAscending();
            compareAscValue = taskOne.getInstanceId().compareTo(taskTwo.getInstanceId());
        }
        return asc ? compareAscValue : compareAscValue * -1;
    }).collect(Collectors.toList());
    // "naive" pagination
    int first = pageable.getPageNumber() * pageable.getPageSize();
    int last = pageable.getPageSize() + first;
    List<Task> taskPage = tasks.subList(first < tasks.size() ? first : tasks.size() > 0 ? tasks.size() - 1 : 0, last < tasks.size() ? last : tasks.size());
    // 
    return pageToResources(new PageImpl(taskPage, pageable, tasks.size()), Task.class);
}
Also used : PagedResourcesAssembler(org.springframework.data.web.PagedResourcesAssembler) PathVariable(org.springframework.web.bind.annotation.PathVariable) RequestParam(org.springframework.web.bind.annotation.RequestParam) DependentTaskTrigger(eu.bcvsolutions.idm.core.scheduler.api.dto.DependentTaskTrigger) PreAuthorize(org.springframework.security.access.prepost.PreAuthorize) SimpleTaskTrigger(eu.bcvsolutions.idm.core.scheduler.api.dto.SimpleTaskTrigger) Autowired(org.springframework.beans.factory.annotation.Autowired) RequestMapping(org.springframework.web.bind.annotation.RequestMapping) ApiParam(io.swagger.annotations.ApiParam) StringUtils(org.apache.commons.lang3.StringUtils) Valid(javax.validation.Valid) RequestBody(org.springframework.web.bind.annotation.RequestBody) CoreGroupPermission(eu.bcvsolutions.idm.core.model.domain.CoreGroupPermission) ApiOperation(io.swagger.annotations.ApiOperation) DataFilter(eu.bcvsolutions.idm.core.api.dto.filter.DataFilter) LookupService(eu.bcvsolutions.idm.core.api.service.LookupService) SwaggerConfig(eu.bcvsolutions.idm.core.api.config.swagger.SwaggerConfig) Pageable(org.springframework.data.domain.Pageable) Sort(org.springframework.data.domain.Sort) AuthorizationScope(io.swagger.annotations.AuthorizationScope) Task(eu.bcvsolutions.idm.core.scheduler.api.dto.Task) Api(io.swagger.annotations.Api) ConditionalOnProperty(org.springframework.boot.autoconfigure.condition.ConditionalOnProperty) ApiImplicitParam(io.swagger.annotations.ApiImplicitParam) MultiValueMap(org.springframework.util.MultiValueMap) RequestMethod(org.springframework.web.bind.annotation.RequestMethod) SchedulerManager(eu.bcvsolutions.idm.core.scheduler.api.service.SchedulerManager) Page(org.springframework.data.domain.Page) ResponseBody(org.springframework.web.bind.annotation.ResponseBody) Collectors(java.util.stream.Collectors) RestController(org.springframework.web.bind.annotation.RestController) ParameterConverter(eu.bcvsolutions.idm.core.api.utils.ParameterConverter) HttpStatus(org.springframework.http.HttpStatus) List(java.util.List) BaseController(eu.bcvsolutions.idm.core.api.rest.BaseController) AbstractTaskTrigger(eu.bcvsolutions.idm.core.scheduler.api.dto.AbstractTaskTrigger) CronTaskTrigger(eu.bcvsolutions.idm.core.scheduler.api.dto.CronTaskTrigger) PageableDefault(org.springframework.data.web.PageableDefault) Resources(org.springframework.hateoas.Resources) ResponseEntity(org.springframework.http.ResponseEntity) ApiImplicitParams(io.swagger.annotations.ApiImplicitParams) PageImpl(org.springframework.data.domain.PageImpl) Authorization(io.swagger.annotations.Authorization) PageImpl(org.springframework.data.domain.PageImpl) Task(eu.bcvsolutions.idm.core.scheduler.api.dto.Task) Sort(org.springframework.data.domain.Sort) ApiImplicitParams(io.swagger.annotations.ApiImplicitParams) ApiOperation(io.swagger.annotations.ApiOperation) PreAuthorize(org.springframework.security.access.prepost.PreAuthorize) ResponseBody(org.springframework.web.bind.annotation.ResponseBody) RequestMapping(org.springframework.web.bind.annotation.RequestMapping)

Example 3 with Task

use of eu.bcvsolutions.idm.core.scheduler.api.dto.Task in project CzechIdMng by bcvsolutions.

the class AbstractScheduledTaskInitializerTest method testInitTask.

@Test
public void testInitTask() {
    List<Task> tasks = schedulerService.getAllTasks();
    // found test task, other will be skip
    for (Task task : tasks) {
        if (task.getTaskType().equals(TestTaskExecutor.class)) {
            assertEquals(TEST_DESCRIPTION, task.getDescription());
            assertEquals(TEST_INSTANCE, task.getInstanceId());
            // assertEquals(InitTestScheduledTask.TEST_MODULE, task.getModule()); // module not working in Task
            Map<String, String> parameters = task.getParameters();
            assertEquals(3, parameters.size());
            String value1 = parameters.get(KEY_1);
            assertEquals(VALUE_1, value1);
            String value2 = parameters.get(KEY_2);
            assertEquals(VALUE_2, value2);
            String value3 = parameters.get(KEY_3);
            assertEquals(VALUE_3, value3);
            List<AbstractTaskTrigger> triggers = task.getTriggers();
            assertEquals(2, triggers.size());
            for (AbstractTaskTrigger trigger : triggers) {
                assertEquals(TaskTriggerState.ACTIVE, trigger.getState());
                if (trigger.getClass().equals(CronTaskTrigger.class)) {
                    CronTaskTrigger cronTrigger = (CronTaskTrigger) trigger;
                    assertEquals(TEST_CRON, cronTrigger.getCron());
                } else if (trigger.getClass().equals(SimpleTaskTrigger.class)) {
                    SimpleTaskTrigger simpleTrigger = (SimpleTaskTrigger) trigger;
                    assertEquals(TEST_FIRE_TIME, simpleTrigger.getFireTime());
                } else {
                    fail();
                }
            }
            // success
            return;
        }
    }
    // test task is not initialized
    fail();
}
Also used : AbstractTaskTrigger(eu.bcvsolutions.idm.core.scheduler.api.dto.AbstractTaskTrigger) Task(eu.bcvsolutions.idm.core.scheduler.api.dto.Task) CronTaskTrigger(eu.bcvsolutions.idm.core.scheduler.api.dto.CronTaskTrigger) SimpleTaskTrigger(eu.bcvsolutions.idm.core.scheduler.api.dto.SimpleTaskTrigger) Test(org.junit.Test) AbstractIntegrationTest(eu.bcvsolutions.idm.test.api.AbstractIntegrationTest)

Example 4 with Task

use of eu.bcvsolutions.idm.core.scheduler.api.dto.Task in project CzechIdMng by bcvsolutions.

the class DefaultSchedulerManagerIntegrationTest method testTaskRegistration.

@Test
public void testTaskRegistration() {
    List<Task> tasks = manager.getSupportedTasks();
    // 
    assertTrue(tasks.size() > 0);
    boolean testTaskIsRegisterd = false;
    for (Task task : tasks) {
        if (TestRegistrableSchedulableTask.class.equals(task.getTaskType())) {
            testTaskIsRegisterd = true;
            break;
        }
    }
    assertTrue(testTaskIsRegisterd);
}
Also used : FutureTask(java.util.concurrent.FutureTask) Task(eu.bcvsolutions.idm.core.scheduler.api.dto.Task) LongRunningFutureTask(eu.bcvsolutions.idm.core.scheduler.api.dto.LongRunningFutureTask) AbstractIntegrationTest(eu.bcvsolutions.idm.test.api.AbstractIntegrationTest) Test(org.junit.Test)

Example 5 with Task

use of eu.bcvsolutions.idm.core.scheduler.api.dto.Task in project CzechIdMng by bcvsolutions.

the class DefaultSchedulerManagerIntegrationTest method testCreateAndRunSimpleTrigger.

@Test
public void testCreateAndRunSimpleTrigger() throws InterruptedException, ExecutionException {
    helper.setConfigurationValue(SchedulerConfiguration.PROPERTY_TASK_ASYNCHRONOUS_ENABLED, false);
    try {
        String result = "TEST_SCHEDULER_TWO";
        Task task = createTask(result);
        // 
        manager.createTrigger(task.getId(), getSimpleTrigger(task));
        // 
        helper.waitForResult(getContinueFunction());
        // 
        List<FutureTask<?>> taskList = getFutureTaskList(TestSchedulableTask.class);
        assertEquals(result, taskList.get(0).get());
        // 
        checkScheduledTask(task);
    } finally {
        helper.setConfigurationValue(SchedulerConfiguration.PROPERTY_TASK_ASYNCHRONOUS_ENABLED, true);
    }
}
Also used : FutureTask(java.util.concurrent.FutureTask) Task(eu.bcvsolutions.idm.core.scheduler.api.dto.Task) LongRunningFutureTask(eu.bcvsolutions.idm.core.scheduler.api.dto.LongRunningFutureTask) FutureTask(java.util.concurrent.FutureTask) LongRunningFutureTask(eu.bcvsolutions.idm.core.scheduler.api.dto.LongRunningFutureTask) AbstractIntegrationTest(eu.bcvsolutions.idm.test.api.AbstractIntegrationTest) Test(org.junit.Test)

Aggregations

Task (eu.bcvsolutions.idm.core.scheduler.api.dto.Task)80 Test (org.junit.Test)45 AbstractIntegrationTest (eu.bcvsolutions.idm.test.api.AbstractIntegrationTest)41 LongRunningFutureTask (eu.bcvsolutions.idm.core.scheduler.api.dto.LongRunningFutureTask)17 IdmLongRunningTaskDto (eu.bcvsolutions.idm.core.scheduler.api.dto.IdmLongRunningTaskDto)16 DependentTaskTrigger (eu.bcvsolutions.idm.core.scheduler.api.dto.DependentTaskTrigger)15 CronTaskTrigger (eu.bcvsolutions.idm.core.scheduler.api.dto.CronTaskTrigger)14 IdmScheduledTaskDto (eu.bcvsolutions.idm.core.scheduler.api.dto.IdmScheduledTaskDto)13 FutureTask (java.util.concurrent.FutureTask)13 IdmIdentityDto (eu.bcvsolutions.idm.core.api.dto.IdmIdentityDto)10 SchedulableTaskExecutor (eu.bcvsolutions.idm.core.scheduler.api.service.SchedulableTaskExecutor)10 GuardedString (eu.bcvsolutions.idm.core.security.api.domain.GuardedString)10 OperationResult (eu.bcvsolutions.idm.core.api.entity.OperationResult)9 SimpleTaskTrigger (eu.bcvsolutions.idm.core.scheduler.api.dto.SimpleTaskTrigger)9 List (java.util.List)9 UUID (java.util.UUID)9 Autowired (org.springframework.beans.factory.annotation.Autowired)9 AbstractTaskTrigger (eu.bcvsolutions.idm.core.scheduler.api.dto.AbstractTaskTrigger)8 IdmLongRunningTaskFilter (eu.bcvsolutions.idm.core.scheduler.api.dto.filter.IdmLongRunningTaskFilter)8 ZonedDateTime (java.time.ZonedDateTime)8