<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Cloud Package versions check</title>
    {% include 'common_styles.j2' %}
    {% include 'common_scripts.j2' %}
    <style>        
        td.repo {width: 3em; text-align: center; font-size: 0.7em; color: #113b11; font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;}
        td.component, td.app, td.package_name {
            font-size: 0.75em;
            text-align: center;
            color: #113b11;
            font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
        }
        
        td.repo {column-width: 50px;}
        td.component {column-width: 130px;}
        td.app {column-width: 80px;}
        td.package_name {column-width: 200px; padding-left: 10px; text-align: left;}
        td.node_name {column-width: 210px;}
        td.installed {column-width: 16%;}
        td.candidate {column-width: 16%;}
        td.release {column-width: 13%;}

        .status_container {
            display: inline-flex;
        }

        .status {
            display: block;
            float: left;
            width: 80px;
            padding: 1px;
            padding-left: 5px;
            padding-right: 5px;
            color: white;
            background-color: #113b11;
            text-align: center;
        }
        .action {
            display: block;
            float: left;
            width: 120px;
            padding: 1px;
            padding-left: 5px;
            padding-right: 5px;
            color: gray;
            background-color: #d4dad9;
            text-align: center;
        }

        .node {
            display: block;
            float: left;
            width: auto;
            padding: 1px;
            padding-left: 2px;
            padding-right: 2px;
            margin-left: 3px;
            border-width: 1px;
            border-color: gray;
            border-style: solid;
            color: gray;
            background-color: white;
            text-align: center;
        }

        .status_container .ok {
            color: white;
            background-color: #113b11;
        }
        .status_container .error {
            color: white;
            background-color: darkred;
        }
        .status_container .upgraded {
            color: azure;
            background-color: green;
        }
        .status_container .downgraded {
            color: white;
            background-color: darkolivegreen;
        }

        .status_container .needs_repo {
            color: #545454;
            background-color: #a1b1b0;
        }

        .status_container .needs_up {
            color: black;
            background-color: #aaccaa;
        }

        .status_container .needs_down {
            color: black;
            background-color: #ffcc48;
        }

        .status_container .possible {
            color: gray;
            background-color: #d4dad9;
        }

        .status_container .node_error {
            color: red;
            border-color: red;
            background-color: white;
        }

        .status_container .node_warning {
            color: olive;
            border-color: olive;
            background-color: white;
        }

        .status_container .node_more {
            color: gray;
            border-color: gray;
            background-color: white;
            border-style: none;
        }

        .status_container .text {
            width: 500px;
            font-size: 1em;
            padding-left: 10px;
            line-height: 20px;
        }



        .version {text-align: left; padding: 2px}
        .v_epoch, .v_upstream, .v_debian, .colon, .dash {
            color: darkslategray;
            float: left;
            display: block;
        }

        .ok {color: darkslategray;}
        .error {color: white; background-color: darkred;}
        .warning {color: black; background-color: lightgoldenrodyellow;}
        .upgraded {color: whitesmoke; background-color: darkslategray;}
        .downgraded {color: red;}

        .smallgreytext {float: right; font-size: 0.5em; color: gray;}
        .tooltiptext { top: 120%; }

        /* Table specific */
        .nodes tr:nth-child(even) {
            background-color: #fff;
        }
        .nodes tr:nth-child(odd) {
            background-color: #d4dad9;
            
        }
    </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, 'mirantis')">Mirantis</button>
	<button class="bar-item" onclick="openBar(event, 'system')">System</button>
    <button class="bar-item" onclick="openBar(event, 'other')">Other</button>
    <button class="bar-item" onclick="openBar(event, 'unlisted')">Unlisted</button>
    <button class="bar-item" onclick="openBar(event, 'legend')">Legend</button>
</div>

{% macro prettify_version(v) %}
    <div class="version">
        {% if v.epoch %}
        <div class="v_epoch {{ v.epoch_status | pkg_status_class }}">{{ v.epoch }}</div>
        <div class="colon">:</div>
        {% endif %}
        <div class="v_upstream {{ v.upstream_status | pkg_status_class }}">{{ v.upstream }}{{ v.upstream_rev }}</div>
        {% if v.debian %}
        <div class="dash">-</div>
        <div class="v_debian {{ v.debian_status | pkg_status_class }}">{{ v.debian }}{{ v.debian_rev }}</div>
        {% endif %}
        {{ caller() }}
    </div>
{% endmacro %}

