Commit 76974db4 authored by Rafael Monnerat's avatar Rafael Monnerat

slapos_jio: Hosting Subscription / Instance Monitor Status rework

  Indicate when instance is Slave, Stopped or Destroyed on the News Dict
  Display monitor url and more information on the monitor gadget
parent 3ae3590c
...@@ -27,14 +27,14 @@ ...@@ -27,14 +27,14 @@
.push(function (result) { .push(function (result) {
var i, value, len = result.data.total_rows; var i, value, len = result.data.total_rows;
for (i = 0; i < len; i += 1) { for (i = 0; i < len; i += 1) {
if (1 || (result.data.rows[i].hasOwnProperty("id"))) { if (1 || (result.data.rows[i].value.SoftwareInstance_getNewsDict)) {
value = result.data.rows[i].id; value = result.data.rows[i].value.SoftwareInstance_getNewsDict;
result.data.rows[i].value.computer_monitoring_status = { result.data.rows[i].value.SoftwareInstance_getNewsDict = {
field_gadget_param : { field_gadget_param : {
css_class: "", css_class: "",
description: "The Status", description: "The Status",
hidden: result.data.rows[i].value.portal_type === "Slave Instance", hidden: 0,
"default": {jio_key: value}, "default": {jio_key: value, result: value},
key: "status", key: "status",
url: "gadget_slapos_instance_status.html", url: "gadget_slapos_instance_status.html",
title: "Status", title: "Status",
...@@ -142,7 +142,7 @@ ...@@ -142,7 +142,7 @@
['title', 'Title'], ['title', 'Title'],
['reference', 'Reference'], ['reference', 'Reference'],
['portal_type', 'Type'], ['portal_type', 'Type'],
['computer_monitoring_status', 'Status'] ['SoftwareInstance_getNewsDict', 'Status']
], monitor_scope_list = [['', ''], ], monitor_scope_list = [['', ''],
['Enabled', 'enable'], ['Enabled', 'enable'],
['Disabled', 'disable'] ['Disabled', 'disable']
...@@ -267,7 +267,8 @@ ...@@ -267,7 +267,8 @@
"my_monitoring_status": { "my_monitoring_status": {
"description": "", "description": "",
"title": "Monitoring Status", "title": "Monitoring Status",
"default": {jio_key: gadget.state.jio_key}, "default": {jio_key: gadget.state.jio_key,
result: gadget.state.doc.news},
"css_class": "", "css_class": "",
"required": 0, "required": 0,
"editable": 0, "editable": 0,
......
...@@ -230,7 +230,7 @@ ...@@ -230,7 +230,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>974.29153.39901.20360</string> </value> <value> <string>974.49068.53964.3174</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -248,7 +248,7 @@ ...@@ -248,7 +248,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1552959641.55</float> <float>1554168123.09</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -12,10 +12,15 @@ ...@@ -12,10 +12,15 @@
<script src="gadget_slapos_instance_status.js"></script> <script src="gadget_slapos_instance_status.js"></script>
<link href="gadget_slapos_computer_status.css" rel="stylesheet" type="text/css"/> <link href="gadget_slapos_computer_status.css" rel="stylesheet" type="text/css"/>
<script id="inline-status-template" type="text/x-handlebars-template"> <script id="inline-status-no-link-template" type="text/x-handlebars-template">
<div class="ui-block-a" style="width:50%"><div class="ui-bar ui-corner-all first-child {{status_class}}" style="{{status_style}}" >{{status_title}}</div></div> <div class="ui-block-a" style="width:50%"><div class="ui-bar ui-corner-all first-child {{status_class}}" style="{{status_style}}" >{{status_title}}</div></div>
</script> </script>
<script id="inline-status-template" type="text/x-handlebars-template">
<div class="ui-block-a" style="width:50%"><div class="ui-bar ui-corner-all first-child {{status_class}}" style="{{status_style}}" >
<a class="ui-btn ui-btn-icon-left ui-icon-desktop" href="{{monitor_url}}" target=_blank>{{status_title}}</a></div></div>
</script>
<script id="loading-template" type="text/x-handlebars-template"> <script id="loading-template" type="text/x-handlebars-template">
<button data-i18n="loading" type="submit" class="responsive ui-btn ui-icon-spinner ui-icon-spin ui-btn-icon-center ui-disabled" style="border:none;">loading</button> <button data-i18n="loading" type="submit" class="responsive ui-btn ui-icon-spinner ui-icon-spin ui-btn-icon-center ui-disabled" style="border:none;">loading</button>
</script> </script>
......
...@@ -272,7 +272,7 @@ ...@@ -272,7 +272,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>966.58781.43824.3635</string> </value> <value> <string>972.32024.53732.34406</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -290,7 +290,7 @@ ...@@ -290,7 +290,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1530120129.88</float> <float>1554213561.03</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -7,7 +7,12 @@ ...@@ -7,7 +7,12 @@
inline_status_source = gadget_klass.__template_element inline_status_source = gadget_klass.__template_element
.getElementById("inline-status-template") .getElementById("inline-status-template")
.innerHTML, .innerHTML,
inline_status_template = Handlebars.compile(inline_status_source); inline_status_template = Handlebars.compile(inline_status_source),
inline_status_no_link_source = gadget_klass.__template_element
.getElementById("inline-status-no-link-template")
.innerHTML,
inline_status_no_link_template = Handlebars
.compile(inline_status_no_link_source);
function checkInstanceStatus(options) { function checkInstanceStatus(options) {
if ((!options) || (options && !options.news)) { if ((!options) || (options && !options.news)) {
...@@ -19,31 +24,68 @@ ...@@ -19,31 +24,68 @@
if (options.no_data) { if (options.no_data) {
return 'ui-btn-no-data'; return 'ui-btn-no-data';
} }
else if (options.is_slave) {
return 'ui-btn-is-slave';
}
else if (options.is_stopped) {
return 'ui-btn-is-stopped';
}
else if (options.is_destroyed) {
return 'ui-btn-is-destroyed';
}
return 'ui-btn-error'; return 'ui-btn-error';
} }
} }
function getStatus(gadget) { function getStatus(gadget, result) {
return new RSVP.Queue() var status_class = 'ui-btn-no-data',
status_title = 'Instance',
status_style = "",
monitor_url,
template = inline_status_template;
monitor_url = 'https://monitor.app.officejs.com/#/?page=ojsm_dispatch&query=portal_type%3A%22Software%20Instance%22%20AND%20reference%3A%22' + result.reference + '%22';
status_class = checkInstanceStatus(result);
if (status_class === 'ui-btn-no-data') {
status_style = "color: transparent !important;";
}
else if (status_class === 'ui-btn-is-slave') {
status_class = 'ui-btn-no-data';
status_title = 'Slave';
}
else if (status_class === 'ui-btn-is-stopped') {
status_class = 'ui-btn-no-data';
status_title = 'Stopped';
}
else if (status_class === 'ui-btn-is-destroyed') {
status_class = 'ui-btn-no-data';
status_title = 'Destroyed';
}
if (status_class === 'ui-btn-no-data') {
gadget.element.innerHTML = inline_status_no_link_template({
status_class: status_class,
status_title: status_title,
status_style: status_style
});
} else {
gadget.element.innerHTML = inline_status_template({
monitor_url: monitor_url,
status_class: status_class,
status_title: status_title,
status_style: status_style
});
}
return gadget;
}
function getStatusLoop(gadget) {
return new RSVP.Queue()
.push(function () { .push(function () {
return gadget.jio_get(gadget.options.value.jio_key); return gadget.jio_get(gadget.options.value.jio_key);
}) })
.push(function (result) { .push(function (result) {
var status_class = 'ui-btn-no-data', return getStatus(gadget, result);
status_title = 'Instance',
status_style = "";
status_class = checkInstanceStatus(result);
if (status_class === 'ui-btn-no-data') {
status_style = "color: transparent !important;";
}
gadget.element.innerHTML = inline_status_template({
status_class: status_class,
status_title: status_title,
status_style: status_style
});
return gadget;
}); });
} }
...@@ -62,20 +104,20 @@ ...@@ -62,20 +104,20 @@
.declareMethod("getContent", function () { .declareMethod("getContent", function () {
return {}; return {};
}) })
.declareJob("getStatus", function () { .declareJob("getStatus", function (result) {
var gadget = this; var gadget = this;
return getStatus(gadget); return getStatus(gadget, {news: result});
}) })
.onLoop(function () { .onLoop(function () {
var gadget = this; var gadget = this;
return getStatus(gadget); return getStatusLoop(gadget);
}, 300000) }, 300000)
.declareMethod("render", function (options) { .declareMethod("render", function (options) {
var gadget = this; var gadget = this;
gadget.options = options; gadget.options = options;
gadget.flag = options.value.jio_key; gadget.flag = options.value.jio_key;
return gadget.getStatus(); return gadget.getStatus(options.value.result);
}); });
}(window, rJS, RSVP, Handlebars)); }(window, rJS, RSVP, Handlebars));
\ No newline at end of file
...@@ -257,7 +257,7 @@ ...@@ -257,7 +257,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>968.33056.31297.6997</string> </value> <value> <string>974.50044.7881.17544</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -275,7 +275,7 @@ ...@@ -275,7 +275,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1530119074.09</float> <float>1554213380.38</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -2,4 +2,27 @@ from zExceptions import Unauthorized ...@@ -2,4 +2,27 @@ from zExceptions import Unauthorized
if REQUEST is not None: if REQUEST is not None:
raise Unauthorized raise Unauthorized
portal_type = context.getPortalType()
if portal_type == "Slave Instance":
return {
"user": "SlapOS Master",
"text": "#nodata is a slave %s" % context.getReference(),
"is_slave": 1
}
slap_state = context.getSlapState()
if portal_type == "Software Instance" and slap_state == "stop_requested":
return {
"user": "SlapOS Master",
"text": "#nodata is an stopped instance %s" % context.getReference(),
"is_stopped": 1
}
if portal_type == "Software Instance" and slap_state == "destroy_requested":
return {
"user": "SlapOS Master",
"text": "#nodata is an destroyed instance %s" % context.getReference(),
"is_destroyed": 1
}
return context.Base_getNewsDict(context) return context.Base_getNewsDict(context)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment