1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * See LICENSE.txt included in this distribution for the specific 9 * language governing permissions and limitations under the License. 10 * 11 * When distributing Covered Code, include this CDDL HEADER in each 12 * file and include the License file at LICENSE.txt. 13 * If applicable, add the following below this CDDL HEADER, with the 14 * fields enclosed by brackets "[]" replaced with your own identifying 15 * information: Portions Copyright [yyyy] [name of copyright owner] 16 * 17 * CDDL HEADER END 18 */ 19 20 /* 21 * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. 22 */ 23 package org.opengrok.web.api.v1.controller; 24 25 import jakarta.ws.rs.DELETE; 26 import jakarta.ws.rs.GET; 27 import jakarta.ws.rs.Path; 28 import jakarta.ws.rs.PathParam; 29 import jakarta.ws.rs.core.Response; 30 import org.opengrok.indexer.logger.LoggerFactory; 31 import org.opengrok.web.api.ApiTask; 32 import org.opengrok.web.api.ApiTaskManager; 33 34 import java.util.logging.Level; 35 import java.util.logging.Logger; 36 37 import static org.opengrok.web.api.v1.controller.StatusController.PATH; 38 39 /** 40 * API endpoint to check status of asynchronous requests. 41 * Relies on {@link org.opengrok.web.api.v1.filter.IncomingFilter} to authorize the requests. 42 */ 43 @Path(PATH) 44 public class StatusController { 45 46 public static final String PATH = "/status"; 47 48 private static final Logger LOGGER = LoggerFactory.getLogger(StatusController.class); 49 50 @GET 51 @Path("/{uuid}") getStatus(@athParam"uuid") String uuid)52 public Response getStatus(@PathParam("uuid") String uuid) { 53 ApiTask apiTask = ApiTaskManager.getInstance().getApiTask(uuid); 54 if (apiTask == null) { 55 return Response.status(Response.Status.NOT_FOUND).build(); 56 } 57 58 if (apiTask.isDone()) { 59 return apiTask.getResponse(); 60 } else { 61 return Response.status(Response.Status.ACCEPTED).build(); 62 } 63 } 64 65 @DELETE 66 @Path("/{uuid}") delete(@athParam"uuid") String uuid)67 public Response delete(@PathParam("uuid") String uuid) { 68 ApiTask apiTask = ApiTaskManager.getInstance().getApiTask(uuid); 69 if (apiTask == null) { 70 return Response.status(Response.Status.NOT_FOUND).build(); 71 } 72 73 if (!apiTask.isDone()) { 74 LOGGER.log(Level.WARNING, "API task {0} not yet done", apiTask); 75 return Response.status(Response.Status.BAD_REQUEST).build(); 76 } 77 78 ApiTaskManager.getInstance().deleteApiTask(uuid); 79 80 return Response.ok().build(); 81 } 82 } 83