WIP: Install wizard error handling

This commit is contained in:
bfederle 2011-12-20 10:30:15 -08:00
parent ca2ad90207
commit 056b1c8947
4 changed files with 131 additions and 57 deletions

View File

@ -218,7 +218,9 @@
action: function(args) {
var complete = args.response.success;
var error = args.response.error;
var message = args.response.message;
var startFn = args.startFn;
var createZone = function(args) {
message('Creating zone');
@ -245,6 +247,7 @@
message('Creating cluster');
setTimeout(function() {
createHost();
//error('addCluster', 'Could not create cluster.', createPod);
}, 500);
};
@ -274,7 +277,11 @@
setTimeout(complete, 5000);
};
createZone();
if (startFn) {
startFn();
} else {
createZone();
}
}
};
}(jQuery, cloudStack, testData));

View File

@ -230,8 +230,10 @@
action: function(args) {
var complete = args.response.success;
var error = args.response.error;
var message = args.response.message;
var data = args.data;
var startFn = args.startFn;
var createZone = function(args) {
message('Creating zone');
@ -388,10 +390,7 @@
args.complete({ data: { zone: zoneObj } });
}
},
error: function(XMLHttpResponse) {
var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
alert("updateNetworkServiceProvider failed. Error: " + errorMsg);
}
error: args.error
});
});
}
@ -402,13 +401,12 @@
}
}
},
error: function(XMLHttpResponse) {
var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
alert("configureVirtualRouterElement failed. Error: " + errorMsg);
}
error: args.error
});
});
}
},
error: args.error
});
}
else if (result.jobstatus == 2) {
@ -416,24 +414,21 @@
}
}
},
error: function(XMLHttpResponse) {
var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
alert("updatePhysicalNetwork failed. Error: " + errorMsg);
}
error: args.error
});
});
}
});
//NaaS (end)
},
error: function(XMLHttpResponse) {
var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
args.response.error(errorMsg);
}
error: args.error
});
};
addZoneAction({ data: data.zone, complete: createPod });
addZoneAction({ data: data.zone, complete: createPod, error: function(json) {
debugger;
error('addZone', parseXMLHttpResponse(json), createZone);
} });
};
var createPod = function(args) {
@ -458,7 +453,7 @@
},
error: function(XMLHttpResponse) {
var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
args.response.error(errorMsg);
error(errorMsg);
}
});
};
@ -571,17 +566,19 @@
success: function(json) {
//var item = json.createvlaniprangeresponse.vlan;
},
error: function(XMLHttpResponse) {
//var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
//args.response.error(errorMsg);
error: function(json) {
error('addNetwork', parseXMLHttpResponse(json), function() {
createNetwork(args);
});
}
});
}
},
error: function(XMLHttpResponse) {
var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
args.response.error(errorMsg);
error: function(json) {
error('addNetwork', parseXMLHttpResponse(json), function() {
createNetwork(args);
});
}
});
};
@ -602,6 +599,11 @@
response: {
success: function(successArgs) {
createCluster({ data: $.extend(args.data, { guestNetwork: successArgs.data })});
},
error: function(json) {
error('addNetwork', parseXMLHttpResponse(json), function() {
createNetwork(args);
});
}
},
data: {
@ -615,7 +617,7 @@
networkOfferingId: networkOfferingID
}
});
}
}
});
};
@ -638,6 +640,11 @@
cluster: data.addclusterresponse.cluster[0]
})
});
},
error: function(json) {
error('addCluster', parseXMLHttpResponse(json), function() {
createCluster(args);
});
}
});
};
@ -664,6 +671,11 @@
host: data.addhostresponse.host[0]
})
});
},
error: function(json) {
error('addHost', parseXMLHttpResponse(json), function() {
createHost(args);
});
}
});
};
@ -734,7 +746,11 @@
}, 5000);
};
createZone();
if (startFn) {
startFn();
} else {
createZone();
}
}
};
}(jQuery, cloudStack, testData));

View File

