xref: /OpenGrok/opengrok-web/src/main/java/org/opengrok/web/api/v1/controller/StatusController.java (revision 2f93c05f7383b8c5fc9e10bf9d6c390e686694a8)
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