@@ -14,6 +14,7 @@ export const networkService = { | |||||
getStatusesByNetworkId, | getStatusesByNetworkId, | ||||
getNodesByNetworkId, | getNodesByNetworkId, | ||||
stopNetwork, | stopNetwork, | ||||
restoreNetwork, | |||||
deleteNetwork, | deleteNetwork, | ||||
requestNetworkKeys, | requestNetworkKeys, | ||||
retrieveNetworkKeys | retrieveNetworkKeys | ||||
@@ -58,6 +59,11 @@ function stopNetwork(userId, networkId, messages, errors) { | |||||
return fetch(`${config.apiUrl}/users/${userId}/networks/${networkId}/actions/stop`, util.postWithAuth()).then(util.handleCrudResponse(messages, errors)); | return fetch(`${config.apiUrl}/users/${userId}/networks/${networkId}/actions/stop`, util.postWithAuth()).then(util.handleCrudResponse(messages, errors)); | ||||
} | } | ||||
function restoreNetwork(userId, networkId, messages, errors) { | |||||
return fetch(`${config.apiUrl}/users/${userId}/networks/${networkId}/actions/restore`, | |||||
util.postWithAuth()).then(util.handleCrudResponse(messages, errors)); | |||||
} | |||||
// deleting network is not allowed via API, instead we delete the AccountPlan, which in turn deletes the network | // deleting network is not allowed via API, instead we delete the AccountPlan, which in turn deletes the network | ||||
function deleteNetwork(userId, networkId, messages, errors) { | function deleteNetwork(userId, networkId, messages, errors) { | ||||
return fetch(`${config.apiUrl}/users/${userId}/plans/${networkId}`, util.deleteWithAuth()).then(util.handleCrudResponse(messages, errors)); | return fetch(`${config.apiUrl}/users/${userId}/plans/${networkId}`, util.deleteWithAuth()).then(util.handleCrudResponse(messages, errors)); | ||||
@@ -8,7 +8,7 @@ import { util } from '../_helpers'; | |||||
const state = { | const state = { | ||||
loading: { | loading: { | ||||
networks: false, network: false, deleting: false, | |||||
networks: false, network: false, stopping: false, restoring: false, deleting: false, | |||||
nearestRegions: false, startingNetwork: false, networkStatuses: false, networkNodes: false, | nearestRegions: false, startingNetwork: false, networkStatuses: false, networkNodes: false, | ||||
requestNetworkKeys: false, retrieveNetworkKeys: false | requestNetworkKeys: false, retrieveNetworkKeys: false | ||||
}, | }, | ||||
@@ -95,6 +95,15 @@ const actions = { | |||||
); | ); | ||||
}, | }, | ||||
restoreNetwork({ commit }, { userId, networkId, messages, errors }) { | |||||
commit('restoreNetworkRequest', networkId); | |||||
networkService.restoreNetwork(userId, networkId, messages, errors) | |||||
.then( | |||||
network => commit('restoreNetworkSuccess', network), | |||||
error => commit('restoreNetworkFailure', { networkId, error: error.toString() }) | |||||
); | |||||
}, | |||||
deleteNetwork({ commit }, {userId, networkId, messages, errors}) { | deleteNetwork({ commit }, {userId, networkId, messages, errors}) { | ||||
commit('deleteNetworkRequest', networkId); | commit('deleteNetworkRequest', networkId); | ||||
networkService.deleteNetwork(userId, networkId, messages, errors) | networkService.deleteNetwork(userId, networkId, messages, errors) | ||||
@@ -212,6 +221,17 @@ const mutations = { | |||||
state.error = error; | state.error = error; | ||||
}, | }, | ||||
restoreNetworkRequest(state, id) { | |||||
state.loading.restoring = true; | |||||
}, | |||||
restoreNetworkSuccess(state, id) { | |||||
state.loading.restoring = false; | |||||
}, | |||||
restoreNetworkFailure(state, { id, error }) { | |||||
state.loading.restoring = false; | |||||
state.error = error; | |||||
}, | |||||
deleteNetworkRequest(state, id) { | deleteNetworkRequest(state, id) { | ||||
state.loading.deleting = true; | state.loading.deleting = true; | ||||
}, | }, | ||||
@@ -90,10 +90,21 @@ | |||||
</div> | </div> | ||||
</div> | </div> | ||||
<hr/> | |||||
<div v-if="network.state === 'stopped'"> | <div v-if="network.state === 'stopped'"> | ||||
<!-- todo: add button to restart network in restore mode --> | |||||
<hr/> | |||||
<div v-if="errors.has('networkRestore')" class="invalid-feedback d-block"> | |||||
{{ errors.first('networkRestore') }} | |||||
</div> | |||||
<div v-if="networkNodes && networkNodes.length === 0"> | |||||
<button @click="restoreNet()" class="btn btn-primary" :disabled="loading && loading.restoring"> | |||||
{{ messages.button_label_restore }} | |||||
</button> | |||||
<img v-show="loading && loading.restoring" :src="loadingImgSrc" /> | |||||
{{ messages.button_description_restore }} | |||||
</div> | |||||
<div v-else v-html="messages.restore_not_possible_nodes_exist_html" /> | |||||
</div> | </div> | ||||
<div v-if="configs.sageLauncher && (network.state === 'running' || network.state === 'starting' || network.state === 'stopped' || network.state === 'error_stopping')"> | <div v-if="configs.sageLauncher && (network.state === 'running' || network.state === 'starting' || network.state === 'stopped' || network.state === 'error_stopping')"> | ||||
@@ -147,7 +158,7 @@ | |||||
methods: { | methods: { | ||||
...mapActions('networks', [ | ...mapActions('networks', [ | ||||
'getNetworkById', 'deleteNetwork', 'getStatusesByNetworkId', 'getNodesByNetworkId', | 'getNetworkById', 'deleteNetwork', 'getStatusesByNetworkId', 'getNodesByNetworkId', | ||||
'stopNetwork', 'deleteNetwork', 'requestNetworkKeys', 'retrieveNetworkKeys' | |||||
'stopNetwork', 'restoreNetwork', 'deleteNetwork', 'requestNetworkKeys', 'retrieveNetworkKeys' | |||||
]), | ]), | ||||
refreshStatus (userId) { | refreshStatus (userId) { | ||||
this.getNetworkById({userId: userId, networkId: this.networkId, messages: this.messages, errors: this.errors}); | this.getNetworkById({userId: userId, networkId: this.networkId, messages: this.messages, errors: this.errors}); | ||||
@@ -178,6 +189,15 @@ | |||||
errors: this.errors | errors: this.errors | ||||
}); | }); | ||||
}, | }, | ||||
restoreNet () { | |||||
this.errors.clear(); | |||||
this.restoreNetwork({ | |||||
userId: this.user.uuid, | |||||
networkId: this.networkId, | |||||
messages: this.messages, | |||||
errors: this.errors | |||||
}); | |||||
}, | |||||
deleteNet () { | deleteNet () { | ||||
this.errors.clear(); | this.errors.clear(); | ||||
this.deleteNetwork({ | this.deleteNetwork({ | ||||