@ -86,8 +86,8 @@
name: { label: 'Name' },
zonename: { label: 'Zone' },
type: { label: 'Type' },
traffictype: { label: 'Traffic Type' },
gateway: { label: 'Gateway' },
vlan: { label: 'VLAN' },
cidr: { label: 'CIDR' },
state: { label: 'State', indicator: { 'Implemented': 'on', 'Setup': 'on' } }
},
dataProvider: function(args) {

View File

@ -5,6 +5,9 @@
var $container = args.$container;
var state = {}; // Hold wizard form state
var launchStart; // Holds last launch callback, in case of error
var $launchState;
/**
* Successful installation action
*/
@ -36,8 +39,10 @@
* @param stateStepID ID to group state elements in (i.e., zone, pod, cluster, ...)
* @param $elem (optional) Element containing <form>, to serialize for state
*/
var goTo = cloudStack._goto = function(stepID, stateID, $elem) {
var $nextStep = steps[stepID]();
var goTo = cloudStack._goto = function(stepID, stateID, $elem, options) {
if (!options) options = {};
var $nextStep = steps[stepID]({ nextStep: options.nextStep });
var $body = $installWizard.find('.body');
if (stateID && $elem) {
@ -83,7 +88,7 @@
$prev.click(function() {
goTo(prevStepID);
});
return function(args) {
showDiagram(diagram);
@ -95,7 +100,7 @@
);
};
},
/**
* A standard form-based wizard step template
* -- relies on createForm for form generation
@ -134,7 +139,7 @@
$form.find('.form-item').addClass('field');
$prev.appendTo($form.find('form'));
$save.appendTo($form.find('form'));
// Submit handler
$form.find('form').submit(function() {
form.completeAction($form);
@ -153,8 +158,19 @@
$container.append($form.prepend($title));
showTooltip($form, tooltipID);
return function(args) {
var overrideGotoEvent = function(event) {
goTo(args.nextStep);
return false;
};
if (args && args.nextStep) {
$save.unbind('click');
$save.click(overrideGotoEvent);
}
// Setup diagram, tooltips
showDiagram(diagram);
setTimeout(function() {
@ -350,7 +366,7 @@
nextStepID: 'addZone',
diagram: '.part.zone'
}),
/**
* Add zone form
*/
@ -622,31 +638,66 @@
launch: function(args) {
var $intro = $('<div></div>').addClass('intro');
var $title = $('<div></div>').addClass('title')
.html('Now building your cloud...');
var $subtitle = $('<div></div>').addClass('subtitle')
.html('');
.html('Now building your cloud...').appendTo($intro);
var $subtitle = $('<div></div>').addClass('subtitle').html('').appendTo($intro);
cloudStack.installWizard.action({
data: state,
response: {
message: function(msg) {
var $li = $('<li>').html(msg);
$subtitle.append($li);
$li.siblings().addClass('complete');
},
success: function() {
goTo('complete');
}
var doAction = function() {
if (launchStart) {
$('.subtitle').children().remove();
}
});
cloudStack.installWizard.action({
data: state,
startFn: launchStart,
response: {
message: function(msg) {
var $li = $('<li>').html(msg);
if (launchStart) {
$li.appendTo('.subtitle');
$li.parent().find('li')
.filter(function() {
return this != $li.get(0);
}).addClass('complete');
} else {
$subtitle.append($li);
$li.siblings().addClass('complete');
}
},
success: function() {
goTo('complete');
},
error: function(stepID, message, callback) {
if (launchStart) {
$subtitle = $('.subtitle');
$subtitle.children().remove();
$('li').children().remove();
}
launchStart = callback;
$subtitle.find('li:last').addClass('error');
$subtitle.append(
$('<p>').html(
'Something went wrong; you may go back and correct any errors.'
),
$('<div>').addClass('button').append(
$('<span>').html('Go back')
).click(function() {
goTo(stepID, null, null, {
nextStep: 'launch'
});
})
);
}
}
});
};
doAction();
showDiagram('.part.loading');
return $intro.append(
$title, $subtitle
);
return $intro;
},
complete: function(args) {