/* | |
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. | |
*/ | |
solrAdminApp.controller('PluginsController', | |
function($scope, $rootScope, $routeParams, $location, Mbeans, Constants) { | |
$scope.resetMenu("plugins", Constants.IS_CORE_PAGE); | |
if ($routeParams.legacytype) { | |
// support legacy URLs. Angular cannot change #path without reloading controller | |
$location.path("/"+$routeParams.core+"/plugins"); | |
$location.search("type", $routeParams.legacytype); | |
return; | |
} | |
$scope.refresh = function() { | |
Mbeans.stats({core: $routeParams.core}, function (data) { | |
var type = $location.search().type; | |
$scope.types = getPluginTypes(data, type); | |
$scope.type = getSelectedType($scope.types, type); | |
if ($scope.type && $routeParams.entry) { | |
$scope.plugins = $routeParams.entry.split(","); | |
openPlugins($scope.type, $scope.plugins); | |
} else { | |
$scope.plugins = []; | |
} | |
}); | |
}; | |
$scope.selectPluginType = function(type) { | |
$location.search({entry:null, type: type.lower}); | |
$scope.type = type; | |
}; | |
$scope.selectPlugin = function(plugin) { | |
plugin.open = !plugin.open; | |
if (plugin.open) { | |
$scope.plugins.push(plugin.name); | |
} else { | |
$scope.plugins.splice($scope.plugins.indexOf(plugin.name), 1); | |
} | |
if ($scope.plugins.length==0) { | |
$location.search("entry", null); | |
} else { | |
$location.search("entry", $scope.plugins.join(',')); | |
} | |
} | |
$scope.startRecording = function() { | |
$scope.isRecording = true; | |
Mbeans.reference({core: $routeParams.core}, function(data) { | |
$scope.reference = data.reference; | |
console.log($scope.reference); | |
}) | |
} | |
$scope.stopRecording = function() { | |
$scope.isRecording = false; | |
console.log($scope.reference); | |
Mbeans.delta({core: $routeParams.core}, $scope.reference, function(data) { | |
parseDelta($scope.types, data); | |
}); | |
} | |
$scope.refresh(); | |
}); | |
var getPluginTypes = function(data, selected) { | |
var keys = []; | |
var mbeans = data["solr-mbeans"]; | |
for (var i=0; i<mbeans.length; i+=2) { | |
var key = mbeans[i]; | |
var lower = key.toLowerCase(); | |
var plugins = getPlugins(mbeans[i+1]); | |
keys.push({name: key, | |
selected: lower == selected, | |
changes: 0, | |
lower: lower, | |
plugins: plugins | |
}); | |
} | |
keys.sort(function(a,b) {return a.name > b.name}); | |
return keys; | |
}; | |
var getPlugins = function(data) { | |
var plugins = []; | |
for (var key in data) { | |
var pluginProperties = data[key]; | |
var stats = pluginProperties.stats; | |
delete pluginProperties.stats; | |
for (var stat in stats) { | |
// add breaking space after a bracket or @ to handle wrap long lines: | |
stats[stat] = new String(stats[stat]).replace( /([\(@])/g, '$1​'); | |
} | |
plugin = {name: key, changed: false, stats: stats, open:false}; | |
plugin.properties = pluginProperties; | |
plugins.push(plugin); | |
} | |
plugins.sort(function(a,b) {return a.name > b.name}); | |
return plugins; | |
}; | |
var getSelectedType = function(types, selected) { | |
if (selected) { | |
for (var i in types) { | |
if (types[i].lower == selected) { | |
return types[i]; | |
} | |
} | |
} | |
}; | |
var parseDelta = function(types, data) { | |
var getByName = function(list, name) { | |
for (var i in list) { | |
if (list[i].name == name) return list[i]; | |
} | |
} | |
var mbeans = data["solr-mbeans"] | |
for (var i=0; i<mbeans.length; i+=2) { | |
var typeName = mbeans[i]; | |
var type = getByName(types, typeName); | |
var plugins = mbeans[i+1]; | |
for (var key in plugins) { | |
var changedPlugin = plugins[key]; | |
if (changedPlugin._changed_) { | |
var plugin = getByName(type.plugins, key); | |
var stats = changedPlugin.stats; | |
delete changedPlugin.stats; | |
plugin.properties = changedPlugin; | |
for (var stat in stats) { | |
// add breaking space after a bracket or @ to handle wrap long lines: | |
plugin.stats[stat] = new String(stats[stat]).replace( /([\(@])/g, '$1​'); | |
} | |
plugin.changed = true; | |
type.changes++; | |
} | |
} | |
} | |
}; | |
var openPlugins = function(type, selected) { | |
for (var i in type.plugins) { | |
var plugin = type.plugins[i]; | |
plugin.open = selected.indexOf(plugin.name)>=0; | |
} | |
} |