- var o = 0;
- for (var i = 0, ii = axisy.length; i < ii; i++) {
- for (var j = 0, jj = axisx.length; j < jj; j++) {
- var R = data[o] && Math.min(Math.round(Math.sqrt(data[o] / Math.PI) * 4), max);
- if (R) {
- (function (dx, dy, R, value) {
- var color = "hsb(" + [(1 - R / max) * .5, 1, .75] + ")";
- var dt = r.circle(dx + 60 + R, dy + 10, R).attr({stroke: "none", fill: color});
- if (R < 6) {
- var bg = r.circle(dx + 60 + R, dy + 10, 6).attr({stroke: "none", fill: "#000", opacity: .4}).hide();
- }
- var lbl = r.text(dx + 60 + R, dy + 10, data[o])
- .attr({"font": '10px Fontin-Sans, Arial', stroke: "none", fill: "#fff"}).hide();
- var dot = r.circle(dx + 60 + R, dy + 10, max).attr({stroke: "none", fill: "#000", opacity: 0});
- dot[0].onmouseover = function () {
- if (bg) {
- bg.show();
- } else {
- var clr = Raphael.rgb2hsb(color);
- clr.b = .5;
- dt.attr("fill", Raphael.hsb2rgb(clr).hex);
- }
- lbl.show();
- };
- dot[0].onmouseout = function () {
- if (bg) {
- bg.hide();
- } else {
- dt.attr("fill", color);
- }
- lbl.hide();
- };
- })(leftgutter + X * (j + .5) - 60 - R, Y * (i + .5) - 10, R, data[o]);
- }
- o++;
- }
+ }
+
+ // re-read settings from the html, ajax-aquire the html text for the leases_data table
+ // store it in the html tree, parse it, and refresh graphic
+ this.refresh = function () {
+ this.slice_id=getInnerText($$("span#leases_slice_id")[0]).strip();
+ this.slicename=getInnerText($$("span#leases_slicename")[0]).strip();
+ this.leases_granularity=getInnerText($$("span#leases_granularity")[0]).strip();
+ this.leases_offset=$("leases_offset_input").value.strip();
+ this.leases_slots=$("leases_slots_input").value.strip();
+ this.leases_w=parseInt($("leases_w_input").value.strip());
+
+ document.body.style.cursor = "wait";
+ var ajax=new Ajax.Request('/planetlab/slices/leases-data.php',
+ {method:'post',
+ parameters:{'slice_id':this.slice_id,
+ 'slicename':this.slicename,
+ 'leases_granularity':this.leases_granularity,
+ 'leases_offset':this.leases_offset,
+ 'leases_slots':this.leases_slots,
+ 'leases_w':this.leases_w},
+ onSuccess: function (transport) {
+ var response = transport.responseText || "no response text";
+// window.console.log("received from ajax=[["+response+"]]");
+ var scheduler=Scheduler.scheduler;
+ if ( ! scheduler.set_html (response))
+ alert ("Something wrong .. Could not store ajax result..");
+ else if ( ! scheduler.parse_html())
+ alert ("Error: could not parse ajax result..\nIf your session has expired, you need to log back in");
+ else
+ scheduler.draw_area("leases_area");
+ document.body.style.cursor = "default";
+ },
+ onFailure: function(){
+ document.body.style.cursor = "default";
+ alert("Could not reach server, sorry...\n\n");
+ },
+ });
+
+ }
+
+} // end Scheduler
+
+//////////////////////////////////////// couldn't find how to inhererit from the raphael objects...
+
+//////////////////// the 'all nodes' button
+var allnodes_methods = {
+ click: function (event) {
+ var scheduler=this.scheduler;
+ /* decide what to do */
+ var unselected=0;
+ for (var i=0, len=scheduler.nodelabels.length; i<len; ++i)
+ if (! scheduler.nodelabels[i].selected) unselected++;
+ /* if at least one is not selected : select all */
+ var new_state = (unselected >0) ? 1 : 0;
+ for (var i=0, len=scheduler.nodelabels.length; i<len; ++i)
+ nodelabel_methods.selected(scheduler.nodelabels[i],new_state);
+ }
+}
+
+//////////////////// the buttons for managing the whole timeslot
+var timebutton_methods = {
+
+ /* clicking */
+ click: function (event) {
+ var scheduler = this.scheduler;
+ var from_time = this.from_time;
+ var until_time = from_time + scheduler.granularity;
+ /* scan leases on selected nodes, store in two arrays */
+ var relevant_free=[], relevant_mine=[];
+ for (var i=0,len=scheduler.leases.length; i<len; ++i) {
+ var scan=scheduler.leases[i];
+ if ( ! scan.nodelabel.selected) continue;
+ // overlap ?
+ if (scan.from_time<=from_time && scan.until_time>=until_time) {
+ if (scan.current == "free") relevant_free.push(scan);
+ else if (scan.current == "mine") relevant_mine.push(scan);
+ }
+ }
+// window.console.log("Found " + relevant_free.length + " free and " + relevant_mine.length + " mine");
+ /* decide what to do, whether book or release */
+ if (relevant_mine.length==0 && relevant_free.length==0) {
+ alert ("Nothing to do in this timeslot on the selected nodes");
+ return;
+ }
+ // if at least one is free, let's book
+ if (relevant_free.length > 0) {
+ for (var i=0, len=relevant_free.length; i<len; ++i) {
+ var lease=relevant_free[i];
+ lease_methods.init_mine(lease,lease_methods.click_free);
+ }
+ // otherwise we unselect
+ } else {
+ for (var i=0, len=relevant_mine.length; i<len; ++i) {
+ var lease=relevant_mine[i];
+ lease_methods.init_free(lease,lease_methods.click_mine);
+ }