blob: 520eebecdaede8135309d0e17964cb8f20a308f0 [file] [log] [blame]
/*
*
* Copyright 2016 RIFT.IO Inc
*
* Licensed 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.
*
*/
import Alt from './alt';
var FleetSource = require('./launchpadFleetSource.js');
var FleetActions = require('./launchpadFleetActions.js');
import CardActions from './launchpad_card/launchpadCardActions.js';
var Utils = require('utils/utils.js');
import LaunchNetworkServiceSource from './instantiate/launchNetworkServiceSource.js';
import LaunchNetworkServiceActions from './instantiate/launchNetworkServiceActions.js';
import {LaunchpadSettings} from './settings.js';
var FleetStore;
var _ = require('underscore');
// _.debounce(function(){});
function FleetStoreConstructor() {
var self = this;
this.fleets = [];
this.descriptorCount = 0;
this.socket = null;
this.selectedSlaParam = '';
this.launchpads = [];
this.nsrs = [];
this.exportAsync(FleetSource);
this.exportAsync(LaunchNetworkServiceSource);
this.slideno = 0;
this.dropdownSlide = ['', 0];
this.slideChange = -1;
this.validateErrorEvent = 0;
this.launchpadSettings = new LaunchpadSettings();
this.openedNsrIDs = this.launchpadSettings.openedNSRs();
this.isNsListPanelVisible = true;
this.bindListeners({
//NEW
//Socket Actions
openNSRSocketLoading: FleetActions.openNSRSocketLoading,
openNSRSocketSuccess: FleetActions.openNSRSocketSuccess,
//Card Actions
handleUpdateControlInput: CardActions.updateControlInput,
//Source Actions
handleNsrControlSuccess: FleetActions.nsrControlSuccess,
handleNsrControlError: FleetActions.nsrControlError,
handleSlideNoStateChange: FleetActions.slideNoStateChange,
handleSlideNoStateChangeSuccess: FleetActions.slideNoStateChangeSuccess,
getNsrInstancesSuccess: FleetActions.getNsrInstancesSuccess,
getNsrInstancesError: FleetActions.getNsrInstancesError,
deleteNsrInstanceSuccess: FleetActions.deleteNsrInstanceSuccess,
deletingNSR: FleetActions.deletingNSR,
deleteNsrInstanceError: FleetActions.deleteNsrInstanceError,
setNSRStatusSuccess: FleetActions.setNSRStatusSuccess,
setNSRStatusError: FleetActions.setNSRStatusError,
validateReset: FleetActions.validateReset,
validateError: FleetActions.validateError,
//Launch Network Service Source Actions
getCatalogSuccess: LaunchNetworkServiceActions.getCatalogSuccess,
// Card management actions
openNsrCard: FleetActions.openNsrCard,
closeNsrCard: FleetActions.closeNsrCard,
instantiateNetworkService: FleetActions.instantiateNetworkService,
setNsListPanelVisible: FleetActions.setNsListPanelVisible,
getVDUConsoleLinkSuccess: FleetActions.getVDUConsoleLinkSuccess
});
this.bindAction(LaunchNetworkServiceActions.launchNSRSuccess, responseData => {
try {
this.openNsrCard(responseData.data.nsr_id);
} catch (e) {
console.log("Unable to open NS Card for response data: ", responseData);
}
});
this.exportPublicMethods({
getFleets: function() {
return this.getState().fleets;
},
closeSocket: this.closeSocket.bind(self)
});
}
FleetStoreConstructor.prototype.handleLogout = function() {
this.closeSocket();
}
FleetStoreConstructor.prototype.closeSocket = function() {
if(this.socket) {
window.multiplexer.channel(this.channelId).close();
}
this.setState({
socket:null
})
}
//NEW
FleetStoreConstructor.prototype.openNSRSocketLoading = function(connection) {
console.log('open socketloading')
Alt.actions.global.showScreenLoader.defer();
};
FleetStoreConstructor.prototype.openNSRSocketSuccess = function(connection) {
var self = this;
var isLoading = true;
var ws = window.multiplexer.channel(connection);
if (!connection) return;
self.setState({
socket: ws.ws,
channelId: connection
});
ws.onmessage = function(socket) {
try {
var data = JSON.parse(socket.data);
if (!data.nsrs) {
console.warn('NSRS property not present on the payload, check that the api server is functioning correct and that the LP is fully launched. Received: ', data);
data.nsrs = [];
}
Utils.checkAuthentication(data.statusCode, function() {
self.closeSocket();
});
let deletingNSRs = [];
if (self.nsrs) {
deletingNSRs = _.filter(self.nsrs, function(nsr) {
return nsr.deleting == true;
});
};
deletingNSRs.forEach(function(deletingNSR) {
data.nsrs.map(nsr => {
if (nsr.id == deletingNSR.id) {
_.extend(nsr, deletingNSR);
}
});
});
if(isLoading) {
isLoading = false;
Alt.actions.global.hideScreenLoader.defer();
}
self.setState({
nsrs: data.nsrs
});
} catch(e) {
console.log('HIT an exception in openNSRSocketSuccess', e);
}
};
}
FleetStoreConstructor.prototype.getNsrInstancesSuccess = function(data) {
this.setState({
nsrs: data.nsrs
});
};
FleetStoreConstructor.prototype.deleteNsrInstanceSuccess = function(data) {
console.log('deleted', data)
};
FleetStoreConstructor.prototype.deletingNSR = function(id) {
console.log('deleting NSR', id);
let nsrs = [];
let self = this;
try {
nsrs = this.nsrs.map(nsr => {
if (nsr.id == id) {
nsr.deleting = true;
self.closedNsrCard(id);
}
return nsr;
});
this.setState({
nsrs: nsrs
})
} catch (e) {
console.log('No NSR\'s found. Should never get here');
}
};
FleetStoreConstructor.prototype.deleteNsrInstanceError = function(data) {};
FleetStoreConstructor.prototype.getNsrInstancesError = function(data) {
console.log('ERROR', data)
};
FleetStoreConstructor.prototype.handleUpdateControlInput = _.debounce(function(data) {
var opt = data[0];
FleetStore.nsrControl(opt.operation, opt.url, data[1])
}, 500).bind(null);
FleetStoreConstructor.prototype.handleNsrControlSuccess = function(data) {
console.log(data)
};
FleetStoreConstructor.prototype.handleNsrControlError = function() {};
FleetStoreConstructor.prototype.handleSlideNoStateChange = function(data) {
this.setState({
dropdownSlide: data.pane,
slideno: data.no,
slideChange: data.slideChange
});
};
FleetStoreConstructor.prototype.handleSlideNoStateChangeSuccess = function() {
this.setState({
slideChange: this.slideChange - 1
});
};
FleetStoreConstructor.prototype.setNSRStatusSuccess = function() {};
FleetStoreConstructor.prototype.setNSRStatusError = function(data) {
console.log('Error changing NSR State', data)
};
FleetStoreConstructor.prototype.getCatalogSuccess = function(data) {
var self = this;
var descriptorCount = 0;
data.forEach(function(catalog) {
descriptorCount += catalog.descriptors.length;
});
self.setState({
descriptorCount: descriptorCount
});
};
FleetStoreConstructor.prototype.validateError = function(msg) {
this.setState({
validateErrorEvent: true,
validateErrorMsg: msg
});
};
FleetStoreConstructor.prototype.validateReset = function() {
this.setState({
validateErrorEvent: false
});
};
// Card management
FleetStoreConstructor.prototype.openNsrCard = function(id) {
//console.log("*** *** FleetStore.openNsrCard with nsr id:", id);
const openedNsrIDs = this.openedNsrIDs.slice(0);
// Only add if card is not there
if (id) {
if (!openedNsrIDs.includes(id)) {
openedNsrIDs.unshift(id);
this.launchpadSettings.addOpenNSR(id);
this.setState({
openedNsrIDs: openedNsrIDs
});
} else {
console.log("NSR already open, id:%s", id);
}
} else {
console.log("null nsr id.");
}
}
FleetStoreConstructor.prototype.closeNsrCard = function(id) {
this.launchpadSettings.removeOpenNSR(id);
this.setState({
openedNsrIDs: this.openedNsrIDs.filter(nsr_id => nsr_id !== id)
});
}
FleetStoreConstructor.prototype.instantiateNetworkService = function(id) {
window.location.hash = window.location.hash + '/launch';
}
FleetStoreConstructor.prototype.setNsListPanelVisible = function(isVisible) {
this.setState({
isNsListPanelVisible: isVisible
})
}
FleetStoreConstructor.prototype.getVDUConsoleLinkSuccess = function(data) {
data['console-url'] && window.open(data['console-url']);
}
FleetStore = Alt.createStore(FleetStoreConstructor);
module.exports = FleetStore;