From 7c340d4560af4386ddf3c6bf843470991eddc414 Mon Sep 17 00:00:00 2001 From: Sagar Kulkarni Date: Thu, 28 Apr 2016 15:36:28 +0530 Subject: [PATCH 01/13] ZEPPELIN-704 Display elapse time for long running paragraph --- .../src/app/notebook/paragraph/paragraph.controller.js | 7 +++++++ zeppelin-web/src/app/notebook/paragraph/paragraph.css | 7 +++++++ zeppelin-web/src/app/notebook/paragraph/paragraph.html | 6 ++++++ 3 files changed, 20 insertions(+) diff --git a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js index c71e096bb48..72eb701a81a 100644 --- a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js +++ b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js @@ -974,6 +974,13 @@ angular.module('zeppelinWebApp') return desc; }; + $scope.getElapsedTime = function() { + var pdata = $scope.paragraph; + var timeMs = Date.now() - Date.parse(pdata.dateStarted); + var desc = Math.floor(timeMs/1000) + ' seconds elapsed.'; + return desc; + }; + $scope.isResultOutdated = function() { var pdata = $scope.paragraph; if (pdata.dateUpdated !==undefined && Date.parse(pdata.dateUpdated) > Date.parse(pdata.dateStarted)){ diff --git a/zeppelin-web/src/app/notebook/paragraph/paragraph.css b/zeppelin-web/src/app/notebook/paragraph/paragraph.css index b4873cf562d..084d2067509 100644 --- a/zeppelin-web/src/app/notebook/paragraph/paragraph.css +++ b/zeppelin-web/src/app/notebook/paragraph/paragraph.css @@ -77,6 +77,13 @@ font-family: 'Roboto', sans-serif; } +.paragraph .elapsedTime { + color: #999; + font-size: 10px; + font-family: 'Roboto', sans-serif; +} + + .paragraph .resultContained { overflow: auto; } diff --git a/zeppelin-web/src/app/notebook/paragraph/paragraph.html b/zeppelin-web/src/app/notebook/paragraph/paragraph.html index 043b6e81739..523c112494a 100644 --- a/zeppelin-web/src/app/notebook/paragraph/paragraph.html +++ b/zeppelin-web/src/app/notebook/paragraph/paragraph.html @@ -68,5 +68,11 @@ id="{{paragraph.id}}_executionTime" class="executionTime" ng-bind-html="getExecutionTime()"> +
+
+
+
From 4f64ada177b4fc5f9974268e39b3a42205082207 Mon Sep 17 00:00:00 2001 From: Sagar Kulkarni Date: Tue, 3 May 2016 12:42:51 +0530 Subject: [PATCH 02/13] ZEPPELIN-704 Display elapse time for long running paragraph - Right alligned for Simple looknfeel. --- zeppelin-web/src/assets/styles/looknfeel/simple.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/zeppelin-web/src/assets/styles/looknfeel/simple.css b/zeppelin-web/src/assets/styles/looknfeel/simple.css index 8373114a366..3d918fb54cd 100644 --- a/zeppelin-web/src/assets/styles/looknfeel/simple.css +++ b/zeppelin-web/src/assets/styles/looknfeel/simple.css @@ -67,6 +67,12 @@ body { margin-right: 5px; } +.paragraph .elapsedTime { + font-size: 8px; + text-align: right; + margin-right: 5px; +} + .paragraph:hover .paragraphFooter { visibility: visible; } From a991b0708138d724270f9a42035189f9edb4a2e1 Mon Sep 17 00:00:00 2001 From: Sagar Kulkarni Date: Mon, 9 May 2016 11:52:26 +0530 Subject: [PATCH 03/13] ZEPPELIN-704 Aligned elapsed time message with took xx seconds message --- zeppelin-web/src/app/notebook/paragraph/paragraph.html | 2 +- zeppelin-web/src/assets/styles/looknfeel/simple.css | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/zeppelin-web/src/app/notebook/paragraph/paragraph.html b/zeppelin-web/src/app/notebook/paragraph/paragraph.html index 523c112494a..0157c02727b 100644 --- a/zeppelin-web/src/app/notebook/paragraph/paragraph.html +++ b/zeppelin-web/src/app/notebook/paragraph/paragraph.html @@ -68,7 +68,7 @@ id="{{paragraph.id}}_executionTime" class="executionTime" ng-bind-html="getExecutionTime()"> -
+
diff --git a/zeppelin-web/src/assets/styles/looknfeel/simple.css b/zeppelin-web/src/assets/styles/looknfeel/simple.css index 3d918fb54cd..95f74681bea 100644 --- a/zeppelin-web/src/assets/styles/looknfeel/simple.css +++ b/zeppelin-web/src/assets/styles/looknfeel/simple.css @@ -57,7 +57,13 @@ body { visibility: hidden; height: 0; position: relative; - top : -13px; + top : -9px; + z-index: 99; +} + +.paragraph .paragraphFooterElapsed { + height: 0px; + float: right; z-index: 99; } From 566da6a0cc912db08a20fbd90ab5a1624636fda2 Mon Sep 17 00:00:00 2001 From: Sagar Kulkarni Date: Tue, 10 May 2016 15:16:01 +0530 Subject: [PATCH 04/13] ZEPPELIN-819 - Fixed the username from 'undefined' to 'anonymous'. Removed ' time' text from 'Last updated by xxx at time xxx'. --- .../src/app/notebook/paragraph/paragraph.controller.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js index 010a455cd0c..c122d5eb456 100644 --- a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js +++ b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js @@ -969,11 +969,11 @@ angular.module('zeppelinWebApp') return ''; } var user = 'anonymous'; - if (pdata.authenticationInfo !== null && pdata.authenticationInfo.user !== null) { + if (pdata.authenticationInfo !== null && !isEmpty(pdata.authenticationInfo.user)) { user = pdata.authenticationInfo.user; } var dateUpdated = (pdata.dateUpdated === null) ? 'unknown' : pdata.dateUpdated; - var desc = 'Took ' + (timeMs/1000) + ' seconds. Last updated by ' + user + ' at time ' + dateUpdated + '.'; + var desc = 'Took ' + (timeMs/1000) + ' seconds. Last updated by ' + user + ' at ' + dateUpdated + '.'; if ($scope.isResultOutdated()){ desc += ' (outdated)'; } From cb76ed53b15654a5e4e8baa9ea698e6f9d57e8e6 Mon Sep 17 00:00:00 2001 From: Sagar Kulkarni Date: Tue, 10 May 2016 15:24:40 +0530 Subject: [PATCH 05/13] Fixed "Text floats outside paragraph" issue in both "default" and "simple" looknfeel. --- zeppelin-web/src/app/notebook/paragraph/paragraph.css | 5 ----- zeppelin-web/src/assets/styles/looknfeel/simple.css | 1 - 2 files changed, 6 deletions(-) diff --git a/zeppelin-web/src/app/notebook/paragraph/paragraph.css b/zeppelin-web/src/app/notebook/paragraph/paragraph.css index 21f4a7e5a9a..64f61383828 100644 --- a/zeppelin-web/src/app/notebook/paragraph/paragraph.css +++ b/zeppelin-web/src/app/notebook/paragraph/paragraph.css @@ -82,10 +82,6 @@ table.dataTable.table-condensed .sorting_desc:after { border: 3px solid #DDDDDD; } -.paragraph .paragraphFooter { - height: 9px; -} - .paragraph .executionTime { color: #999; font-size: 10px; @@ -98,7 +94,6 @@ table.dataTable.table-condensed .sorting_desc:after { font-family: 'Roboto', sans-serif; } - .paragraph .resultContained { overflow: auto; } diff --git a/zeppelin-web/src/assets/styles/looknfeel/simple.css b/zeppelin-web/src/assets/styles/looknfeel/simple.css index 95f74681bea..0078306185e 100644 --- a/zeppelin-web/src/assets/styles/looknfeel/simple.css +++ b/zeppelin-web/src/assets/styles/looknfeel/simple.css @@ -55,7 +55,6 @@ body { .paragraph .paragraphFooter { visibility: hidden; - height: 0; position: relative; top : -9px; z-index: 99; From b18811fd3694b9ca0f34b9d8c6c6697430e02c8e Mon Sep 17 00:00:00 2001 From: Sagar Kulkarni Date: Mon, 23 May 2016 17:11:29 +0530 Subject: [PATCH 06/13] Fixed the timezone difference using standard ISO time format. Added extra features using Moment.js. --- .../org/apache/zeppelin/socket/NotebookServer.java | 4 +++- zeppelin-web/.jshintrc | 3 ++- .../app/notebook/paragraph/paragraph.controller.js | 11 +++++------ .../src/components/navbar/navbar.controller.js | 4 ++++ 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java b/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java index 52fd7405b25..3fb842d2de4 100644 --- a/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java +++ b/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java @@ -26,6 +26,7 @@ import com.google.common.base.Strings; import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; import org.apache.zeppelin.conf.ZeppelinConfiguration; @@ -60,7 +61,8 @@ public class NotebookServer extends WebSocketServlet implements NotebookSocketListener, JobListenerFactory, AngularObjectRegistryListener, RemoteInterpreterProcessListener { private static final Logger LOG = LoggerFactory.getLogger(NotebookServer.class); - Gson gson = new Gson(); + Gson gson = new GsonBuilder() + .setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").create(); final Map> noteSocketMap = new HashMap<>(); final Queue connectedSockets = new ConcurrentLinkedQueue<>(); diff --git a/zeppelin-web/.jshintrc b/zeppelin-web/.jshintrc index bdcd213761e..5cfaeddcaf2 100644 --- a/zeppelin-web/.jshintrc +++ b/zeppelin-web/.jshintrc @@ -32,6 +32,7 @@ "ace": false, "d3": false, "BootstrapDialog": false, - "Handsontable": false + "Handsontable": false, + "moment": false } } diff --git a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js index 03045c1b5e0..ed772b0b9f5 100644 --- a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js +++ b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js @@ -975,7 +975,9 @@ angular.module('zeppelinWebApp') user = pdata.authenticationInfo.user; } var dateUpdated = (pdata.dateUpdated === null) ? 'unknown' : pdata.dateUpdated; - var desc = 'Took ' + (timeMs/1000) + ' seconds. Last updated by ' + user + ' at ' + dateUpdated + '.'; + var desc = 'Took ' + + moment.duration(moment(pdata.dateFinished).diff(moment(pdata.dateStarted))).humanize() + + '. Last updated by ' + user + ' at ' + $rootScope.dateToString(dateUpdated) + '.'; if ($scope.isResultOutdated()){ desc += ' (outdated)'; } @@ -983,11 +985,8 @@ angular.module('zeppelinWebApp') }; $scope.getElapsedTime = function() { - var pdata = $scope.paragraph; - var timeMs = Date.now() - Date.parse(pdata.dateStarted); - var desc = Math.floor(timeMs/1000) + ' seconds elapsed.'; - return desc; - }; + return moment($scope.paragraph.dateStarted).fromNow(); + }; $scope.isResultOutdated = function() { var pdata = $scope.paragraph; diff --git a/zeppelin-web/src/components/navbar/navbar.controller.js b/zeppelin-web/src/components/navbar/navbar.controller.js index b56ee68d5f1..1afb764c1ba 100644 --- a/zeppelin-web/src/components/navbar/navbar.controller.js +++ b/zeppelin-web/src/components/navbar/navbar.controller.js @@ -109,4 +109,8 @@ angular.module('zeppelinWebApp').controller('NavCtrl', function($scope, $rootSco vm.loadNotes(); $scope.checkUsername(); + $rootScope.dateToString = function(date) { + return moment(date).format('MMMM DD YYYY, h:mm:ss A'); + }; + }); From 913515a253bdd0375e2b84304b1c2547cca0a451 Mon Sep 17 00:00:00 2001 From: Sagar Kulkarni Date: Mon, 23 May 2016 19:30:01 +0530 Subject: [PATCH 07/13] Corrected the compilation error. --- .../src/app/notebook/paragraph/paragraph.controller.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js index ed772b0b9f5..e3100e2496e 100644 --- a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js +++ b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js @@ -975,9 +975,9 @@ angular.module('zeppelinWebApp') user = pdata.authenticationInfo.user; } var dateUpdated = (pdata.dateUpdated === null) ? 'unknown' : pdata.dateUpdated; - var desc = 'Took ' - + moment.duration(moment(pdata.dateFinished).diff(moment(pdata.dateStarted))).humanize() - + '. Last updated by ' + user + ' at ' + $rootScope.dateToString(dateUpdated) + '.'; + var desc = 'Took ' + + moment.duration(moment(pdata.dateFinished).diff(moment(pdata.dateStarted))).humanize() + + '. Last updated by ' + user + ' at ' + $rootScope.dateToString(dateUpdated) + '.'; if ($scope.isResultOutdated()){ desc += ' (outdated)'; } From 52f2fed612282203c4b4e60ddd70e113afc15f44 Mon Sep 17 00:00:00 2001 From: Sagar Kulkarni Date: Tue, 24 May 2016 16:27:11 +0530 Subject: [PATCH 08/13] Fixing build issue - Selenium test fail fixed. --- .../test/java/org/apache/zeppelin/integration/ZeppelinIT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ZeppelinIT.java b/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ZeppelinIT.java index 2af724f3f0a..3b3124fbd96 100644 --- a/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ZeppelinIT.java +++ b/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ZeppelinIT.java @@ -206,7 +206,7 @@ public void testSparkInterpreterDependencyLoading() throws Exception { MAX_BROWSER_TIMEOUT_SEC); String artifact = "org.apache.commons:commons-csv:1.1"; depArtifact.sendKeys(artifact); - driver.findElement(By.xpath("//div[contains(@class,'box')][contains(.,'spark')]//form//button[1]")).click(); + driver.findElement(By.xpath("//div[contains(@class,'box')][contains(.,'%spark')]//form//button[1]")).click(); driver.findElement(By.xpath("//div[@class='modal-dialog'][contains(.,'Do you want to update this interpreter and restart with new settings?')]" + "//div[@class='modal-footer']//button[contains(.,'OK')]")).click(); From 536835a7f733ded0fc0703ca3a15fc134947f5a0 Mon Sep 17 00:00:00 2001 From: Sagar Kulkarni Date: Tue, 24 May 2016 17:30:03 +0530 Subject: [PATCH 09/13] Fixed other build issues - Selenium test failures fixed. --- .../java/org/apache/zeppelin/integration/ZeppelinIT.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ZeppelinIT.java b/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ZeppelinIT.java index 3b3124fbd96..9725ab55bca 100644 --- a/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ZeppelinIT.java +++ b/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ZeppelinIT.java @@ -200,7 +200,7 @@ public void testSparkInterpreterDependencyLoading() throws Exception { interpreterLink.click(); // add new dependency to spark interpreter - driver.findElement(By.xpath("//div[h3[text()[contains(.,'spark')]]]//button[contains(.,'edit')]")).sendKeys(Keys.ENTER); + driver.findElement(By.xpath("//div[h3[text()[contains(.,'%spark')]]]//button[contains(.,'edit')]")).sendKeys(Keys.ENTER); WebElement depArtifact = pollingWait(By.xpath("//input[@ng-model='setting.depArtifact']"), MAX_BROWSER_TIMEOUT_SEC); @@ -236,11 +236,11 @@ public void testSparkInterpreterDependencyLoading() throws Exception { // reset dependency interpreterLink.click(); - driver.findElement(By.xpath("//div[h3[text()[contains(.,'spark')]]]//button[contains(.,'edit')]")).sendKeys(Keys.ENTER); + driver.findElement(By.xpath("//div[h3[text()[contains(.,'%spark')]]]//button[contains(.,'edit')]")).sendKeys(Keys.ENTER); WebElement testDepRemoveBtn = pollingWait(By.xpath("//tr[descendant::text()[contains(.,'" + artifact + "')]]/td[3]/div"), MAX_IMPLICIT_WAIT); testDepRemoveBtn.click(); - driver.findElement(By.xpath("//div[contains(@class,'box')][contains(.,'spark')]//form//button[1]")).click(); + driver.findElement(By.xpath("//div[contains(@class,'box')][contains(.,'%spark')]//form//button[1]")).click(); driver.findElement(By.xpath("//div[@class='modal-dialog'][contains(.,'Do you want to update this interpreter and restart with new settings?')]" + "//div[@class='modal-footer']//button[contains(.,'OK')]")).click(); } catch (Exception e) { From 5a1cee9c89287dd233b8315f1ab1fc53516c485e Mon Sep 17 00:00:00 2001 From: Sagar Kulkarni Date: Wed, 25 May 2016 10:35:51 +0530 Subject: [PATCH 10/13] Selenium test failure fixing. --- .../test/java/org/apache/zeppelin/integration/ZeppelinIT.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ZeppelinIT.java b/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ZeppelinIT.java index 9725ab55bca..e2f2d1fd9fe 100644 --- a/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ZeppelinIT.java +++ b/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ZeppelinIT.java @@ -200,7 +200,7 @@ public void testSparkInterpreterDependencyLoading() throws Exception { interpreterLink.click(); // add new dependency to spark interpreter - driver.findElement(By.xpath("//div[h3[text()[contains(.,'%spark')]]]//button[contains(.,'edit')]")).sendKeys(Keys.ENTER); + driver.findElement(By.xpath("//div[h3[text()[contains(.,'spark')]]]//button[contains(.,'edit')]")).sendKeys(Keys.ENTER); WebElement depArtifact = pollingWait(By.xpath("//input[@ng-model='setting.depArtifact']"), MAX_BROWSER_TIMEOUT_SEC); @@ -236,7 +236,7 @@ public void testSparkInterpreterDependencyLoading() throws Exception { // reset dependency interpreterLink.click(); - driver.findElement(By.xpath("//div[h3[text()[contains(.,'%spark')]]]//button[contains(.,'edit')]")).sendKeys(Keys.ENTER); + driver.findElement(By.xpath("//div[h3[text()[contains(.,'spark')]]]//button[contains(.,'edit')]")).sendKeys(Keys.ENTER); WebElement testDepRemoveBtn = pollingWait(By.xpath("//tr[descendant::text()[contains(.,'" + artifact + "')]]/td[3]/div"), MAX_IMPLICIT_WAIT); testDepRemoveBtn.click(); From 6e1a3958cfca0d7368e29cc67b2c44bae52a9eb0 Mon Sep 17 00:00:00 2001 From: Sagar Kulkarni Date: Wed, 25 May 2016 11:50:12 +0530 Subject: [PATCH 11/13] Removed function dateToString and made Moment.js call directly. --- .../src/app/notebook/paragraph/paragraph.controller.js | 3 +-- zeppelin-web/src/components/navbar/navbar.controller.js | 4 ---- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js index e3100e2496e..6cb768ad12b 100644 --- a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js +++ b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js @@ -974,10 +974,9 @@ angular.module('zeppelinWebApp') if (pdata.authenticationInfo !== null && !isEmpty(pdata.authenticationInfo.user)) { user = pdata.authenticationInfo.user; } - var dateUpdated = (pdata.dateUpdated === null) ? 'unknown' : pdata.dateUpdated; var desc = 'Took ' + moment.duration(moment(pdata.dateFinished).diff(moment(pdata.dateStarted))).humanize() + - '. Last updated by ' + user + ' at ' + $rootScope.dateToString(dateUpdated) + '.'; + '. Last updated by ' + user + ' at ' + moment(pdata.dateUpdated).format('MMMM DD YYYY, h:mm:ss A') + '.'; if ($scope.isResultOutdated()){ desc += ' (outdated)'; } diff --git a/zeppelin-web/src/components/navbar/navbar.controller.js b/zeppelin-web/src/components/navbar/navbar.controller.js index 7e2e3a4448e..0e1d150e9ac 100644 --- a/zeppelin-web/src/components/navbar/navbar.controller.js +++ b/zeppelin-web/src/components/navbar/navbar.controller.js @@ -115,8 +115,4 @@ angular.module('zeppelinWebApp').controller('NavCtrl', function($scope, $rootSco vm.loadNotes(); $scope.checkUsername(); - $rootScope.dateToString = function(date) { - return moment(date).format('MMMM DD YYYY, h:mm:ss A'); - }; - }); From 192f3f7649dd78884ec2440076ad222cf73eb5df Mon Sep 17 00:00:00 2001 From: Sagar Kulkarni Date: Wed, 25 May 2016 12:01:12 +0530 Subject: [PATCH 12/13] Changed the elapsed time string to "Started xx seconds/minutes/hours ago.". --- zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js index 6cb768ad12b..b75b0ce3b45 100644 --- a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js +++ b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js @@ -984,7 +984,7 @@ angular.module('zeppelinWebApp') }; $scope.getElapsedTime = function() { - return moment($scope.paragraph.dateStarted).fromNow(); + return "Started " + moment($scope.paragraph.dateStarted).fromNow() + "."; }; $scope.isResultOutdated = function() { From f912504a5b1eef9a59d392b130e15a6a60c93803 Mon Sep 17 00:00:00 2001 From: Sagar Kulkarni Date: Wed, 25 May 2016 12:34:52 +0530 Subject: [PATCH 13/13] Corrected the mistake. --- zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js index b75b0ce3b45..110d8fa472b 100644 --- a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js +++ b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js @@ -984,7 +984,7 @@ angular.module('zeppelinWebApp') }; $scope.getElapsedTime = function() { - return "Started " + moment($scope.paragraph.dateStarted).fromNow() + "."; + return 'Started ' + moment($scope.paragraph.dateStarted).fromNow() + '.'; }; $scope.isResultOutdated = function() {