<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Nodes and Networks report</title>
    {% include 'common_styles.j2' %}
    {% include 'common_scripts.j2' %}
    <style>
        table.cluster_nodes {
            width: 90%;
            margin-left: 5%;
            margin-right: 5%;
        }
    
        /* Node rows*/
		.node {
			display: inline-block;
			background-color: white;
		}
		
        tr.node > td {
            display: block;
            float: left;
            padding: 1px;
            padding-left: 5px;
            padding-right: 5px;
            color: black;
            background-color: #A1BbA1;
            text-align: center;
            margin: 2px;
        }
        
        .meters {
			display: inline-block;        
        }
        
        td.meters > .meter {
            display: block;
            float: left;
        }
    </style>
</head>
<body onload="init()">

<div class="header">
    <div class="label">OpenStack release:</div>
    <div class="text">{{ openstack_release }}</div>
    <div class="label">MCP Version:</div>
    <div class="text">{{ mcp_release }}</div>
    <div class="label date">generated on: {{ gen_date }}</div>
</div>

<div class="bar">
    <button class="bar-item" onclick="openBar(event, 'nodes')">Nodes</button>
    <button class="bar-item" onclick="openBar(event, 'networks')">Networks</button>
    <button class="bar-item" onclick="openBar(event, 'services')">Other</button>
</div>

{% macro nodes_page(nodes, id_label) %}
<div id="{{ id_label }}" class="barcontent">
    <h5>{{ caller() }}</h5>
    <hr>
    <table class="cluster_nodes">
    {% for node in nodes.keys() | sort %}
        {% set _ndat = nodes[node] %}
        <tr class="node virt">
            <td class="status">{{ _ndat['status'] }}</td>
            <td class="name">{{ node }}</td>
            <td class="role">{{ _ndat['role'] }}</td>
            <td class="vendor">QEMU</td>
            <td class="meter cpu">vCPU: 12</td>
            <td class="meter ram">RAM: 500GB</td>
            <td class="meter disk">VDA: 150/140/135</td>
        </tr>
    {% endfor %}
    </table>
    <hr>
</div>
{% endmacro %}

{% macro networks_page(networks, id_label) %}
<div id="{{ id_label }}" class="barcontent">
    <h5>{{ caller() }}</h5>
    <hr>
    <table class="networks">
        <tr class="subnet">192.168.10.0/24</tr>
        <tr class="net collapsable">
            <td class="status">UP</td>
            <td class="name">cfg01.internal.net</td>
            <td class="ip">192.168.10.11</td>
            <td class="param">1500</td>
        </tr>
    </table>
    <hr>
</div>
{% endmacro %}

{% macro services_page(services, id_label) %}
<div id="{{ id_label }}" class="barcontent">
    <h5>{{ caller() }}</h5>
    <hr>
</div>
{% endmacro %}

<!-- Cluster nodes page -->
{% call nodes_page(nodes, "nodes") %}
    Cluster nodes status and simple meterings
{% endcall %}

<!-- Cluster nodes page -->
{% call networks_page(networks, "networks") %}
    Networks in the cluster
{% endcall %}

<!-- Cluster nodes page -->
{% call services_page(services, "services") %}
    Services status in the cluster
{% endcall %}

</body>
</html>