[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; -}