| /* |
| 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. |
| */ |
| |
| // @todo test optimize (delete stuff, watch button appear, test button/form) |
| solrAdminApp.controller('CoreAdminController', |
| function($scope, $routeParams, $location, $timeout, $route, Cores, Update, Constants){ |
| $scope.resetMenu("cores", Constants.IS_ROOT_PAGE); |
| $scope.selectedCore = $routeParams.corename; // use 'corename' not 'core' to distinguish from /solr/:core/ |
| $scope.refresh = function() { |
| Cores.get(function(data) { |
| var coreCount = 0; |
| var cores = data.status; |
| for (_obj in cores) coreCount++; |
| $scope.hasCores = coreCount >0; |
| if (!$scope.selectedCore && coreCount==0) { |
| $scope.showAddCore(); |
| return; |
| } else if (!$scope.selectedCore) { |
| for (firstCore in cores) break; |
| $scope.selectedCore = firstCore; |
| $location.path("/~cores/" + $scope.selectedCore).replace(); |
| } |
| $scope.core = cores[$scope.selectedCore]; |
| $scope.corelist = []; |
| $scope.swapCorelist = []; |
| for (var core in cores) { |
| $scope.corelist.push(cores[core]); |
| if (cores[core] != $scope.core) { |
| $scope.swapCorelist.push(cores[core]); |
| } |
| } |
| if ($scope.swapCorelist.length>0) { |
| $scope.swapOther = $scope.swapCorelist[0].name; |
| } |
| }); |
| }; |
| $scope.showAddCore = function() { |
| $scope.hideAll(); |
| $scope.showAdd = true; |
| $scope.newCore = { |
| name: "new_core", |
| dataDir: "data", |
| instanceDir: "new_core", |
| config: "solrconfig.xml", |
| schema: "schema.xml", |
| collection: "", |
| shard: "" |
| }; |
| }; |
| |
| $scope.addCore = function() { |
| if (!$scope.newCore.name) { |
| $scope.addMessage = "Please provide a core name"; |
| } else if (false) { //@todo detect whether core exists |
| $scope.AddMessage = "A core with that name already exists"; |
| } else { |
| var params = { |
| name: $scope.newCore.name, |
| instanceDir: $scope.newCore.instanceDir, |
| config: $scope.newCore.config, |
| schema: $scope.newCore.schema, |
| dataDir: $scope.newCore.dataDir |
| }; |
| if ($scope.isCloud) { |
| params.collection = $scope.newCore.collection; |
| params.shard = $scope.newCore.shard; |
| } |
| Cores.add(params, function(data) { |
| $location.path("/~cores/" + $scope.newCore.name); |
| $scope.cancelAddCore(); |
| }); |
| } |
| }; |
| |
| $scope.cancelAddCore = function() { |
| delete $scope.addMessage; |
| $scope.showAdd = false |
| }; |
| |
| $scope.unloadCore = function() { |
| var answer = confirm( 'Do you really want to unload Core "' + $scope.selectedCore + '"?' ); |
| if( !answer ) return; |
| Cores.unload({core: $scope.selectedCore}, function(data) { |
| $location.path("/~cores"); |
| }); |
| }; |
| |
| $scope.showRenameCore = function() { |
| $scope.hideAll(); |
| $scope.showRename = true; |
| }; |
| |
| $scope.renameCore = function() { |
| if (!$scope.other) { |
| $scope.renameMessage = "Please provide a new name for the " + $scope.selectedCore + " core"; |
| } else if ($scope.other == $scope.selectedCore) { |
| $scope.renameMessage = "New name must be different from the current one"; |
| } else { |
| Cores.rename({core:$scope.selectedCore, other: $scope.other}, function(data) { |
| $location.path("/~cores/" + $scope.other); |
| $scope.cancelRename(); |
| }); |
| } |
| }; |
| |
| $scope.cancelRenameCore = function() { |
| $scope.showRename = false; |
| delete $scope.renameMessage; |
| $scope.other = ""; |
| }; |
| |
| $scope.showSwapCores = function() { |
| $scope.hideAll(); |
| $scope.showSwap = true; |
| }; |
| |
| $scope.swapCores = function() { |
| if (!$scope.swapOther) { |
| $scope.swapMessage = "Please select a core to swap with"; |
| } else if ($scope.swapOther == $scope.selectedCore) { |
| $scope.swapMessage = "Cannot swap with the same core"; |
| } else { |
| Cores.swap({core: $scope.selectedCore, other: $scope.swapOther}, function(data) { |
| $location.path("/~cores/" + $scope.swapOther); |
| delete $scope.swapOther; |
| $scope.cancelSwapCores(); |
| }); |
| } |
| }; |
| |
| $scope.cancelSwapCores = function() { |
| delete $scope.swapMessage; |
| $scope.showSwap = false; |
| } |
| |
| $scope.reloadCore = function() { |
| if ($scope.initFailures[$scope.selectedCore]) { |
| delete $scope.initFailures[$scope.selectedCore]; |
| $scope.showInitFailures = Object.keys(data.initFailures).length>0; |
| } |
| Cores.reload({core: $scope.selectedCore}, |
| function(data) { |
| if (data.error) { |
| $scope.reloadFailure = true; |
| $timeout(function() { |
| $scope.reloadFailure = false; |
| $route.reload(); |
| }, 1000); |
| } else { |
| $scope.reloadSuccess = true; |
| $timeout(function () { |
| $scope.reloadSuccess = false; |
| $route.reload(); |
| }, 1000); |
| } |
| }); |
| }; |
| |
| $scope.hideAll = function() { |
| $scope.showRename = false; |
| $scope.showAdd = false; |
| $scope.showSwap = false; |
| }; |
| |
| $scope.optimizeCore = function() { |
| Update.optimize({core: $scope.selectedCore}, |
| function(successData) { |
| $scope.optimizeSuccess = true; |
| $timeout(function() {$scope.optimizeSuccess=false}, 1000); |
| $scope.refresh(); |
| }, |
| function(failureData) { |
| $scope.optimizeFailure = true; |
| $timeout(function () {$scope.optimizeFailure=false}, 1000); |
| $scope.refresh(); |
| }); |
| }; |
| |
| $scope.refresh(); |
| } |
| ); |
| |
| /************** |
| 'cores_load_data', |
| function( event, params ) |
| { |
| $.ajax |
| ( |
| { |
| url : app.config.solr_path + app.config.core_admin_path + '?wt=json', |
| dataType : 'json', |
| success : function( response, text_status, xhr ) |
| { |
| if( params.only_failures ) |
| { |
| app.check_for_init_failures( response ); |
| return true; |
| } |
| |
| |
| =========== NO CORES |
| error : function() |
| { |
| sammy.trigger |
| ( |
| 'cores_load_template', |
| { |
| content_element : content_element, |
| callback : function() |
| { |
| var cores_element = $( '#cores', content_element ); |
| var navigation_element = $( '#navigation', cores_element ); |
| var data_element = $( '#data', cores_element ); |
| var core_data_element = $( '#core-data', data_element ); |
| var index_data_element = $( '#index-data', data_element ); |
| |
| // layout |
| |
| var ui_block = $( '#ui-block' ); |
| var actions_element = $( '.actions', cores_element ); |
| var div_action = $( 'div.action', actions_element ); |
| |
| ui_block |
| .css( 'opacity', 0.7 ) |
| .width( cores_element.width() + 10 ) |
| .height( cores_element.height() ); |
| |
| if( $( '#cloud.global' ).is( ':visible' ) ) |
| { |
| $( '.cloud', div_action ) |
| .show(); |
| } |
| |
| $( 'button.action', actions_element ) |
| .die( 'click' ) |
| .live |
| ( |
| 'click', |
| function( event ) |
| { |
| var self = $( this ); |
| |
| self |
| .toggleClass( 'open' ); |
| |
| $( '.action.' + self.attr( 'id' ), actions_element ) |
| .trigger( 'open' ); |
| |
| return false; |
| } |
| ); |
| |
| div_action |
| .die( 'close' ) |
| .live |
| ( |
| 'close', |
| function( event ) |
| { |
| div_action.hide(); |
| ui_block.hide(); |
| } |
| ) |
| .die( 'open' ) |
| .live |
| ( |
| 'open', |
| function( event ) |
| { |
| var self = $( this ); |
| var rel = $( '#' + self.data( 'rel' ) ); |
| |
| self |
| .trigger( 'close' ) |
| .show() |
| .css( 'left', rel.position().left ); |
| |
| ui_block |
| .show(); |
| } |
| ); |
| |
| $( 'form button.reset', actions_element ) |
| .die( 'click' ) |
| .live |
| ( |
| 'click', |
| function( event ) |
| { |
| $( this ).closest( 'div.action' ) |
| .trigger( 'close' ); |
| } |
| ); |
| |
| $( 'form', div_action ) |
| .ajaxForm |
| ( |
| { |
| url : app.config.solr_path + app.config.core_admin_path + '?wt=json&indexInfo=false', |
| dataType : 'json', |
| beforeSubmit : function( array, form, options ) |
| { |
| $( 'button[type="submit"] span', form ) |
| .addClass( 'loader' ); |
| }, |
| success : function( response, status_text, xhr, form ) |
| { |
| delete app.cores_data; |
| sammy.refresh(); |
| |
| $( 'button.reset', form ) |
| .trigger( 'click' ); |
| }, |
| error : function( xhr, text_status, error_thrown ) |
| { |
| var response = null; |
| eval( 'response = ' + xhr.responseText + ';' ); |
| |
| var error_elem = $( '.error', div_action.filter( ':visible' ) ); |
| error_elem.show(); |
| $( 'span', error_elem ).text( response.error.msg ); |
| }, |
| complete : function() |
| { |
| $( 'button span.loader', actions_element ) |
| .removeClass( 'loader' ); |
| } |
| } |
| ); |
| |
| // -- |
| |
| $( '#add', content_element ) |
| .trigger( 'click' ); |
| |
| $( '[data-rel="add"] input[type="text"]:first', content_element ) |
| .focus(); |
| } |
| } |
| ); |
| } |
| } |
| ); |
| } |
| ); |
| |
| // #/~cores |
| sammy.get |
| ( |
| /^#\/(~cores)\//, |
| function( context ) |
| { |
| var content_element = $( '#content' ); |
| |
| var path_parts = this.path.match( /^(.+\/~cores\/)(.*)$/ ); |
| var current_core = path_parts[2]; |
| |
| sammy.trigger |
| ( |
| 'cores_load_data', |
| { |
| error : function() |
| { |
| context.redirect( '#/' + context.params.splat[0] ); |
| }, |
| success : function( cores ) |
| { |
| sammy.trigger |
| ( |
| 'cores_load_template', |
| { |
| content_element : content_element, |
| callback : function() |
| { |
| var cores_element = $( '#cores', content_element ); |
| var navigation_element = $( '#navigation', cores_element ); |
| var data_element = $( '#data', cores_element ); |
| var core_data_element = $( '#core-data', data_element ); |
| var index_data_element = $( '#index-data', data_element ); |
| |
| cores_element |
| .removeClass( 'empty' ); |
| |
| var core_data = cores[current_core]; |
| var core_basepath = $( '#' + current_core, app.menu_element ).attr( 'data-basepath' ); |
| |
| var core_names = []; |
| var core_selects = $( '#actions select', cores_element ); |
| |
| $( 'option[value="' + current_core + '"]', core_selects.filter( '.other' ) ) |
| .remove(); |
| |
| $( 'input[data-core="current"]', cores_element ) |
| .val( current_core ); |
| |
| // layout |
| |
| var ui_block = $( '#ui-block' ); |
| var actions_element = $( '.actions', cores_element ); |
| var div_action = $( 'div.action', actions_element ); |
| |
| ui_block |
| .css( 'opacity', 0.7 ) |
| .width( cores_element.width() + 10 ) |
| .height( cores_element.height() ); |
| |
| if( $( '#cloud.global' ).is( ':visible' ) ) |
| { |
| $( '.cloud', div_action ) |
| .show(); |
| } |
| |
| var form_callback = { |
| |
| rename : function( form, response ) |
| { |
| var url = path_parts[1] + $( 'input[name="other"]', form ).val(); |
| context.redirect( url ); |
| } |
| |
| }; |
| |
| $( 'form', div_action ) |
| .ajaxForm |
| ( |
| { |
| url : app.config.solr_path + app.config.core_admin_path + '?wt=json&indexInfo=false', |
| success : function( response, status_text, xhr, form ) |
| { |
| var action = $( 'input[name="action"]', form ).val().toLowerCase(); |
| |
| delete app.cores_data; |
| |
| if( form_callback[action] ) |
| { |
| form_callback[action]( form, response ); |
| } |
| else |
| { |
| sammy.refresh(); |
| } |
| |
| $( 'button.reset', form ) |
| .trigger( 'click' ); |
| }, |
| ); |
| |
| $( '#actions #unload', cores_element ) |
| var ret = confirm( 'Do you really want to unload Core "' + current_core + '"?' ); |
| if( !ret ) |
| return false; |
| |
| url : app.config.solr_path + app.config.core_admin_path + '?wt=json&action=UNLOAD&core=' + current_core, |
| success : function( response, text_status, xhr ) |
| { |
| delete app.cores_data; |
| context.redirect( path_parts[1].substr( 0, path_parts[1].length - 1 ) ); |
| }, |
| |
| optimize_button |
| url : core_basepath + '/update?optimize=true&waitFlush=true&wt=json', |
| success : function( response, text_status, xhr ) |
| |
| ******/ |