<html>

<head>
    <!--
     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.
    -->
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Storm UI</title>
    <link href="/css/bootstrap-3.3.1.min.css" rel="stylesheet" type="text/css">
    <link href="/css/jquery.dataTables.1.10.4.min.css" rel="stylesheet" type="text/css">
    <link href="/css/dataTables.bootstrap.css" rel="stylesheet" type="text/css">
    <link href="/css/jsonFormatter.min.css" rel="stylesheet" type="text/css">
    <link href="/css/style.css?_ts=${packageTimestamp}" rel="stylesheet" type="text/css">
    <script src="/js/jquery-1.11.1.min.js" type="text/javascript"></script>
    <script src="/js/jquery.dataTables.1.10.4.min.js" type="text/javascript"></script>
    <script src="/js/jquery.cookies.2.2.0.min.js" type="text/javascript"></script>
    <script src="/js/jquery.mustache.js" type="text/javascript"></script>
    <script src="/js/url.min.js" type="text/javascript"></script>
    <script src="/js/bootstrap-3.3.1.min.js" type="text/javascript"></script>
    <script src="/js/jquery.blockUI.min.js" type="text/javascript"></script>
    <script src="/js/jsonFormatter.min.js" type="text/javascript"></script>
    <script src="/js/script.js?_ts=${packageTimestamp}" type="text/javascript"></script>
</head>

<body>
  <div class="warning" id="ras-warning-fixed-buffer">
    <H1>This user's topologies are in danger of being unscheduled due to the owner's over-use of cluster resources.</H1>
    <p>Please keep this user's resource consumption within guaranteed bounds to ensure topologies for this user will continue to run.</p>
  </div>
  <div class="warning" id="ras-warning-top-buffer"></div>
  <div class="container-fluid">
    <div class="row">
        <div class="col-md-11">
            <h1><a href="/">Storm UI</a></h1>
        </div>
        <div id="ui-user" class="col-md-1"></div>
    </div>
    <div class="row">
        <div class="col-md-12" id="search-form">
        </div>
    </div>
    <div class="row">
        <div class="col-md-12">
            <h2>Owner Summary</h2>
            <div id="owner-summary"></div>
        </div>
    </div>
    <div class="row">
        <div class="col-md-12">
            <h2 id="owner-resource-usage-summary-header">Owner Resource Usage</h2>
            <div id="owner-resource-usage-summary"></div>
        </div>
    </div>
    <div class="row">
        <div class="col-md-12">
            <h2 id="owner-resource-guarantee-summary-header">Owner Resource Guarantees (RAS Topologies Only)</h2>
            <div id="owner-resource-guarantee-summary"></div>
        </div>
    </div>
    <div class="row">
        <div class="col-md-12">
            <h2>Owner Topologies</h2>
            <div id="topology-summary"></div>
        </div>
    </div>
    <div class="row">
        <div id="json-response-error" class="col-md-12"></div>
    </div>
    <div>
        <p id="page-rendered-at-timestamp"></p>
    </div>
