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

    https://github.com/apache/storm/pull/2738#discussion_r198557270
  
    --- Diff: 
storm-core/src/jvm/org/apache/storm/ui/resources/StormApiResource.java ---
    @@ -0,0 +1,374 @@
    +/*
    + * 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.Map;
    +
    +import javax.servlet.ServletContext;
    +import javax.servlet.http.HttpServletRequest;
    +import javax.ws.rs.DefaultValue;
    +import javax.ws.rs.GET;
    +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.SecurityContext;
    +import javax.ws.rs.core.UriInfo;
    +
    +import org.apache.storm.ui.UiHelpers;
    +import org.apache.storm.utils.NimbusClient;
    +import org.apache.storm.utils.Utils;
    +import org.apache.thrift.TException;
    +import org.json.simple.JSONValue;
    +import org.slf4j.Logger;
    +import org.slf4j.LoggerFactory;
    +
    +
    +/**
    + * Root resource (exposed at "storm" path).
    + */
    +@Path("/api/v1/")
    +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 NimbusClient nimbusClient =
    +            NimbusClient.getConfiguredClient(Utils.readStormConfig());
    +
    +    public static Map<String, Object> config = Utils.readStormConfig();
    +    /**
    +     * /api/v1/cluster/configuration -> nimbus configuration.
    +     */
    +
    +    @GET
    +    @Path("/cluster/configuration")
    +    @Produces("application/json")
    +    public String getClusterConfiguration() {
    +        try {
    +            return nimbusClient.getClient().getNimbusConf();
    +        } catch (TException e) {
    +            e.printStackTrace();
    +            return null;
    +        }
    +    }
    +
    +    /**
    +     * /api/v1/cluster/summary -> cluster summary.
    +     */
    +    @GET
    +    @Path("/cluster/summary")
    +    @Produces("application/json")
    +    public String getClusterSummary() {
    +        try {
    +            String user = servletRequest.getRemoteUser();
    +            return JSONValue.toJSONString(
    +                    UiHelpers.getClusterSummary(
    +                            nimbusClient.getClient().getClusterInfo(), 
user, config)
    +            );
    +        } catch (TException e) {
    +            e.printStackTrace();
    +            return null;
    +        }
    +    }
    +
    +    /**
    +     * /api/v1/nimbus/summary -> nimbus summary.
    +     */
    +    @GET
    +    @Path("/nimbus/summary")
    +    @Produces("application/json")
    +    public String getNimbusSummary() {
    +        try {
    +            String user = servletRequest.getRemoteUser();
    +            return JSONValue.toJSONString(
    --- End diff --
    
    Nimbus summary is not just a cluster summary.
    
    ```
    (defn nimbus-summary
      ([secure?]
        (thrift/with-configured-nimbus-connection nimbus
          (nimbus-summary
            (.get_nimbuses (.getClusterInfo ^Nimbus$Client nimbus)) secure?)))
      ([nimbuses secure?]
        (let [nimbus-seeds (set (map #(str %1 ":" (*STORM-CONF* 
NIMBUS-THRIFT-PORT)) (remove #(Utils/isLocalhostAddress %) (set (*STORM-CONF* 
NIMBUS-SEEDS)))))
              alive-nimbuses (set (map #(str (.get_host %1) ":" (.get_port %1)) 
nimbuses))
              offline-nimbuses (clojure.set/difference nimbus-seeds 
alive-nimbuses)
              offline-nimbuses-summary (map #(convert-to-nimbus-summary %1) 
offline-nimbuses)]
          {"nimbuses"
           (concat offline-nimbuses-summary
           (for [^NimbusSummary n nimbuses
                 :let [uptime (.get_uptime_secs n)]]
             {
              "host" (.get_host n)
              "port" (.get_port n)
              "nimbusLogLink" (nimbus-log-link (.get_host n) secure?)
              "status" (if (.is_isLeader n) "Leader" "Not a Leader")
              "version" (.get_version n)
              "nimbusUpTime" (UIHelpers/prettyUptimeSec uptime)
              "nimbusUpTimeSeconds" uptime}))})))
    ```


---

Reply via email to