This is an automated email from the ASF dual-hosted git repository.

cwylie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-druid.git


The following commit(s) were added to refs/heads/master by this push:
     new 4ea37e2  Add time taken by last query in SQL view (#7421)
4ea37e2 is described below

commit 4ea37e2614375aea55079eb08bb47487bdfba31b
Author: Qi Shu <shuqi...@gmail.com>
AuthorDate: Wed Apr 10 23:35:47 2019 -0700

    Add time taken by last query in SQL view (#7421)
    
    * Add time taken by query
    
    * Fix time to 2 dp; set state in on state change; hide time taken at first
    
    * Refactored code: defined query result interface; more concise shorthand 
expression
    
    * Use single quote
---
 web-console/src/components/sql-control.scss |  5 +++++
 web-console/src/components/sql-control.tsx  |  9 ++++++--
 web-console/src/views/sql-view.tsx          | 35 +++++++++++++++++++++--------
 3 files changed, 38 insertions(+), 11 deletions(-)

diff --git a/web-console/src/components/sql-control.scss 
b/web-console/src/components/sql-control.scss
index 468e91a..d5e894d 100644
--- a/web-console/src/components/sql-control.scss
+++ b/web-console/src/components/sql-control.scss
@@ -28,11 +28,16 @@
   }
 
   .buttons {
+    position: relative;
 
     button{
       margin-right: 15px;
     }
 
+    .query-elapsed {
+      position: absolute;
+      right: 10px;
+    }
   }
 
 }
diff --git a/web-console/src/components/sql-control.tsx 
b/web-console/src/components/sql-control.tsx
index 99c7c43..6b4de1d 100644
--- a/web-console/src/components/sql-control.tsx
+++ b/web-console/src/components/sql-control.tsx
@@ -40,6 +40,7 @@ export interface SqlControlProps extends React.Props<any> {
   initSql: string | null;
   onRun: (query: string) => void;
   onExplain: (query: string) => void;
+  queryElapsed: number | null;
 }
 
 export interface SqlControlState {
@@ -166,7 +167,7 @@ export class SqlControl extends 
React.Component<SqlControlProps, SqlControlState
   }
 
   render() {
-    const { onRun, onExplain } = this.props;
+    const { onRun, onExplain, queryElapsed } = this.props;
     const { query, autoCompleteOn } = this.state;
 
     const isRune = query.trim().startsWith('{');
@@ -217,7 +218,11 @@ export class SqlControl extends 
React.Component<SqlControlProps, SqlControlState
         <Button rightIcon={IconNames.CARET_RIGHT} onClick={() => onRun(query)}>
           {isRune ? 'Rune' : 'Run'}
         </Button>
-        {!isRune ? SqlControlPopover : null}
+        {!isRune && SqlControlPopover}
+        {
+          queryElapsed &&
+          <span className={'query-elapsed'}> Last query took {(queryElapsed / 
1000).toFixed(2)} seconds</span>
+        }
       </div>
     </div>;
   }
diff --git a/web-console/src/views/sql-view.tsx 
b/web-console/src/views/sql-view.tsx
index e8f90d7..53712d9 100644
--- a/web-console/src/views/sql-view.tsx
+++ b/web-console/src/views/sql-view.tsx
@@ -29,7 +29,8 @@ import {
   localStorageGet, LocalStorageKeys,
   localStorageSet, parseQueryPlan,
   queryDruidRune,
-  queryDruidSql, QueryManager, SemiJoinQueryExplanation
+  queryDruidSql, QueryManager,
+  SemiJoinQueryExplanation
 } from '../utils';
 
 import './sql-view.scss';
@@ -46,11 +47,17 @@ export interface SqlViewState {
   explainResult: BasicQueryExplanation | SemiJoinQueryExplanation | string | 
null;
   loadingExplain: boolean;
   explainError: Error | null;
+  queryElapsed: number | null;
+}
+
+interface SqlQueryResult {
+  queryResult: HeaderRows;
+  queryElapsed: number;
 }
 
 export class SqlView extends React.Component<SqlViewProps, SqlViewState> {
 
-  private sqlQueryManager: QueryManager<string, HeaderRows>;
+  private sqlQueryManager: QueryManager<string, SqlQueryResult>;
   private explainQueryManager: QueryManager<string, any>;
 
   constructor(props: SqlViewProps, context: any) {
@@ -62,34 +69,42 @@ export class SqlView extends React.Component<SqlViewProps, 
SqlViewState> {
       explainDialogOpen: false,
       loadingExplain: false,
       explainResult: null,
-      explainError: null
+      explainError: null,
+      queryElapsed: null
     };
   }
 
   componentDidMount(): void {
     this.sqlQueryManager = new QueryManager({
       processQuery: async (query: string) => {
+        const startTime = new Date();
         if (query.trim().startsWith('{')) {
           // Secret way to issue a native JSON "rune" query
           const runeQuery = Hjson.parse(query);
-          return decodeRune(runeQuery, await queryDruidRune(runeQuery));
-
+          const result = await queryDruidRune(runeQuery);
+          return {
+            queryResult: decodeRune(runeQuery, result),
+            queryElapsed: new Date().valueOf() - startTime.valueOf()
+          };
         } else {
           const result = await queryDruidSql({
             query,
             resultFormat: 'array',
             header: true
           });
-
           return {
-            header: (result && result.length) ? result[0] : [],
-            rows: (result && result.length) ? result.slice(1) : []
+            queryResult: {
+              header: (result && result.length) ? result[0] : [],
+              rows: (result && result.length) ? result.slice(1) : []
+            },
+            queryElapsed: new Date().valueOf() - startTime.valueOf()
           };
         }
       },
       onStateChange: ({ result, loading, error }) => {
         this.setState({
-          result,
+          result: result ? result.queryResult : null,
+          queryElapsed: result ? result.queryElapsed : null,
           loading,
           error
         });
@@ -158,6 +173,7 @@ export class SqlView extends React.Component<SqlViewProps, 
SqlViewState> {
 
   render() {
     const { initSql } = this.props;
+    const { queryElapsed } = this.state;
 
     return <div className="sql-view app-view">
       <SqlControl
@@ -167,6 +183,7 @@ export class SqlView extends React.Component<SqlViewProps, 
SqlViewState> {
           this.sqlQueryManager.runQuery(q);
         }}
         onExplain={(q: string) => this.getExplain(q)}
+        queryElapsed={queryElapsed}
       />
       {this.renderResultTable()}
       {this.renderExplainDialog()}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@druid.apache.org
For additional commands, e-mail: commits-h...@druid.apache.org

Reply via email to