web/js/serverprofiles.js (620 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var profilesstoredata = { identifier: 'id', label: 'name', items: [] } var allprofiles = ''; var allgroups = ''; function generalReqCB(data, ioArgs) { eval(data); document.body.style.cursor = 'default'; } function selectProfileChanged() { if(dijit.byId('profileid').get('value') == 70000) return; dojo.addClass('serverprofiledata', 'hidden'); dijit.byId('fetchProfilesBtn').set('disabled', false); dijit.byId('delProfilesBtn').set('disabled', false); if(dijit.byId('profileid').getOptions(0) && dijit.byId('profileid').getOptions(0).value == 70000) dijit.byId('profileid').setStore(profilesstore, '', {query: {id:new RegExp("^(?:(?!70000).)*$"),access:'admin'}}); } function newServerProfile(cont) { dijit.byId('profileid').setStore(profilesstore, '', {query: {id: '*',access:'admin'}}); dijit.byId('profileid').set('value', '70000'); clearProfileItems(); dijit.byId('fetchProfilesBtn').set('disabled', true); dijit.byId('delProfilesBtn').set('disabled', true); dojo.removeClass('serverprofiledata', 'hidden'); } function clearProfileItems() { dijit.byId('profilename').set('value', ''); dijit.byId('profiledesc').set('value', ''); dijit.byId('profileimage').reset(); dijit.byId('profilefixedIP').set('value', ''); //dijit.byId('profilefixedMAC').set('value', ''); if(dijit.byId('profileadmingroup')) dijit.byId('profileadmingroup').reset(); else dojo.byId('profileadmingroup').value = 0; if(dijit.byId('profilelogingroup')) dijit.byId('profilelogingroup').reset(); else dojo.byId('profilelogingroup').value = 0; dijit.byId('profilemonitored').reset(); } function saveServerProfile(cont) { if((dijit.byId('profileimage') && ! dijit.byId('profileimage').isValid()) || (dijit.byId('profileadmingroup') && ! dijit.byId('profileadmingroup').isValid()) || (dijit.byId('profilelogingroup') && ! dijit.byId('profilelogingroup').isValid()) || ! dijit.byId('profilefixedIP').isValid() /*|| ! dijit.byId('profilefixedMAC').isValid()*/) { alert('Please correct the fields with invalid input'); return; } dijit.byId('saveProfilesBtn').set('label', 'Working...'); dijit.byId('saveProfilesBtn').set('disabled', true); if(dijit.byId('profileimage')) var imageid = dijit.byId('profileimage').get('value'); else var imageid = dojo.byId('profileimage').value; if(dijit.byId('profileadmingroup')) var admingroupid = dijit.byId('profileadmingroup').get('value'); else var admingroupid = dojo.byId('profileadmingroup').value; if(dijit.byId('profilelogingroup')) var logingroupid = dijit.byId('profilelogingroup').get('value'); else var logingroupid = dojo.byId('profilelogingroup').value; var data = {continuation: cont, id: dijit.byId('profileid').get('value'), name: dijit.byId('profilename').get('value'), desc: dijit.byId('profiledesc').get('value'), imageid: imageid, //fixedMAC: dijit.byId('profilefixedMAC').get('value'), admingroupid: admingroupid, logingroupid: logingroupid, monitored: dijit.byId('profilemonitored').get('value'), fixedIP: dijit.byId('profilefixedIP').get('value'), netmask: dijit.byId('profilenetmask').get('value'), router: dijit.byId('profilerouter').get('value'), dns: dijit.byId('profiledns').get('value')}; RPCwrapper(data, saveServerProfileCB, 1); } function saveServerProfileCB(data, ioArgs) { dijit.byId('saveProfilesBtn').set('label', 'Save Profile'); dijit.byId('saveProfilesBtn').set('disabled', false); if(data.items.error) { alert(data.items.msg); return; } var selobj = dijit.byId('profileid'); selobj.setStore(profilesstore, '', {query: {id:new RegExp("^(?:(?!70000).)*$"),access:'admin'}}); if(data.items.newprofile == 1) { dojo.removeClass('serverprofiledata', 'hidden'); if(allprofiles.length == 0) dojo.removeClass('profileslist', 'hidden'); profilesstore.newItem({id: data.items.id, name: data.items.name, access: data.items.access, desc: data.items.desc}); selobj.set('value', data.items.id); getProfiles(); } else { if(dijit.byId('deployprofileid').get('value') == data.items.id) { var desc = data.items.desc; if(data.items.desc == '') { desc = '(No description)'; } dojo.byId('deploydesc').innerHTML = desc; } var items = profilesstore.fetch({ query: {id: data.items.id}, newname: data.items.name, newdesc: data.items.desc, onItem: function(item, request) { profilesstore.setValue(item, 'desc', request.newdesc); if(profilesstore.getValue(item, 'name') != request.newname) { profilesstore.setValue(item, 'name', request.newname); getProfiles(); } } }); } dojo.removeClass('savestatus', 'hidden'); dijit.byId('fetchProfilesBtn').set('disabled', false); dijit.byId('delProfilesBtn').set('disabled', false); setTimeout(clearSaveStatus, 10000); } function getServerProfileDataManageCB(data, ioArgs) { document.body.style.cursor = 'default'; dijit.byId('fetchProfilesBtn').set('label', 'Configure Profile'); dijit.byId('fetchProfilesBtn').set('disabled', false); if(data.items.error) { alert('You do not have access to modify this server profile.'); return; } clearProfileItems(); dijit.byId('profilename').set('value', data.items.name); dijit.byId('profiledesc').set('value', data.items.description); dijit.byId('profileimage').set('value', data.items.imageid); //dijit.byId('profilefixedMAC').set('value', data.items.fixedMAC); if(dijit.byId('profileadmingroup')) dijit.byId('profileadmingroup').set('value', data.items.admingroupid); else dojo.byId('profileadmingroup').value = data.items.admingroupid; if(dijit.byId('profilelogingroup')) dijit.byId('profilelogingroup').set('value', data.items.logingroupid); else dojo.byId('profilelogingroup').value = data.items.logingroupid; dijit.byId('profilemonitored').set('value', parseInt(data.items.monitored)); dijit.byId('profilefixedIP').set('value', data.items.fixedIP); if(dijit.byId('profilefixedIP').isValid() && dijit.byId('profilefixedIP') != '') { dijit.byId('profilenetmask').set('value', data.items.netmask); dijit.byId('profilerouter').set('value', data.items.router); dijit.byId('profiledns').set('value', data.items.dns); dijit.byId('profilenetmask').set('disabled', false); dijit.byId('profilerouter').set('disabled', false); dijit.byId('profiledns').set('disabled', false); } else { dijit.byId('profilenetmask').set('value', ''); dijit.byId('profilerouter').set('value', ''); dijit.byId('profiledns').set('value', ''); dijit.byId('profilenetmask').set('disabled', true); dijit.byId('profilerouter').set('disabled', true); dijit.byId('profiledns').set('disabled', true); } dojo.removeClass('serverprofiledata', 'hidden'); } function confirmDelServerProfile(cont) { dojo.byId('delcont').value = cont; dijit.byId('confirmDeleteProfile').show(); } function delServerProfile() { if(allprofiles.length == 1) dojo.addClass('profileslist', 'hidden'); dijit.byId('confirmDeleteProfile').hide(); var data = {continuation: dojo.byId('delcont').value, id: dijit.byId('profileid').get('value')}; RPCwrapper(data, delServerProfileCB, 1); } function delServerProfileCB(data, ioArgs) { if(data.items.error) { alert(data.items.msg); return; } clearProfileItems(); dojo.addClass('serverprofiledata', 'hidden'); profilesstore.fetch({ query: {id: data.items.id}, onItem: function(item, request) { profilesstore.deleteItem(item); dijit.byId('deployprofileid').removeOption({value: item.id[0]}); dijit.byId('profileid').removeOption({value: item.id[0]}); dijit.byId('profiles').removeOption({value: item.id[0]}); } }); getProfiles(); } function clearSaveStatus() { dojo.addClass('savestatus', 'hidden'); } function getGroups() { document.body.style.cursor = 'wait'; var selobj = dojo.byId('ingroups'); for(var i = selobj.options.length - 1; i >= 0; i--) { selobj.remove(i); } selobj = dojo.byId('outgroups'); for(i = selobj.options.length - 1; i >= 0; i--) { selobj.remove(i); } var profileid = dijit.byId('profiles').get('value'); if(profileid == '') { document.body.style.cursor = 'default'; return; } profilesstore.fetch({ query: {id: profileid}, onItem: function(item, request) { dojo.byId('inprofilename').innerHTML = item.name; dojo.byId('outprofilename').innerHTML = item.name; } }); var data = {continuation: dojo.byId('grpcont').value, profileid: profileid}; RPCwrapper(data, getGroupsCB, 1); } function getGroupsCB(data, ioArgs) { var obj = dojo.byId('ingroups'); for(var i = 0; i < data.items.ingroups.length; i++) { obj.options[obj.options.length] = new Option(data.items.ingroups[i].name, data.items.ingroups[i].id); } obj = dojo.byId('outgroups'); for(var i = 0; i < data.items.outgroups.length; i++) { obj.options[obj.options.length] = new Option(data.items.outgroups[i].name, data.items.outgroups[i].id); } allgroups = data.items.all; dojo.removeClass('groupsdiv', 'hidden'); document.body.style.cursor = 'default'; } function getProfiles() { var selobj = dojo.byId('inprofiles'); if(! selobj) return; document.body.style.cursor = 'wait'; for(var i = selobj.options.length - 1; i >= 0; i--) { selobj.remove(i); } selobj = dojo.byId('outprofiles'); for(i = selobj.options.length - 1; i >= 0; i--) { selobj.remove(i); } var obj = dijit.byId('profileGroups'); if(! obj) return; if(obj.options.length) { var groupname = obj.getOptions(dijit.byId('profileGroups').get('value')).label; dojo.byId('ingroupname').innerHTML = groupname; dojo.byId('outgroupname').innerHTML = groupname; } var data = {continuation: dojo.byId('profilecont').value, groupid: dijit.byId('profileGroups').get('value')}; RPCwrapper(data, getProfilesCB, 1); } function getProfilesCB(data, ioArgs) { var obj = document.getElementById('inprofiles'); for(var i = 0; i < data.items.inprofiles.length; i++) { obj.options[obj.options.length] = new Option(data.items.inprofiles[i].name, data.items.inprofiles[i].id); } obj = document.getElementById('outprofiles'); for(var i = 0; i < data.items.outprofiles.length; i++) { obj.options[obj.options.length] = new Option(data.items.outprofiles[i].name, data.items.outprofiles[i].id); } allprofiles = data.items.all; if(allprofiles.length == 0) { dojo.addClass('profileslist', 'hidden'); dojo.addClass('groupprofilesspan', 'hidden'); dojo.removeClass('noprofilegroupsspan', 'hidden'); } else { dojo.removeClass('profileslist', 'hidden'); if(dijit.byId('profileGroups').options.length) { dojo.removeClass('groupprofilesspan', 'hidden'); dojo.addClass('noprofilegroupsspan', 'hidden'); } } dojo.removeClass('profilesdiv', 'hidden'); document.body.style.cursor = 'default'; } function addRemItem(cont, objid1, objid2, cb) { var id = dijit.byId(objid1).get('value'); var obj = dojo.byId(objid2); var listids = ""; for(var i = obj.options.length - 1; i >= 0; i--) { if(obj.options[i].selected) { listids = listids + ',' + obj.options[i].value; obj.remove(i); } } if(listids == "") return; document.body.style.cursor = 'wait'; var data = {continuation: cont, listids: listids, id: id}; RPCwrapper(data, cb, 1); } function addRemGroupCB(data, ioArgs) { /* for each profileid sent back we search through allprofiles until we find it keeping track of the previous item with inout == 1 we set allprofiles[profileid].inout to 1 we find the previous item in the select.options array we insert a new option right after that one */ var byprofileselid = dijit.byId('profiles').get('value'); var reloadbyprofile = 0; var profiles = data.items.profiles; var addrem = data.items.addrem; // 1 for add, 0 for rem if(addrem == 0 && data.items.removedaccess == 1) { var searchids = data.items.remprofileids.join('|'); var regex = new RegExp("(" + searchids + ")"); for(var i = profiles.length; i >= 0; i--) { if(regex.test(allprofiles[i].id)) { allprofiles.splice(i, 1); } } profilesstore.fetch({ query: {id: regex}, onItem: function(item, request) { profilesstore.deleteItem(item); dijit.byId('profileid').removeOption({value: item.id[0]}); dijit.byId('profiles').removeOption({value: item.id[0]}); } }); } if(addrem) var obj = document.getElementById('inprofiles'); else var obj = document.getElementById('outprofiles'); for(var i = 0; i < profiles.length; i++) { if(profiles[i] == byprofileselid ) reloadbyprofile = 1; var lastid = -1; for(var j = 0; j < allprofiles.length; j++) { if(allprofiles[j].id == profiles[i]) { if(addrem == 1) allprofiles[j].inout = 1; else allprofiles[j].inout = 0; if(lastid < 0) { var before = obj.options[0]; var newoption = new Option(allprofiles[j].name, allprofiles[j].id); try { obj.add(newoption, before); } catch(ex) { obj.add(newoption, 0); } break; } else { for(var k = 0; k < obj.options.length; k++) { if(obj.options[k].value == lastid) { var before = obj.options[k + 1]; var newoption = new Option(allprofiles[j].name, allprofiles[j].id); if(before) try { obj.add(newoption, before); } catch(ex) { obj.add(newoption, k + 1); } else obj.options[obj.options.length] = newoption; break; } } } break; } if(allprofiles[j].inout == addrem) lastid = allprofiles[j].id; } } document.body.style.cursor = 'default'; if(reloadbyprofile) getGroups(); } function addRemProfileCB(data, ioArgs) { var bygroupselid = dijit.byId('profileGroups').get('value'); var reloadbygroup = 0; var groups = data.items.groups; var addrem = data.items.addrem; // 1 for add, 0 for rem if(addrem) var obj = dojo.byId('ingroups'); else var obj = dojo.byId('outgroups'); for(var i = 0; i < groups.length; i++) { if(groups[i] == bygroupselid ) reloadbygroup = 1; var lastid = -1; for(var j = 0; j < allgroups.length; j++) { if(allgroups[j].id == groups[i]) { if(addrem == 1) allgroups[j].inout = 1; else allgroups[j].inout = 0; if(lastid < 0) { var before = obj.options[0]; var newoption = new Option(allgroups[j].name, allgroups[j].id); try { obj.add(newoption, before); } catch(ex) { obj.add(newoption, 0); } break; } else { for(var k = 0; k < obj.options.length; k++) { if(obj.options[k].value == lastid) { var before = obj.options[k + 1]; var newoption = new Option(allgroups[j].name, allgroups[j].id); if(before) try { obj.add(newoption, before); } catch(ex) { obj.add(newoption, k + 1); } else obj.options[obj.options.length] = newoption; break; } } } break; } if(allgroups[j].inout == addrem) { lastid = allgroups[j].id; } } } if(addrem == 0 && data.items.removedaccess == 1) { profilesstore.fetch({ query: {id: data.items.profileid}, onItem: function(item, request) { profilesstore.deleteItem(item); dijit.byId('profileid').removeOption({value: item.id[0]}); dijit.byId('profiles').removeOption({value: item.id[0]}); dojo.addClass('groupsdiv', 'hidden'); getProfiles(); } }); } document.body.style.cursor = 'default'; if(reloadbygroup) getProfiles(); } function submitDeploy() { var cont = dojo.byId('deploycont').value; if((dijit.byId('deployimage') && ! dijit.byId('deployimage').isValid()) || (dijit.byId('deployadmingroup') && ! dijit.byId('deployadmingroup').isValid()) || (dijit.byId('deploylogingroup') && ! dijit.byId('deploylogingroup').isValid())) { alert('Please correct the fields with invalid input'); return; } if(dojo.byId('startlater').checked && (! dijit.byId('deploystarttime').isValid() || ! dijit.byId('deploystartdate').isValid())) { dijit.byId('deploystarttime')._hasBeenBlurred = true; dijit.byId('deploystarttime').validate(); dijit.byId('deploystartdate')._hasBeenBlurred = true; dijit.byId('deploystartdate').validate(); alert('Please correct the fields with invalid input'); return; } if(dojo.byId('endat').checked && (! dijit.byId('deployendtime').isValid() || ! dijit.byId('deployenddate').isValid())) { dijit.byId('deployendtime')._hasBeenBlurred = true; dijit.byId('deployendtime').validate(); dijit.byId('deployenddate')._hasBeenBlurred = true; dijit.byId('deployenddate').validate(); alert('Please correct the fields with invalid input'); return; } if(dojo.byId('startlater').checked) { var today = new Date(); today.setMilliseconds(0); var testday = dijit.byId('deploystartdate').get('value'); var tmp = dijit.byId('deploystarttime').get('value'); testday.setHours(tmp.getHours()); testday.setMinutes(tmp.getMinutes()); testday.setSeconds(tmp.getSeconds()); testday.setMilliseconds(tmp.getMilliseconds()); if(testday < today) { alert('The starting time and date must be in the future.'); return; } } if(dojo.byId('endat').checked) { if(dojo.byId('startlater').checked) { var teststart = dijit.byId('deploystartdate').get('value'); var tmp = dijit.byId('deploystarttime').get('value'); teststart.setHours(tmp.getHours()); teststart.setMinutes(tmp.getMinutes()); teststart.setSeconds(tmp.getSeconds()); teststart.setMilliseconds(tmp.getMilliseconds()); } else { var teststart = new Date(); teststart.setMilliseconds(0); } var testend = dijit.byId('deployenddate').get('value'); var tmp = dijit.byId('deployendtime').get('value'); testend.setHours(tmp.getHours()); testend.setMinutes(tmp.getMinutes()); testend.setSeconds(tmp.getSeconds()); testend.setMilliseconds(tmp.getMilliseconds()); if(testend <= teststart) { alert('The ending time and date must be later than the starting time and date.'); return; } } if(dijit.byId('deploybtn').get('label') == 'View Available Times') { dijit.byId('suggestDlgBtn').set('disabled', true); showSuggestedTimes(); return; } var data = {continuation: cont, profileid: dojo.byId('appliedprofileid').value}; data.name = dijit.byId('deployname').get('value'); if(dijit.byId('deployimage')) data.imageid = dijit.byId('deployimage').get('value'); else data.imageid = dojo.byId('deployimage').value; if(dijit.byId('deployadmingroup')) data.admingroupid = dijit.byId('deployadmingroup').get('value'); else data.admingroupid = dojo.byId('deployadmingroup').value; if(dijit.byId('deploylogingroup')) data.logingroupid = dijit.byId('deploylogingroup').get('value'); else data.logingroupid = dojo.byId('deploylogingroup').value; data.ipaddr = dijit.byId('deployfixedIP').get('value'); if(data.ipaddr != '') { data.netmask = dijit.byId('deploynetmask').get('value'); data.router = dijit.byId('deployrouter').get('value'); data.dns = dijit.byId('deploydns').get('value'); } else { data.netmask = ''; data.router = ''; data.dns = ''; } //data.macaddr = dijit.byId('deployfixedMAC').get('value'); /*if(dijit.byId('deploymonitored').get('value') == 'on') data.monitored = 1; else data.monitored = 0;*/ if(dojo.byId('startnow').checked) { data.startmode = 0; } if(dojo.byId('startlater').checked) { data.startmode = 1; var time = dijit.byId('deploystarttime').get('value'); var date = dijit.byId('deploystartdate').get('value'); data.start = dojox.string.sprintf('%d%02d%02d%02d%02d', date.getFullYear(), date.getMonth() + 1, date.getDate(), time.getHours(), time.getMinutes()); } if(dojo.byId('endindef').checked) { data.endmode = 0; } if(dojo.byId('endat').checked) { data.endmode = 1; var time = dijit.byId('deployendtime').get('value'); var date = dijit.byId('deployenddate').get('value'); data.end = dojox.string.sprintf('%d%02d%02d%02d%02d', date.getFullYear(), date.getMonth() + 1, date.getDate(), time.getHours(), time.getMinutes()); } dijit.byId('deploybtn').set('label', 'Working...'); dijit.byId('deploybtn').set('disabled', true); RPCwrapper(data, submitDeployCB, 1); } function submitDeployCB(data, ioArgs) { if(data.items.error) { dojo.byId('deployerr').innerHTML = data.items.msg; dojo.removeClass('deployerr', 'hidden'); dojo.byId('deploycont').value = data.items.cont; dijit.byId('deploybtn').set('disabled', false); if(data.items.error == 2) { dijit.byId('deploybtn').set('label', 'View Available Times'); dojo.byId('suggestcont').value = data.items.sugcont; } else dijit.byId('deploybtn').set('label', 'Deploy Server'); return; } if(data.items.success) { window.location.href = data.items.redirecturl; } } function useSuggestedDeploySlot() { var slot = suggestTimeData[dojo.byId('selectedslot').value]; dojo.byId('startlater').checked = true; var tmp = parseInt(slot['startts'] + '000'); var s = new Date(tmp); var e = new Date(tmp + parseInt(slot['duration'] + '000')); dijit.byId('deploystartdate').set('value', s); dijit.byId('deploystarttime').set('value', s); var testend = new Date(2038, 0, 1, 0, 0, 0, 0); if(e >= testend) { dojo.byId('endindef').checked = true; } else { dojo.byId('endat').checked = true; dijit.byId('deployenddate').set('value', e); dijit.byId('deployendtime').set('value', e); } //dojo.byId('waittime').className = 'hidden'; dijit.byId('suggestedTimes').hide(); dijit.byId('deploybtn').set('label', 'Shake &amp; Bake Server'); dojo.addClass('deployerr', 'hidden'); //updateWaitTime(0); }