{% macro render_package(pkg_name, dat, status_shown, action_shown, id_label) %}
        <tr onclick="toggleClassByID('{{ id_label }}_{{ pkg_name }}_{{ status_shown }}_{{ action_shown }}')" id="{{ id_label }}_{{ pkg_name }}_{{ status_shown }}_{{ action_shown }}_button">
            <td class="repo">{{ dat['desc']['repo'] }}</td>
            <td class="component">{{ dat['desc']['section'] }}</td>
            <td class="app">{{ dat['desc']['app'] }}</td>
            <td class="package_name">{{ pkg_name }}</td>
            <td class="status_container" colspan="3">
                <div class="status {{ status_shown | pkg_status_class }}">{{ status_shown | pkg_status_label }}</div>
                {% if action_shown | pkg_action_label %}
                    <div class="action {{ action_shown | pkg_action_class }}">{{ action_shown | pkg_action_label }}</div>
                {% endif %}
                {% set counter = [0] %}
                {% for status in dat['results'].keys() | sort(reverse=true) %}
                {% if status_err == status or status_warn == status %}
                    {% for action in dat['results'][status].keys() | sort(reverse=true) %}
                    {% for node in dat['results'][status][action].keys() | sort %}
                    {% if counter.append(counter.pop() + 1) %}{% endif %}
                    {% if counter[0] < 10 %}
                        <div class="node node_{{ status | pkg_status_class }}" alt="{{ counter }}">{{ nodes[node].shortname }}</div>
                    {% endif %}
                    {% endfor %}
                    {% endfor %}
                {% endif %}
                {% endfor %}

                {% if counter[0] > 10 %}
                    <div class="node node_more" alt="{{ counter[0]-10 }} more">...</div>
                {% endif %}

            </td>
        </tr>
        <tr class="collapsable" id="{{ id_label }}_{{ pkg_name }}_{{ status_shown }}_{{ action_shown }}"><td colspan="7">
        <table class="nodes"><tbody>
        {% set counter = [0] %}
        {% for status in dat['results'].keys() | sort(reverse=true) %}
        {% for action in dat['results'][status].keys() | sort(reverse=true) %}
        {% for node in dat['results'][status][action].keys() | sort %}
        {% if counter.append(counter.pop() + 1) %}{% endif %}
        {% set nd = dat['results'][status][action][node] %}
        <tr>
            <td class="repo">{{ counter[0] }}</td>
            <td class="node_name">{{ node }}</td>
            <td class="status_container">
                <div class="status {{ status | pkg_status_class }}">{{ status | pkg_status_label }}</div>
                {% if action | pkg_action_label %}
                    <div class="action {{ action | pkg_action_class }}">{{ action | pkg_action_label }}</div>
                {% endif %}
            </td>
            <td class="installed">
                <div class="tooltip">
                    {% call prettify_version(nd['i']) %}
                    <pre class="tooltiptext">{{ nd['raw'] | linebreaks }}</pre>
                    {% endcall %}
                </div>
            </td>
            <td class="candidate">{{ nd['c'].version }}</td>
            <td class="release">
                <div class="tooltip">
                    {{ dat['r'].version }}
                    <pre class="repoinfotext">{{ dat['repos'] | pkg_repo_info }}</pre>
                </div>
            </td>
        </tr>
        {% endfor %}
        {% endfor %}
        {% endfor %}
        </tbody></table>
        </td></tr>
    {{ caller() }}
{% endmacro %}

