[FLINK-2354] [runtime] Replace old StateHandleProvider by StateStorageHelper in 
ZooKeeperStateHandleStore

The old StateHandleProvider used in ZooKeeperStateHandleStore had to be 
replaced because the state backend implementation has changed. Since the new 
state backend could not be used anymore, a new StateStorageHelper interface has 
been created. The default implementation FileSystemStateStorageHelper stores 
the given state onto the specified file system and returns a 
FileSerializableStateHandle.

Various fixes due to rebasing.


Project: http://git-wip-us.apache.org/repos/asf/flink/repo
Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/a6890b28
Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/a6890b28
Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/a6890b28

Branch: refs/heads/master
Commit: a6890b2849db34741dbae16fd144d5ec98cc51d8
Parents: 630798d
Author: Till Rohrmann <trohrm...@apache.org>
Authored: Mon Oct 19 11:30:02 2015 +0200
Committer: Till Rohrmann <trohrm...@apache.org>
Committed: Tue Oct 20 09:57:34 2015 +0200

----------------------------------------------------------------------
 .../runtime/webmonitor/WebRuntimeMonitor.java   |     4 +-
 .../files/StaticFileServerHandler.java          |     4 +-
 .../src/main/resources/web/css/index.css        |   596 -
 .../src/main/resources/web/css/vendor.css       |  9183 --
 .../main/resources/web/fonts/FontAwesome.otf    |   Bin 93888 -> 0 bytes
 .../resources/web/fonts/fontawesome-webfont.eot |   Bin 60767 -> 0 bytes
 .../resources/web/fonts/fontawesome-webfont.svg |   565 -
 .../resources/web/fonts/fontawesome-webfont.ttf |   Bin 122092 -> 0 bytes
 .../web/fonts/fontawesome-webfont.woff          |   Bin 71508 -> 0 bytes
 .../web/fonts/fontawesome-webfont.woff2         |   Bin 56780 -> 0 bytes
 .../main/resources/web/images/flink-logo.png    |   Bin 6096 -> 0 bytes
 .../src/main/resources/web/index.html           |    55 -
 .../src/main/resources/web/js/index.js          |  1420 -
 .../src/main/resources/web/js/index.js.orig     |  1150 -
 .../src/main/resources/web/js/vendor.js         | 81087 -----------------
 .../web/partials/jobmanager/config.html         |    33 -
 .../web/partials/jobmanager/index.html          |    33 -
 .../web/partials/jobmanager/stdout.html         |    40 -
 .../web/partials/jobs/completed-jobs.html       |    53 -
 .../resources/web/partials/jobs/job.config.html |    57 -
 .../web/partials/jobs/job.exceptions.html       |    38 -
 .../main/resources/web/partials/jobs/job.html   |    48 -
 .../resources/web/partials/jobs/job.plan.html   |    31 -
 .../jobs/job.plan.node-list.accumulators.html   |    40 -
 .../jobs/job.plan.node-list.overview.html       |    60 -
 .../jobs/job.plan.node.accumulators.html        |    68 -
 .../partials/jobs/job.plan.node.subtasks.html   |    52 -
 .../web/partials/jobs/job.properties.html       |   140 -
 .../web/partials/jobs/job.statistics.html       |    40 -
 .../web/partials/jobs/job.timeline.html         |    23 -
 .../web/partials/jobs/job.timeline.vertex.html  |    30 -
 .../web/partials/jobs/running-jobs.html         |    53 -
 .../main/resources/web/partials/overview.html   |   147 -
 .../webmonitor/WebRuntimeMonitorITCase.java     |    25 +-
 flink-runtime-web/web-dashboard/gulpfile.js     |     4 +-
 .../web-dashboard/web/css/index.css             |   596 +
 .../web-dashboard/web/css/vendor.css            |  9183 ++
 .../web-dashboard/web/fonts/FontAwesome.otf     |   Bin 0 -> 93888 bytes
 .../web/fonts/fontawesome-webfont.eot           |   Bin 0 -> 60767 bytes
 .../web/fonts/fontawesome-webfont.svg           |   565 +
 .../web/fonts/fontawesome-webfont.ttf           |   Bin 0 -> 122092 bytes
 .../web/fonts/fontawesome-webfont.woff          |   Bin 0 -> 71508 bytes
 .../web/fonts/fontawesome-webfont.woff2         |   Bin 0 -> 56780 bytes
 .../web-dashboard/web/images/flink-logo.png     |   Bin 0 -> 6096 bytes
 flink-runtime-web/web-dashboard/web/index.html  |    55 +
 flink-runtime-web/web-dashboard/web/js/index.js |  1420 +
 .../web-dashboard/web/js/vendor.js              | 81087 +++++++++++++++++
 .../web/partials/jobmanager/config.html         |    33 +
 .../web/partials/jobmanager/index.html          |    33 +
 .../web/partials/jobmanager/stdout.html         |    40 +
 .../web/partials/jobs/completed-jobs.html       |    53 +
 .../web/partials/jobs/job.config.html           |    57 +
 .../web/partials/jobs/job.exceptions.html       |    38 +
 .../web-dashboard/web/partials/jobs/job.html    |    48 +
 .../web/partials/jobs/job.plan.html             |    31 +
 .../jobs/job.plan.node-list.accumulators.html   |    40 +
 .../jobs/job.plan.node-list.overview.html       |    60 +
 .../jobs/job.plan.node.accumulators.html        |    68 +
 .../partials/jobs/job.plan.node.subtasks.html   |    52 +
 .../web/partials/jobs/job.properties.html       |   140 +
 .../web/partials/jobs/job.statistics.html       |    40 +
 .../web/partials/jobs/job.timeline.html         |    23 +
 .../web/partials/jobs/job.timeline.vertex.html  |    30 +
 .../web/partials/jobs/running-jobs.html         |    53 +
 .../web-dashboard/web/partials/overview.html    |   147 +
 .../web/partials/taskmanager/index.html         |    57 +
 .../flink/runtime/blob/FileSystemBlobStore.java |    44 +-
 .../ZooKeeperCompletedCheckpointStore.java      |    12 +-
 .../ZooKeeperSubmittedJobGraphStore.java        |    20 +-
 .../runtime/state/AbstractHeapKvState.java      |   145 +
 .../org/apache/flink/runtime/state/KvState.java |    69 +
 .../flink/runtime/state/KvStateSnapshot.java    |    69 +
 .../runtime/state/SerializedCheckpointData.java |   176 +
 .../flink/runtime/state/StateBackend.java       |   200 +-
 .../runtime/state/StateBackendFactory.java      |    40 +
 .../state/StateHandleProviderFactory.java       |    61 -
 .../flink/runtime/state/StreamStateHandle.java  |    28 +
 .../state/filesystem/AbstractFileState.java     |    83 +
 .../filesystem/FileSerializableStateHandle.java |    53 +
 .../state/filesystem/FileStreamStateHandle.java |    46 +
 .../runtime/state/filesystem/FsHeapKvState.java |    88 +
 .../state/filesystem/FsHeapKvStateSnapshot.java |    95 +
 .../state/filesystem/FsStateBackend.java        |   412 +
 .../state/filesystem/FsStateBackendFactory.java |    56 +
 .../state/memory/ByteStreamStateHandle.java     |    52 +
 .../runtime/state/memory/MemHeapKvState.java    |    52 +
 .../state/memory/MemoryHeapKvStateSnapshot.java |   102 +
 .../state/memory/MemoryStateBackend.java        |   209 +
 .../state/memory/SerializedStateHandle.java     |    49 +
 .../flink/runtime/util/ZooKeeperUtils.java      |    56 +-
 .../runtime/zookeeper/StateStorageHelper.java   |    41 +
 .../zookeeper/ZooKeeperStateHandleStore.java    |    26 +-
 .../FileSystemStateStorageHelper.java           |    86 +
 .../flink/runtime/jobmanager/JobManager.scala   |    43 +-
 ...ZooKeeperCompletedCheckpointStoreITCase.java |    10 +-
 .../BlobLibraryCacheRecoveryITCase.java         |    28 +-
 .../ZooKeeperSubmittedJobGraphsStoreITCase.java |    28 +-
 .../runtime/state/FileStateBackendTest.java     |   423 +
 .../runtime/state/MemoryStateBackendTest.java   |   282 +
 .../runtime/testutils/ZooKeeperTestUtils.java   |     3 +-
 .../ZooKeeperStateHandleStoreITCase.java        |    60 +-
 .../src/test/resources/log4j-test.properties    |     3 +-
 .../flink/hdfstests/FileStateBackendTest.java   |     8 +-
 .../environment/StreamExecutionEnvironment.java |     6 +-
 .../source/MessageAcknowledingSourceBase.java   |     3 +-
 .../flink/streaming/api/graph/StreamConfig.java |     2 +-
 .../flink/streaming/api/graph/StreamGraph.java  |     2 +-
 .../api/operators/AbstractStreamOperator.java   |     6 +-
 .../operators/AbstractUdfStreamOperator.java    |     2 +-
 .../api/state/AbstractHeapKvState.java          |   145 -
 .../flink/streaming/api/state/KvState.java      |    69 -
 .../streaming/api/state/KvStateSnapshot.java    |    69 -
 .../api/state/SerializedCheckpointData.java     |   176 -
 .../flink/streaming/api/state/StateBackend.java |   214 -
 .../api/state/StateBackendFactory.java          |    40 -
 .../streaming/api/state/StreamStateHandle.java  |    28 -
 .../api/state/filesystem/AbstractFileState.java |    83 -
 .../filesystem/FileSerializableStateHandle.java |    53 -
 .../state/filesystem/FileStreamStateHandle.java |    46 -
 .../api/state/filesystem/FsHeapKvState.java     |    88 -
 .../state/filesystem/FsHeapKvStateSnapshot.java |    95 -
 .../api/state/filesystem/FsStateBackend.java    |   412 -
 .../state/filesystem/FsStateBackendFactory.java |    56 -
 .../api/state/memory/ByteStreamStateHandle.java |    52 -
 .../api/state/memory/MemHeapKvState.java        |    52 -
 .../state/memory/MemoryHeapKvStateSnapshot.java |   102 -
 .../api/state/memory/MemoryStateBackend.java    |   209 -
 .../api/state/memory/SerializedStateHandle.java |    49 -
 ...ractAlignedProcessingTimeWindowOperator.java |     2 +-
 .../streaming/runtime/tasks/StreamTask.java     |    42 +-
 .../runtime/tasks/StreamTaskState.java          |     2 +-
 .../api/state/FileStateBackendTest.java         |   419 -
 .../api/state/MemoryStateBackendTest.java       |   278 -
 ...AlignedProcessingTimeWindowOperatorTest.java |     4 +-
 ...AlignedProcessingTimeWindowOperatorTest.java |     4 +-
 .../flink/streaming/util/MockContext.java       |     4 +-
 .../util/OneInputStreamOperatorTestHarness.java |     4 +-
 .../util/TwoInputStreamOperatorTestHarness.java |     4 +-
 .../api/scala/StreamExecutionEnvironment.scala  |     2 +-
 .../test/classloading/ClassLoaderITCase.java    |     2 +-
 .../flink/test/recovery/ChaosMonkeyITCase.java  |     3 +-
 .../JobManagerCheckpointRecoveryITCase.java     |     5 +-
 ...erProcessFailureStreamingRecoveryITCase.java |     2 +-
 .../ZooKeeperLeaderElectionITCase.java          |     4 +-
 .../src/test/resources/log4j-test.properties    |     1 -
 .../flink/yarn/YARNHighAvailabilityITCase.java  |     3 +-
 .../flink/yarn/ApplicationMasterBase.scala      |     2 +-
 pom.xml                                         |     2 +-
 148 files changed, 97046 insertions(+), 98088 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flink/blob/a6890b28/flink-runtime-web/src/main/java/org/apache/flink/runtime/webmonitor/WebRuntimeMonitor.java
