X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=manifoldapi%2Fstatic%2Fjs%2Fmanifold.js;h=7b2d54c139ee162aea34fb10bea4ef8e65188ab5;hb=26b2d32f6132a3e619f47411adeccfa693b71162;hp=c880831f74ca56b3e07fb0c15dc2821887674f4b;hpb=52a0b9984635eab3576e652a3a55c7bb15f564d6;p=myslice.git diff --git a/manifoldapi/static/js/manifold.js b/manifoldapi/static/js/manifold.js index c880831f..7b2d54c1 100644 --- a/manifoldapi/static/js/manifold.js +++ b/manifoldapi/static/js/manifold.js @@ -141,10 +141,10 @@ var QUERY_STATE_DONE = 2; * RECORD STATES (for query_store) ******************************************************************************/ -var STATE_SET = 0; -var STATE_VALUE = 1; -var STATE_WARNINGS = 2; -var STATE_VISIBLE = 3; +var STATE_SET = 20; +var STATE_VALUE = 21; +var STATE_WARNINGS = 22; +var STATE_VISIBLE = 23; // ACTIONS var STATE_SET_CHANGE = 0; @@ -177,6 +177,10 @@ var CONSTRAINT_RESERVABLE_LEASE = 0; var CONSTRAINT_RESERVABLE_LEASE_MSG = "Configuration required: this resource needs to be scheduled"; +var CONSTRAINT_SLA = 1; + +var CONSTRAINT_SLA_MSG = "SLA acceptance required: testbed offers SLA for its resources" + // A structure for storing queries function QueryExt(query, parent_query_ext, main_query_ext, update_query_ext, disabled, domain_query_ext) { @@ -737,6 +741,12 @@ var manifold = { } else { console.log('Unknown field'); } + // FIX if the record contains a string instead of a key:value + // example: select resource, slice_hrn from slice where slice_hrn=='xxx' + // Result will be {slice_hrn:'xxx', resource:'urn+zzz'} + // We don't have this resource:{urn:'urn+zzz'} + } else if(typeof(record) === 'string'){ + return record; } else { return record[fields]; } @@ -979,7 +989,8 @@ var manifold = { Loop per platform, allows a progressive loading per AM platform Update is run on all platforms at the same time to get a final answer, we don't manage partial answers yet... */ - if((query.object == 'resource' || query.object == 'lease' || query.object == 'slice') && query.action != "update"){ + // Removed slice from the per platform query - it's quick enough... + if((query.object == 'resource' || query.object == 'lease') && query.action != "update"){ var obj = query.object; $.post("/rest/platform/", function( data ) { $.each(data, function(index, p) { @@ -1679,16 +1690,20 @@ case TYPE_LIST_OF_VALUES: query = query_ext.query; + var testbeds_with_sla = localStorage.getItem("sla_testbeds").split(","); + switch(query.object) { case 'resource': + + var warnings = manifold.query_store.get_record_state(query.query_uuid, record_key, STATE_WARNINGS); // CONSTRAINT_RESERVABLE_LEASE // // +) If a reservable node is added to the slice, then it should have a corresponding lease // XXX Not always a resource var is_reservable = (record.exclusive == true); if (is_reservable) { - var warnings = manifold.query_store.get_record_state(query.query_uuid, record_key, STATE_WARNINGS); + // var warnings = manifold.query_store.get_record_state(query.query_uuid, record_key, STATE_WARNINGS); if (event_type == STATE_SET_ADD) { // We should have a lease_query associated @@ -1701,6 +1716,17 @@ case TYPE_LIST_OF_VALUES: // XXX Need for a better function to manage warnings var warn = CONSTRAINT_RESERVABLE_LEASE_MSG; warnings[CONSTRAINT_RESERVABLE_LEASE] = warn; + + /*manifold.query_store.set_record_state(query.query_uuid, record_key, STATE_WARNINGS, warnings); + // Signal the change to plugins (even if the constraint does not apply, so that the plugin can display a checkmark) + data = { + state: STATE_WARNINGS, + key : record_key, + op : null, + value : warnings + } + manifold.raise_record_event(query.query_uuid, FIELD_STATE_CHANGED, data);*/ + } else { // Lease are defined, delete the warning in case it was set previously delete warnings[CONSTRAINT_RESERVABLE_LEASE]; @@ -1709,13 +1735,24 @@ case TYPE_LIST_OF_VALUES: // Remove warnings attached to this resource delete warnings[CONSTRAINT_RESERVABLE_LEASE]; } - - manifold.query_store.set_record_state(query.query_uuid, record_key, STATE_WARNINGS, warnings); } - /* This was redundant */ - // manifold.query_store.recount(query.query_uuid); + var urn_regexp = /\+(.*?)\+/; + var testbed_urn = urn_regexp.exec(record.urn)[1]; + var has_sla = $.inArray(testbed_urn, testbeds_with_sla) != -1; + + if (has_sla) { + // var warnings = manifold.query_store.get_record_state(query.query_uuid, record_key, STATE_WARNINGS); + if (event_type == STATE_SET_ADD) { + var warn = CONSTRAINT_SLA_MSG; + warnings[CONSTRAINT_SLA] = warn; + } else { + delete warnings[CONSTRAINT_SLA]; + } + } + + manifold.query_store.set_record_state(query.query_uuid, record_key, STATE_WARNINGS, warnings); // Signal the change to plugins (even if the constraint does not apply, so that the plugin can display a checkmark) data = { state: STATE_WARNINGS, @@ -1724,6 +1761,46 @@ case TYPE_LIST_OF_VALUES: value : warnings } manifold.raise_record_event(query.query_uuid, FIELD_STATE_CHANGED, data); + + // JGLL: SLA code + /*get_testbeds_with_sla() + .done( function(testbeds) { + var urn_regexp = /\+(.*?)\+/; + var testbed_urn = urn_regexp.exec(record.urn)[1]; + + var warnings = manifold.query_store.get_record_state(query.query_uuid, record_key, STATE_WARNINGS); + + if ($.inArray(testbed_urn, testbeds) != -1) { + // JGLL: Set a warning on resources covered by testbeds offering SLAs + // CONSTRAINT_SLA + + if (event_type == STATE_SET_ADD) { + var warn = CONSTRAINT_SLA_MSG; + warnings[CONSTRAINT_SLA] = warn; + } else { + delete warnings[CONSTRAINT_SLA] + } + } + + manifold.query_store.set_record_state(query.query_uuid, record_key, STATE_WARNINGS, warnings); + + // Signal the change to plugins (even if the constraint does not apply, so that the plugin can display a checkmark) + data = { + state: STATE_WARNINGS, + key : record_key, + op : null, + value : warnings + } + + manifold.raise_record_event(query.query_uuid, FIELD_STATE_CHANGED, data); + }) + .fail( function(err) { + console.log("SLA - Error retrieving testbeds that support SLAs"); + });*/ + + /* This was redundant */ + // manifold.query_store.recount(query.query_uuid); + break; case 'lease': @@ -1731,7 +1808,7 @@ case TYPE_LIST_OF_VALUES: var resource_query = query_ext.parent_query_ext.query.subqueries['resource']; var warnings = manifold.query_store.get_record_state(resource_query.query_uuid, resource_key, STATE_WARNINGS); - if (event_type == STATE_SET_ADD) { + if (event_type == STATE_SET_ADD || event_type == STATE_SET_IN_PENDING) { // A lease is added, it removes the constraint delete warnings[CONSTRAINT_RESERVABLE_LEASE]; } else { @@ -1742,23 +1819,22 @@ case TYPE_LIST_OF_VALUES: // XXX Need for a better function to manage warnings var warn = CONSTRAINT_RESERVABLE_LEASE_MSG; warnings[CONSTRAINT_RESERVABLE_LEASE] = warn; + + // Signal the change to plugins (even if the constraint does not apply, so that the plugin can display a checkmark) + data = { + state: STATE_WARNINGS, + key : resource_key, + op : null, + value : warnings + } + manifold.raise_record_event(resource_query.query_uuid, FIELD_STATE_CHANGED, data); } else { // Lease are defined, delete the warning in case it was set previously delete warnings[CONSTRAINT_RESERVABLE_LEASE]; } - } - + /* Adding a lease can remove a warning and reduce the unconfigured resources */ manifold.query_store.recount(resource_query.query_uuid); - - // Signal the change to plugins (even if the constraint does not apply, so that the plugin can display a checkmark) - data = { - state: STATE_WARNINGS, - key : resource_key, - op : null, - value : warnings - } - manifold.raise_record_event(resource_query.query_uuid, FIELD_STATE_CHANGED, data); break; } @@ -1799,6 +1875,10 @@ case TYPE_LIST_OF_VALUES: query = query_ext.query; switch(event_type) { + case STATUS_REMOVE_WARNING: + record = manifold.query_store.get_record(query_uuid, data.value); + this._enforce_constraints(query_ext, record, data.value, STATE_SET_REMOVE); + break; // XXX At some point, should be renamed to RECORD_STATE_CHANGED case FIELD_STATE_CHANGED: