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..5d7395b 100644 --- a/service/src/jamon/org/apache/hive/tmpl/QueryProfileTmpl.jamon +++ b/service/src/jamon/org/apache/hive/tmpl/QueryProfileTmpl.jamon @@ -145,7 +145,7 @@ org.apache.hive.service.cli.operation.SQLOperationDisplay; <% new Date(sod.getBeginTime()) %> - Elapsed Time (s) + Opened (s) <% sod.getElapsedTime()/1000 %> @@ -158,6 +158,10 @@ org.apache.hive.service.cli.operation.SQLOperationDisplay; <% sod.getEndTime() == null ? "In Progress" : new Date(sod.getEndTime()) %> + + Query Runtime (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..b940c4c 100644 --- a/service/src/resources/hive-webapps/hiveserver2/hiveserver2.jsp +++ b/service/src/resources/hive-webapps/hiveserver2/hiveserver2.jsp @@ -125,7 +125,7 @@ for (HiveSession hiveSession: hiveSessions) {
-

Queries

+

Open Queries

@@ -133,7 +133,8 @@ for (HiveSession hiveSession: hiveSessions) { - + + <% @@ -149,6 +150,7 @@ for (HiveSession hiveSession: hiveSessions) { + <% String link = "/query_page?operationId=" + operation.getOperationId(); %> @@ -164,15 +166,16 @@ for (HiveSession hiveSession: hiveSessions) {
-

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

User NameExecution Engine State Begin TimeElapsed Time (s)Opened (s)Query Runtime (s) Drilldown Link
<%= operation.getState() %> <%= new Date(operation.getBeginTime()) %> <%= operation.getElapsedTime()/1000 %><%= operation.getRuntime() == null ? "Not finished" : operation.getRuntime()/1000 %> >Query Drilldown
- + + <% @@ -188,6 +191,7 @@ for (HiveSession hiveSession: hiveSessions) { + <% String link = "/query_page?operationId=" + operation.getOperationId(); %>
User Name Query Execution Engine StateElapsed Time (s)Opened (s) End TimeQuery Runtime (s) Drilldown Link
<%= operation.getState() %> <%= operation.getElapsedTime()/1000 %> <%= operation.getEndTime() == null ? "In Progress" : new Date(operation.getEndTime()) %><%= operation.getRuntime()/1000 %> >Query Drilldown