Github user revans2 commented on a diff in the pull request:

    https://github.com/apache/storm/pull/2752#discussion_r200476039
  
    --- Diff: 
storm-core/src/jvm/org/apache/storm/ui/resources/StormApiResource.java ---
    @@ -0,0 +1,741 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one
    + * or more contributor license agreements.  See the NOTICE file
    + * distributed with this work for additional information
    + * regarding copyright ownership.  The ASF licenses this file
    + * to you under the Apache License, Version 2.0 (the
    + * "License"); you may not use this file except in compliance
    + * with the License.  You may obtain a copy of the License at
    + *
    + * http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +package org.apache.storm.ui.resources;
    +
    +import java.util.HashMap;
    +import java.util.Map;
    +
    +import javax.servlet.ServletContext;
    +import javax.servlet.http.HttpServletRequest;
    +import javax.ws.rs.Consumes;
    +import javax.ws.rs.DefaultValue;
    +import javax.ws.rs.GET;
    +import javax.ws.rs.POST;
    +import javax.ws.rs.Path;
    +import javax.ws.rs.PathParam;
    +import javax.ws.rs.Produces;
    +import javax.ws.rs.QueryParam;
    +import javax.ws.rs.core.Context;
    +import javax.ws.rs.core.Response;
    +import javax.ws.rs.core.SecurityContext;
    +import javax.ws.rs.core.UriInfo;
    +
    +import org.apache.storm.generated.AuthorizationException;
    +import org.apache.storm.generated.NotAliveException;
    +import org.apache.storm.thrift.TException;
    +import org.apache.storm.ui.UIHelpers;
    +import org.apache.storm.utils.NimbusClient;
    +import org.apache.storm.utils.Utils;
    +import org.json.simple.JSONValue;
    +import org.slf4j.Logger;
    +import org.slf4j.LoggerFactory;
    +
    +
    +/**
    + * Root resource (exposed at "storm" path).
    + */
    +@Path("/")
    +public class StormApiResource {
    +
    +    public static final Logger LOG = 
LoggerFactory.getLogger(StormApiResource.class);
    +
    +    @Context
    +    private UriInfo info;
    +
    +    @Context
    +    private HttpServletRequest servletRequest;
    +
    +
    +    @Context
    +    private ServletContext servletContext;
    +
    +    public static Map<String, Object> config = Utils.readStormConfig();
    +    /**
    +     * /api/v1/cluster/configuration -> nimbus configuration.
    +     */
    +
    +    @GET
    +    @Path("/cluster/configuration")
    +    @Produces("application/json")
    +    public Response getClusterConfiguration() {
    +        try {
    +            NimbusClient nimbusClient = 
NimbusClient.getConfiguredClient(Utils.readStormConfig());
    +            return 
Response.status(Response.Status.OK).entity(nimbusClient.getClient().getNimbusConf()).build();
    +        } catch (AuthorizationException e) {
    +            e.printStackTrace();
    +            return Response.status(Response.Status.UNAUTHORIZED).build();
    +        } catch (TException e) {
    +            e.printStackTrace();
    +            return 
Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
    +        }
    +    }
    +
    +    /**
    +     * /api/v1/cluster/summary -> cluster summary.
    +     */
    +    @GET
    +    @Path("/cluster/summary")
    +    @Produces("application/json")
    +    public Response getClusterSummary() {
    +        try {
    +            NimbusClient nimbusClient = 
NimbusClient.getConfiguredClient(Utils.readStormConfig());
    +            String user = servletRequest.getRemoteUser();
    +            return 
Response.status(Response.Status.OK).entity(JSONValue.toJSONString(
    +                    UIHelpers.getClusterSummary(
    +                            nimbusClient.getClient().getClusterInfo(), 
user, config))).build();
    +        } catch (AuthorizationException e) {
    +            e.printStackTrace();
    +            return Response.status(Response.Status.UNAUTHORIZED).build();
    +
    +        } catch (TException e) {
    +            e.printStackTrace();
    +            return 
Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
    +        }
    +    }
    +
    +    /**
    +     * /api/v1/nimbus/summary -> nimbus summary.
    +     */
    +    @GET
    +    @Path("/nimbus/summary")
    +    @Produces("application/json")
    +    public Response getNimbusSummary() {
    +        try {
    +            NimbusClient nimbusClient = 
NimbusClient.getConfiguredClient(Utils.readStormConfig());
    +            String user = servletRequest.getRemoteUser();
    +            return 
Response.status(Response.Status.OK).entity(JSONValue.toJSONString(
    +                    UIHelpers.getNimbusSummary(
    +                            nimbusClient.getClient().getClusterInfo(), 
config))).build();
    +        } catch (AuthorizationException e) {
    +            e.printStackTrace();
    +            return Response.status(Response.Status.UNAUTHORIZED).build();
    +        } catch (TException e) {
    +            e.printStackTrace();
    +            return 
Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
    +        }
    +
    +    }
    +
    +    /**
    +     * /api/v1/owner-resources -> owner resources.
    +     */
    +    @GET
    +    @Path("/owner-resources")
    +    @Produces("application/json")
    +    public Response getOwnerResources() {
    +        try {
    +            NimbusClient nimbusClient = 
NimbusClient.getConfiguredClient(Utils.readStormConfig());
    +            return 
Response.status(Response.Status.OK).entity(JSONValue.toJSONString(
    +                    UIHelpers.getOwnerResourceSummaries(
    +                            
nimbusClient.getClient().getOwnerResourceSummaries(null), config))).build();
    +        } catch (AuthorizationException e) {
    +            e.printStackTrace();
    +            return Response.status(Response.Status.UNAUTHORIZED).build();
    +        } catch (TException e) {
    +            e.printStackTrace();
    +            return 
Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
    +        }
    +    }
    +
    +    /**
    +     * /api/v1/owner-resources/:id -> owner resources.
    +     */
    +    @GET
    +    @Path("/owner-resources/{id}")
    +    @Produces("application/json")
    +    public Response getOwnerResource(@PathParam("id") String id) {
    +        try {
    +            NimbusClient nimbusClient = 
NimbusClient.getConfiguredClient(Utils.readStormConfig());
    +            return 
Response.status(Response.Status.OK).entity(JSONValue.toJSONString(
    +                    UIHelpers.getOwnerResourceSummary(
    +                            
nimbusClient.getClient().getOwnerResourceSummaries(id),nimbusClient.getClient(),
    +                            id, config))).build();
    +        } catch (AuthorizationException e) {
    +            e.printStackTrace();
    +            return Response.status(Response.Status.UNAUTHORIZED).build();
    +        } catch (TException e) {
    +            e.printStackTrace();
    +            return 
Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
    +        }
    +    }
    +
    +    /**
    +     * /api/v1/history/summary -> topo history.
    +     */
    +    @GET
    +    @Path("/history/summary")
    +    @Produces("application/json")
    +    public Response getHistorySummary() {
    +        try {
    +            NimbusClient nimbusClient = 
NimbusClient.getConfiguredClient(Utils.readStormConfig());
    +            String user = servletRequest.getRemoteUser();
    +            return 
Response.status(Response.Status.OK).entity(JSONValue.toJSONString(
    +                    UIHelpers.getTopologyHistoryInfo(
    +                            
nimbusClient.getClient().getTopologyHistory(user)))).build();
    +        } catch (AuthorizationException e) {
    +            e.printStackTrace();
    +            return Response.status(Response.Status.UNAUTHORIZED).build();
    +        } catch (TException e) {
    +            e.printStackTrace();
    +            return 
Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
    +        }
    +    }
    +
    +    /**
    +     * /api/v1/supervisor/summary -> topo history.
    +     */
    +    @GET
    +    @Path("/supervisor/summary")
    +    @Produces("application/json")
    +    public Response getSupervisorSummary(@Context SecurityContext 
securityContext) {
    +        try {
    +            NimbusClient nimbusClient = 
NimbusClient.getConfiguredClient(Utils.readStormConfig());
    +            return 
Response.status(Response.Status.OK).entity(JSONValue.toJSONString(
    +                    UIHelpers.getSupervisorSummary(
    +                            
nimbusClient.getClient().getClusterInfo().get_supervisors(),
    +                            securityContext, config
    +                    ))).build();
    +        } catch (AuthorizationException e) {
    +            e.printStackTrace();
    +            return Response.status(Response.Status.UNAUTHORIZED).build();
    +        } catch (TException e) {
    +            e.printStackTrace();
    +            return 
Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
    +        }
    +    }
    +
    +    /**
    +     * /api/v1/supervisor -> topo history.
    +     */
    +    @GET
    +    @Path("/supervisor/{id}")
    +    @Produces("application/json")
    +    public Response getSupervisor(@PathParam("id") String id, 
@QueryParam("host") String host,
    +                                @QueryParam("sys") boolean sys) {
    +        try {
    +            NimbusClient nimbusClient = 
NimbusClient.getConfiguredClient(Utils.readStormConfig());
    +            return 
Response.status(Response.Status.OK).entity(JSONValue.toJSONString(
    +                    UIHelpers.getSupervisorPageInfo(
    +                            
nimbusClient.getClient().getSupervisorPageInfo(id, host, sys),
    +                            config
    +                    ))).build();
    +        } catch (AuthorizationException e) {
    +            e.printStackTrace();
    +            return Response.status(Response.Status.UNAUTHORIZED).build();
    +
    +        } catch (NotAliveException e) {
    +            e.printStackTrace();
    +            return 
Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
    +        } catch (TException e) {
    +            e.printStackTrace();
    +            return 
Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
    +        }
    +    }
    +
    +    /**
    +     * /api/v1/topology/summary -> topo history.
    +     */
    +    @GET
    +    @Path("/topology/summary")
    +    @Produces("application/json")
    +    public Response getTopologySummary(@Context SecurityContext 
securityContext) {
    +        try {
    +            NimbusClient nimbusClient = 
NimbusClient.getConfiguredClient(Utils.readStormConfig());
    +            return 
Response.status(Response.Status.OK).entity(JSONValue.toJSONString(
    +                    UIHelpers.getAllTopologiesSummary(
    +                            
nimbusClient.getClient().getClusterInfo().get_topologies(),
    +                            config
    +                    ))).build();
    +        } catch (AuthorizationException e) {
    +            e.printStackTrace();
    +            return Response.status(Response.Status.UNAUTHORIZED).build();
    +        } catch (TException e) {
    +            e.printStackTrace();
    +            return 
Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
    +        }
    +    }
    +
    +    /**
    +     * /api/v1/topology -> topo.
    +     */
    +    @GET
    +    @Path("/topology/{id}")
    +    @Produces("application/json")
    +    public Response getTopology(@PathParam("id") String id,
    +                              @DefaultValue(":all-time") 
@QueryParam("window") String window,
    +                              @QueryParam("sys") boolean sys) {
    +        try {
    +            NimbusClient nimbusClient = 
NimbusClient.getConfiguredClient(Utils.readStormConfig());
    +            return 
Response.status(Response.Status.OK).entity(JSONValue.toJSONString(
    +                    UIHelpers.getTopologySummary(
    +                            nimbusClient.getClient().getTopologyPageInfo(
    +                                    id, window, sys),
    +                            window, config,
    +                            servletRequest.getRemoteUser()
    +                    ))).build();
    +        } catch (AuthorizationException e) {
    +            e.printStackTrace();
    +            return Response.status(Response.Status.UNAUTHORIZED).build();
    +
    +        } catch (NotAliveException e) {
    +            e.printStackTrace();
    +            return 
Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
    +        } catch (TException e) {
    +            e.printStackTrace();
    +            return 
Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
    +        }
    +    }
    +
    +    /**
    +     * /api/v1/topology-workers/:id -> topo workers.
    +     */
    +    @GET
    +    @Path("/topology-workers/{id}")
    +    @Produces("application/json")
    +    public Response getTopologyWorkers(@PathParam("id") String id) {
    --- End diff --
    
    We might want to test this API a few times.   In the clojure we were URL 
decoding the id again.  Not sure why, but this is something we should look into.


---

Reply via email to