</div>
</body>
<script>
    $(document).ajaxStop($.unblockUI);
    $(document).ajaxStart(function() {
        $.blockUI({
            message: '<img src="images/spinner.gif" /> <h3>Loading summary...</h3>'
        });
    });
    $(document).ready(function() {

        var owner = $.url("?id");
        if (!owner) {
            // this page is designed to be per owner, handle the case where the URL is malformed
            getStatic("/templates/json-error-template.html", function(template) {
                $("#json-response-error").append(Mustache.render($(template).filter("#json-error-template").html(), {
                    "error": "Invalid owner",
                    "errorMessage": "Please pass an owner id with the id URL parameter"
                }));
            });
            return;
        }
        var url = "/api/v1/owner-resources/" + owner;

        $.extend($.fn.dataTable.defaults, {
            stateSave: true,
            lengthMenu: [
                [20, 40, 60, 100, -1],
                [20, 40, 60, 100, "All"]
            ],
            pageLength: 20
        });

        $.ajaxSetup({
            "error": function(jqXHR, textStatus, response) {
                var errorJson = jQuery.parseJSON(jqXHR.responseText);
                getStatic("/templates/json-error-template.html", function(template) {
                    $("#json-response-error").append(Mustache.render($(template).filter("#json-error-template").html(), errorJson));
                });
            }
        });

        function jsError(other) {
            try {
                other();
            } catch (err) {
                getStatic("/templates/json-error-template.html", function(template) {
                    $("#json-response-error").append(Mustache.render($(template).filter("#json-error-template").html(), {
                        error: "JS Error",
                        errorMessage: err
                    }));
                });
            }
        }

        var topologySummary = $("#topology-summary");
        var ownerResourceUsage = $("#owner-resource-usage-summary");
        var ownerSummary = $("#owner-summary");
        var ownerResourceGuarantee = $("#owner-resource-guarantee-summary");
        $.getJSON(url, function(response, status, jqXHR) {
            getStatic("/templates/owner-page-template.html", function(template) {
                jsError(function() {
                    //owner,totalTopologies,totalTasks,totalExecutors,totalWorkers
                    ownerSummary.append(
                        Mustache.render($(template).filter("#owner-summary-template").html(), response));

                    //totalReqOnHeapMem,totalReqOffHeapMem,totalReqMem,totalReqCpu,totalAssignedOnHeapMem,totalAssignedOffHeapMem,totalAssignedMem,totalAssignedCpu
                    ownerResourceUsage.append(
                        Mustache.render($(template).filter("#owner-resource-usage-template").html(), response));
                    $('#owner-resource-usage-summary [data-toggle="tooltip"]').tooltip();

                    if (response["cpuGuarantee"] != "N/A" || response["memoryGuarantee"] != "N/A") {
                        ownerResourceGuarantee.append(
                            Mustache.render($(template).filter("#owner-resource-guarantee-template").html(), response));
                        $('#owner-resource-guarantee-summary [data-toggle="tooltip"]').tooltip();

                        $('#mem-guarantee-util').html(getResourceGuaranteeRemainingFormat("display", response["memoryGuaranteeRemaining"]));

                        $('#cpu-guarantee-util').html(getResourceGuaranteeRemainingFormat("display", response["cpuGuaranteeRemaining"]));

                    } else {
                        $('#owner-resource-guarantee-summary-header').hide();
                        $('#owner-resource-guarantee-summary').hide();
                    }

                    var displayResource = response["schedulerDisplayResource"];
                    if (!displayResource) {
                        $('#owner-resource-usage-summary-header').hide();
                        $('#owner-resource-usage-summary').hide();
                        $('#owner-resource-guarantee-summary-header').hide();
                        $('#owner-resource-guarantee-summary').hide();
                    }

                    if(response && (response["memoryGuaranteeRemaining"] < 0 || response["cpuGuaranteeRemaining"] < 0
                        || response["memoryGuaranteeRemaining"] == "N/A" || response["cpuGuaranteeRemaining"] == "N/A")) {
                        $(".warning").show();
                    } else {
                        $(".warning").hide();
                    }

                    $('#owner-resource-usage-summary [data-toggle="tooltip"]').tooltip();

                    topologySummary.append(
                        Mustache.render($(template).filter("#owner-topology-summary-template").html(), response));
                    //name, owner, status, uptime, num workers, num executors, num tasks, assigned total mem, assigned total cpu, scheduler info
                    dtAutoPage("#owner-topology-summary-table", {
                        columnDefs: [{
                            type: "num",
                            targets: [4, 5, 6, 7, 8]
                        }, {
                            type: "time-str",
                            targets: [3]
                        }]
                    });
                    $('#topology-summary [data-toggle="tooltip"]').tooltip();

                });
            });
        });
    });

    getPageRenderedTimestamp("page-rendered-at-timestamp");

</script>

</html>
