
<!--
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.

--><!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Apache Flink Web Dashboard</title>
    <link rel="stylesheet" href="css/vendor.css" type="text/css">
    <link rel="stylesheet" href="css/index.css" type="text/css">
    <script src="js/vendor.js"></script>
    <script src="js/index.js"></script>
  </head>
  <body ng-app="flinkApp" ng-strict-di>
    <div id="sidebar" ng-class="{ 'sidebar-visible': sidebarVisible }">
      <nav class="navbar navbar-inverse navbar-static-top">
        <div class="navbar-header"><a ui-sref="overview" class="navbar-brand"><img alt="Apache Flink Dashboard" src="images/flink-logo.png" class="logo"></a><a ui-sref="overview" class="navbar-brand navbar-brand-text">Apache Flink Dashboard</a></div>
      </nav>
      <div class="navbar navbar-sidebar">
        <ul class="nav">
          <li><a ui-sref="overview" ui-sref-active="active"><i class="fa fa-dashboard fa-fw"></i> 
              Overview</a></li>
          <li><a ui-sref="running-jobs" ui-sref-active="active"><i class="fa fa-tasks fa-fw"></i> 
              Running Jobs</a></li>
          <li><a ui-sref="completed-jobs" ui-sref-active="active"><i class="fa fa-check-circle fa-fw"></i> 
              Completed Jobs</a></li>
          <li><a ui-sref="all-manager" ui-sref-active="active"><i class="fa fa-sitemap fa-fw"></i> 
              Task Managers</a></li>
          <li><a ui-sref="jobmanager.config" ui-sref-active="active"><i class="fa fa-server fa-fw"></i> 
              Job Manager</a></li>
        </ul>
      </div>
    </div>
    <div id="content" ng-class="{ 'sidebar-visible': sidebarVisible }">
      <div ui-view="main"></div>
    </div>
  </body>
</html>