import pl.edu.icm.synat.api.services.process.FlowDefinitionQuery import pl.edu.icm.synat.api.services.process.ProcessManager import pl.edu.icm.synat.api.services.scheduler.CronJobTrigger import pl.edu.icm.synat.api.services.scheduler.ExecuteRunnableJobDefinition import pl.edu.icm.synat.api.services.scheduler.Scheduler import pl.edu.icm.synat.services.process.flow.FlowResultOrder import pl.edu.icm.synat.services.process.flow.FlowResultOrder.OrderType schedulerService = serviceUtils.getService('scheduler-service', Scheduler.class) processManagementService = serviceUtils.getService('ProcessManager', ProcessManager.class) def journalCountParams = ["indexService.serviceId=Index","objectCounterService.serviceId=object-counter-service"] def collCountParams = ["collectionIndexService.serviceId=CollectionIndex","objectCounterService.serviceId=object-counter-service"] def bookCountParams = ["indexService.serviceId=Index","objectCounterService.serviceId=object-counter-service"] def articlesCountParams = ["indexService.serviceId=Index","objectCounterService.serviceId=object-counter-service"] def usersCountParams = ["userCatalog.serviceId=UserCatalog","objectCounterService.serviceId=object-counter-service"] def authorsCountParams = ["peopleFulltextIndexService.serviceId=PeopleFulltextIndex","objectCounterService.serviceId=object-counter-service"] register("journalscounterFlow","journalCount", "0 0 6 * * ?",journalCountParams); register("collectionscounterFlow","collectionCount", "0 5 6 * * ?",collCountParams); register("bookscounterFlow","booksCount", "0 10 6 * * ?",bookCountParams); register("articlescounterFlow","articlesCount", "0 15 6 * * ?",articlesCountParams); register("userscounterFlow","userscounter", "0 20 6 * * ?",usersCountParams); register("authorscounterFlow","authorscounter", "0 25 6 * * ?",authorsCountParams); register("contentscounterFlow","contentscounter", "0 30 6 * * ?",articlesCountParams); def collParams = ["collectionService.serviceId=collection-service","collectionIndexService.serviceId=CollectionIndex","collectionEventBusService.serviceId=collection.recordEvent"] def collContParams = ["collectionService.serviceId=collection-service","storeService.serviceId=Store","collectionContentIndexService.serviceId=CollectionContentIndex"] def docParams = ["storeService.serviceId=Store","indexService.serviceId=Index","storeEventBusService.serviceId=store.recordEvent"] def watchlistParams = ["collectionService.serviceId=collection-service","userProfileService.serviceId=user-profile-service","storeService.serviceId=Store","observationService.serviceId=observation-service"] register("collectionIndexCleanerFlow","collectionIndexCleaner", "0 40 6 * * ?", collParams); register("collectionContentIndexCleanerFlow","collectionContentIndexCleaner", "0 41 6 * * ?", collContParams); //register("fulltextIndexCleanerFlow","fulltextIndexCleaner", "0 42 6 * * ?", docParams); register("watchlistCleanerFlow","watchlistCleaner", "0 43 6 * * ?", watchlistParams); void register(flowName, scheduledJobDesc,cronExpression, params){ //remove flow if exists for(job in schedulerService.listJobs()){ if(scheduledJobDesc.equals(job.getJob().getDefinition().getDescription())){ schedulerService.unscheduleJob(job.getJob().getId()); } } def query = new FlowDefinitionQuery(); query.setFlowName(flowName); query.setPageSize(1); query.setResultOrder(new FlowResultOrder(OrderType.BY_FLOW_DATE, FlowResultOrder.DESCENDING_ORDER) ); def infoDefinitions = processManagementService.searchFlow(query); println "fetching flow with name: "+flowName; def flowId = infoDefinitions.getItems().get(0).getFlowId() def auxParams = new HashMap(); auxParams.put("flowId", flowId); if(params!=null){ for(param in params){ auxParams.putAt(param.split("=")[0], param.split("=")[1]) } } def jobTrigger = new CronJobTrigger(cronExpression); def jobDefinition = new ExecuteRunnableJobDefinition(flowId, "testProcessManager", scheduledJobDesc, auxParams); schedulerService.unscheduleJob(flowId); schedulerService.scheduleJob(jobDefinition, jobTrigger); }