diff --git a/itests/hive-unit/src/test/java/org/apache/hive/service/cli/session/TestQueryDisplay.java b/itests/hive-unit/src/test/java/org/apache/hive/service/cli/session/TestQueryDisplay.java index 418f71e..98581e0 100644 --- a/itests/hive-unit/src/test/java/org/apache/hive/service/cli/session/TestQueryDisplay.java +++ b/itests/hive-unit/src/test/java/org/apache/hive/service/cli/session/TestQueryDisplay.java @@ -133,8 +133,10 @@ private void verifyDDL(SQLOperationDisplay display, String stmt, String handle, if (finished) { Assert.assertTrue(display.getEndTime() > 0 && display.getEndTime() >= display.getBeginTime() && display.getEndTime() <= System.currentTimeMillis()); + Assert.assertTrue(display.getRuntime() > 0); } else { Assert.assertNull(display.getEndTime()); + //For runtime, query may have finished. } QueryDisplay qDisplay1 = display.getQueryDisplay(); diff --git a/service/src/jamon/org/apache/hive/tmpl/QueryProfileTmpl.jamon b/service/src/jamon/org/apache/hive/tmpl/QueryProfileTmpl.jamon index 8d51a73..690c6f3 100644 --- a/service/src/jamon/org/apache/hive/tmpl/QueryProfileTmpl.jamon +++ b/service/src/jamon/org/apache/hive/tmpl/QueryProfileTmpl.jamon @@ -129,7 +129,7 @@ org.apache.hive.service.cli.operation.SQLOperationDisplay; <% sod.getQueryDisplay() == null ? "Unknown" : sod.getQueryDisplay().getQueryString() %> - Query Id + Id <% sod.getQueryDisplay() == null ? "Unknown" : sod.getQueryDisplay().getQueryId() %> @@ -141,23 +141,27 @@ org.apache.hive.service.cli.operation.SQLOperationDisplay; <% sod.getState() %> - Begin Time + Opened Timestamp <% new Date(sod.getBeginTime()) %> - Elapsed Time (s) + Opened (s) <% sod.getElapsedTime()/1000 %> - End Time - <% sod.getEndTime() == null ? "In Progress" : new Date(sod.getEndTime()) %> + Closed Timestamp + <% sod.getEndTime() == null ? "Open" : new Date(sod.getEndTime()) %> <%if sod.getQueryDisplay() != null && sod.getQueryDisplay().getErrorMessage() != null %> Error - <% sod.getEndTime() == null ? "In Progress" : new Date(sod.getEndTime()) %> + <% sod.getQueryDisplay().getErrorMessage() %> + + Latency (s) + <% sod.getRuntime()/1000 %> + diff --git a/service/src/java/org/apache/hive/service/cli/operation/Operation.java b/service/src/java/org/apache/hive/service/cli/operation/Operation.java index d9a273b..b7d6549 100644 --- a/service/src/java/org/apache/hive/service/cli/operation/Operation.java +++ b/service/src/java/org/apache/hive/service/cli/operation/Operation.java @@ -446,7 +446,7 @@ protected OperationState getState() { protected void onNewState(OperationState state, OperationState prevState) { switch(state) { case RUNNING: - markOperationStartTime(); + markOperationStartTime(); break; case ERROR: case FINISHED: diff --git a/service/src/java/org/apache/hive/service/cli/operation/SQLOperation.java b/service/src/java/org/apache/hive/service/cli/operation/SQLOperation.java index 04d816a..9ce6055 100644 --- a/service/src/java/org/apache/hive/service/cli/operation/SQLOperation.java +++ b/service/src/java/org/apache/hive/service/cli/operation/SQLOperation.java @@ -556,6 +556,11 @@ protected void onNewState(OperationState state, OperationState prevState) { } } + if (state == OperationState.FINISHED || state == OperationState.CANCELED || state == OperationState.ERROR) { + //update runtime + sqlOpDisplay.setRuntime(getOperationComplete() - getOperationStart()); + } + if (state == OperationState.CLOSED) { sqlOpDisplay.closed(); } else { diff --git a/service/src/java/org/apache/hive/service/cli/operation/SQLOperationDisplay.java b/service/src/java/org/apache/hive/service/cli/operation/SQLOperationDisplay.java index d2ca1e7..fe93426 100644 --- a/service/src/java/org/apache/hive/service/cli/operation/SQLOperationDisplay.java +++ b/service/src/java/org/apache/hive/service/cli/operation/SQLOperationDisplay.java @@ -32,6 +32,7 @@ public final String executionEngine; public final long beginTime; public final String operationId; + public Long runtime; //tracks only running portion of the query. public Long endTime; public OperationState state; @@ -96,4 +97,12 @@ public String getOperationId() { public synchronized void closed() { this.endTime = System.currentTimeMillis(); } + + public synchronized void setRuntime(long runtime) { + this.runtime = runtime; + } + + public synchronized Long getRuntime() { + return runtime; + } } diff --git a/service/src/resources/hive-webapps/hiveserver2/hiveserver2.jsp b/service/src/resources/hive-webapps/hiveserver2/hiveserver2.jsp index 8b46550..293a8ef 100644 --- a/service/src/resources/hive-webapps/hiveserver2/hiveserver2.jsp +++ b/service/src/resources/hive-webapps/hiveserver2/hiveserver2.jsp @@ -125,15 +125,16 @@ for (HiveSession hiveSession: hiveSessions) {
-

Queries

+

Open Queries

- - + + + <% @@ -149,30 +150,32 @@ for (HiveSession hiveSession: hiveSessions) { + <% String link = "/query_page?operationId=" + operation.getOperationId(); %> - + <% } %> - +
User Name Query Execution Engine StateBegin TimeElapsed Time (s)Opened TimestampOpened (s)Latency (s) Drilldown Link
<%= operation.getState() %> <%= new Date(operation.getBeginTime()) %> <%= operation.getElapsedTime()/1000 %><%= operation.getRuntime() == null ? "Not finished" : operation.getRuntime()/1000 %> >Query Drilldown >Drilldown
Total number of queries: <%= queries %>Total number of queries: <%= queries %>
-

Last Max <%= conf.get(ConfVars.HIVE_SERVER2_WEBUI_MAX_HISTORIC_QUERIES.varname) %> Completed Queries

+

Last Max <%= conf.get(ConfVars.HIVE_SERVER2_WEBUI_MAX_HISTORIC_QUERIES.varname) %> Closed Queries

- - + + + <% @@ -188,8 +191,9 @@ for (HiveSession hiveSession: hiveSessions) { + <% String link = "/query_page?operationId=" + operation.getOperationId(); %> - + <%
User Name Query Execution Engine StateElapsed Time (s)End TimeOpened (s)Closed TimestampLatency (s) Drilldown Link
<%= operation.getState() %> <%= operation.getElapsedTime()/1000 %> <%= operation.getEndTime() == null ? "In Progress" : new Date(operation.getEndTime()) %><%= operation.getRuntime()/1000 %> >Query Drilldown >Drilldown