package eu.openaire.urls_worker.controllers; import eu.openaire.urls_worker.UrlsWorkerApplication; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.List; import java.util.Map; @RestController @RequestMapping("") public class GeneralController { private static final Logger logger = LoggerFactory.getLogger(GeneralController.class); public GeneralController() {} @GetMapping("isAlive") public ResponseEntity isWorkerAlive() { logger.info("Received an \"isAlive\" request."); return ResponseEntity.ok().build(); } public static boolean shouldShutdownWorker = false; @GetMapping("shutdownWorker/{shutdownCode}") public ResponseEntity shutdownWorkerGracefully(@PathVariable String shutdownCode) { String initMsg = "Received a \"shutdownWorker\" request."; if ( shutdownCode.equals(UrlsWorkerApplication.shutdownOrCancelCode) ) { shouldShutdownWorker = true; logger.info(initMsg + " The worker will shutdown, after finishing current work."); return ResponseEntity.ok().build(); } else { String errorMsg = initMsg + " But, it has an invalid \"shutdownCode\": " + shutdownCode; logger.error(errorMsg); return ResponseEntity.status(HttpStatus.FORBIDDEN).body(errorMsg); } } @GetMapping("cancelShutdownWorker/{cancelCode}") public ResponseEntity cancelShutdownWorkerGracefully(@PathVariable String cancelCode) { String initMsg = "Received a \"cancelShutdownWorker\" request."; if ( cancelCode.equals(UrlsWorkerApplication.shutdownOrCancelCode) ) { shouldShutdownWorker = false; logger.info(initMsg + " Any previous \"shutdownWorker\"-request is canceled. The \"maxAssignmentsBatchesToHandleBeforeShutdown\" will still be honored (if it's set)."); return ResponseEntity.ok().build(); } else { String errorMsg = initMsg + " But, it has an invalid \"cancelCode\": " + cancelCode; logger.error(errorMsg); return ResponseEntity.status(HttpStatus.FORBIDDEN).body(errorMsg); } } @GetMapping("getHandledAssignmentsCounts") public ResponseEntity getHandledAssignmentsCounts() { List handledAssignmentsCounts = new ArrayList<>(FullTextsController.assignmentsNumsHandledAndLocallyDeleted.size()/2); for ( Map.Entry entry : FullTextsController.assignmentsNumsHandledAndLocallyDeleted.entrySet() ) { if ( entry.getValue().equals(true) ) handledAssignmentsCounts.add(entry.getKey()); } return ResponseEntity.ok(handledAssignmentsCounts); } }