summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ogcp/static/css/soleta.css4
-rw-r--r--ogcp/static/js/ogcp.js23
-rw-r--r--ogcp/templates/base.html2
-rw-r--r--ogcp/templates/macros.html9
4 files changed, 32 insertions, 6 deletions
diff --git a/ogcp/static/css/soleta.css b/ogcp/static/css/soleta.css
index 87e9e98..7d5eb9e 100644
--- a/ogcp/static/css/soleta.css
+++ b/ogcp/static/css/soleta.css
@@ -81,6 +81,10 @@ a.nav-link:not(.collapsed):not(.disabled)[data-toggle="collapse"]::before {
font-size: 0.7em;
}
+a.nav-link.live-report::before {
+ color: #ffc107;
+}
+
.subhead-heading {
margin-top: 1.5rem;
margin-bottom: 1.5rem;
diff --git a/ogcp/static/js/ogcp.js b/ogcp/static/js/ogcp.js
index 83fe52d..872f03c 100644
--- a/ogcp/static/js/ogcp.js
+++ b/ogcp/static/js/ogcp.js
@@ -258,9 +258,12 @@ function updatePillStatus(scope, pill) {
}
function updateScopes(scopes) {
+ let hasLiveChildren = false;
+
scopes.forEach((scope) => {
+ const scopeName = `${scope.name}`.replaceAll(/[.]|[ ]/g, '_');
if (scope.state) {
- const scopeId = `${scope.name}_${scope.id}`.replaceAll(/[.]|[ ]/g, '_');
+ const scopeId = `${scopeName}_${scope.id}`;
const iconEl = document.querySelector(`#${scopeId} .nav-icon`);
const iconCls = ['fas', 'far', 'fa-circle', 'fa-check-circle',
'fa-times-circle', 'fa-user-circle', 'text-danger',
@@ -269,6 +272,7 @@ function updateScopes(scopes) {
iconEl.classList.remove(...iconCls);
let newIconCls = [];
if (scope.state === 'OPG') {
+ hasLiveChildren = true;
newIconCls.push('fas', 'text-warning');
if (scope.last_cmd.result === 'failure')
newIconCls.push('fa-times-circle');
@@ -283,6 +287,7 @@ function updateScopes(scopes) {
} else if (scope.state === 'WINS') {
newIconCls.push('fas', 'fa-user-circle', 'text-windows');
} else if (scope.state === 'BSY') {
+ hasLiveChildren = true;
newIconCls.push('fas', 'fa-circle', 'text-danger');
} else if (scope.state === 'VDI') {
newIconCls.push('fas', 'fa-circle', 'text-success');
@@ -300,9 +305,23 @@ function updateScopes(scopes) {
}
if (scope.scope) {
// This is a level so we should update all childs
- updateScopes(scope.scope);
+ let hasLocalLiveChildren = updateScopes(scope.scope);
+ if (hasLocalLiveChildren) {
+ hasLiveChildren = true;
+ }
+
+ const disclosureWidgetId = scope.id ?
+ `${scope.type}-${scope.id}` : `${scope.type}-${scopeName}`;
+ const disclosureWidget = document.querySelector(`#${disclosureWidgetId}`);
+
+ disclosureWidget.classList.remove('live-report');
+
+ if (hasLocalLiveChildren) {
+ disclosureWidget.classList.add('live-report');
+ }
}
});
+ return hasLiveChildren;
}
function unfoldAll() {
diff --git a/ogcp/templates/base.html b/ogcp/templates/base.html
index 7be19b4..3ad3b05 100644
--- a/ogcp/templates/base.html
+++ b/ogcp/templates/base.html
@@ -108,7 +108,7 @@
<!-- ChartJS -->
<script src="{{ url_for('static', filename='AdminLTE/plugins/chart.js/Chart.min.js') }}"></script>
- <script src="{{ url_for('static', filename='js/ogcp.js') }}?v=10"></script>
+ <script src="{{ url_for('static', filename='js/ogcp.js') }}?v=11"></script>
<script>
// error messages
diff --git a/ogcp/templates/macros.html b/ogcp/templates/macros.html
index eda57ed..077bad5 100644
--- a/ogcp/templates/macros.html
+++ b/ogcp/templates/macros.html
@@ -28,7 +28,8 @@
{% macro scopes_tree_collapse_level(scopes, parent_room, parent_id, state, selection_mode) -%}
{% for scope in scopes %}
- <li id="{{ scope["name"]|replace(".", "_")|replace(" ", "_") }}_{{ scope["id"] }}" class="nav-item">
+ {% set scope_name = scope["name"]|replace(".", "_")|replace(" ", "_") %}
+ <li id="{{ scope_name }}_{{ scope["id"] }}" class="nav-item">
{% set input_id = "input" ~ parent_id ~ "-" ~ loop.index %}
{% if scope["type"] == "server" %}
<input id="{{ input_id }}" class="form-check-input" type="checkbox" form="scopesForm"
@@ -62,8 +63,10 @@
{% if scope.get("selected", False) %}checked{% endif %}
name="{{ scope["name"] }}_{{ scope["id"] }}" />
{% endif %}
- <a class="nav-link {% if not scope["scope"] %}disabled{% endif %}" href="#scope{{parent_id ~ "-" ~ loop.index}}"
- {% if scope["scope"] %}data-toggle="collapse"{% endif %}>
+ <a class="nav-link {% if not scope["scope"] %}disabled{% endif %}"
+ id="{{ scope["type"] }}-{{ scope.get('id', scope_name) }}"
+ href="#scope{{parent_id ~ "-" ~ loop.index}}"
+ {% if scope["scope"] %}data-toggle="collapse"{% endif %}>
{% if "state" in scope %}
<i class="nav-icon fa-circle
{% if scope['state'] == 'OPG' %}fas text-warning