----------------------------------------------------------------------
diff --git 
a/flink-runtime-web/src/main/java/org/apache/flink/runtime/webmonitor/WebRuntimeMonitor.java
 
b/flink-runtime-web/src/main/java/org/apache/flink/runtime/webmonitor/WebRuntimeMonitor.java
index ec973c7..40d9f2d 100644
--- 
a/flink-runtime-web/src/main/java/org/apache/flink/runtime/webmonitor/WebRuntimeMonitor.java
+++ 
b/flink-runtime-web/src/main/java/org/apache/flink/runtime/webmonitor/WebRuntimeMonitor.java
@@ -192,8 +192,6 @@ public class WebRuntimeMonitor implements WebMonitor {
 
                        // job manager configuration, log and stdout
                        .GET("/jobmanager/config", handler(new 
JobManagerConfigHandler(config)))
-                       .GET("/jobmanager/log", new 
StaticFileServerHandler(logDir))
-                       .GET("/jobmanager/stdout", new 
StaticFileServerHandler(outDir))
 
                        // overview over jobs
                        .GET("/joboverview", handler(new 
CurrentJobsOverviewHandler(DEFAULT_REQUEST_TIMEOUT, true, true)))
@@ -222,6 +220,8 @@ public class WebRuntimeMonitor implements WebMonitor {
                        .GET("/taskmanagers", handler(new 
TaskManagersHandler(DEFAULT_REQUEST_TIMEOUT)))
                        .GET("/taskmanagers/:" + 
TaskManagersHandler.TASK_MANAGER_ID_KEY, handler(new 
TaskManagersHandler(DEFAULT_REQUEST_TIMEOUT)))
 
+                       .GET("/jobmanager/log", new 
StaticFileServerHandler(retriever, jobManagerAddressPromise.future(), timeout, 
logDir))
+                       .GET("/jobmanager/stdout", new 
StaticFileServerHandler(retriever, jobManagerAddressPromise.future(), timeout, 
outDir))
                        // this handler serves all the static contents
                        .GET("/:*", new StaticFileServerHandler(retriever, 
jobManagerAddressPromise.future(), timeout, webRootDir));
 

http://git-wip-us.apache.org/repos/asf/flink/blob/a6890b28/flink-runtime-web/src/main/java/org/apache/flink/runtime/webmonitor/files/StaticFileServerHandler.java
----------------------------------------------------------------------
diff --git 
a/flink-runtime-web/src/main/java/org/apache/flink/runtime/webmonitor/files/StaticFileServerHandler.java
 
b/flink-runtime-web/src/main/java/org/apache/flink/runtime/webmonitor/files/StaticFileServerHandler.java
index d46a900..02dd81e 100644
--- 
a/flink-runtime-web/src/main/java/org/apache/flink/runtime/webmonitor/files/StaticFileServerHandler.java
+++ 
b/flink-runtime-web/src/main/java/org/apache/flink/runtime/webmonitor/files/StaticFileServerHandler.java
@@ -58,10 +58,12 @@ import scala.concurrent.duration.FiniteDuration;
 
 import java.io.File;
 import java.io.FileNotFoundException;
+import java.io.IOException;
 import java.io.InputStream;
 import java.io.FilenameFilter;
 import java.io.RandomAccessFile;
 import java.nio.file.Files;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
@@ -198,7 +200,7 @@ public class StaticFileServerHandler extends 
SimpleChannelInboundHandler<Routed>
         * Response when running with leading JobManager.
         */
        private void respondAsLeader(ChannelHandlerContext ctx, HttpRequest 
request, String requestPath)
-                       throws ParseException, IOException {
+               throws IOException, ParseException {
 
                // convert to absolute path
                final File file = new File(rootPath, requestPath);

http://git-wip-us.apache.org/repos/asf/flink/blob/a6890b28/flink-runtime-web/src/main/resources/web/css/index.css
----------------------------------------------------------------------
diff --git a/flink-runtime-web/src/main/resources/web/css/index.css 
b/flink-runtime-web/src/main/resources/web/css/index.css
deleted file mode 100644
index 43f7d98..0000000
--- a/flink-runtime-web/src/main/resources/web/css/index.css
+++ /dev/null
@@ -1,596 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#sidebar {
-  overflow: hidden;
-  position: fixed;
-  left: -250px;
-  top: 0;
-  bottom: 0;
-  height: 100%;
-  width: 250px;
-  background: #151515;
-  -webkit-transition: 400ms;
-  -moz-transition: 400ms;
-  -o-transition: 400ms;
-  -ms-transition: 400ms;
-  transition: 400ms;
-  -webkit-box-shadow: inset -10px 0px 10px rgba(0,0,0,0.2);
-  box-shadow: inset -10px 0px 10px rgba(0,0,0,0.2);
-}
-#sidebar.sidebar-visible {
-  left: 0;
-}
-#sidebar .logo {
-  width: auto;
-  height: 22px;
-}
-#sidebar .logo img {
-  display: inline-block;
-}
-#sidebar .navbar-static-top {
-  overflow: hidden;
-  height: 51px;
-}
-#sidebar .navbar-static-top .navbar-header {
-  width: 100%;
-}
-#sidebar .navbar-brand.navbar-brand-text {
-  font-size: 14px;
-  font-weight: bold;
-  color: #fff;
-  padding-left: 0;
-}
-#sidebar .nav > li > a {
-  color: #aaa;
-  margin-bottom: 1px;
-}
-#sidebar .nav > li > a:hover,
-#sidebar .nav > li > a:focus {
-  background-color: rgba(40,40,40,0.5);
-}
-#sidebar .nav > li > a.active {
-  background-color: rgba(100,100,100,0.5);
-}
-#content {
-  background-color: #fff;
-  overflow: hidden;
-  margin-left: 0;
-  padding-top: 70px;
-  -webkit-transition: 400ms;
-  -moz-transition: 400ms;
-  -o-transition: 400ms;
-  -ms-transition: 400ms;
-  transition: 400ms;
-}
-#content .navbar-main,
-#content .navbar-main-additional {
-  -webkit-transition: 400ms;
-  -moz-transition: 400ms;
-  -o-transition: 400ms;
-  -ms-transition: 400ms;
-  transition: 400ms;
-}
-#content .navbar-main-additional {
-  margin-top: 51px;
-  border-bottom: none;
-  padding: 0 20px;
-}
-#content .navbar-main-additional .nav-tabs {
-  margin: 0 -20px;
-  padding: 0 20px;
-}
-#content .navbar-secondary-additional {
-  border: none;
-  padding: 0 20px;
-  margin-bottom: 0;
-}
-#content .navbar-secondary-additional .nav-tabs {
-  margin: 0 -20px;
-}
-#content.sidebar-visible {
-  margin-left: 250px;
-}
-#content.sidebar-visible .navbar-main,
-#content.sidebar-visible .navbar-main-additional {
-  left: 250px;
-}
-#content #fold-button {
-  display: inline-block;
-  margin-left: 20px;
-}
-#content #content-inner {
-  padding: 0px 20px 20px 20px;
-}
-#content #content-inner.has-navbar-main-additional {
-  padding-top: 42px;
-}
-.page-header {
-  margin: 0 0 20px 0;
-}
-.nav > li > a,
-.nav > li > a:hover,
-.nav > li > a:focus {
-  color: #aaa;
-  background-color: transparent;
-  border-bottom: 2px solid transparent;
-}
-.nav > li.active > a,
-.nav > li.active > a:hover,
-.nav > li.active > a:focus {
-  color: #000;
-  border-bottom: 2px solid #000;
-}
-.nav.nav-tabs {
-  margin-bottom: 20px;
-}
-.table .table {
-  background-color: transparent;
-}
-.table th {
-  font-weight: normal;
-  color: #999;
-}
-.table td.td-long {
-  width: 20%;
-  white-space: pre-wrap;
-  white-space: -moz-pre-wrap;
-  white-space: -pre-wrap;
-  white-space: -o-pre-wrap;
-  word-wrap: break-word;
-}
-.table.table-clickable tr {
-  cursor: pointer;
-}
-.table.table-inner {
-  background-color: transparent;
-}
-.table.table-properties {
-  table-layout: fixed;
-  white-space: nowrap;
-}
-.table.table-properties td {
-  width: 50%;
-  white-space: nowrap;
-  overflow: hidden;
-  -o-text-overflow: ellipsis;
-  text-overflow: ellipsis;
-}
-.table.table-body-hover > tbody {
-  border-top: none;
-  border-left: 2px solid transparent;
-}
-.table.table-body-hover > tbody.active {
-  border-left: 2px solid #000;
-}
-.table.table-body-hover > tbody:hover td:not(.tab-column),
-.table.table-body-hover > tbody.active td:not(.tab-column) {
-  background-color: #f0f0f0;
-}
-.table.table-body-hover > tbody:hover td.tab-column li.active,
-.table.table-body-hover > tbody.active td.tab-column li.active {
-  background-color: #f0f0f0;
-}
-.table.table-activable th.tab-column,
-.table.table-activable td.tab-column {
-  border-top: none;
-  width: 47px;
-}
-.table.table-activable td.tab-column {
-  border-right: 1px solid #ddd;
-}
-.table.table-activable td {
-  position: relative;
-}
-.table .small-label {
-  text-transform: uppercase;
-  font-size: 13px;
-  color: #999;
-}
-.panel.panel-dashboard .huge {
-  font-size: 28px;
-}
-.panel.panel-lg {
-  font-size: 16px;
-}
-.panel.panel-lg .badge {
-  font-size: 14px;
-}
-.navbar-secondary {
-  overflow: auto;
-}
-.navbar-main .navbar-title,
-.navbar-secondary .navbar-title,
-.navbar-main-additional .navbar-title,
-.panel.panel-multi .navbar-title,
-.navbar-secondary-additional .navbar-title,
-.navbar-main .panel-title,
-.navbar-secondary .panel-title,
-.navbar-main-additional .panel-title,
-.panel.panel-multi .panel-title,
-.navbar-secondary-additional .panel-title {
-  float: left;
-  font-size: 18px;
-  padding: 12px 20px 13px 10px;
-  color: #333;
-  display: inline-block;
-}
-.navbar-main .navbar-info,
-.navbar-secondary .navbar-info,
-.navbar-main-additional .navbar-info,
-.panel.panel-multi .navbar-info,
-.navbar-secondary-additional .navbar-info,
-.navbar-main .panel-info,
-.navbar-secondary .panel-info,
-.navbar-main-additional .panel-info,
-.panel.panel-multi .panel-info,
-.navbar-secondary-additional .panel-info {
-  float: left;
-  font-size: 14px;
-  padding: 15px 15px 15px 15px;
-  color: #999;
-  display: inline-block;
-  border-right: 1px solid #e7e7e7;
-  overflow: hidden;
-}
-.navbar-main .navbar-info .overflow,
-.navbar-secondary .navbar-info .overflow,
-.navbar-main-additional .navbar-info .overflow,
-.panel.panel-multi .navbar-info .overflow,
-.navbar-secondary-additional .navbar-info .overflow,
-.navbar-main .panel-info .overflow,
-.navbar-secondary .panel-info .overflow,
-.navbar-main-additional .panel-info .overflow,
-.panel.panel-multi .panel-info .overflow,
-.navbar-secondary-additional .panel-info .overflow {
-  position: absolute;
-  display: block;
-  -o-text-overflow: ellipsis;
-  text-overflow: ellipsis;
-  overflow: hidden;
-  height: 22px;
-  line-height: 22px;
-  vertical-align: middle;
-}
-.navbar-main .navbar-info.first,
-.navbar-secondary .navbar-info.first,
-.navbar-main-additional .navbar-info.first,
-.panel.panel-multi .navbar-info.first,
-.navbar-secondary-additional .navbar-info.first,
-.navbar-main .panel-info.first,
-.navbar-secondary .panel-info.first,
-.navbar-main-additional .panel-info.first,
-.panel.panel-multi .panel-info.first,
-.navbar-secondary-additional .panel-info.first {
-  border-left: 1px solid #e7e7e7;
-}
-.navbar-main .navbar-info.last,
-.navbar-secondary .navbar-info.last,
-.navbar-main-additional .navbar-info.last,
-.panel.panel-multi .navbar-info.last,
-.navbar-secondary-additional .navbar-info.last,
-.navbar-main .panel-info.last,
-.navbar-secondary .panel-info.last,
-.navbar-main-additional .panel-info.last,
-.panel.panel-multi .panel-info.last,
-.navbar-secondary-additional .panel-info.last {
-  border-right: none;
-}
-.panel.panel-multi .panel-heading {
-  padding: 0;
-}
-.panel.panel-multi .panel-heading .panel-info.thin {
-  padding: 8px 10px;
-}
-.panel.panel-multi .panel-body {
-  padding: 10px;
-  background-color: #fdfdfd;
-  color: #999;
-  font-size: 13px;
-}
-.panel.panel-multi .panel-body.clean {
-  color: inherit;
-  font-size: inherit;
-}
-.navbar-main-additional,
-.navbar-secondary-additional {
-  min-height: 40px;
-  background-color: #fdfdfd;
-}
-.navbar-main-additional .navbar-info,
-.navbar-secondary-additional .navbar-info {
-  font-size: 13px;
-  padding: 10px 15px 10px 15px;
-}
-.nav-top-affix.affix {
-  width: 100%;
-  top: 50px;
-  margin-left: -20px;
-  padding-left: 20px;
-  margin-right: -20px;
-  padding-right: 20px;
-  background-color: #fff;
-  z-index: 1;
-}
-.badge-default[href]:hover,
-.badge-default[href]:focus {
-  background-color: #808080;
-}
-.badge-primary {
-  background-color: #428bca;
-}
-.badge-primary[href]:hover,
-.badge-primary[href]:focus {
-  background-color: #3071a9;
-}
-.badge-success {
-  background-color: #5cb85c;
-}
-.badge-success[href]:hover,
-.badge-success[href]:focus {
-  background-color: #449d44;
-}
-.badge-info {
-  background-color: #5bc0de;
-}
-.badge-info[href]:hover,
-.badge-info[href]:focus {
-  background-color: #31b0d5;
-}
-.badge-warning {
-  background-color: #f0ad4e;
-}
-.badge-warning[href]:hover,
-.badge-warning[href]:focus {
-  background-color: #ec971f;
-}
-.badge-danger {
-  background-color: #d9534f;
-}
-.badge-danger[href]:hover,
-.badge-danger[href]:focus {
-  background-color: #c9302c;
-}
-.indicator {
-  display: inline-block;
-  margin-right: 15px;
-}
-.indicator.indicator-primary {
-  color: #428bca;
-}
-.indicator.indicator-success {
-  color: #5cb85c;
-}
-.indicator.indicator-info {
-  color: #5bc0de;
-}
-.indicator.indicator-warning {
-  color: #f0ad4e;
-}
-.indicator.indicator-danger {
-  color: #d9534f;
-}
-pre.exception {
-  border: none;
-  background-color: transparent;
-  padding: 0;
-  margin: 0;
-}
-.nav-tabs.tabs-vertical {
-  position: absolute;
-  left: 0;
-  top: 0;
-  border-bottom: none;
-  z-index: 100;
-}
-.nav-tabs.tabs-vertical li {
-  float: none;
-  margin-bottom: 0;
-  margin-right: -1px;
-}
-.nav-tabs.tabs-vertical li > a {
-  margin-right: 0;
-  -webkit-border-radius: 0;
-  border-radius: 0;
-  border-bottom: none;
-  border-left: 2px solid transparent;
-}
-.nav-tabs.tabs-vertical li > a:hover,
-.nav-tabs.tabs-vertical li > a:focus {
-  border-bottom: none;
-  border-left: 2px solid #000;
-}
-.nav-tabs.tabs-vertical li.active > a {
-  border-bottom: none;
-  border-left: 2px solid #000;
-}
-.navbar-main .navbar-title,
-.navbar-secondary .navbar-title,
-.navbar-main-additional .navbar-title,
-.navbar-secondary-additional .navbar-title {
-  padding: 12px 20px 13px 20px;
-}
-livechart {
-  width: 30%;
-  height: 30%;
-  text-align: center;
-}
-.canvas-wrapper {
-  border: 1px solid #ddd;
-  position: relative;
-  margin-bottom: 20px;
-}
-.canvas-wrapper .main-canvas {
-  height: 400px;
-  overflow: hidden;
-}
-.canvas-wrapper .main-canvas .zoom-buttons {
-  position: absolute;
-  top: 10px;
-  right: 10px;
-}
-.label-group .label {
-  display: inline-block;
-  width: 2em;
-  padding-left: 0.1em;
-  padding-right: 0.1em;
-  margin: 0;
-  border-right: 1px solid #fff;
-  -webkit-border-radius: 0;
-  border-radius: 0;
-}
-.label-group .label.label-black {
-  background-color: #000;
-}
-svg.graph {
-  overflow: hidden;
-}
-svg.graph g.type-TK > rect {
-  fill: #00ffd0;
-}
-svg.graph text {
-  font-weight: 300;
-  font-size: 14px;
-}
-svg.graph .node {
-  cursor: pointer;
-}
-svg.graph .node > rect {
-  stroke: #999;
-  stroke-width: 5px;
-  fill: #fff;
-  margin: 0;
-  padding: 0;
-}
-svg.graph .node[active] > rect {
-  fill: #eee;
-}
-svg.graph .node.node-mirror > rect {
-  stroke: #a8a8a8;
-}
-svg.graph .node.node-iteration > rect {
-  stroke: #cd3333;
-}
-svg.graph .node.node-source > rect {
-  stroke: #4ce199;
-}
-svg.graph .node.node-sink > rect {
-  stroke: #e6ec8b;
-}
-svg.graph .node.node-normal > rect {
-  stroke: #3fb6d8;
-}
-svg.graph .node h4 {
-  color: #000;
-}
-svg.graph .node h5 {
-  color: #999;
-}
-svg.graph .edgeLabel rect {
-  fill: #fff;
-}
-svg.graph .edgePath path {
-  stroke: #333;
-  stroke-width: 2px;
-  fill: #333;
-}
-svg.graph .label {
-  color: #777;
-  margin: 0;
-}
-svg.graph .edge-label {
-  font-size: 14px;
-}
-svg.graph .node-label {
-  display: block;
-  margin: 0;
-  text-decoration: none;
-}
-.timeline {
-  overflow: hidden;
-}
-.timeline-canvas {
-  overflow: hidden;
-  padding: 10px;
-}
-.timeline-canvas .bar-container {
-  overflow: hidden;
-}
-.timeline-canvas .timeline-insidelabel,
-.timeline-canvas .timeline-series {
-  cursor: pointer;
-}
-.timeline-canvas.secondary .timeline-insidelabel,
-.timeline-canvas.secondary .timeline-series {
-  cursor: auto;
-}
-.qtip-timeline-bar {
-  font-size: 14px;
-  line-height: 1.4;
-}
-@media (min-width: 1024px) and (max-width: 1279px) {
-  #sidebar {
-    left: 0;
-    width: 160px;
-  }
-  #sidebar .navbar-static-top .navbar-brand-text {
-    display: none;
-  }
-  #content {
-    margin-left: 160px;
-  }
-  #content #fold-button {
-    display: none;
-  }
-  #content .navbar-main,
-  #content .navbar-main-additional {
-    left: 160px;
-  }
-  .table td.td-long {
-    width: 20%;
-  }
-}
-@media (min-width: 1280px) {
-  #sidebar {
-    left: 0;
-  }
-  #content {
-    margin-left: 250px;
-  }
-  #content #fold-button {
-    display: none;
-  }
-  #content .navbar-main,
-  #content .navbar-main-additional {
-    left: 250px;
-  }
-  .table td.td-long {
-    width: 30%;
-  }
-}
-#total-mem {
-  background-color: #7cb5ec;
-}
-#heap-mem {
-  background-color: #434348;
-}
-#non-heap-mem {
-  background-color: #90ed7d;
-}
-a.show-pointer {
-  cursor: pointer;
-}

Reply via email to