mirror of https://github.com/apache/lucene.git
SOLR-11648: A new admin UI to display and execute suggestions
This commit is contained in:
parent
471a56ab10
commit
4a6110ce01
|
@ -103,6 +103,8 @@ New Features
|
|||
|
||||
* SOLR-11592: Add OpenNLP language detection to the langid contrib. (Koji, Steve Rowe)
|
||||
|
||||
* SOLR-11648: A new admin UI to display and execute suggestions (Apoorv Bhawsar , noble)
|
||||
|
||||
Bug Fixes
|
||||
----------------------
|
||||
|
||||
|
|
|
@ -257,6 +257,7 @@ limitations under the License.
|
|||
|
||||
#menu #collections.global p a { background-image: url( ../../img/ico/documents-stack.png ); }
|
||||
#menu #cores.global p a { background-image: url( ../../img/ico/databases.png ); }
|
||||
#menu #cluster-suggestions.global p a { background-image: url( ../../img/ico/idea.png ); }
|
||||
|
||||
#menu #cloud.global p a { background-image: url( ../../img/ico/network-cloud.png ); }
|
||||
#menu #cloud.global .tree a { background-image: url( ../../img/ico/folder-tree.png ); }
|
||||
|
|
|
@ -0,0 +1,64 @@
|
|||
/*
|
||||
|
||||
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.
|
||||
|
||||
*/
|
||||
#cluster-suggestions
|
||||
.s-container{
|
||||
text-align:center;
|
||||
}
|
||||
#cluster-suggestions
|
||||
.s-box1{
|
||||
background-image: url( ../../img/ico/run.png );
|
||||
background-color: transparent;
|
||||
background-repeat: no-repeat;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
vertical-align: middle;
|
||||
display:inline-block;
|
||||
width:20px;
|
||||
}
|
||||
#cluster-suggestions
|
||||
.s-box2{
|
||||
display:inline-block;
|
||||
}
|
||||
#cluster-suggestions
|
||||
.s-box3{
|
||||
display:inline-block;
|
||||
}
|
||||
#cluster-suggestions
|
||||
.s-box4{
|
||||
display:inline-block;
|
||||
}
|
||||
#s-table {
|
||||
border-collapse: collapse;
|
||||
width: 60%;
|
||||
}
|
||||
|
||||
#s-table td, #customers th {
|
||||
border: 1px solid #ddd;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
#cluster-suggestions #s-table tr:nth-child(even){background-color: #f2f2f2;}
|
||||
|
||||
#cluster-suggestions #s-table th {
|
||||
padding-top: 12px;
|
||||
padding-bottom: 12px;
|
||||
text-align: left;
|
||||
background-color: #4CAF50;
|
||||
color: white;
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 732 B |
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
|
@ -41,6 +41,7 @@ limitations under the License.
|
|||
<link rel="stylesheet" type="text/css" href="css/angular/stream.css?_=${version}">
|
||||
<link rel="stylesheet" type="text/css" href="css/angular/replication.css?_=${version}">
|
||||
<link rel="stylesheet" type="text/css" href="css/angular/schema.css?_=${version}">
|
||||
<link rel="stylesheet" type="text/css" href="css/angular/suggestions.css?_=${version}">
|
||||
<link rel="stylesheet" type="text/css" href="css/angular/segments.css?_=${version}">
|
||||
<link rel="stylesheet" type="text/css" href="css/angular/threads.css?_=${version}">
|
||||
<link rel="stylesheet" type="text/css" href="css/angular/chosen.css?_=${version}">
|
||||
|
@ -78,6 +79,8 @@ limitations under the License.
|
|||
<script src="js/angular/controllers/replication.js"></script>
|
||||
<script src="js/angular/controllers/schema.js"></script>
|
||||
<script src="js/angular/controllers/segments.js"></script>
|
||||
<script src="js/angular/controllers/cluster-suggestions.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body ng-controller="MainController">
|
||||
|
@ -157,6 +160,7 @@ limitations under the License.
|
|||
<li id="java-properties" class="global" ng-class="{active:page=='java-props'}"><p><a href="#/~java-properties">Java Properties</a></li>
|
||||
|
||||
<li id="threads" class="global" ng-class="{active:page=='threads'}"><p><a href="#/~threads">Thread Dump</a></p></li>
|
||||
<li id="cluster-suggestions" class="global" ng-class="{active:page=='cluster-suggestions'}"><p><a href="#/~cluster-suggestions">Suggestions</a></p></li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
|
|
@ -67,6 +67,10 @@ solrAdminApp.config([
|
|||
templateUrl: 'partials/java-properties.html',
|
||||
controller: 'JavaPropertiesController'
|
||||
}).
|
||||
when('/~cluster-suggestions', {
|
||||
templateUrl: 'partials/cluster_suggestions.html',
|
||||
controller: 'ClusterSuggestionsController'
|
||||
}).
|
||||
when('/:core', {
|
||||
templateUrl: 'partials/core_overview.html',
|
||||
controller: 'CoreOverviewController'
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
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('ClusterSuggestionsController',
|
||||
function($scope,$http) {
|
||||
$scope.data={}
|
||||
var dataArr =[];
|
||||
var dataJson = {};
|
||||
//function to display suggestion
|
||||
$http({
|
||||
method: 'GET',
|
||||
url: '/api/cluster/autoscaling/suggestions'
|
||||
}).then(function successCallback(response) {
|
||||
$scope.data = response.data;
|
||||
$scope.parsedData = $scope.data.suggestions;
|
||||
}, function errorCallback(response) {
|
||||
});
|
||||
//function to perform operation
|
||||
$scope.postdata = function (x) {
|
||||
x.loading = true;
|
||||
var path=x.operation.path;
|
||||
var command=x.operation.command;
|
||||
var fullPath='/api/'+path;
|
||||
console.log(fullPath);
|
||||
console.log(command);
|
||||
$http.post(fullPath, JSON.stringify(command)).then(function (response) {
|
||||
if (response.data)
|
||||
console.log(response.data);
|
||||
x.loading = false;
|
||||
x.done = true;
|
||||
x.run=true;
|
||||
$scope.msg = "Post Data Submitted Successfully!";
|
||||
}, function (response) {
|
||||
x.failed=true;
|
||||
$scope.msg = "Service not Exists";
|
||||
$scope.statusval = response.status;
|
||||
$scope.statustext = response.statusText;
|
||||
$scope.headers = response.headers();
|
||||
});
|
||||
};
|
||||
$scope.showPopover = function() {
|
||||
$scope.popup = true;
|
||||
};
|
||||
|
||||
$scope.hidePopover = function () {
|
||||
$scope.popup = false;
|
||||
};
|
||||
});
|
|
@ -0,0 +1,49 @@
|
|||
<!--
|
||||
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.
|
||||
-->
|
||||
|
||||
<div id="cluster-suggestions">
|
||||
<h1>Cluster Suggestions</h1>
|
||||
<br/>
|
||||
<table id="s-table">
|
||||
<tr>
|
||||
<td>Type</td>
|
||||
<td>Reason</td>
|
||||
<td>Action</td>
|
||||
</tr>
|
||||
<tr ng-if="parsedData.length==0">
|
||||
<td>NA</td>
|
||||
<td>NA</td>
|
||||
<td>NA</td>
|
||||
</tr>
|
||||
<tr ng-repeat="x in parsedData">
|
||||
<td>{{ x.type }}</td>
|
||||
<td>{{ x.violation.clause }}</td>
|
||||
<td>
|
||||
<div class="s-container">
|
||||
<input class="s-box1" ng-hide="x.run" type="button"
|
||||
title="{{ x.operation }}" ng-click="postdata(x)" ng-mouseover="showPopover()"
|
||||
ng-mouseleave="hidePopover()"/>
|
||||
<div class="s-box2" ng-show="x.loading"><img src="img/loader.gif"></div>
|
||||
<div class="s-box3" ng-show="x.done"><img src="img/ico/tick.png"></div>
|
||||
<div class="s-box4" ng-show="x.failed"><img src="img/ico/cross.png"></div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
Loading…
Reference in New Issue