{% macro package_table(pkg_dict, id_label) %}
<div id="{{ id_label }}" class="barcontent">
    <h5>{{ caller() }}</h5>
    <table class="pkgversions">
            <tbody>
            <tr>
                <td class="table_header" width="50px">repo</td>
                <td class="table_header" width="130px">Component</td>
                <td class="table_header" width="80px">App</td>
                <td class="table_header" width="200px">Package name</td>
                <td class="table_header">Installed</td>
                <td class="table_header">Candidate</td>
                <td class="table_header">Release</td>
            </tr>
            <!-- Print errors -->
            <tr><td colspan="7">Errors ({{ errors[id_label] }})</td></tr>
            {% for pkg_name in pkg_dict | get_sorted_keys %}
            {% set dat = pkg_dict[pkg_name] %}
                {% if status_err in dat['results'] %}
                    {% set action_to_show = dat['results'][status_err].keys() | get_max %}
                    {% call render_package(pkg_name, dat, status_err, action_to_show, id_label) %}
                    {% endcall %}
                {% endif%}
            {% endfor %}
            {% if not errors[id_label] %}
            <tr><td class="note" colspan="7">no errors found </td></tr>
            {% endif %}

            <!-- Print warnings -->
            <tr><td colspan="7">Warnings ({{ warnings[id_label] }})</td></tr>
            {% for pkg_name in pkg_dict | get_sorted_keys %}
            {% set dat = pkg_dict[pkg_name] %}
                {% if status_warn in dat['results'] %}
                    {% set action_to_show = dat['results'][status_warn].keys() | get_max %}
                    {% call render_package(pkg_name, dat, status_warn, action_to_show, id_label) %}
                    {% endcall %}
                {% endif%}
            {% endfor %}
            {% if not warnings[id_label] %}
            <tr><td class="note" colspan="7">no warnings found </td></tr>
            {% endif %}

            <!-- Print downgrades -->
            <tr><td colspan="7">Downgrades ({{ downgrades[id_label] }})</td></tr>
            {% for pkg_name in pkg_dict | get_sorted_keys %}
            {% set dat = pkg_dict[pkg_name] %}
                {% if status_down in dat['results'] %}
                    {% set action_to_show = dat['results'][status_down].keys() | get_max %}
                    {% call render_package(pkg_name, dat, status_down, action_to_show, id_label) %}
                    {% endcall %}
                {% endif %}
            {% endfor %}
            {% if not downgrades[id_label] %}
            <tr><td class="note" colspan="7">no downgrades found</td></tr>
            {% endif %}

            <!-- Print all other -->
            <tr><td colspan="7">All others</td></tr>
            {% for pkg_name in pkg_dict | get_sorted_keys %}
            {% set dat = pkg_dict[pkg_name] %}
                {% set status_to_show = dat['results'].keys() | get_max %}
                {% set action_to_show = dat['results'][status_to_show].keys() | get_max %}
                {% if status_err != status_to_show and status_down !=  status_to_show and status_warn != status_to_show %}
                    {% call render_package(pkg_name, dat, status_to_show, action_to_show, id_label) %}
                    {% endcall %}
                {% endif %}
            {% endfor %}
            </tbody>
        </table>
</div>
{%- endmacro %}

<!-- Mirantis packages which version is critical for functionality -->
{% call package_table(critical, "mirantis") %}
    Packages maintained and updated by Mirantis
{% endcall %}

<!-- System labeled packages-->
{% call package_table(system, "system") %}
    System packages which versions are critical to proper cloud function
{%- endcall %}

<!-- Other packages -->
{% call package_table(other, "other") %}
    Packages with no description or not critical
{%- endcall %}

{% call package_table(unlisted, "unlisted") %}
    Packages that are not listed in version map. I.e. unexpected on the environment
{%- endcall %}

