[ https://issues.apache.org/jira/browse/DRILL-4604?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15636776#comment-15636776 ]
ASF GitHub Bot commented on DRILL-4604: --------------------------------------- Github user paul-rogers commented on a diff in the pull request: https://github.com/apache/drill/pull/482#discussion_r86569289 --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/DrillRoot.java --- @@ -55,44 +59,89 @@ public Viewable getStats() { @GET @Path("/stats.json") @Produces(MediaType.APPLICATION_JSON) - public List<Stat> getStatsJSON() { - List<Stat> stats = Lists.newLinkedList(); - stats.add(new Stat("Number of Drill Bits", work.getContext().getBits().size())); - int number = 0; - for (CoordinationProtos.DrillbitEndpoint bit : work.getContext().getBits()) { - String initialized = bit.isInitialized() ? " initialized" : " not initialized"; - stats.add(new Stat("Bit #" + number, bit.getAddress() + initialized)); - ++number; + public Stats getStatsJSON() { + final String version = work.getContext().getOptionManager().getOption(ExecConstants.CLUSTER_VERSION).string_val; + + final Map<String, Object> props = Maps.newLinkedHashMap(); + props.put("Cluster Version", version); + props.put("Number of Drillbits", work.getContext().getBits().size()); + CoordinationProtos.DrillbitEndpoint currentEndpoint = work.getContext().getEndpoint(); + final String address = currentEndpoint.getAddress(); + props.put("Data Port Address", address + ":" + currentEndpoint.getDataPort()); + props.put("User Port Address", address + ":" + currentEndpoint.getUserPort()); + props.put("Control Port Address", address + ":" + currentEndpoint.getControlPort()); + props.put("Maximum Direct Memory", DrillConfig.getMaxDirectMemory()); + + return new Stats(props, collectDrillbits(version)); + } + + private Collection<DrillbitInfo> collectDrillbits(String version) { + Set<DrillbitInfo> drillbits = Sets.newTreeSet(); + for (CoordinationProtos.DrillbitEndpoint endpoint : work.getContext().getBits()) { + boolean versionMatch = version.equals(endpoint.getVersion()); + DrillbitInfo drillbit = new DrillbitInfo(endpoint.getAddress(), endpoint.isInitialized(), endpoint.getVersion(), versionMatch); + drillbits.add(drillbit); } - stats.add(new Stat("Data Port Address", work.getContext().getEndpoint().getAddress() + - ":" + work.getContext().getEndpoint().getDataPort())); - stats.add(new Stat("User Port Address", work.getContext().getEndpoint().getAddress() + - ":" + work.getContext().getEndpoint().getUserPort())); - stats.add(new Stat("Control Port Address", work.getContext().getEndpoint().getAddress() + - ":" + work.getContext().getEndpoint().getControlPort())); - stats.add(new Stat("Maximum Direct Memory", DrillConfig.getMaxDirectMemory())); - - return stats; + return drillbits; } @XmlRootElement - public class Stat { - private String name; - private Object value; + public static class Stats { + private final Map<String, Object> props; + private final Collection<DrillbitInfo> drillbits; @JsonCreator - public Stat(String name, Object value) { - this.name = name; - this.value = value; + public Stats(Map<String, Object> props, Collection<DrillbitInfo> drillbits) { + this.props = props; + this.drillbits = drillbits; + } + + public Map<String, Object> getProps() { + return props; } - public String getName() { - return name; + public Collection<DrillbitInfo> getDrillbits() { + return drillbits; } + } + + public static class DrillbitInfo implements Comparable<DrillbitInfo> { + private final String address; + private final boolean initialized; + private final String version; + private final boolean versionMatch; - public Object getValue() { - return value; + @JsonCreator + public DrillbitInfo(String address, boolean initialized, String version, boolean versionMatch) { + this.address = address; + this.initialized = initialized; + this.version = version; + this.versionMatch = versionMatch; } + public String getAddress() { + return address; + } + + public String isInitialized() { + return initialized ? "initialized" : "not initialized"; --- End diff -- boolean-to-string conversions are best handled in the web UI template so that they can possibly be localized later. And, all the user-visible text is in one place. > Generate warning on Web UI if drillbits version mismatch is detected > -------------------------------------------------------------------- > > Key: DRILL-4604 > URL: https://issues.apache.org/jira/browse/DRILL-4604 > Project: Apache Drill > Issue Type: Improvement > Affects Versions: 1.6.0 > Reporter: Arina Ielchiieva > Assignee: Sudheesh Katkam > Labels: doc-impacting > Fix For: Future > > Attachments: index_page.JPG, index_page_mismatch.JPG, > screenshots_with_different_states.docx > > > Display drillbit version on web UI. If any of drillbits version doesn't match > with current drillbit, generate warning. > Screenshots - screenshots_with_different_states.docx. -- This message was sent by Atlassian JIRA (v6.3.4#6332)