Commit 9eec72c7 authored by Alain Takoudjou's avatar Alain Takoudjou

slapos_jio: monitor status link will now add opml and redirect to status view

- Monitor link on SlapOS interface will add OPML. New opml will be synced immediately then redirect to status view.
- Instances with subscription request can also request Slave Instances for frontends and others on shared computers.

/reviewed-on nexedi/slapos.core!61
parents ef0849c6 04787147
import random import random
from Products.ZSQLCatalog.SQLCatalog import SimpleQuery, ComplexQuery, NegatedQuery from Products.ZSQLCatalog.SQLCatalog import SimpleQuery, ComplexQuery
person = context person = context
portal = context.getPortalObject() portal = context.getPortalObject()
...@@ -88,7 +88,7 @@ for base_category in computer_base_category_list: ...@@ -88,7 +88,7 @@ for base_category in computer_base_category_list:
query_kw["%s_uid" % base_category] = category.getUid() query_kw["%s_uid" % base_category] = category.getUid()
query_kw["capacity_scope_uid"] = portal.portal_categories.capacity_scope.open.getUid() query_kw["capacity_scope_uid"] = portal.portal_categories.capacity_scope.open.getUid()
if subscription_reference is not None: if subscription_reference is not None and software_instance_portal_type != "Slave Instance":
# Subscriptions uses a specific set of allocation scope # Subscriptions uses a specific set of allocation scope
query_kw["allocation_scope_uid"] = portal.portal_categories.allocation_scope.open.subscription.getUid() query_kw["allocation_scope_uid"] = portal.portal_categories.allocation_scope.open.subscription.getUid()
else: else:
......
...@@ -230,7 +230,7 @@ ...@@ -230,7 +230,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>971.11856.29335.23364</string> </value> <value> <string>971.49094.61098.53060</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>1540470762.22</float> <float>1542710985.33</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -44,19 +44,57 @@ ...@@ -44,19 +44,57 @@
return partition_class; return partition_class;
} }
function getDoc(gadget) {
if (gadget.options.doc && gadget.options.doc !== undefined) {
return gadget.options.doc;
}
return gadget.jio_get(gadget.options.value.jio_key);
}
function getMonitorParameterDict(gadget, doc) {
if (doc.portal_type === "Hosting Subscription") {
return gadget.jio_getAttachment(gadget.options.value.jio_key,
gadget.props.hateoas_url + gadget.options.value.jio_key +
"/HostingSubscription_getMonitorParameterDict");
}
}
function getStatus(gadget) { function getStatus(gadget) {
var result;
return new RSVP.Queue() return new RSVP.Queue()
.push(function () { .push(function () {
return gadget.jio_get(gadget.options.value.jio_key); return getDoc(gadget);
}) })
.push(function (result) { .push(function (jio_doc) {
result = jio_doc;
if (gadget.state.monitor_dict === undefined ||
!gadget.state.has_monitor_info) {
return getMonitorParameterDict(gadget, jio_doc)
.push(function (param_dict) {
return gadget.changeState({
monitor_dict: param_dict,
has_monitor_info: true
});
});
}
})
.push(function () {
var monitor_url, var monitor_url,
status_class = 'ui-btn-no-data', status_class = 'ui-btn-no-data',
status_title = 'Instances', status_title = 'Instances',
status_style = ""; status_style = "";
status_class = checkHostingSubscriptionStatus(result); status_class = checkHostingSubscriptionStatus(result);
if (gadget.state.monitor_dict.url &&
gadget.state.monitor_dict.username &&
gadget.state.monitor_dict.password) {
monitor_url = "https://monitor.app.officejs.com/#page=settings_configurator&url=" +
gadget.state.monitor_dict.url + "&username=" +
gadget.state.monitor_dict.username + "&password=" +
gadget.state.monitor_dict.password;
} else {
monitor_url = 'https://monitor.app.officejs.com/#/?page=ojsm_dispatch&query=portal_type%3A%22Hosting%20Subscription%22%20AND%20title%3A' + result.title; monitor_url = 'https://monitor.app.officejs.com/#/?page=ojsm_dispatch&query=portal_type%3A%22Hosting%20Subscription%22%20AND%20title%3A' + result.title;
}
if (status_class === 'ui-btn-no-data') { if (status_class === 'ui-btn-no-data') {
status_style = "color: transparent !important;"; status_style = "color: transparent !important;";
...@@ -73,6 +111,9 @@ ...@@ -73,6 +111,9 @@
} }
gadget_klass gadget_klass
.setState({
has_monitor_info: false
})
.ready(function (gadget) { .ready(function (gadget) {
gadget.props = {}; gadget.props = {};
return gadget.getSetting("hateoas_url") return gadget.getSetting("hateoas_url")
...@@ -82,6 +123,7 @@ ...@@ -82,6 +123,7 @@
}) })
.declareAcquiredMethod("jio_get", "jio_get") .declareAcquiredMethod("jio_get", "jio_get")
.declareAcquiredMethod("getSetting", "getSetting") .declareAcquiredMethod("getSetting", "getSetting")
.declareAcquiredMethod("jio_getAttachment", "jio_getAttachment")
.declareAcquiredMethod("translateHtml", "translateHtml") .declareAcquiredMethod("translateHtml", "translateHtml")
.declareMethod("getContent", function () { .declareMethod("getContent", function () {
......
...@@ -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.33068.10194.31522</string> </value> <value> <string>971.49164.31619.41506</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>1530119779.91</float> <float>1542713467.3</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
import json
def getCredentialFromUrl(url_string):
username = password = url = ''
param_list = url_string.split('#')
if len(param_list) == 2:
param_list = param_list[1].split('&')
for param in param_list:
key, value = param.split('=')
if key == 'url':
url = value
elif key == 'username':
username = value
elif key == 'password':
password = value
return (url, username, password,)
hosting_subscription = context
if hosting_subscription.getSlapState() == 'destroy_requested':
return json.dumps({})
instance = hosting_subscription.getPredecessorValue()
if instance is None or instance.getSlapState() == 'destroy_requested':
return json.dumps({})
parameter_dict = instance.getConnectionXmlAsDict()
url_string = parameter_dict.get('monitor-setup-url', '')
if url_string:
if parameter_dict.has_key('monitor-user') and \
parameter_dict.has_key('monitor-password') and \
parameter_dict.has_key('monitor-base-url'):
username = parameter_dict.get('monitor-user')
password = parameter_dict.get('monitor-password')
url = parameter_dict.get('monitor-base-url') + '/public/feeds'
else:
url, username, password = getCredentialFromUrl(url_string)
else:
return json.dumps({})
return json.dumps({
'username': username,
'password': password,
'url': url
})
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>HostingSubscription_getMonitorParameterDict</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
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