<!-- Legend -->
<div id="legend" class="barcontent">
	<table width="100%"><tbody>
		<tr>
			<td width="50%"><h5>Version status desctiptions</h5></td>
			<td width="50%"><h5>Action descriptions</h5></td>
		</tr>

		<tr>
			<td width="50%">
				<div class="status_container">
					<div class="status {{ cs.ok | pkg_status_class }}">{{ cs.ok | pkg_status_label }}</div>
					<div class="text">Installed and Candidate epoch:upstream version mach</div>
				</div>
			</td>
			<td width="50%">
				<div class="status_container">
					<div class="action {{ ca.na | pkg_action_class }}">{{ ca.na | pkg_action_label }} (no action)</div>
					<div class="text">No action suggested</div>
				</div>
			</td>
		</tr>
		<tr>
			<td width="50%">
				<div class="status_container">
					<div class="status {{ cs.up | pkg_status_class }}">{{ cs.up | pkg_status_label }}</div>
					<div class="text">Installed version is newer that the one found in Repo (i.e. candidate) or Release notes recordset</div>
				</div>
			</td>
			<td width="50%">
				<div class="status_container">
					<div class="action {{ ca.up | pkg_action_class }}">{{ ca.up | pkg_action_label }}</div>
					<div class="text">There is an upgrade possible for the package. But it is not strictly required action</div>
				</div>
			</td>
		</tr>
		<tr>
			<td width="50%">
				<div class="status_container">
					<div class="status {{ cs.down | pkg_status_class }}">{{ cs.down | pkg_status_label }}</div>
					<div class="text">Installed version is older that the one found in Repo (i.e. candidate) or Release notes recordset</div>
				</div>
			</td>
			<td width="50%">
				<div class="status_container">
					<div class="action {{ ca.need_up | pkg_action_class }}">{{ ca.need_up | pkg_action_label }}</div>
					<div class="text">Package should be upgraded to match version either in repo or in Release notes</div>
				</div>
			</td>
		</tr>
		<tr>
			<td width="50%">
				<div class="status_container">
					<div class="status {{ cs.err | pkg_status_class }}">{{ cs.err | pkg_status_label }}</div>
					<div class="text">Installed version conflicts with a combination of Candidate and Release notes versions</div>
				</div>
			</td>
			<td width="50%">
				<div class="status_container">
					<div class="action {{ ca.need_down | pkg_action_class }}">{{ ca.need_down | pkg_action_label }}</div>
					<div class="text">Package should be downgraded to match version either in repo or in Release notes</div>
				</div>
			</td>
		</tr>
		<tr>
			<td width="50%">
			</td>
			<td width="50%">
				<div class="status_container">
					<div class="action {{ ca.repo | pkg_action_class }}">{{ ca.repo | pkg_action_label }}</div>
					<div class="text">Repo that is configured on the target node contains invalid version and should be updated</div>
				</div>
			</td>
		</tr>
	</tbody></table>
    <hr>
    <h5>Versions status and Action combinations</h5>
    <div class="status_container">
        <div class="status {{ cs.ok | pkg_status_class }}">{{ cs.ok | pkg_status_label }}</div>
        <div class="action {{ ca.na | pkg_action_class }}">{{ ca.na | pkg_action_label }} (no action)</div>
        <div class="text">All versions are inline with each other</div>
    </div>
    <div class="status_container">
        <div class="status {{ cs.up | pkg_status_class }}">{{ cs.up | pkg_status_label }}</div>
        <div class="action {{ ca.na | pkg_action_class }}">{{ ca.na | pkg_action_label }} (no action)</div>
        <div class="text">Installed version is newer that Cadidate, Release version - unknown or not tracked</div>
    </div>
    <div class="status_container">
        <div class="status {{ cs.ok | pkg_status_class }}">{{ cs.ok | pkg_status_label }}</div>
        <div class="action {{ ca.up | pkg_action_class }}">{{ ca.up | pkg_action_label }}</div>
        <div class="text">Installed version is equal to Release, but there is newer in the repo</div>
    </div>
    <div class="status_container">
        <div class="status {{ cs.up | pkg_status_class }}">{{ cs.up | pkg_status_label }}</div>
        <div class="action {{ ca.up | pkg_action_class }}">{{ ca.up | pkg_action_label }}</div>
        <div class="text">Installed version is newer than Release, and there is even newer in the repo</div>
    </div>
    <div class="status_container">
        <div class="status {{ cs.err | pkg_status_class }}">{{ cs.err | pkg_status_label }}</div>
        <div class="action {{ ca.need_up | pkg_action_class }}">{{ ca.need_up | pkg_action_label }}</div>
        <div class="text">Installed version is older than Candidate and Release versions and must be upgraded</div>
    </div>
    <div class="status_container">
        <div class="status {{ cs.err | pkg_status_class }}">{{ cs.err | pkg_status_label }}</div>
        <div class="action {{ ca.need_down | pkg_action_class }}">{{ ca.need_down | pkg_action_label }}</div>
        <div class="text">Unknown version installed, Release and Candidate versions are older</div>
    </div>
    <div class="status_container">
        <div class="status {{ cs.err | pkg_status_class }}">{{ cs.err | pkg_status_label }}</div>
        <div class="action {{ ca.repo | pkg_action_class }}">{{ ca.repo | pkg_action_label }}</div>
        <div class="text">Installed and Candidate versions is older than release and repo must be updated</div>
    </div>

    <div class="status_container">
        <div class="status {{ cs.up | pkg_status_class }}">{{ cs.up | pkg_status_label }}</div>
        <div class="action {{ ca.repo | pkg_action_class }}">{{ ca.repo | pkg_action_label }}</div>
        <div class="text">Candidate version in repo is older vs Release and both older vs Installed</div>
    </div>
    <div class="status_container">
        <div class="status {{ cs.ok | pkg_status_class }}">{{ cs.ok | pkg_status_label }}</div>
        <div class="action {{ ca.repo | pkg_action_class }}">{{ ca.repo | pkg_action_label }}</div>
        <div class="text">Candidate version in Repo is older vs release, but release version installed</div>
    </div>
    
    <div class="status_container">
        <div class="status {{ cs.down | pkg_status_class }}">{{ cs.down | pkg_status_label }}</div>
        <div class="action {{ ca.repo | pkg_action_class }}">{{ ca.repo | pkg_action_label }}</div>
        <div class="text">Both Candidate in repo and Installed older vs release</div>
    </div>
    <div class="status_container">

        <div class="text"></div>
    </div>

</div>
</body>
</html>