first commit
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
<!--
|
||||
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="analysis">
|
||||
|
||||
<div class="block analysis-error" id="analysis-handler-missing" ng-show="isHandlerMissing">
|
||||
<div class="head">This Functionality requires the <code>/analysis/field</code> Handler to be registered and active!</div>
|
||||
</div>
|
||||
|
||||
<div class="block analysis-error" id="analysis-error" ng-show="analysisError">
|
||||
<div class="body">{{analysisError}}</div>
|
||||
</div>
|
||||
|
||||
<div id="analysis-holder">
|
||||
|
||||
<div id="field-analysis">
|
||||
|
||||
<form method="get">
|
||||
|
||||
<ul class="clearfix">
|
||||
|
||||
<li class="index">
|
||||
|
||||
<label for="analysis_fieldvalue_index">Field Value (Index)</label>
|
||||
<textarea name="analysis.fieldvalue" id="analysis_fieldvalue_index" ng-model="indexText"></textarea>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="query">
|
||||
|
||||
<label for="analysis_fieldvalue_query">Field Value (Query)</label>
|
||||
<textarea name="analysis.query" id="analysis_fieldvalue_query" ng-model="queryText"></textarea>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="settings-holder clearfix">
|
||||
<div class="settings clearfix">
|
||||
<label for="type_or_name">Analyse Fieldname / FieldType:</label>
|
||||
<select style="width:130px" chosen ng-change="changeFieldOrType()" id="type_or_name" ng-model="fieldOrType" ng-options="f.value as f.label group by f.group for f in fieldsAndTypes"></select>
|
||||
|
||||
<a id="tor_schema" ng-href="#/{{core}}/schema?{{schemaBrowserUrl}}"><span>Schema Browser</span> </a>
|
||||
|
||||
<div class="buttons clearfix">
|
||||
|
||||
<button type="submit" ng-click="updateQueryString()"><span>Analyse Values</span></button>
|
||||
|
||||
<div class="verbose_output" ng-class="{active:verbose}">
|
||||
<a ng-click="toggleVerbose()">Verbose Output</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="analysis-result" class="clearfix verbose_output">
|
||||
<div ng-class="key" ng-repeat="(key, type) in result">
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<tbody ng-repeat="component in type">
|
||||
<tr class="step">
|
||||
<td class="part analyzer">
|
||||
<div>
|
||||
<abbr title="{{component.name}}">{{component.short}}</abbr>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
<td class="part legend" ng-show="verbose">
|
||||
<div class="holder">
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<tr ng-repeat="caption in component.captions" class="{{generate_class_name( short_key )}}">
|
||||
<td>{{ caption }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td class="part data" ng-class="{spacer:token.blank}" colspan="1" ng-repeat="token in component.tokens track by token.index">
|
||||
<div class="holder" ng-hide="token.blank">
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr class="details">
|
||||
<td class="details">
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr class="{{value.name}} {{value.extraclass}}" ng-repeat="value in token.keys" ng-show="verbose || value.name=='text'">
|
||||
<td>{{value.value}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="holder" ng-show="token.blank"> </div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,298 @@
|
||||
<!--
|
||||
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="cloud" class="clearfix">
|
||||
|
||||
<div id="frame">
|
||||
|
||||
<div id="zk-status-content" class="content clearfix" ng-show="showZkStatus">
|
||||
<div id="zk-controls">
|
||||
<a class="reload" ng-click="initZookeeper()"><span>Refresh</span></a>
|
||||
<a class="details-button" ng-click="toggleDetails()" ng-class="{on:showDetails}">
|
||||
<span>Toggle details</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="zookeeper-status">Status: <span class="zkstatus-{{zkState.status}}">{{zkState.status}}</span></div>
|
||||
<div class="zookeeper-errors" ng-show="zkState.errors">
|
||||
Errors:
|
||||
<ul>
|
||||
<li ng-repeat="error in zkState.errors">{{error}}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>ZK connection string: {{zkState.zkHost}}</div>
|
||||
<div>Ensemble size: {{zkState.ensembleSize}}</div>
|
||||
<div>Ensemble mode: {{zkState.mode}}</div>
|
||||
|
||||
<table id="zk-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th ng-repeat="host in zkState.details">{{host.host}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="key in mainKeys">
|
||||
<td>{{key}}</td>
|
||||
<td ng-repeat="host in zkState.details" ng-style="key === 'zk_server_state' && host[key] === 'leader' ? {'font-weight': 'bold'} : {'font-weight': 'normal'}">
|
||||
{{key === 'zk_version' ? host[key].split("-")[0] : host[key]}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr ng-repeat="key in ensembleMainKeys" ng-show="zkState.mode === 'ensemble'">
|
||||
<td>{{key}}</td>
|
||||
<td ng-repeat="host in zkState.details">
|
||||
{{host[key]}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="detail-divider" ng-show="showDetails" >
|
||||
<td ng-class="details"></td>
|
||||
<td ng-repeat="host in zkState.details" ng-class="details"></td>
|
||||
</tr>
|
||||
<tr ng-repeat="key in detailKeys" ng-show="showDetails">
|
||||
<td>{{key}}</td>
|
||||
<td ng-repeat="host in zkState.details">
|
||||
{{host[key]}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr ng-repeat="key in ensembleDetailKeys" ng-show="showDetails && zkState.mode === 'ensemble'">
|
||||
<td>{{key}}</td>
|
||||
<td ng-repeat="host in zkState.details">
|
||||
{{host[key]}}
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div id="tree-content" class="content clearfix" ng-show="showTree">
|
||||
<jstree class="tree" on-select="showTreeLink(url)" id="tree" data="tree"></jstree>
|
||||
|
||||
<div id="file-content" class="clearfix">
|
||||
|
||||
<a id="toggle" ng-click="showProps = !showProps" ng-show="showData" ng-class="showProps ? 'minus' : 'plus'">Metadata</a>
|
||||
<div id="prop" ng-show="znode.prop && showData && showProps">
|
||||
<ul>
|
||||
<li ng-class="{odd:$odd}" ng-repeat="(key, prop) in znode.prop">
|
||||
<dl class="clearfix">
|
||||
<dt>{{ key }}</dt>
|
||||
<dd>{{ prop }}</dd>
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="data" ng-show="showData">
|
||||
<em ng-show="!znode.data">Node "{{znode.path }}" has no utf8 Content</em>
|
||||
<pre ng-show="znode.data" class="syntax language-{{lang}}"
|
||||
ng-bind-html="znode.data | highlight:lang | unsafe">
|
||||
</pre>
|
||||
<a class="close" ng-click="hideData()"><span> </span></a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="nodes-content" class="content clearfix" ng-show="showNodes">
|
||||
<div id="controls">
|
||||
<a class="reload" ng-click="initClusterState()"><span>Refresh</span></a>
|
||||
<a class="details-button" ng-click="toggleAllDetails()" ng-class="{on:showAllDetails}">
|
||||
<span>Show all details</span>
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<div id="nodesPaging">
|
||||
<button ng-show="prevEnabled" ng-click="previousPage()" id="nodesPagingPrev">< Previous</button>
|
||||
<span ng-show="filteredHosts.length==0">No hosts found.</span>
|
||||
<span ng-hide="filteredHosts.length==0">Hosts {{from+1}} - {{from + hostsToShow.length}} of {{filteredHosts.length}}.</span>
|
||||
|
||||
Filter by: <select ng-model="filterType" ng-change="filterInput()" id="nodesPagingFilterType">
|
||||
<option value="node">Host/node name</option>
|
||||
<option value="collection">Collection name</option>
|
||||
</select>
|
||||
|
||||
<span ng-show="filterType=='node'">
|
||||
<input ng-model="nodeFilter" type="text" size="10" name="nodefilter" ng-change="filterInput()" ng-model-options='{ debounce: 500 }' />
|
||||
</span>
|
||||
<span ng-show="filterType=='collection'">
|
||||
<input ng-model="collectionFilter" type="text" size="10" name="collectionfilter" ng-change="filterInput()" ng-model-options='{ debounce: 500 }'/>
|
||||
</span>
|
||||
Show <input ng-model="pageSize" ng-change="filterInput()" type="text" size="2" name="rows" ng-model-options='{ debounce: 500 }'/> hosts per page.
|
||||
<button ng-show="nextEnabled" ng-click="nextPage()">Next ></button>
|
||||
</div>
|
||||
</div>
|
||||
<table id="nodes-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Host</th>
|
||||
<th>Node</th>
|
||||
<th>CPU</th>
|
||||
<th>Heap</th>
|
||||
<th>Disk usage</th>
|
||||
<th>Requests</th>
|
||||
<th>Collections</th>
|
||||
<th>Replicas</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="key in nodesToShow | orderBy:'key.order'" ng-init="n = nodes[key]">
|
||||
<td rowspan="{{hosts[n.host].nodes.length}}" ng-show="isFirstNodeForHost(key)">
|
||||
<div class="host-name">{{n.host}}</div>
|
||||
<span class="host-spec" ng-show="!showDetails[n.host]">
|
||||
<span title="{{n.system.system.uptime}}">{{n.system.system.name}}</span>
|
||||
<span title="free: {{n.memFree}}">{{n.memTotal}}</span>
|
||||
<span title="{{n.system.jvm.name}} {{n.system.jvm.version}}">Java {{n.system.jvm.spec.version}}</span>
|
||||
<br/>Load: {{n.loadAvg}}
|
||||
</span>
|
||||
<div class="host-spec" ng-show="showDetails[n.host]">
|
||||
{{n.system.system.name}} {{n.system.system.version}}, {{n.system.system.availableProcessors}}cpu<br/>
|
||||
Uptime: {{n.uptime}}<br/>
|
||||
<span title="Used: {{n.memUsed}} - includes OS file-cache, and it is normal for it to approach 100%">Memory: {{n.memTotal}}</span><br/>
|
||||
File descriptors: {{n.openFileDescriptorCount}}/{{n.maxFileDescriptorCount}}<br/>
|
||||
Disk: <span class="{{n.diskUsedPctStyle}}" title="Nodes may use other disks too">{{n.diskTotal}} used: {{n.diskUsedPct}}%</span><br/>
|
||||
Load: {{n.loadAvg}}
|
||||
</div>
|
||||
<div class="node-spec" ng-click="toggleHostDetails(n.host)">
|
||||
<a ng-show="showDetails[n.host]">hide details...</a>
|
||||
<a ng-show="!showDetails[n.host]">show details...</a>
|
||||
</div>
|
||||
</td>
|
||||
<td><div class="node-name"><a href="{{n.base_url}}">{{key.replace(n.host+':', '')}}</a></div>
|
||||
Uptime: {{n.jvmUptime}}<br/>
|
||||
<div class="node-spec" ng-show="showDetails[key]">
|
||||
Java <span title="{{n.system.jvm.jre.vendor}}">{{n.system.jvm.jre.version}}</span><br/>
|
||||
Solr {{n.system.lucene['solr-impl-version'].split(" ")[0]}}<br>
|
||||
</div>
|
||||
<div class="node-spec" ng-click="toggleDetails(key)">
|
||||
<a ng-show="showDetails[key]">hide details...</a>
|
||||
<a ng-show="!showDetails[key]">show details...</a>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="node-cpu">
|
||||
<span class="{{n.cpuPctStyle}}">{{n.cpuPct}}%</span>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="node-heap" title="total: {{n.heapTotal}} free: {{n.heapFree}} used%: {{n.heapUsedPct}}%">
|
||||
<span class="{{n.heapUsedPctStyle}}">{{n.heapUsedPct}}%</span>
|
||||
</div>
|
||||
<div class="node-spec" ng-show="showDetails[key]">
|
||||
Max: {{n.heapTotal}}<br/>
|
||||
Used: {{n.heapUsed}}
|
||||
</div>
|
||||
</td>
|
||||
<td class="scroll-height-250">
|
||||
<div>
|
||||
<div class="node-disk" title="Available disk: {{n.diskTotal}} free: {{n.diskFree}} used by this node: {{n.size}}">
|
||||
{{n.size}}
|
||||
</div>
|
||||
<div class="node-spec" ng-show="showDetails[key]">
|
||||
Total #docs: {{n.numDocs}}<br/>
|
||||
Avg size/doc: {{n.sizePerDoc}}
|
||||
</div>
|
||||
<div id="chart{{n.id}}" ng-show="showDetails[key]"></div>
|
||||
</div>
|
||||
</td>
|
||||
<td><div class="node-requests" title="1minRate: {{n.req1minRate}} 5minRate: {{n.req5minRate}} 15minRate: {{n.req15minRate}} p75: {{n.reqp75_ms}} p99: {{n.reqp99_ms}}">
|
||||
RPM: {{n.req15minRate}}<br/>p95: {{n.reqp95_ms}}ms</div>
|
||||
</td>
|
||||
<td>
|
||||
<div ng-show="!n.collections">(none)</div>
|
||||
<div ng-repeat="c in n.collections | limitTo:showDetails[key]?999:2 track by $index">
|
||||
<a href="{{n.base_url + '/#/~collections/' + c}}">{{ c }}</a>
|
||||
</div>
|
||||
<div class="more" ng-show="n.collections.length > 2 && !showDetails[key]">
|
||||
<a ng-click="toggleDetails(key)">({{n.collections.length - 2}} more...)</a>
|
||||
</div>
|
||||
</td>
|
||||
<td class="scroll-height-250">
|
||||
<div ng-show="!n.cores">(none)</div>
|
||||
<div ng-repeat="core in n.cores | limitTo:showDetails[key]?999:2 track by $index">
|
||||
<a class="{{core.leader ? 'leader' : 'replica'}}" href="{{core.base_url + '/#/' + core.core}}">{{ core.label }}</a> ({{core.numDocsHuman}} docs)
|
||||
<ul class="core-details" ng-show="showDetails[key]">
|
||||
<li>deleted: {{core.deletedDocsHuman}}</li>
|
||||
<li>warmupTime: {{core.warmupTime}}</li>
|
||||
<li ng-show="core.numDocs > 0">avg size/doc: {{core.avgSizePerDoc}}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="more" ng-show="n.cores.length > 2 && !showDetails[key]">
|
||||
<a ng-click="toggleDetails(key)">({{n.cores.length - 2}} more...)</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div graph data="graphData" leaf-count="leafCount" helper-data="helperData" is-radial="isRadial" id="graph-content" class="content clearfix" ng-show="showGraph">
|
||||
|
||||
<div id="canvas"></div>
|
||||
|
||||
<div id="legend">
|
||||
<ul>
|
||||
<li class="leader"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Leader</li>
|
||||
<li class="active"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Active</li>
|
||||
<li class="recovering"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Recovering</li>
|
||||
<li class="down"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Down</li>
|
||||
<li class="recovery_failed"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Recovery Failed</li>
|
||||
<li class="shard-inactive"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Inactive</li>
|
||||
<li class="gone"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Gone</li>
|
||||
<li class="replicatype"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><rect width="8" height="8"></rect></g></g></svg>Replica Type:<br/>N(NRT),T(TLOG),<br/>P(PULL) </li>
|
||||
</ul>
|
||||
</div>
|
||||
<div style="width: 100%; text-align: center;" ng-show="showPaging">
|
||||
<div id="cloudGraphPaging">
|
||||
<button ng-show="prevEnabled" ng-click="previous()" id="cloudGraphPagingPrev">< Previous</button>
|
||||
<span ng-show="total==0">No collections found.</span>
|
||||
<span ng-hide="total==0">Collections {{start}} - {{last}} of {{total}}.</span>
|
||||
|
||||
Filter by: <select ng-model="filterType" ng-change="initGraph()" id="cloudGraphPagingFilterType">
|
||||
<option value="status">Status</option>
|
||||
<option value="name">Name</option>
|
||||
</select> T:{{filterType}}
|
||||
|
||||
<span ng-show="filterType=='status'">
|
||||
<select ng-model="pagingStatusFilter" id="cloudGraphPagingStatusFilter" ng-change="resetGraph()">
|
||||
<option value=""> - Any - </option>
|
||||
<option value="healthy">Healthy</option>
|
||||
<option value="degraded">Degraded</option>
|
||||
<option value="downed_shard">Downed Shard</option>
|
||||
<option value="recovering">Replica in Recovery</option>
|
||||
</select>
|
||||
</span>
|
||||
<span ng-show="filterType=='name'">
|
||||
<input ng-model="pagingFilter" type="text" size="10" name="filter" ng-change="resetGraph()"/>
|
||||
</span>
|
||||
Show <input ng-model="rows" ng-change="resetGraph()" type="text" size="2" name="rows" /> per page.
|
||||
<button ng-show="nextEnabled" ng-click="next()">Next ></button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="debug" ng-show="showDebug">
|
||||
<ul class="clearfix">
|
||||
<li class="clipboard"><a href="#" data-copied="Copied to Clipboard!">Copy to Clipboard (BUGGY!)</a></li>
|
||||
<li class="close"><a ng-click="closeDebug()">Close</a></li>
|
||||
</ul>
|
||||
<pre class="debug"></pre>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -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>Details</td>
|
||||
<td>Action</td>
|
||||
</tr>
|
||||
<tr ng-if="parsedData.length==0">
|
||||
<td align="center" colspan="4">NA</td>
|
||||
</tr>
|
||||
<tr ng-repeat="x in parsedData">
|
||||
<td>{{ x.type }}</td>
|
||||
<td>{{ x.violation.clause }}</td>
|
||||
<td>node: {{ x.violation.node }}, collection : {{ x.violation.collection }}, shard : {{ x.violation.shard }} </td>
|
||||
<td>
|
||||
<div class="s-container">
|
||||
<input class="s-box1" ng-hide="x.run || x.type =='unresolved-violation'" 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 || x.type == 'unresolved-violation'"><img src="img/ico/cross.png"></div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
<!--
|
||||
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="dashboard">
|
||||
|
||||
<div class="clearfix">
|
||||
|
||||
<div id="collection" class="block fieldlist">
|
||||
|
||||
<h2><span>Collection: {{selectedCollection.name}}</span></h2>
|
||||
|
||||
<div class="content">
|
||||
|
||||
<dl>
|
||||
|
||||
<dt>Config name:</dt>
|
||||
<dd class="value">{{selectedCollection.configName}}</dd>
|
||||
|
||||
<dt>Max shards per node:</dt>
|
||||
<dd class="value">{{selectedCollection.maxShardsPerNode}}</dd>
|
||||
|
||||
<dt>Replication factor:</dt>
|
||||
<dd class="value">{{selectedCollection.replicationFactor}}</dd>
|
||||
|
||||
<dt>Auto-add replicas:</dt>
|
||||
<dd class="ico value" ng-class="selectedCollection.autoAddReplicas=='true' ? 'ico-1' : 'ico-0'"><span>yes</span></dd>
|
||||
|
||||
<dt>Router name:</dt>
|
||||
<dd class="value">{{selectedCollection.router.name}}</dd>
|
||||
|
||||
</dl>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="shards" class="block fieldlist">
|
||||
|
||||
<h2><span>Shards</span></h2>
|
||||
|
||||
<div>
|
||||
|
||||
<div class="shard" ng-repeat="(name, shard) in selectedCollection.shards">
|
||||
<a ng-click="hideShard(shard)"><h3 class="shard-title">{{name}}</h3></a>
|
||||
<dl class="shard-detail clearfix" ng-hide="shard.hide">
|
||||
<dt>Range:</dt>
|
||||
<dd class="value">{{ shard.range }}</dd>
|
||||
|
||||
<dt>Active:</dt>
|
||||
<dd class="ico value" ng-class="shard.state='active' ? 'ico-1' : 'ico-0'"><span>yes</span></dd>
|
||||
|
||||
<dt>Replicas:</dt>
|
||||
<dd>
|
||||
<div class="replica clearfix {{$odd?'odd':''}}" ng-repeat="(name, replica) in shard.replicas">
|
||||
<a ng-click="showReplica(replica)"><h3>{{replica.core}}</h3></a>
|
||||
<dl ng-show="replica.show">
|
||||
<dt>Base URL: </dt><dd>{{replica.base_url}}</dd>
|
||||
<dt>Core: </dt><dd><a href="{{replica.base_url}}{{rootUrl}}#/{{replica.core}}">{{replica.core}}</a></dd>
|
||||
<dt>Active: </dt>
|
||||
<dd class="ico value" ng-class="replica.state == 'active' ? 'ico-1' : 'ico-0'"><span>yes</span></dd>
|
||||
<dt>Leader: </dt>
|
||||
<dd class="ico value" ng-class="replica.leader == 'true' ? 'ico-1' : 'ico-0'"><span>yes</span></dd>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,366 @@
|
||||
<!--
|
||||
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="collections" class="clearfix empty">
|
||||
|
||||
<div id="ui-block" style="display:none"> </div><!-- @todo what is this for? -->
|
||||
|
||||
<div id="frame">
|
||||
|
||||
<div id="actions" class="actions clearfix">
|
||||
|
||||
<button id="add" class="action" ng-click="showAddCollection()"><span>Add Collection</span></button>
|
||||
|
||||
<button id="delete" class="warn requires-core" ng-click="showDeleteCollection()" ng-show="collection"><span>Delete</span></button>
|
||||
<button id="reload" class="requires-core" ng-click="reloadCollection()" ng-show="collection"
|
||||
ng-class="{success: reloadSuccess, warn: reloadFailure}"><span>Reload</span></button>
|
||||
<button id="create-alias" class="action requires-core" ng-click="toggleCreateAlias()"><span>Create Alias</span></button>
|
||||
<button id="delete-alias" class="action requires-core" ng-click="toggleDeleteAlias()"><span>Delete Alias</span></button>
|
||||
|
||||
<div class="action add" data-rel="add" ng-show="showAdd" style="left:0px">
|
||||
|
||||
<form>
|
||||
|
||||
<p class="clearfix"><label for="add_name">name:</label>
|
||||
<input type="text" name="name" id="add_name" ng-model="newCollection.name" placeholder="new collection"></p>
|
||||
|
||||
<p class="clearfix"><label for="add_config">config set:</label>
|
||||
<select chosen ng-options="config.name as config.name for config in configs" name="config_name" id="add_config" ng-model="newCollection.configName">
|
||||
</select>
|
||||
</p>
|
||||
|
||||
<p class="clearfix"><label for="add_numShards">numShards:</label>
|
||||
<input type="text" name="numShards" id="add_numShards" ng-model="newCollection.numShards"></p>
|
||||
|
||||
<p class="clearfix"><label for="add_replicationFactor">replicationFactor:</label>
|
||||
<input type="text" name="replicationFactor" id="add_replicationFactor" ng-model="newCollection.replicationFactor"></p>
|
||||
|
||||
<p class="clearfix"><a ng-click="showAdvanced=!showAdvanced">
|
||||
<span id="add_advanced" ng-class="{open: showAdvanced}">Show advanced</span></a></p>
|
||||
<div ng-show="showAdvanced">
|
||||
|
||||
<p>Advanced options: </p>
|
||||
<p class="clearfix"><label for="add_router_name">router:</label>
|
||||
<select name="routerName" id="add_router_name" ng-model="newCollection.routerName">
|
||||
<option value="compositeId">Composite ID</option>
|
||||
<option value="implicit">Implicit</option>
|
||||
</select>
|
||||
</p>
|
||||
|
||||
<p class="clearfix"><label for="add_maxShardsPerNode">maxShardsPerNode:</label>
|
||||
<input type="text" name="replicationFactor" id="add_maxShardsPerNode" ng-model="newCollection.maxShardsPerNode"></p>
|
||||
|
||||
<p class="clearfix"><label for="add_shards">shards:</label>
|
||||
<input type="text" name="shards" id="add_shards" ng-model="newCollection.shards"></p>
|
||||
|
||||
<p class="clearfix"><label for="add_routerField">router.field:</label>
|
||||
<input type="text" name="routerField" id="add_routerField" ng-model="newCollection.routerField"></p>
|
||||
|
||||
<p class="clearfix"><label for="add_autoAddReplicas">autoAddReplicas:</label>
|
||||
<select name="autoAddReplicas" id="add_autoAddReplicas" ng-model="newCollection.autoAddReplicas">
|
||||
<option value="true">true</option>
|
||||
<option value="false">false</option>
|
||||
</select>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
<p class="clearfix note error" ng-show="addMessage">
|
||||
<span>{{addMessage}}</span>
|
||||
</p>
|
||||
|
||||
<p class="clearfix buttons">
|
||||
<button type="submit" class="submit" ng-click="addCollection()"><span>Add Collection</span></button>
|
||||
<button type="reset" class="reset" ng-click="cancelAddCollection()"><span>Cancel</span></button>
|
||||
</p>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="action delete" ng-show="showDelete">
|
||||
|
||||
<form>
|
||||
|
||||
<p>Please type collection name to confirm deletion:</p>
|
||||
<p class="clearfix"><label for="collectiondeleteConfirm">Collection</label>
|
||||
<input type="text" ng-model="collectionDeleteConfirm" id="collectionDeleteConfirm"></p>
|
||||
|
||||
<p class="clearfix note error" ng-show="deleteMessage">
|
||||
<span>{{deleteMessage}}</span>
|
||||
</p>
|
||||
|
||||
<p class="clearfix buttons">
|
||||
<button class="submit" ng-click="deleteCollection()"><span>Delete</span></button>
|
||||
<button type="reset" class="reset" ng-click="showDelete=false"><span>Cancel</span></button>
|
||||
</p>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="action create-alias" ng-show="showCreateAlias">
|
||||
|
||||
<form>
|
||||
|
||||
<input type="hidden" name="core" data-core="current">
|
||||
|
||||
<p class="clearfix"><label for="alias">Alias Name:</label>
|
||||
<input type="text" name="alias" ng-model="aliasToCreate" id="alias"></p>
|
||||
|
||||
<p class="clearfix"><label for="aliasCollections">Collections:</label>
|
||||
<select multiple id="aliasCollections" ng-model="aliasCollections" ng-options="collection.name for collection in collections" class="other">
|
||||
</select></p>
|
||||
|
||||
|
||||
<p class="clearfix note error" ng-show="renameMessage">
|
||||
<span>{{renameMessage}}</span>
|
||||
</p>
|
||||
|
||||
<p class="clearfix buttons">
|
||||
<button class="submit" ng-click="createAlias()"><span>Create Alias</span></button>
|
||||
<button type="reset" class="reset" ng-click="cancelCreateAlias()"><span>Cancel</span></button>
|
||||
</p>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="action delete-alias" ng-show="showDeleteAlias">
|
||||
|
||||
<form>
|
||||
<span ng-show="aliases">
|
||||
<p class="clearfix"><label for="deleteAlias">Alias:</label>
|
||||
<select id="deleteAlias" ng-model="aliasToDelete" ng-options="alias as alias for (alias, collections) in aliases" class="other">
|
||||
</select></p>
|
||||
|
||||
<p class="clearfix note error" ng-show="swapMessage">
|
||||
<span>{{swapMessage}}</span>
|
||||
</p>
|
||||
|
||||
<p class="clearfix buttons">
|
||||
<button type="submit" class="submit" ng-click="deleteAlias()"><span>Delete Alias</span></button>
|
||||
<button type="reset" class="reset" ng-click="cancelDeleteAlias()"><span>Cancel</span></button>
|
||||
</p>
|
||||
</span>
|
||||
<span ng-hide="aliases">
|
||||
<p>No aliases to delete.</p>
|
||||
<p class="clearfix buttons">
|
||||
<button type="reset" class="reset" ng-click="cancelDeleteAlias()"><span>Cancel</span></button>
|
||||
</p>
|
||||
</span>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="requires-core" ng-hide="collection">
|
||||
<h2>Please select a collection</h2>
|
||||
</div>
|
||||
|
||||
<div id="data" class="requires-core clearfix" ng-show="collection">
|
||||
|
||||
<div class="block" id="collection-data">
|
||||
|
||||
<h2>Collection: {{collection.name}}</h2>
|
||||
|
||||
<div class="message-container">
|
||||
<div class="message"></div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
|
||||
<ul>
|
||||
|
||||
<li>
|
||||
<dl class="clearfix">
|
||||
<dt><span>Shard count:</span></dt>
|
||||
<dd>{{collection.shards.length}}</dd>
|
||||
</dl>
|
||||
</li>
|
||||
<li><dl class="clearfix">
|
||||
<dt><span>configName:</span></dt>
|
||||
<dd>{{collection.configName}}</dd>
|
||||
</dl></li>
|
||||
|
||||
<li><dl class="clearfix">
|
||||
<dt><span>replicationFactor:</span></dt>
|
||||
<dd>{{collection.replicationFactor}}</dd>
|
||||
</dl></li>
|
||||
|
||||
<li><dl class="clearfix">
|
||||
<dt><span>maxShardsPerNode:</span></dt>
|
||||
<dd>{{collection.maxShardsPerNode}}</dd>
|
||||
</dl></li>
|
||||
|
||||
<li><dl class="clearfix">
|
||||
<dt><span>router:</span></dt>
|
||||
<dd>{{collection.router.name}}</dd>
|
||||
</dl></li>
|
||||
|
||||
<li><dl class="clearfix">
|
||||
<dt><span>autoAddReplicas:</span></dt>
|
||||
<dd>{{collection.autoAddReplicas}}</dd>
|
||||
</dl></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="block" id="shard-data">
|
||||
<div class="content shard" ng-repeat="shard in collection.shards">
|
||||
<a ng-click="toggleShard(shard)">
|
||||
<h2>
|
||||
<span ng-class="{open:shard.show}"><b>Shard: {{shard.name}}</b></span>
|
||||
<div style="float:right" ng-show="!shard.range || shard.state == 'inactive'"><a ng-click="toggleRemoveShard(shard)"><span class="rem"></span></a></div>
|
||||
</h2>
|
||||
</a>
|
||||
<ul ng-show="shard.showRemove">
|
||||
<li>
|
||||
<form class="delete-shard">
|
||||
<p class="clearfix"><em>Are you sure you want to delete this shard?</em></p>
|
||||
<p class="clearfix buttons">
|
||||
<button class="submit" ng-class="{success: shard.deleted}" ng-click="deleteShard(shard)"><span>Delete Shard</span></button>
|
||||
<button type="reset" class="reset" ng-click="toggleRemoveShard(shard)"><span>Cancel</span></button>
|
||||
</p>
|
||||
</form>
|
||||
</li>
|
||||
</ul>
|
||||
<ul ng-show="shard.show">
|
||||
<li>
|
||||
<ul>
|
||||
<li>
|
||||
<dl class="clearfix">
|
||||
<dt><span>state:</span></dt>
|
||||
<dd>{{shard.state}}</dd>
|
||||
</dl>
|
||||
</li>
|
||||
<li>
|
||||
<dl class="clearfix">
|
||||
<dt><span>range:</span></dt>
|
||||
<dd>{{shard.range}}</dd>
|
||||
</dl>
|
||||
<br/>
|
||||
</li>
|
||||
<li>
|
||||
<ul class="replica" ng-repeat="replica in shard.replicas">
|
||||
<li>
|
||||
<h2>
|
||||
<a ng-click="toggleReplica(replica)">
|
||||
<span class="openReplica" ng-class="{open:replica.show}">Replica: {{replica.name}}</span>
|
||||
</a>
|
||||
<div style="float:right"><a ng-click="toggleRemoveReplica(replica)"><span class="rem"></span></a></div>
|
||||
</h2>
|
||||
</li>
|
||||
<li>
|
||||
<ul ng-show="replica.showRemove">
|
||||
<li>
|
||||
<form class="delete-replica">
|
||||
|
||||
<p class="clearfix"><em>Are you sure you want to delete this replica?</em></p>
|
||||
|
||||
<p class="clearfix buttons">
|
||||
<button class="submit" ng-class="{success: replica.deleted}" ng-click="deleteReplica(replica)"><span>Delete Replica</span></button>
|
||||
<button type="reset" class="reset" ng-click="toggleRemoveReplica(replica)"><span>Cancel</span></button>
|
||||
</p>
|
||||
</form>
|
||||
</li>
|
||||
</ul>
|
||||
<ul ng-show="replica.show">
|
||||
<li>
|
||||
<dl class="clearfix">
|
||||
<dt><span>core:</span></dt>
|
||||
<dd>{{replica.core}}</dd>
|
||||
</dl>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<dl class="clearfix">
|
||||
<dt><span>base URL:</span></dt>
|
||||
<dd><a ng-href="{{replica.base_url}}{{rootUrl}}">{{replica.base_url}}</a></dd>
|
||||
</dl>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<dl class="clearfix">
|
||||
<dt><span>node name:</span></dt>
|
||||
<dd>{{replica.node_name}}</dd>
|
||||
</dl>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<dl class="clearfix">
|
||||
<dt><span>state:</span></dt>
|
||||
<dd>{{replica.state}}</dd>
|
||||
</dl>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<dl class="clearfix">
|
||||
<dt><span>leader:</span></dt>
|
||||
<dd class="ico" ng-class="replica.leader ?'ico-1' : 'ico-0'"><span></span></dd>
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
<li ng-hide="shard.showAdd">
|
||||
<span class="actions replica">
|
||||
<button class="action" id="add-replica" ng-click="toggleAddReplica(shard)"><span>add replica</span></button>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="action add-replica" ng-show="shard.showAdd">
|
||||
|
||||
<form>
|
||||
|
||||
<p id="node-name" class="clearfix"><label for="node-name">Node:</label>
|
||||
<select chosen ng-model="shard.replicaNodeName" ng-options="node for node in nodes" class="other">
|
||||
<option value="">No specified node</option>
|
||||
</select>
|
||||
node: {{shard.replicaNodeName}}
|
||||
</p>
|
||||
|
||||
<p class="clearfix note error" ng-show="createReplicaMessage">
|
||||
<span>{{createReplicaMessage}}</span>
|
||||
</p>
|
||||
|
||||
<p class="clearfix buttons">
|
||||
<button class="submit delete" ng-class="{success: shard.replicaAdded}" ng-click="addReplica(shard)"><span>Create Replica</span></button>
|
||||
<button type="reset" class="reset" ng-click="toggleAddReplica(shard)"><span>Cancel</span></button>
|
||||
</p>
|
||||
<p clas="clearfix"> </p>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="navigation" class="requires-core clearfix">
|
||||
<ul>
|
||||
<li ng-repeat="c in collections" ng-class="{current: collection.name == c.name}"><a href="#~collections/{{c.name}}">{{c.name}}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,206 @@
|
||||
<!--
|
||||
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="dashboard">
|
||||
|
||||
<div class="clearfix">
|
||||
|
||||
<div class="block fieldlist" id="statistics" ng-class="{disabled: statisticsDisabled}">
|
||||
|
||||
<h2><span>Statistics</span></h2>
|
||||
|
||||
<div class="message-container" ng-show="statsMessage">
|
||||
<div class="message">{{statsMessage}}</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
|
||||
<dl>
|
||||
|
||||
<dt>Last Modified:</dt>
|
||||
<dd class="value">{{index.lastModified | timeago}}</dd>
|
||||
|
||||
<dt class="index_num-docs">Num Docs:</dt>
|
||||
<dd class="value">{{index.numDocs}}</dd>
|
||||
|
||||
<dt class="index_max-doc">Max Doc:</dt>
|
||||
<dd class="index_max-doc value">{{index.maxDoc}}</dd>
|
||||
|
||||
<dt class="index_heap-usage-bytes">Heap Memory Usage:</dt>
|
||||
<dd class="index_heap-usage-bytes value">{{index.indexHeapUsageBytes}}</dd>
|
||||
|
||||
<dt class="index_deleted-docs">Deleted Docs:</dt>
|
||||
<dd class="index_deleted-docs value">{{index.deletedDocs}}</dd>
|
||||
|
||||
<dt class="index_version">Version:</dt>
|
||||
<dd class="index_version value">{{index.version}}</dd>
|
||||
|
||||
<dt class="index_segmentCount">Segment Count:</dt>
|
||||
<dd class="index_segmentCount value">{{index.segmentCount}}</dd>
|
||||
|
||||
<dt class="index_current">Current:</dt>
|
||||
<dd class="ico" ng-class="index.current ?'ico-1' : 'ico-0'"><span></span></dd>
|
||||
|
||||
</dl>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="block fieldlist" id="instance">
|
||||
|
||||
<h2><span>Instance</span></h2>
|
||||
|
||||
<div class="message-container" ng-show="indexMessage">
|
||||
<div class="message">{{indexMessage}}</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
|
||||
<dl>
|
||||
|
||||
<dt><abbr title="Current Working Directory">CWD</abbr>:</dt>
|
||||
<dd class="value">{{ core.directory.cwd }}</dd>
|
||||
|
||||
<dt>Instance:</dt>
|
||||
<dd class="value">{{ core.directory.instance }}</dd>
|
||||
|
||||
<dt>Data:</dt>
|
||||
<dd class="value">{{ core.directory.data }}</dd>
|
||||
|
||||
<dt>Index:</dt>
|
||||
<dd class="value">{{ core.directory.index }}</dd>
|
||||
|
||||
<dt>Impl:</dt>
|
||||
<dd class="value">{{ core.directory.dirimpl }}</dd>
|
||||
|
||||
</dl>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="clearfix">
|
||||
|
||||
<div class="block" id="replication">
|
||||
|
||||
<h2>
|
||||
<span class="is-replicating">
|
||||
Replication
|
||||
<span ng-show="isSlave"> (Slave)</span>
|
||||
<span ng-show="isMaster"> (Master)</span>
|
||||
</span>
|
||||
</h2>
|
||||
|
||||
<div class="message-container" ng-show="replicationMessage">
|
||||
<div class="message">{{replicationMessage}}</div>
|
||||
</div>
|
||||
|
||||
<div class="content clearfix" id="details">
|
||||
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
|
||||
<thead>
|
||||
|
||||
<tr>
|
||||
|
||||
<td><span>Index</span></td>
|
||||
<th>Version</th>
|
||||
<th><abbr title="Generation">Gen</abbr></th>
|
||||
<th>Size</th>
|
||||
|
||||
</tr>
|
||||
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
<tr class="masterSearch" ng-show="isMaster">
|
||||
|
||||
<th>Master (Searching)</th>
|
||||
<td class="version"><div>{{replication.indexVersion}}</div></td>
|
||||
<td class="generation"><div>{{replication.generation}}</div></td>
|
||||
<td class="size"><div>{{replication.indexSize || '-'}}</div></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr class="master" ng-show="isMaster">
|
||||
|
||||
<th>Master (Replicable)</th>
|
||||
<td class="version"><div>{{replication.master.replicableVersion || '-'}}</div></td>
|
||||
<td class="generation"><div>{{replication.master.replicableGeneration || '-'}}</div></td>
|
||||
<td class="size"><div>-</div></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr class="master" ng-show="isSlave">
|
||||
|
||||
<th>Master (Replicable)</th>
|
||||
<td class="version"><div>{{replication.master.replicableVersion || '-'}}</div></td>
|
||||
<td class="generation"><div>{{replication.master.replicableGeneration || '-'}}</div></td>
|
||||
<td class="size"><div>-</div></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr class="masterSearch" ng-show="isSlave">
|
||||
|
||||
<th>Master (Searching)</th>
|
||||
<td class="version"><div>{{replication.slave.masterDetails.indexVersion}}</div></td>
|
||||
<td class="generation"><div>{{replication.slave.masterDetails.generation}}</div></td>
|
||||
<td class="size"><div>{{replication.slave.masterDetails.indexSize || '-'}}</div></td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr class="slave slaveOnly" ng-show="isSlave">
|
||||
|
||||
<th>Slave (Searching)</th>
|
||||
<td class="version"><div>{{replication.indexVersion}}</div></td>
|
||||
<td class="generation"><div>{{replication.generation}}</div></td>
|
||||
<td class="size"><div>{{replication.indexSize || '-'}}</div></td>
|
||||
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="block fieldlist" id="healthcheck" ng-class="{disabled: healthcheckMessage}">
|
||||
|
||||
<h2><span>Healthcheck</span></h2>
|
||||
|
||||
<div class="message-container" ng-show="healthcheckMessage">
|
||||
<div class="message">{{healthcheckMessage}}</div>
|
||||
</div>
|
||||
|
||||
<div class="content" ng-show="!healthcheckMessage">
|
||||
<dl>
|
||||
|
||||
<dt class="status">Status:</dt>
|
||||
<dd class="status value ico ico-1" ng-show="healthcheckStatus">
|
||||
<button class="healthcheck-status enabled">Healthcheck Status</button>
|
||||
</dd>
|
||||
<dd class="status value ico ico-0" ng-show="!healthcheckStatus">
|
||||
<button class="healthcheck-status">enable ping</button>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,224 @@
|
||||
<!--
|
||||
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="cores" class="clearfix empty">
|
||||
|
||||
<div id="ui-block" style="display:none"> </div><!-- @todo what is this for? -->
|
||||
|
||||
<div id="frame">
|
||||
|
||||
<div id="actions" class="actions clearfix">
|
||||
|
||||
<button id="add" class="action" ng-click="showAddCore()"><span>Add Core</span></button>
|
||||
<span ng-show="hasCores">
|
||||
<button id="unload" class="warn requires-core" ng-click="unloadCore()"><span>Unload</span></button>
|
||||
<button id="rename" class="action requires-core" ng-click="showRenameCore()"><span>Rename</span></button>
|
||||
<button id="swap" class="action requires-core" ng-click="showSwapCores()"><span>Swap</span></button>
|
||||
<button id="reload" class="requires-core" ng-click="reloadCore()"
|
||||
ng-class="{success: reloadSuccess, warn: reloadFailure}"><span>Reload</span></button>
|
||||
</span>
|
||||
<div class="action add" data-rel="add" ng-show="showAdd" style="display:block;left:0px;">
|
||||
|
||||
<form>
|
||||
|
||||
<p class="clearfix"><label for="add_name">name:</label>
|
||||
<input type="text" name="name" id="add_name" ng-model="newCore.name"></p>
|
||||
|
||||
<p class="clearfix"><label for="add_instanceDir">instanceDir:</label>
|
||||
<input type="text" name="instanceDir" id="add_instanceDir" ng-model="newCore.instanceDir"></p>
|
||||
|
||||
<p class="clearfix"><label for="add_dataDir">dataDir:</label>
|
||||
<input type="text" name="dataDir" id="add_dataDir" ng-model="newCore.dataDir"></p>
|
||||
|
||||
<p class="clearfix"><label for="add_config">config:</label>
|
||||
<input type="text" name="config" id="add_config" ng-model="newCore.config"></p>
|
||||
|
||||
<p class="clearfix"><label for="add_schema">schema:</label>
|
||||
<input type="text" name="schema" id="add_schema" ng-model="newCore.schema"></p>
|
||||
|
||||
<div class="cloud" ng-show="isCloud">
|
||||
|
||||
<p class="clearfix"><label for="add_collection">collection:</label>
|
||||
<input type="text" name="collection" id="add_collection" ng-model="newCore.collection"></p>
|
||||
|
||||
<p class="clearfix"><label for="add_shard">shard:</label>
|
||||
<input type="text" name="add_shard" id="add_shard" ng-model="newCore.shard"></p>
|
||||
|
||||
</div>
|
||||
|
||||
<p class="clearfix note directory-note">
|
||||
|
||||
<span><code>instanceDir</code> and <code>dataDir</code> need to exist before you can create the core</span>
|
||||
|
||||
</p>
|
||||
|
||||
<p class="clearfix note error" ng-show="addMessage">
|
||||
<span>{{addMessage}}</span>
|
||||
</p>
|
||||
|
||||
<p class="clearfix buttons">
|
||||
<button type="submit" class="submit" ng-click="addCore()"><span>Add Core</span></button>
|
||||
<button type="reset" class="reset" ng-click="cancelAddCore()"><span>Cancel</span></button>
|
||||
</p>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="action rename" ng-show="showRename">
|
||||
|
||||
<form>
|
||||
|
||||
<input type="hidden" name="core" data-core="current">
|
||||
|
||||
<p class="clearfix"><label for="rename_other">New Name:</label>
|
||||
<input type="text" name="other" ng-model="other" id="rename_other"></p>
|
||||
|
||||
<p class="clearfix note error" ng-show="renameMessage">
|
||||
<span>{{renameMessage}}</span>
|
||||
</p>
|
||||
|
||||
<p class="clearfix buttons">
|
||||
<button class="submit" ng-click="renameCore()"><span>Rename Core</span></button>
|
||||
<button type="reset" class="reset" ng-click="cancelRenameCore()"><span>Cancel</span></button>
|
||||
</p>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="action swap" ng-show="showSwap">
|
||||
|
||||
<form>
|
||||
|
||||
<p class="clearfix"><label for="swap_core">this:</label>
|
||||
<input type="text" id="swap_core" name="core" ng-model="selectedCore" readonly="readonly"></p>
|
||||
|
||||
<p class="clearfix"><label for="swap_other">and:</label>
|
||||
<select id="swap_other" ng-model="swapOther" ng-options="core.name as core.name for core in swapCorelist" class="other">
|
||||
</select></p>
|
||||
|
||||
<p class="clearfix note error" ng-show="swapMessage">
|
||||
<span>{{swapMessage}}</span>
|
||||
</p>
|
||||
|
||||
<p class="clearfix buttons">
|
||||
<button type="submit" class="submit" ng-click="swapCores()"><span>Swap Cores</span></button>
|
||||
<button type="reset" class="reset" ng-click="cancelSwapCores()"><span>Cancel</span></button>
|
||||
</p>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="data" class="requires-core" ng-show="hasCores">
|
||||
|
||||
<div class="block" id="core-data">
|
||||
|
||||
<h2><span>Core</span></h2>
|
||||
|
||||
<div class="message-container">
|
||||
<div class="message"></div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
|
||||
<ul>
|
||||
|
||||
<li class="startTime"><dl class="clearfix">
|
||||
<dt><span>startTime:</span></dt>
|
||||
<dd class="timeago">{{core.startTime | timeago}}</dd>
|
||||
</dl></li>
|
||||
|
||||
<li class="instanceDir"><dl class="clearfix">
|
||||
<dt><span>instanceDir:</span></dt>
|
||||
<dd>{{core.instanceDir}}</dd>
|
||||
</dl></li>
|
||||
|
||||
<li class="dataDir"><dl class="clearfix">
|
||||
<dt><span>dataDir:</span></dt>
|
||||
<dd>{{core.dataDir}}</dd>
|
||||
</dl></li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="block" id="index-data" ng-show="hasCores">
|
||||
|
||||
<h2><span>Index</span></h2>
|
||||
|
||||
<div class="message-container">
|
||||
<div class="message">{{core.message}}</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
|
||||
<ul>
|
||||
|
||||
<li class="lastModified"><dl class="clearfix">
|
||||
<dt><span>lastModified:</span></dt>
|
||||
<dd class="timeago">{{core.index.lastModified | timeago}}</dd>
|
||||
</dl></li>
|
||||
|
||||
<li class="version"><dl class="clearfix">
|
||||
<dt><span>version:</span></dt>
|
||||
<dd>{{core.index.version}}</dd>
|
||||
</dl></li>
|
||||
|
||||
<li class="numDocs"><dl class="clearfix">
|
||||
<dt><span>numDocs:</span></dt>
|
||||
<dd>{{core.index.numDocs}}</dd>
|
||||
</dl></li>
|
||||
|
||||
<li class="maxDoc"><dl class="clearfix">
|
||||
<dt><span>maxDoc:</span></dt>
|
||||
<dd>{{core.index.maxDoc}}</dd>
|
||||
</dl></li>
|
||||
|
||||
<li class="deletedDocs"><dl class="clearfix">
|
||||
<dt><span>deletedDocs:</span></dt>
|
||||
<dd>{{core.index.deletedDocs}}</dd>
|
||||
</dl></li>
|
||||
|
||||
<li class="current"><dl class="clearfix">
|
||||
<dt><span>current:</span></dt>
|
||||
<dd class="ico" ng-class="core.index.current ?'ico-1' : 'ico-0'"><span></span></dd>
|
||||
</dl></li>
|
||||
|
||||
<li class="directory"><dl class="clearfix">
|
||||
<dt><span>directory:</span></dt>
|
||||
<dd>{{core.index.directory}}</dd>
|
||||
</dl></li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="navigation" class="requires-core clearfix" ng-show="hasCores">
|
||||
<ul>
|
||||
<li ng-repeat="c in cores" ng-class="{current: core.name == c.name}"><a href="#~cores/{{c.name}}">{{c.name}}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,209 @@
|
||||
<!--
|
||||
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="dataimport" class="clearfix">
|
||||
|
||||
<div ng-show="!hasHandlers">The solrconfig.xml file for this index does not have an operational DataImportHandler defined!</div>
|
||||
<div id="frame" ng-show="hasHandlers">
|
||||
|
||||
<div id="error" ng-show="error"></div>
|
||||
|
||||
<div id="current_state" class="{{status}}">
|
||||
|
||||
<p class="last_update">Last Update: <abbr title="{{lastUpdateUTC}}">{{lastUpdate}}</abbr></p>
|
||||
<div class="info">
|
||||
|
||||
<strong>{{info.text}}<span ng-show="info.timeTaken"> (Duration: {{info.timeTaken | readableSeconds }})</span>
|
||||
</strong>
|
||||
<div class="details" ng-show="info.showDetails">
|
||||
<div class="docs">
|
||||
<span ng-repeat="doc in info.docs">
|
||||
<abbr style="display:inline" title="{{ doc.desc }}">{{ doc.name }}</abbr>: {{doc.value | number}}<!-- remove whitespace!
|
||||
--> <span style="display:inline" ng-show="doc.speed">{{ doc.speed | number}}/s</span><!-- remove whitespace!
|
||||
--><span style="display:inline" ng-show="!$last">, </span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="dates">
|
||||
<span ng-repeat="date in info.dates">
|
||||
<abbr title="{{ date.desc }}">{{ date.name }}</abbr>:
|
||||
<abbr class="time">{{ date.value | timeago }}</abbr>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button class="abort-import" ng-class="{warn:!isAborting, success: isAborting}" ng-click="abort()" ng-show="isRunning">
|
||||
<span ng-show="isAborting">Aborting Import</span>
|
||||
<span ng-show="!isAborting">Abort Import</span>
|
||||
</button>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="block" id="raw_output" >
|
||||
|
||||
<h2>
|
||||
<a class="toggle" ng-click="toggleRawStatus()"><span>Raw Status-Output</span></a>
|
||||
</h2>
|
||||
|
||||
<div class="message-container" ng-show="showRawStatus">
|
||||
<div class="message"></div>
|
||||
</div>
|
||||
|
||||
<div class="content" ng-show="showRawStatus">
|
||||
|
||||
<div id="raw_output_container"><pre class="syntax language-json"><code ng-bind-html="rawStatus | highlight:'json' | unsafe"></code></pre></div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="block" id="config" ng-class="{debug_mode:isDebugMode}">
|
||||
|
||||
<h2 class="clearfix">
|
||||
<a class="toggle" ng-click="toggleConfiguration()"><span>Configuration</span></a>
|
||||
<a class="r reload_config" ng-class="{success:reloaded}" ng-click="reload()" title="Reload Configuration">Reload</a>
|
||||
<a class="r debug_mode" ng-click="toggleDebug()">Debug-Mode</a>
|
||||
</h2>
|
||||
|
||||
<div class="message-container" ng-show="showConfiguration">
|
||||
<div class="message"></div>
|
||||
</div>
|
||||
|
||||
<div class="content" ng-show="showConfiguration">
|
||||
<div id="dataimport_config">
|
||||
|
||||
<div class="formatted" ng-show="!isDebugMode">
|
||||
|
||||
<pre class="syntax language-xml"><code ng-bind-html="config | highlight:'xml'| unsafe"></code></pre>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="editable" ng-show="isDebugMode">
|
||||
|
||||
<textarea ng-model="config"></textarea>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="block" id="debug_response" ng-show="form.showDebug">
|
||||
|
||||
<h2>
|
||||
<a class="toggle" ng-click="toggleRawDebug()"><span>Raw Debug-Response</span></a>
|
||||
</h2>
|
||||
|
||||
<div class="message-container" ng-show="showRawDebug">
|
||||
<div class="message"></div>
|
||||
</div>
|
||||
|
||||
<div class="content" ng-show="showRawDebug">
|
||||
<span ng-hide="rawResponse">
|
||||
<em>No Request executed</em>
|
||||
</span>
|
||||
<span ng-show="rawResponse">
|
||||
<pre class="syntax language-json"><code ng-bind-html="rawResponse | highlight:'json' | unsafe"></code></pre>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="form" ng-show="hasHandlers">
|
||||
|
||||
<div id="navigation">
|
||||
|
||||
<ul>
|
||||
<li ng-class="{current: currentHandler == handler}" ng-repeat="handler in handlers">
|
||||
<a href="#/{{form.core}}/dataimport/{{handler}}">{{handler}}</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
<form action="#" method="get">
|
||||
|
||||
<label for="command">
|
||||
<a rel="help">Command</a>
|
||||
</label>
|
||||
<select name="command" id="command" ng-model="form.command">
|
||||
<option>full-import</option>
|
||||
<option>delta-import</option>
|
||||
</select>
|
||||
|
||||
<label for="verbose" class="checkbox">
|
||||
<input type="checkbox" name="verbose" id="verbose" ng-model="form.verbose">
|
||||
Verbose
|
||||
</label>
|
||||
|
||||
<label for="clean" class="checkbox">
|
||||
<input type="checkbox" name="clean" id="clean" ng-model="form.clean">
|
||||
Clean
|
||||
</label>
|
||||
|
||||
<label for="commit" class="checkbox">
|
||||
<input type="checkbox" name="commit" id="commit" ng-model="form.commit">
|
||||
Commit
|
||||
</label>
|
||||
|
||||
<label for="optimize" class="checkbox">
|
||||
<input type="checkbox" name="optimize" id="optimize" ng-model="form.optimize">
|
||||
Optimize
|
||||
</label>
|
||||
|
||||
<label for="debug" class="checkbox">
|
||||
<input type="checkbox" name="debug" id="debug" ng-model="form.showDebug">
|
||||
Debug
|
||||
</label>
|
||||
|
||||
<label for="entity">
|
||||
<a rel="help">Entity</a>
|
||||
</label>
|
||||
<select ng-model="form.entity" id="entity">
|
||||
<option value=""></option>
|
||||
<option ng-repeat="entity in entities">{{entity}}</option>
|
||||
</select>
|
||||
|
||||
<label for="start">
|
||||
<a rel="help">Start</a>,
|
||||
<a rel="help">Rows</a>
|
||||
</label>
|
||||
<div class="clearfix">
|
||||
<input type="text" id="start" placeholder="0" ng-model="form.start">
|
||||
<input type="text" id="rows" placeholder="10" ng-model="form.rows">
|
||||
</div>
|
||||
|
||||
<label for="custom_parameters">
|
||||
<a rel="help">Custom Parameters</a>
|
||||
</label>
|
||||
<input type="text" id="custom_parameters" ng-model="form.custom" placeholder="key1=val1&key2=val2">
|
||||
</form>
|
||||
<button class="execute" type="submit" ng-click="submit()">
|
||||
<span ng-show="isDebugMode">Execute with this Configuration →</span>
|
||||
<span ng-show="!isDebugMode">Execute</span>
|
||||
</button>
|
||||
<button class="refresh-status" ng-click="refreshStatus()" ng-class="{loader: isStatusLoading, success: statusUpdated}"><span>Refresh Status</span></button>
|
||||
|
||||
<p id="auto-refresh-status"><a ng-click="updateAutoRefresh()" ng-class="{on:autorefresh}">Auto-Refresh Status</a></p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,111 @@
|
||||
<!--
|
||||
/*
|
||||
* 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="documents" class="clearfix">
|
||||
<div id="form">
|
||||
<form>
|
||||
<label for="qt">
|
||||
<a rel="help">Request-Handler (qt)</a>
|
||||
</label>
|
||||
<input ng-model="handler" type="text" id="qt" value="/update" title="Request handler in solrconfig.xml.">
|
||||
<label for="document-type">
|
||||
<a rel="help">Document Type</a>
|
||||
</label>
|
||||
|
||||
<div><select ng-model="type" id="document-type" ng-change="changeDocumentType()" placeholder="The type of the document field">
|
||||
<!-- TODO: support the Builder -->
|
||||
<option value="csv">CSV</option>
|
||||
<option value="wizard">Document Builder</option>
|
||||
<option value="upload">File Upload</option>
|
||||
<option value="json">JSON</option>
|
||||
<option value="solr">Solr Command (raw XML or JSON)</option>
|
||||
<option value="xml">XML</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="document-container">
|
||||
<div id="wizard" ng-show="type=='wizard'">
|
||||
<div id="wizard-fields">
|
||||
<div><span class="description">Field</span>: <select ng-model="fieldName" id="wiz-field-select" name="wiz-field-select"
|
||||
ng-options="field for field in fields"></select>
|
||||
</div>
|
||||
<div><span id="wiz-field-data"><span class="description">Field Data</span>:</span>
|
||||
<textarea ng-model="fieldData"
|
||||
id="wizard-doc"
|
||||
name="wizard-doc"
|
||||
rows="10"
|
||||
cols="40"
|
||||
placeholder="Enter your field text here and then click 'Add Field' to add the field to the document.">
|
||||
</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div id="wizard-add"><a ng-click="addWizardField()" id="add-field-href"><img border="0" src="./img/ico/plus-button.png"/>Add
|
||||
Field</a></div>
|
||||
</div>
|
||||
<label for="document">
|
||||
<a rel="help">Document(s)</a>
|
||||
</label>
|
||||
<textarea ng-show="type!='upload'" ng-model="document" name="document" id="document" title="The Document" rows="10"
|
||||
cols="70" placeholder="{{placeholder}}"></textarea>
|
||||
|
||||
<div id="file-upload" ng-show="type=='upload'">
|
||||
<input type="file" id="the-file" name="the-file" file-model="fileUpload"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="advanced">
|
||||
<!-- TODO: only show for JSON/XML-->
|
||||
<div id="attribs">
|
||||
<div id="upload-only" ng-show="type=='upload'">
|
||||
<label for="erh-params"><!-- TODO: cleaner way to do this? -->
|
||||
<a rel="help">Extracting Req. Handler Params</a>
|
||||
</label>
|
||||
<input ng-model="literalParams" type="text" id="erh-params" value="&literal.id=change.me"
|
||||
title="Extracting Request Handler Parameters" size="50">
|
||||
</div>
|
||||
<div id="general-attribs">
|
||||
<label for="commitWithin">
|
||||
<a rel="help">Commit Within</a>
|
||||
</label>
|
||||
<input type="text" ng-model="commitWithin" id="commitWithin" value="1000" title="Commit Within (ms)">
|
||||
<label for="overwrite">
|
||||
<a rel="help">Overwrite</a>
|
||||
</label>
|
||||
<input ng-model="overwrite" type="text" id="overwrite" value="true" title="Overwrite">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="submit" ng-click="submit()" id="submit">Submit Document</button>
|
||||
</form>
|
||||
</div>
|
||||
<div id="result">
|
||||
<div id="response" ng-show="response">
|
||||
<div>
|
||||
<span class="description">Status: </span>{{ responseStatus }}
|
||||
</div>
|
||||
<div>
|
||||
<span class="description">Response:</span>
|
||||
<pre class="syntax language-json"><code ng-bind-html="response | highlight:'json' | unsafe"></code></pre>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
<!--
|
||||
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="files" class="clearfix">
|
||||
|
||||
<div id="frame">
|
||||
|
||||
<div id="tree-holder">
|
||||
|
||||
<jstree class="tree" on-select="showTreeLink(data)" data="tree" id="tree"></jstree>
|
||||
|
||||
</div>
|
||||
<div id="file-content" class="clearfix">
|
||||
|
||||
<div class="top clearfix">
|
||||
|
||||
<a id="url" class="address-bar" href="{{url}}" ng-show="url">{{baseurl}}{{url}}</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="view-file">
|
||||
|
||||
<div class="response" ng-show="content">
|
||||
<pre class="syntax language-{{lang}}"><code ng-bind-html="content | highlight:lang | unsafe"></code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,261 @@
|
||||
<!--
|
||||
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="index" class="clearfix">
|
||||
|
||||
<div class="clearfix">
|
||||
|
||||
<div class="index-left">
|
||||
|
||||
<div class="block" id="instance">
|
||||
|
||||
<h2><span>Instance</span></h2>
|
||||
|
||||
<div class="content">
|
||||
|
||||
<ul class="data" ngShow="system">
|
||||
|
||||
<li class="start_time"><dl class="clearfix">
|
||||
<dt><span>Start</span></dt>
|
||||
<dd class="timeago">{{system.jvm.jmx.startTime | timeago}}</dd>
|
||||
</dl></li>
|
||||
|
||||
<!--
|
||||
<li class="host"><dl class="clearfix">
|
||||
<dt><span>Host</span></dt>
|
||||
<dd></dd>
|
||||
</dl></li>
|
||||
|
||||
<li class="dir dir_cwd"><dl class="clearfix">
|
||||
<dt><span>CWD</span></dt>
|
||||
<dd></dd>
|
||||
</dl></li>
|
||||
|
||||
<li class="dir dir_instance"><dl class="clearfix">
|
||||
<dt><span>Instance</span></dt>
|
||||
<dd></dd>
|
||||
</dl></li>
|
||||
|
||||
<li class="dir dir_data"><dl class="clearfix">
|
||||
<dt><span>Data</span></dt>
|
||||
<dd></dd>
|
||||
</dl></li>
|
||||
|
||||
<li class="dir dir_index"><dl class="clearfix">
|
||||
<dt><span>Index</span></dt>
|
||||
<dd></dd>
|
||||
</dl></li>
|
||||
-->
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="block" id="versions">
|
||||
|
||||
<h2><span>Versions</span></h2>
|
||||
|
||||
<div class="content">
|
||||
|
||||
<ul class="data">
|
||||
|
||||
<li class="solr solr_spec_version"><dl class="clearfix">
|
||||
<dt><span>solr-spec</span></dt>
|
||||
<dd>{{system.lucene["solr-spec-version"]}}</dd>
|
||||
</dl></li>
|
||||
|
||||
<li class="solr_impl_version"><dl class="clearfix">
|
||||
<dt class=""><span>solr-impl</span></dt>
|
||||
<dd>{{system.lucene["solr-impl-version"]}}</dd>
|
||||
</dl></li>
|
||||
|
||||
<li class="lucene lucene_spec_version"><dl class="clearfix">
|
||||
<dt><span>lucene-spec</span></dt>
|
||||
<dd>{{system.lucene["lucene-spec-version"]}}</dd>
|
||||
</dl></li>
|
||||
|
||||
<li class="lucene_impl_version"><dl class="clearfix">
|
||||
<dt><span>lucene-impl</span></dt>
|
||||
<dd>{{system.lucene["lucene-impl-version"]}}</dd>
|
||||
</dl></li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="index-right">
|
||||
|
||||
<div class="block" id="system">
|
||||
|
||||
<h2><span>System</span>
|
||||
<small class="bar-desc">{{load_average[0]}} {{load_average[1]}} {{load_average[2]}}</small>
|
||||
</h2>
|
||||
<a class="reload" ng-click="reload()"><span>reload</span></a>
|
||||
|
||||
<div class="content">
|
||||
|
||||
<div id="physical-memory-bar" ng-show="system.system.totalPhysicalMemorySize && system.system.freePhysicalMemorySize">
|
||||
|
||||
<p data-desc="physical-memory-bar">Physical Memory
|
||||
<small class="bar-desc">{{memoryPercentage}}</small>
|
||||
</p>
|
||||
<div class="bar-holder bar-lvl-2">
|
||||
|
||||
<div class="bar-max bar">
|
||||
<span class="bar-max val">{{memoryMax}}</span>
|
||||
|
||||
<div class="bar-total bar" ng-style="{width:memoryPercentage}">
|
||||
<span class="bar-total val" title="raw: {{memoryTotal}}B">{{memoryTotalDisplay}}</span>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="swap-space-bar" ng-show="system.system.totalSwapSpaceSize && system.system.freeSwapSpaceSize">
|
||||
|
||||
<p data-desc="swap-space-bar">Swap Space
|
||||
<small class="bar-desc">{{swapPercentage}}</small>
|
||||
</p>
|
||||
<div class="bar-holder bar-lvl-2">
|
||||
|
||||
<div class="bar-max bar">
|
||||
<span class="bar-max val">{{swapMax}}</span>
|
||||
|
||||
<div class="bar-total bar" ng-style="{width:swapPercentage}">
|
||||
<span class="bar-total val" title="raw:{{swapTotal}}B">{{swapTotalDisplay}}</span>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="file-descriptor-bar" ng-show="system.system.maxFileDescriptorCount && system.system.openFileDescriptorCount">
|
||||
|
||||
<p data-desc="file-descriptor-bar">File Descriptor Count
|
||||
<small class="bar-desc">{{fileDescriptorPercentage}}</small>
|
||||
</p>
|
||||
<div class="bar-holder bar-lvl-2">
|
||||
|
||||
<div class="bar-max bar">
|
||||
<span class="bar-max val">{{system.system.maxFileDescriptorCount}}</span>
|
||||
|
||||
<div class="bar-total bar" ng-style="{width:fileDescriptorPercentage}">
|
||||
<span class="bar-total val">{{system.system.openFileDescriptorCount}}</span>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<p class="no-info" ng-show="noInfo">Sorry, no information available</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="clearfix">
|
||||
|
||||
<div class="index-left">
|
||||
|
||||
<div class="block" id="jvm">
|
||||
|
||||
<h2><span>JVM</span></h2>
|
||||
|
||||
<div class="content clearfix">
|
||||
|
||||
<ul class="data">
|
||||
|
||||
<li class="jvm_version"><dl class="clearfix">
|
||||
<dt><span>Runtime</span></dt>
|
||||
<dd>{{system.jvm.name}} {{system.jvm.version}}</dd>
|
||||
</dl></li>
|
||||
|
||||
<li class="processors"><dl class="clearfix">
|
||||
<dt><span>Processors</span></dt>
|
||||
<dd>{{system.jvm.processors}}</dd>
|
||||
</dl></li>
|
||||
|
||||
<li class="command_line_args"><dl class="clearfix">
|
||||
<dt><span>Args</span></dt>
|
||||
<dd ng-repeat="arg in commandLineArgs track by $index" ng-class="{'odd':$odd}">{{arg}}</dd>
|
||||
</dl></li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="index-right">
|
||||
|
||||
<div class="block" id="jvm-memory">
|
||||
|
||||
<h2><span data-desc="jvm-memory-bar">JVM-Memory
|
||||
<small class="bar-desc">{{javaMemoryPercentage}}</small>
|
||||
</span></h2>
|
||||
|
||||
<div class="content">
|
||||
|
||||
<div id="jvm-memory-bar">
|
||||
<div class="bar-holder bar-lvl-3">
|
||||
|
||||
<div class="bar-max bar">
|
||||
<span class="bar-max val" title="raw: {{javaMemoryMax}}">{{javaMemoryMax}}</span>
|
||||
|
||||
<div class="bar-total bar" ng-style="{width: javaMemoryTotalPercentage}">
|
||||
<span class="bar-total val" title="raw: {{javaMemoryTotal}}B">{{javaMemoryTotalDisplay}}</span>
|
||||
|
||||
<div class="bar-used bar" ng-style="{width: javaMemoryUsedPercentage}">
|
||||
<span class="bar-used val" title="raw: {{javaMemoryUsed}}B">{{javaMemoryUsedDisplay}}</span>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,27 @@
|
||||
<!--
|
||||
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="java-properties">
|
||||
<ul>
|
||||
<li ng-class="{odd:$odd}" ng-repeat="prop in props | orderObjectBy:'name'">
|
||||
<dl class="clearfix">
|
||||
<dt ng-bind-html="prop.name | unsafe"></dt>
|
||||
<dd ng-class="{odd:$odd, multi:props.length>1}" ng-repeat="value in prop.values">{{value.value}}</dd>
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
<!--
|
||||
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="logging" class="clearfix">
|
||||
|
||||
|
||||
<div id="frame">
|
||||
|
||||
<div class="block">
|
||||
<h2><span>{{watcher}}</span></h2>
|
||||
<ul class="tree jstree">
|
||||
<li class="jstree-leaf level-{{logger.level.toLowerCase()}}" ng-class="{'jstree-last':$last}" ng-repeat="logger in logging" ng-include="'logger.html'"></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/ng-template" id="logger.html">
|
||||
<ins class="trigger jstree-icon"> </ins>
|
||||
<a ng-click="toggleOptions(logger)" class="trigger {{logger.level.toLowerCase() }}" ng-class="{null:!logger.level, set: logger.set}" title="{{ logger.name }}" rel="{{logger.level}}">
|
||||
<span class="ns">{{logger.name}}</span>
|
||||
<span class="name" ng-show="logger.short">{{ logger.short }}</span>
|
||||
<span class="name" ng-show="!logger.short"><em>empty</em></span>
|
||||
</a>
|
||||
|
||||
<div class="selector-holder" ng-class="{open:logger.showOptions}">
|
||||
<div class="selector">
|
||||
<a class="trigger" ng-click="toggleOptions(logger)"><span><em>{{logger.level || "null"}}</em></span></a>
|
||||
<div ng-show="logger.showOptions">
|
||||
<ul>
|
||||
<li ng-repeat="level in levels track by level.pos">
|
||||
<a ng-click="setLevel(logger, level.name)">{{level.name}}</a>
|
||||
</li>
|
||||
<li class="unset"><a ng-click="setLevel(logger, 'unset')">UNSET</a></li>
|
||||
</ul>
|
||||
<a class="close" ng-click="toggleOptions(logger)"><span>[x]</span></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ul>
|
||||
<li class="jstree-leaf level-{{logger.level.toLowerCase()}}" ng-class="{'jstree-last':$last}" ng-repeat="logger in logger.children" ng-include="'logger.html'"></li>
|
||||
</ul>
|
||||
</script>
|
||||
@@ -0,0 +1,57 @@
|
||||
<!--
|
||||
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="logging" class="clearfix">
|
||||
|
||||
<div id="viewer">
|
||||
<div class="block">
|
||||
<h2><span>{{watcher}}</span></h2>
|
||||
</div>
|
||||
<table class="has-data" border="0" cellpadding="0" cellspacing="0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="time">Time (<span>{{timezone}}</span>)</th>
|
||||
<th class="level">Level</th>
|
||||
<th class="core">Core</th>
|
||||
<th class="logger">Logger</th>
|
||||
<th class="message">Message</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody ng-repeat="event in events">
|
||||
<tr ng-click="toggleRow(event)" class="{{event.trace ? 'has-trace': ''}} {{'level-'+event.level.toLowerCase()}}">
|
||||
<td class="span"><a><span>{{ timezone == "UTC" ? event.utc_time : event.local_time }}</span></a></td>
|
||||
<td class="level span"><a><span>{{ event.level }} {{event.showTrace}}</span></span></a></td>
|
||||
<td class="span"><a><span>{{ event.core }}</span></a></td>
|
||||
<td class="span"><a><span><abbr title="{{event.logger}}">{{event.loggerBase}}</abbr></span></a></td>
|
||||
<td class="message span"><a><span>{{ event.message }}</span></a></td>
|
||||
</tr>
|
||||
<tr class="trace" ng-show="event.showTrace && event.trace">
|
||||
<td colspan="4"><pre>{{event.trace}}</pre></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr ng-show="events.length==0">
|
||||
<td colspan="4">No Events available</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
<div id="footer" class="clearfix">
|
||||
<div id="state">Last Check: {{sinceDisplay}}</div>
|
||||
<div id="date-format" ng-click="toggleTimezone()"><a ng-class="{on: timezone=='UTC'}">Show dates in UTC</a></div>
|
||||
<a id="refresh-toggle" ng-class="{'active': !stopped, 'stopped': stopped}" ng-click="toggleRefresh()">Auto-Refresh</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,96 @@
|
||||
<!--
|
||||
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="login" class="clearfix">
|
||||
|
||||
<div ng-show="authScheme === 'Basic'">
|
||||
<h1>Basic Authentication</h1>
|
||||
<div class="login-error" ng-show="statusText !== 'require authentication' || authParamsError !== null">
|
||||
{{statusText}}{{authParamsError}}
|
||||
</div>
|
||||
<div ng-show="!isLoggedIn()">
|
||||
<p>
|
||||
Solr requires authentication for resource {{authLocation === '/' ? 'Dashboard' : authLocation}}.<br/>
|
||||
Please log in with your username and password for realm {{authRealm}}.
|
||||
</p>
|
||||
<br/>
|
||||
<div ng-show="error" class="alert alert-danger">{{error}}</div>
|
||||
<form name="form" ng-submit="login()" role="form">
|
||||
<div class="form-group">
|
||||
<label for="username">Username</label>
|
||||
<input type="text" name="username" id="username" class="form-control" ng-model="username" required />
|
||||
<span ng-show="form.username.$dirty && form.username.$error.required" class="help-block">Username is required</span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="password">Password</label>
|
||||
<input type="password" name="password" id="password" class="form-control" ng-model="password" required />
|
||||
<span ng-show="form.password.$dirty && form.password.$error.required" class="help-block">Password is required</span>
|
||||
</div>
|
||||
<br/>
|
||||
<div class="form-actions">
|
||||
<button type="submit" ng-disabled="form.$invalid" class="btn btn-danger">Login</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div ng-show="isLoggedIn()">
|
||||
<p>
|
||||
Logged in as user {{authLoggedinUser}}. Realm={{authRealm}}.<br/>
|
||||
</p>
|
||||
<br/>
|
||||
<form name="logoutForm" ng-submit="logout()" role="form" ng-show="isLoggedIn()">
|
||||
<div class="form-actions">
|
||||
<button type="submit" class="btn btn-danger">Logout</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div ng-show="authScheme === 'Negotiate'">
|
||||
<h1>Kerberos Authentication</h1>
|
||||
<p>Your browser did not provide the required information to authenticate using Kerberos.
|
||||
Please check that your computer has a valid ticket for communicating with Solr,
|
||||
and that your browser is properly configured to provide that ticket when required.
|
||||
For more information, consult
|
||||
<a href="https://lucene.apache.org/solr/guide/kerberos-authentication-plugin.html">
|
||||
Solr's Kerberos documentation
|
||||
</a>.
|
||||
</p>
|
||||
The response from the server was:
|
||||
<hr/>
|
||||
<pre>HTTP 401 {{statusText}}
|
||||
WWW-Authenticate: {{wwwAuthHeader}}</pre>
|
||||
<hr/>
|
||||
</div>
|
||||
|
||||
<div ng-show="!authSchemeSupported">
|
||||
<h1>Authentication scheme not supported</h1>
|
||||
|
||||
<div class="login-error">
|
||||
{{statusText}}
|
||||
</div>
|
||||
|
||||
<p>Some or all Solr operations are protected by an authentication scheme that is not yet supported by this Admin UI ({{authScheme}}).</p>
|
||||
<p>Solr returned an error response:
|
||||
<hr/>
|
||||
<pre>HTTP 401 {{statusText}}
|
||||
WWW-Authenticate: {{wwwAuthHeader}}</pre>
|
||||
<hr/>
|
||||
</p>
|
||||
<p>A possible workaround may be to use another client that supports this scheme.</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,72 @@
|
||||
<!--
|
||||
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="plugins" class="clearfix">
|
||||
|
||||
<div id="frame">
|
||||
<ul>
|
||||
<li class="entry" ng-class="{changed: plugin.changed}" ng-repeat="plugin in type.plugins">
|
||||
<a ng-click="selectPlugin(plugin)">
|
||||
<span>{{ plugin.name }}</span>
|
||||
</a>
|
||||
<ul class="detail" ng-show="plugin.open">
|
||||
<li ng-repeat="(key, value) in plugin.properties" ng-class="{odd: $odd}">
|
||||
<dl class="clearfix">
|
||||
<dt>{{ key }}:</dt>
|
||||
<!--<dd ng-repeat="v in value">{{v}}</dd><!-- is AN ARRAY!!-->
|
||||
<dd>{{value}}</dd>
|
||||
</dl>
|
||||
</li>
|
||||
<li class="stats clearfix" ng-show="plugin.stats">
|
||||
<span>stats:</span>
|
||||
<ul>
|
||||
<li ng-repeat="(key, value) in plugin.stats" ng-class="{odd: $odd}">
|
||||
<dl class="clearfix">
|
||||
<dt>{{key}}:</dt>
|
||||
<dd>{{value}}</dd>
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="navigation" class="clearfix">
|
||||
|
||||
<ul>
|
||||
<li ng-repeat="typeObj in types" class="{{typeObj.lower}}" ng-class="{active:typeObj==type}">
|
||||
<a ng-click="selectPluginType(typeObj)" rel="{{typeObj.name}}">{{typeObj.name}}
|
||||
<span ng-show="typeObj.changes">{{typeObj.changes}}</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="PLUGINCHANGES"><a ng-click="startRecording()">Watch Changes</a></li>
|
||||
<li class="RELOAD"><a ng-click="refresh()">Refresh Values</a></li>
|
||||
<li class="NOTE"><p>NOTE: Only selected metrics are shown here. Full metrics can be accessed via /admin/metrics handler.</p></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="recording" ng-show="isRecording">
|
||||
<div class="wrapper clearfix">
|
||||
|
||||
<p class="loader">Watching for Changes</p>
|
||||
<button class="primary" ng-click="stopRecording()">Stop & Show Changes</button>
|
||||
|
||||
</div>
|
||||
<div id="blockUI"></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,357 @@
|
||||
<!--
|
||||
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="query" class="clearfix">
|
||||
|
||||
<div id="form">
|
||||
<form>
|
||||
<label for="qt" title="Request handler in solrconfig.xml.">
|
||||
<a rel="help">Request-Handler (qt)</a>
|
||||
</label>
|
||||
<input type="text" ng-model="qt" id="qt" value="/select" title="Request handler in solrconfig.xml.">
|
||||
|
||||
<fieldset class="common">
|
||||
<legend>common</legend>
|
||||
<div class="fieldset">
|
||||
|
||||
<label for="q" title="The query string.">
|
||||
q
|
||||
</label>
|
||||
<textarea name="q" ng-model="query.q" id="q" title="The query string.">*:*</textarea>
|
||||
|
||||
<label for="fq" title="Filter query.">
|
||||
<a rel="help">fq</a>
|
||||
</label>
|
||||
<div class="multiple">
|
||||
<div class="row clearfix" ng-repeat="filter in filters">
|
||||
<input type="text" ng-model="filter.fq" id="fq" name="fq" title="Filter query.">
|
||||
<div class="buttons">
|
||||
<a class="rem" ng-click="removeFilter($index)"><span></span></a>
|
||||
<a class="add" ng-click="addFilter($index)"><span></span></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<label for="sort" title="Sort field or function with asc|desc.">
|
||||
<a rel="help">sort</a>
|
||||
</label>
|
||||
<input type="text" ng-model="query.sort" id="sort" name="sort" title="Sort field or function with asc|desc.">
|
||||
|
||||
<label for="start" title="Number of leading documents to skip and number of documents to return after 'start'. (Integers)">
|
||||
<a rel="help">start</a>,
|
||||
<a rel="help">rows</a>
|
||||
</label>
|
||||
<div class="clearfix">
|
||||
<input type="text" name="start" ng-model="query.start" id="start" placeholder="0" pattern="[0-9]+" title="Number of leading documents to skip. (Integer)">
|
||||
<input type="text" name="rows" ng-model="query.rows" id="rows" placeholder="10" pattern="[0-9]+" title="Number of documents to return after 'start'. (Integer)">
|
||||
</div>
|
||||
|
||||
<label for="fl" title="Field list, comma separated.">
|
||||
<a rel="help">fl</a>
|
||||
</label>
|
||||
<input type="text" ng-model="query.fl" name="fl" id="fl" value="" title="Field list, comma separated.">
|
||||
|
||||
<label for="df" title="Default search field">
|
||||
<a rel="help">df</a>
|
||||
</label>
|
||||
<input type="text" ng-model="query.df" name="df" id="df" value="" title="Default search field">
|
||||
|
||||
<label for="custom_parameters">
|
||||
<a rel="help">Raw Query Parameters</a>
|
||||
</label>
|
||||
<input type="text" ng-model="rawParams" id="custom_parameters" value="" placeholder="key1=val1&key2=val2">
|
||||
|
||||
<label for="wt" title="The writer type (response format).">
|
||||
<a rel="help">wt</a>
|
||||
</label>
|
||||
<select name="wt" ng-model="query.wt" id="wt" title="The writer type (response format).">
|
||||
<option ng-selected="selected" value=''>------</option>
|
||||
<option>json</option>
|
||||
<option>xml</option>
|
||||
<option>python</option>
|
||||
<option>ruby</option>
|
||||
<option>php</option>
|
||||
<option>csv</option>
|
||||
</select>
|
||||
|
||||
<label for="indent off" class="checkbox" title="Do not indent results.">
|
||||
<input type="checkbox" ng-model="query.indent" name="indent" id="indent" title="Do not indent results." ng-true-value="'off'" ng-false-value="''">
|
||||
indent off
|
||||
</label>
|
||||
|
||||
<label for="debugQuery" class="checkbox" title="Show timing and diagnostics.">
|
||||
<input type="checkbox" ng-model="query.debugQuery" name="debugQuery" id="debugQuery" title="Show timing and diagnostics." ng-true-value="'on'" ng-false-value="''">
|
||||
debugQuery
|
||||
</label>
|
||||
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="dismax optional">
|
||||
<legend>
|
||||
<label for="dismax" class="checkbox" title="Enable dismax.">
|
||||
<input type="checkbox" ng-model="isDismax" name="defType" id="dismax" value="dismax">
|
||||
dismax
|
||||
</label>
|
||||
</legend>
|
||||
<div class="fieldset" ng-show="isDismax">
|
||||
|
||||
<label for="q_alt" title="Alternate query when 'q' is absent.">q.alt</label>
|
||||
<input type="text" ng-model="dismax['q.alt']" name="q.alt" id="q_alt" title="Alternate query when 'q' is absent.">
|
||||
|
||||
<label for="qf" title="Query fields with optional boosts.">qf</label>
|
||||
<input type="text" ng-model="dismax.qf" name="qf" id="qf" title="Query fields with optional boosts.">
|
||||
|
||||
<label for="mm" title="Min-should-match expression">mm</label>
|
||||
<input type="text" ng-model="dismax.mm" name="mm" id="mm" title="Min-should-match expression.">
|
||||
|
||||
<label for="pf" title="Phrase boosted fields.">pf</label>
|
||||
<input type="text" ng-model="dismax.pf" name="pf" id="pf" title="Phrase boosted fields.">
|
||||
|
||||
<label for="ps" title="Phrase boost slop.">ps</label>
|
||||
<input type="text" ng-model="dismax.ps" name="ps" id="ps" title="Phrase boost slop.">
|
||||
|
||||
<label for="qs" title="Query string phrase slop.">qs</label>
|
||||
<input type="text" ng-model="dismax.qs" name="qs" id="qs" title="Query string phrase slop.">
|
||||
|
||||
<label for="tie" title="Score tie-breaker. Try 0.1.">tie</label>
|
||||
<input type="text" ng-model="dismax.tie" name="tie" id="tie" title="Score tie-breaker. Try 0.1.">
|
||||
|
||||
<label for="bq" title="Boost query.">bq</label>
|
||||
<input type="text" ng-model="dismax.bq" name="bq" id="bq" title="Boost query.">
|
||||
|
||||
<label for="bf" title="Boost function (added).">bf</label>
|
||||
<input type="text" ng-model="dismax.bf" name="bf" id="bf" title="Boost function (added).">
|
||||
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="edismax optional">
|
||||
<legend>
|
||||
<label for="edismax" class="checkbox" title="Enable edismax.">
|
||||
<input type="checkbox" ng-model="isEdismax" name="defType" id="edismax" value="edismax">
|
||||
<strong>e</strong>dismax
|
||||
</label>
|
||||
</legend>
|
||||
<div class="fieldset" ng-show="isEdismax">
|
||||
|
||||
<label for="edismax_q_alt" title="Alternate query when 'q' is absent.">q.alt</label>
|
||||
<input type="text" ng-model="edismax['q.alt']" name="q.alt" id="edismax_q_alt" title="Alternate query when 'q' is absent.">
|
||||
|
||||
<label for="edismax_qf" title="Query fields with optional boosts.">qf</label>
|
||||
<input type="text" ng-model="edismax.qf" name="qf" id="edismax_qf" title="Query fields with optional boosts.">
|
||||
|
||||
<label for="edismax_mm" title="Min-should-match expression.">mm</label>
|
||||
<input type="text" ng-model="edismax.mm" name="mm" id="edismax_mm" title="Min-should-match expression.">
|
||||
|
||||
<label for="edismax_pf" title="Phrase boosted fields.">pf</label>
|
||||
<input type="text" ng-model="edismax.pf" name="pf" id="edismax_pf" title="Phrase boosted fields.">
|
||||
|
||||
<label for="edismax_ps" title="Phrase boost slop.">ps</label>
|
||||
<input type="text" ng-model="edismax.ps" name="ps" id="edismax_ps" title="Phrase boost slop.">
|
||||
|
||||
<label for="edismax_qs" title="Query string phrase slop.">qs</label>
|
||||
<input type="text" ng-model="edismax.qs" name="qs" id="edismax_qs" title="Query string phrase slop.">
|
||||
|
||||
<label for="edismax_tie" title="Score tie-breaker. Try 0.1.">tie</label>
|
||||
<input type="text" ng-model="edismax.tie" name="tie" id="edismax_tie" title="Score tie-breaker. Try 0.1.">
|
||||
|
||||
<label for="edismax_bq" title="Boost query.">bq</label>
|
||||
<input type="text" ng-model="edismax.bq" name="bq" id="edismax_bq" title="Boost query.">
|
||||
|
||||
<label for="edismax_bf" title="Boost function (added).">bf</label>
|
||||
<input type="text" ng-model="edismax.bf" name="bf" id="edismax_bf" title="Boost function (added).">
|
||||
|
||||
<label for="edismax_uf" title="User Fields">uf</label>
|
||||
<input type="text" ng-model="edismax.uf" name="uf" id="edismax_uf" title="User Fields">
|
||||
|
||||
<label for="edismax_pf2" title="bigram phrase boost fields">pf2</label>
|
||||
<input type="text" ng-model="edismax.pf2" name="pf2" id="edismax_pf2" title="bigram phrase boost fields">
|
||||
|
||||
<label for="edismax_pf3" title="trigram phrase boost fields">pf3</label>
|
||||
<input type="text" ng-model="edismax.pf3" name="pf3" id="edismax_pf3" title="trigram phrase boost fields">
|
||||
|
||||
<label for="edismax_ps2" title="phrase slop for bigram phrases">ps2</label>
|
||||
<input type="text" ng-model="edismax.ps2" name="ps2" id="edismax_ps2" title="phrase slop for bigram phrases">
|
||||
|
||||
<label for="edismax_ps3" title="phrase slop for trigram phrases">ps3</label>
|
||||
<input type="text" ng-model="edismax.ps3" name="ps3" id="edismax_ps3" title="phrase slop for trigram phrases">
|
||||
|
||||
<label for="edismax_boost" title="multiplicative boost function">boost</label>
|
||||
<input type="text" ng-model="edismax.boost" name="boost" id="edismax_boost" title="multiplicative boost function">
|
||||
|
||||
<label for="edismax_stopwords" class="checkbox" title="remove stopwords from mandatory 'matching' component">
|
||||
<input type="checkbox" ng-model="edismax.stopwords" name="stopwords" id="edismax_stopwords">
|
||||
stopwords
|
||||
</label>
|
||||
|
||||
<label for="edismax_lowercaseOperators" class="checkbox" title="Enable lower-case 'and' and 'or' as operators">
|
||||
<input type="checkbox" ng-model="edismax.lowercaseOperators" name="lowercaseOperators" id="edismax_lowercaseOperators">
|
||||
lowercaseOperators
|
||||
</label>
|
||||
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="hl optional">
|
||||
<legend>
|
||||
<label for="hl" class="checkbox" title="Enable highlighting.">
|
||||
<input type="checkbox" ng-model="isHighlight" name="hl" id="hl" value="true">
|
||||
hl
|
||||
</label>
|
||||
</legend>
|
||||
<div class="fieldset" ng-show="isHighlight">
|
||||
|
||||
<label for="hl_fl" title="Fields to highlight on.">hl.fl</label>
|
||||
<input type="text" ng-model="hl['hl.fl']" name="hl.fl" id="hl_fl" value="" title="Fields to highlight on.">
|
||||
|
||||
<label for="hl_simple_pre">hl.simple.pre</label>
|
||||
<input type="text" ng-model="hl['hl.simple.pre']" name="hl.simple.pre" id="hl_simple_pre" value="<em>">
|
||||
|
||||
<label for="hl_simple_post">hl.simple.post</label>
|
||||
<input type="text" ng-model="hl['hl.simple.post']" name="hl.simple.post" id="hl_simple_post" value="</em>">
|
||||
|
||||
<label for="hl_requireFieldMatch" class="checkbox">
|
||||
<input type="checkbox" ng-model="hl['hl.requireFieldMatch']" name="hl.requireFieldMatch" id="hl_requireFieldMatch" value="true">
|
||||
hl.requireFieldMatch
|
||||
</label>
|
||||
|
||||
<label for="hl_usePhraseHighlighter" class="checkbox">
|
||||
<input type="checkbox" ng-model="hl['usePhraseHighLighter']" name="hl.usePhraseHighlighter" id="hl_usePhraseHighlighter" value="true">
|
||||
hl.usePhraseHighlighter
|
||||
</label>
|
||||
|
||||
<label for="hl_highlightMultiTerm" class="checkbox">
|
||||
<input type="checkbox" ng-model="hl['hightlightMultiTerm']" name="hl.highlightMultiTerm" id="hl_highlightMultiTerm" value="true">
|
||||
hl.highlightMultiTerm
|
||||
</label>
|
||||
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="facet optional">
|
||||
<legend>
|
||||
<label for="facet" class="checkbox" title="Enable faceting.">
|
||||
<input type="checkbox" ng-model="isFacet" name="facet" id="facet">
|
||||
facet
|
||||
</label>
|
||||
</legend>
|
||||
<div class="fieldset" ng-show="isFacet">
|
||||
|
||||
<label for="facet_query">facet.query</label>
|
||||
<textarea ng-model="facet['facet.query']" name="facet.query" id="facet_query"></textarea>
|
||||
|
||||
<label for="facet_field">facet.field</label>
|
||||
<input type="text" ng-model="facet['facet.field']" name="facet.field" id="facet_field">
|
||||
|
||||
<label for="facet_prefix">facet.prefix</label>
|
||||
<input type="text" ng-model="facet['facet.prefix']" name="facet.prefix" id="facet_prefix">
|
||||
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="spatial optional">
|
||||
<legend>
|
||||
<label for="spatial" class="checkbox" title="Show spatial options">
|
||||
<input type="checkbox" ng-model="isSpatial" name="spatial" id="spatial">
|
||||
spatial
|
||||
</label>
|
||||
</legend>
|
||||
<div class="fieldset" ng-show="isSpatial">
|
||||
|
||||
<label for="pt">pt</label>
|
||||
<input type="text" ng-model="spatial.pt" name="pt" id="pt">
|
||||
|
||||
<label for="sfield">sfield</label>
|
||||
<input type="text" ng-model="spatial.sfield" name="sfield" id="sfield">
|
||||
|
||||
<label for="d">d</label>
|
||||
<input type="text" ng-model="spatial.d" name="d" id="d">
|
||||
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="spellcheck optional">
|
||||
<legend>
|
||||
<label for="spellcheck" class="checkbox" title="Enable spellchecking.">
|
||||
<input type="checkbox" ng-model="isSpellcheck" name="spellcheck" id="spellcheck">
|
||||
spellcheck
|
||||
</label>
|
||||
</legend>
|
||||
<div class="fieldset" ng-show="isSpellcheck">
|
||||
|
||||
<label for="spellcheck_build" class="checkbox">
|
||||
<input type="checkbox" ng-model="spellcheck['spellcheck.build']" name="spellcheck.build" id="spellcheck_build" value="true">
|
||||
spellcheck.build
|
||||
</label>
|
||||
|
||||
<label for="spellcheck_reload" class="checkbox">
|
||||
<input type="checkbox" ng-model="spellcheck['spellcheck.reload']" name="spellcheck.reload" id="spellcheck_reload" value="true">
|
||||
spellcheck.reload
|
||||
</label>
|
||||
|
||||
<label for="spellcheck_q">spellcheck.q</label>
|
||||
<input type="text" ng-model="spellcheck['spellcheck.q']" name="spellcheck.q" id="spellcheck_q">
|
||||
|
||||
<label for="spellcheck_dictionary">spellcheck.dictionary</label>
|
||||
<input type="text" ng-model="spellcheck['spellcheck.dictionary']" name="spellcheck.dictionary" id="spellcheck_dictionary">
|
||||
|
||||
<label for="spellcheck_count">spellcheck.count</label>
|
||||
<input type="text" ng-model="spellcheck['spellcheck.count']" name="spellcheck.count" id="spellcheck_count">
|
||||
|
||||
<label for="spellcheck_onlyMorePopular" class="checkbox">
|
||||
<input type="checkbox" ng-model="spellcheck['spellcheck.onlyMorePopular']" name="spellcheck.onlyMorePopular" id="spellcheck_onlyMorePopular" value="true">
|
||||
spellcheck.onlyMorePopular
|
||||
</label>
|
||||
|
||||
<label for="spellcheck_extendedResults" class="checkbox">
|
||||
<input type="checkbox" ng-model="spellcheck['spellcheck.extendedResults']" name="spellcheck.extendedResults" id="spellcheck_extendedResults" value="true">
|
||||
spellcheck.extendedResults
|
||||
</label>
|
||||
|
||||
<label for="spellcheck_collate" class="checkbox">
|
||||
<input type="checkbox" ng-model="spellcheck['spellcheck.collate']" name="spellcheck.collate" id="spellcheck_collate" value="true">
|
||||
spellcheck.collate
|
||||
</label>
|
||||
|
||||
<label for="spellcheck_maxCollations">spellcheck.maxCollations</label>
|
||||
<input type="text" ng-model="spellcheck['spellcheck.maxCollations']" name="spellcheck.maxCollations" id="spellcheck_maxCollations">
|
||||
|
||||
<label for="spellcheck_maxCollationTries">spellcheck.maxCollationTries</label>
|
||||
<input type="text" ng-model="spellcheck['spellcheck.maxCollationTries']" name="spellcheck.maxCollationTries" id="spellcheck_maxCollationTries">
|
||||
|
||||
<label for="spellcheck_accuracy">spellcheck.accuracy</label>
|
||||
<input type="text" ng-model="spellcheck['spellcheck.accuracy']" name="spellcheck.accuracy" id="spellcheck_accuracy">
|
||||
</div>
|
||||
|
||||
</fieldset>
|
||||
|
||||
|
||||
<button type="submit" ng-click="doQuery()">Execute Query</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div id="result">
|
||||
|
||||
<a ng-show="response.data" id="url" class="address-bar" ng-href="{{url}}">{{hostPortContext}}{{url}}</a>
|
||||
|
||||
<div id="response">
|
||||
<pre class="syntax language-{{lang}}"><code ng-bind-html="response.data | highlight:lang | unsafe"></code></pre>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,239 @@
|
||||
<!--
|
||||
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="replication" class="clearfix" ng-class="{replicating:settings.isReplicating}">
|
||||
|
||||
<div id="frame">
|
||||
|
||||
<div id="error" ng-show="progress.ERROR">{{ progress.ERROR }}</div>
|
||||
|
||||
<div class="replicating block" ng-show="settings.isReplicating">
|
||||
|
||||
<div id="progress">
|
||||
|
||||
<div id="start"><div class="info">
|
||||
|
||||
<span>{{progress.replicationStartTime}}</span>
|
||||
|
||||
</div></div>
|
||||
|
||||
<div id="speed"><div class="info">
|
||||
|
||||
<span>5.1 MB</span>/s
|
||||
|
||||
</div></div>
|
||||
|
||||
<div id="bar">
|
||||
|
||||
<div id="bar-info"><div class="info">
|
||||
|
||||
<div class="files"><span>{{progress.numFilesToDownload}}</span> File<span ng-show="progress.numFilesToDownload>1">s</span></div>
|
||||
<div class="size"><span>{{progress.bytesToDownload}}</span></div>
|
||||
|
||||
</div></div>
|
||||
|
||||
<div id="eta"><div class="info">
|
||||
|
||||
ETA: <span>{{progress.timeRemaining | readableSeconds }}</span>
|
||||
|
||||
</div></div>
|
||||
|
||||
<div id="done" style="width: {{progress.totalPercentWidth}}">
|
||||
|
||||
<div class="percent">
|
||||
|
||||
<span>{{progress.totalPercent}}</span>%
|
||||
|
||||
</div>
|
||||
|
||||
<div id="done-info"><div class="info">
|
||||
|
||||
<div class="files"><span>{{progress.numFilesDownloaded}}</span> File<span ng-show="progress.numFilesDownloaded>1">s</span></div>
|
||||
<div class="size"><span>{{progress.bytesDownloaded}}</span></div>
|
||||
|
||||
</div></div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="current-file" class="clearfix">
|
||||
|
||||
<div class="label"><span class="loader">Current File:</span></div>
|
||||
<div class="file">{{progress.currentFile}}</div>
|
||||
<div class="progress">
|
||||
<span class="done">{{progress.currentFileSizeDownloaded}}</span> / <span class="total">{{progress.currentFileSize}}</span> [<span class="percent">{{progress.currentFileSizePercent}}</span>%]
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="iterations" class="slaveOnly block clearfix" ng-show="isSlave">
|
||||
|
||||
<div class="label"><span class="">Iterations:</span></div>
|
||||
<div class="iterations" ng-show="iterations && showIterations">
|
||||
<ul>
|
||||
<li class="{{iteration.status}}" ng-class="{latest:iteration.latest}" ng-repeat="iteration in iterations |limitTo:iterationCount">{{iteration.date}}</li>
|
||||
</ul>
|
||||
<span ng-show="iterations.length>1">
|
||||
<a ng-show="iterationCount==1" ng-click="showIterations()"><span class="expand">Show all Iterations</span></a>
|
||||
<a ng-show="iterationCount>1" ng-click="hideIterations()"><span class="collapse">Hide past Iterations</span></a>
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="details" class="block clearfix">
|
||||
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
|
||||
<thead>
|
||||
|
||||
<tr>
|
||||
|
||||
<td><span>Index</span></td>
|
||||
<th>Version</th>
|
||||
<th><abbr title="Generation">Gen</abbr></th>
|
||||
<th>Size</th>
|
||||
|
||||
</tr>
|
||||
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
<tr class="masterSearch">
|
||||
|
||||
<th>Master (Searching)</th>
|
||||
<td class="version" ng-class="{diff:versions.changedVersion}">
|
||||
<div>{{versions.masterSearch.version}}</div>
|
||||
</td>
|
||||
<td class="generation" ng-class="{diff:versions.changedGeneration}">
|
||||
<div>{{versions.masterSearch.generation}}</div>
|
||||
</td>
|
||||
<td class="size">
|
||||
<div>{{versions.masterSearch.size}}</div>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr class="master">
|
||||
|
||||
<th>Master (Replicable)</th>
|
||||
<td class="version" ng-class="{diff:versions.changedVersion}">
|
||||
<div>{{versions.master.version}}</div>
|
||||
</td>
|
||||
<td class="generation" ng-class="{diff:versions.changedGeneration}">
|
||||
<div>{{versions.master.generation}}</div>
|
||||
</td>
|
||||
<td class="size">
|
||||
<div>{{versions.master.size}}</div>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr class="slave slaveOnly" ng-show="isSlave">
|
||||
|
||||
<th>Slave (Searching)</th>
|
||||
<td class="version" ng-class="{diff:versions.changedVersion}">
|
||||
<div>{{versions.slave.version}}</div>
|
||||
</td>
|
||||
<td class="generation" ng-class="{diff:versions.changedGeneration}">
|
||||
<div>{{versions.slave.generation}}</div>
|
||||
</td>
|
||||
<td class="size">
|
||||
<div>{{versions.slave.size}}</div>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="settings" class="settings block clearfix slaveOnly" ng-show="isSlave">
|
||||
|
||||
<div class="label"><span>Settings:</span></div>
|
||||
<ul>
|
||||
<li class="masterUrl" ng-show="settings.masterUrl">
|
||||
<dl class="clearfix">
|
||||
<dt>master url:</dt>
|
||||
<dd>{{settings.masterUrl}}</dd>
|
||||
</dl>
|
||||
</li>
|
||||
<li class="isPollingDisabled"><dl class="clearfix">
|
||||
<dt>polling enable:</dt>
|
||||
<dd class="ico" ng-class="{'ico-0':settings.isPollingDisabled, 'ico-1':!settings.isPollingDisabled}">
|
||||
<span ng-show="settings.pollInterval">(interval: {{settings.pollInterval}})</span>
|
||||
</dd>
|
||||
</dl></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="master-settings" class="settings block clearfix">
|
||||
|
||||
<div class="label"><span>Settings (Master):</span></div>
|
||||
<ul>
|
||||
<li class="replicationEnabled"><dl class="clearfix">
|
||||
<dt>replication enable:</dt>
|
||||
<dd class="ico" ng-class="{'ico-0':!master.replicationEnabled, 'ico-1':master.replicationEnabled}"> </dd>
|
||||
</dl></li>
|
||||
<li class="replicateAfter"><dl class="clearfix">
|
||||
<dt>replicateAfter:</dt>
|
||||
<dd>{{master.replicateAfter}}</dd>
|
||||
</dl></li>
|
||||
<li class="confFiles" ng-show="master.files"><dl class="clearfix">
|
||||
<dt>confFiles:</dt>
|
||||
<dd><span ng-repeat="file in master.files"><attr title="{{file.title}}">{{file.name}}</attr>{{ $last ? '' :', '}}</span></dd>
|
||||
</dl></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="navigation">
|
||||
|
||||
<div class="timer" ng-show="isSlave && !settings.isPollingDisabled &&!settings.isReplicating">
|
||||
|
||||
<p>Next Run: <span class="approx" ng-show="settings.isApprox">~</span><span class="tick">{{settings.tick | readableSeconds}}</span></p>
|
||||
<small ng-show="settings.nextExecutionAt">{{settings.nextExecutionAt}}</small>
|
||||
</div>
|
||||
|
||||
<button class="refresh-status" ng-click="refresh()"><span>Refresh Status</span></button>
|
||||
|
||||
<div class="slaveOnly" ng-show="isSlave">
|
||||
<button class="optional replicate-now primary" ng-click="execute('fetchindex')" ng-show="!settings.isReplicating"><span>Replicate now</span></button>
|
||||
<button class="optional abort-replication warn" ng-click="execute('abortfetch')" ng-show="settings.isReplicating"><span>Abort Replication</span></button>
|
||||
|
||||
<button class="optional disable-polling" ng-click="execute('disablepoll')" ng-show="!settings.isPollingDisabled"><span>Disable Polling</span></button>
|
||||
<button class="optional enable-polling" ng-click="execute('enablepoll')" ng-show="settings.isPollingDisabled"><span>Enable Polling</span></button>
|
||||
</div>
|
||||
|
||||
<div class="masterOnly" ng-show="!isSlave">
|
||||
<button class="optional disable-replication warn" ng-click="execute('disablereplication')" ng-show="master.replicationEnabled"><span>Disable Replication</span></button>
|
||||
<button class="optional enable-replication warn" ng-click="execute('enablereplication')" ng-show="!master.replicationEnabled"><span>Enable Replication</span></button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,455 @@
|
||||
<!--
|
||||
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="schema" class="loaded">
|
||||
|
||||
<div class="clearfix">
|
||||
|
||||
<div id="frame">
|
||||
<div id="actions" class="actions clearfix" ng-show="isSchemaUpdatable">
|
||||
<button id="addField" class="action" ng-click="toggleAddField()"><span>Add Field</span></button>
|
||||
<button id="addDynamicField" class="action" ng-click="toggleAddDynamicField()"><span>Add Dynamic Field</span></button>
|
||||
<button id="addCopyField" class="action" ng-click="toggleAddCopyField()"><span>Add Copy Field</span></button>
|
||||
|
||||
<div class="action add" data-rel="add" ng-show="showAddField" escape-pressed="hideAll()">
|
||||
|
||||
<p class="clearfix"><label for="add_name">name:</label>
|
||||
<input type="text" id="add_name" ng-model="newField.name" focus-when="showAddField" placeholder="enter a field name"></p>
|
||||
|
||||
<p class="clearfix"><label for="add_type">field type:</label>
|
||||
<select chosen type="text" id="add_type" ng-model="newField.type" ng-options="type for type in types"></select>
|
||||
</p>
|
||||
|
||||
<p class="clearfix" ng-show="adding=='field'"><label for="add_default">default:</label>
|
||||
<input type="text" id="add_default" ng-model="newField.default" placeholder="enter a default value if needed"></p>
|
||||
|
||||
<p class="clearfix">
|
||||
<label class="checkbox" for="add_stored">
|
||||
<input type="checkbox" ng-model="newField.stored" id="add_stored" title="Full field should be stored in index." ng-true-value="'true'" ng-false-value="'false'">
|
||||
stored
|
||||
</label>
|
||||
</p>
|
||||
|
||||
<p class="clearfix">
|
||||
<label class="checkbox" for="add_indexed">
|
||||
<input type="checkbox" ng-model="newField.indexed" id="add_indexed" title="Field should be indexed." ng-true-value="'true'" ng-false-value="'false'">
|
||||
indexed
|
||||
</label>
|
||||
</p>
|
||||
|
||||
<p class="clearfix">
|
||||
<label class="checkbox" for="add_uninvertible">
|
||||
<input type="checkbox" ng-model="newField.uninvertible" id="add_uninvertible" title="Field should be uninvertible, it is generally recomended to use docValues instead." ng-true-value="'true'" ng-false-value="'false'">
|
||||
uninvertible
|
||||
</label>
|
||||
</p>
|
||||
|
||||
<p class="clearfix">
|
||||
<label class="checkbox" for="add_docValues">
|
||||
<input type="checkbox" ng-model="newField.docValues" id="add_docValues" title="DocValues should be stored for the field." ng-true-value="'true'" ng-false-value="'false'">
|
||||
docValues
|
||||
</label>
|
||||
</p>
|
||||
|
||||
<p class="clearfix">
|
||||
<label class="checkbox" for="add_multiValued">
|
||||
<input type="checkbox" ng-model="newField.multiValued" id="add_multiValued" title="Multiple values are allowed for this field." ng-true-value="'true'" ng-false-value="'false'">
|
||||
multiValued
|
||||
</label>
|
||||
</p>
|
||||
|
||||
<p class="clearfix" ng-show="adding=='field'">
|
||||
<label class="checkbox" for="add_required">
|
||||
<input type="checkbox" ng-model="newField.required" id="add_required" title="Field must be provided for all documents." ng-true-value="'true'" ng-false-value="'false'">
|
||||
required
|
||||
</label>
|
||||
</p>
|
||||
|
||||
<p class="clearfix">
|
||||
<a ng-click="showOmit=!showOmit">
|
||||
<span class="add_showhide" ng-hide="showOmit">Show omit options</span>
|
||||
<span class="add_showhide open" ng-show="showOmit">Hide omit options</span>
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<div ng-show="showOmit">
|
||||
|
||||
<p class="clearfix">
|
||||
<label class="checkbox" for="add_omitNorms">
|
||||
<input type="checkbox" ng-model="newField.omitNorms" id="add_omitNorms" title="Full field should be omitNorms in index." ng-true-value="'true'" ng-false-value="'false'">
|
||||
omitNorms
|
||||
</label>
|
||||
</p>
|
||||
|
||||
<p class="clearfix">
|
||||
<label class="checkbox" for="add_omitTermFreqAndPositions">
|
||||
<input type="checkbox" ng-model="newField.omitTermFreqAndPositions" id="add_omitTermFreqAndPositions" title="Full field should be omitTermFreqAndPositions in index." ng-true-value="'true'" ng-false-value="'false'">
|
||||
omitTermFreqAndPositions
|
||||
</label>
|
||||
</p>
|
||||
|
||||
<p class="clearfix">
|
||||
<label class="checkbox" for="add_omitPositions">
|
||||
<input type="checkbox" ng-model="newField.omitPositions" id="add_omitPositions" title="Full field should be omitPositions in index." ng-true-value="'true'" ng-false-value="'false'">
|
||||
omitPositions
|
||||
</label>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<p class="clearfix">
|
||||
<a ng-click="showTermVectors=!showTermVectors">
|
||||
<span class="add_showhide" ng-hide="showTermVectors">Show term vector options</span>
|
||||
<span class="add_showhide open" ng-show="showTermVectors">Hide term vector options</span>
|
||||
</a>
|
||||
</p>
|
||||
<div ng-show="showTermVectors">
|
||||
|
||||
<p class="clearfix">
|
||||
<label class="checkbox" for="add_termVectors">
|
||||
<input type="checkbox" ng-model="newField.termVectors" id="add_termVectors" title="Full field should be termVectors in index." ng-true-value="'true'" ng-false-value="'false'">
|
||||
termVectors
|
||||
</label>
|
||||
</p>
|
||||
|
||||
<p class="clearfix">
|
||||
<label class="checkbox" for="add_termPositions">
|
||||
<input type="checkbox" ng-model="newField.termPositions" id="add_termPositions" title="Full field should be termPositions in index." ng-true-value="'true'" ng-false-value="'false'">
|
||||
termPositions
|
||||
</label>
|
||||
</p>
|
||||
|
||||
<p class="clearfix">
|
||||
<label class="checkbox" for="add_termOffsets">
|
||||
<input type="checkbox" ng-model="newField.termOffsets" id="add_termOffsets" title="Full field should be termOffsets in index." ng-true-value="'true'" ng-false-value="'false'">
|
||||
termOffsets
|
||||
</label>
|
||||
</p>
|
||||
|
||||
<p class="clearfix">
|
||||
<label class="checkbox" for="add_termPayloads">
|
||||
<input type="checkbox" ng-model="newField.termPayloads" id="add_termPayloads" title="Full field should be termPayloads in index." ng-true-value="'true'" ng-false-value="'false'">
|
||||
termPayloads
|
||||
</label>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<p class="clearfix">
|
||||
<a ng-click="showSort=!showSort">
|
||||
<span class="add_showhide" ng-hide="showSort">Show sort options</span>
|
||||
<span class="add_showhide open" ng-show="showSort">Show sort options</span>
|
||||
</a>
|
||||
</p>
|
||||
<div ng-show="showSort">
|
||||
<p class="clearfix">
|
||||
<label class="checkbox" for="add_sortMissingFirst">
|
||||
<input type="checkbox" ng-model="newField.sortMissingFirst" id="add_sortMissingFirst" title="Full field should be sortMissingFirst in index." ng-true-value="'true'" ng-false-value="'false'">
|
||||
sortMissingFirst
|
||||
</label>
|
||||
</p>
|
||||
|
||||
<p class="clearfix">
|
||||
<label class="checkbox" for="add_sortMissingLast">
|
||||
<input type="checkbox" ng-model="newField.sortMissingLast" id="add_sortMissingLast" title="Full field should be sortMissingLast in index." ng-true-value="'true'" ng-false-value="'false'">
|
||||
sortMissingLast
|
||||
</label>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div ng-repeat="error in addErrors" ng-show="addErrors" class="clearfix note error">
|
||||
<span>{{error}}</span></div>
|
||||
|
||||
<p class="clearfix buttons">
|
||||
<button ng-show="adding=='field'" type="submit" class="submit" ng-class="{success: added}" ng-click="addField()"><span>Add Field</span></button>
|
||||
<button ng-show="adding=='dynamicField'" type="submit" class="submit" ng-class="{success: added}" ng-click="addDynamicField()"><span>Add Dynamic Field</span></button>
|
||||
<button type="reset" class="reset" ng-click="hideAll()"><span>Cancel</span></button>
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="action add" data-rel="add" ng-show="showAddCopyField" escape-pressed="hideAll()">
|
||||
|
||||
<form>
|
||||
|
||||
<p class="clearfix"><label for="add_source">source:</label>
|
||||
<input type="text" id="add_source" ng-model="copyField.source" focus-when="showAddCopyField" placeholder="specify your source field or pattern"></p>
|
||||
|
||||
<p class="clearfix"><label for="add_dest">destination:</label>
|
||||
<input type="text" id="add_dest" ng-model="copyField.dest" placeholder="specify your destination field or pattern"></p>
|
||||
|
||||
<div ng-repeat="error in addCopyFieldErrors" ng-show="addCopyFieldErrors" class="clearfix note error">
|
||||
<span>{{error}}</span></div>
|
||||
|
||||
<p class="clearfix buttons">
|
||||
<button type="submit" class="submit" ng-class="{success: added}" ng-click="addCopyField()"><span>Add CopyField</span></button>
|
||||
<button type="reset" class="reset" ng-click="hideAll()"><span>Cancel</span></button>
|
||||
</p>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="data">
|
||||
|
||||
<div id="field">
|
||||
|
||||
<div class="field-options" ng-show="showing">
|
||||
|
||||
<div class="block head">
|
||||
<h2>
|
||||
<span class="type">{{selectedType}}</span>:
|
||||
<span class="name">{{name}}</span>
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
<div class="partial" ng-show="display.partialState">
|
||||
|
||||
<p>Because your Index is empty, we do not have enough Information about this Field</p>
|
||||
|
||||
</div>
|
||||
|
||||
<dl class="options clearfix">
|
||||
|
||||
<dt class="field-type" ng-show="analysis.data.className">Field-Type:</dt>
|
||||
<dd class="field-type" ng-show="analysis.data.className">{{analysis.data.className}}</dd>
|
||||
|
||||
<dt class="similarity" ng-show="display.similarity.className">Similarity:</dt>
|
||||
<dd class="similarity" ng-show="display.similarity.className" data-tip="{{ display.similarity.className }}">{{ display.similarity.details }}</dd>
|
||||
|
||||
<dt class="position-increment-gap" ng-show="display.positionIncrementGap"><abbr title="Position Increment Gap">PI Gap</abbr>:</dt>
|
||||
<dd class="position-increment-gap" ng-show="display.positionIncrementGap">{{ display.positionIncrementGap }}</dd>
|
||||
|
||||
<dt class="docs" ng-show="display.docs">Docs:</dt>
|
||||
<dd class="docs" ng-show="display.docs"><a href="{{display.docsUrl}}">{{display.docs | number}}</a></dd>
|
||||
|
||||
<dt class="distinct" ng-show="display.distinct">Distinct:</dt>
|
||||
<dd class="distinct" ng-show="display.distinct">{{display.distinct}}</dd>
|
||||
|
||||
</dl>
|
||||
|
||||
<table class="flags" cellspacing="0" cellpadding="0" border="0" ng-show="display.columns.length!=0">
|
||||
|
||||
<thead>
|
||||
|
||||
<tr>
|
||||
<td>Flags:</td>
|
||||
<th ng-repeat="key in display.columns">{{key.name}}</th>
|
||||
|
||||
</tr>
|
||||
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr ng-repeat="row in display.rows track by row.name">
|
||||
<th>{{row.name}}</th>
|
||||
<td colspan="2" class="text" ng-show="row.comment">{{row.comment}}</td>
|
||||
<td ng-repeat="cell in row.cells"
|
||||
ng-class="{'check':cell.value}">
|
||||
<span ng-show="cell.value">√</span>
|
||||
<span ng-show="!cell.value"> </span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
|
||||
<ul class="analyzer">
|
||||
<li class="clearfix {{analyzer.key}}" ng-class="{open: analyzer.show}" ng-repeat="analyzer in analysis.analyzers">
|
||||
|
||||
<p><a class="analysis" ng-href="#/{{core}}/analysis?{{analysis.query}}"><span>{{analyzer.name}} Analyzer:</span></a></p>
|
||||
<dl>
|
||||
<dt><a ng-click="toggleAnalyzer(analyzer)" class="toggle">{{analyzer.detail.className}}</a></dt>
|
||||
</dl>
|
||||
<ul ng-show="analyzer.show">
|
||||
<li class="clearfix {{componentType.key}} data" ng-repeat="componentType in analyzer.detail.componentTypes" ng-show="componentType.components">
|
||||
<p>{{componentType.label}}:</p>
|
||||
<dl>
|
||||
<dt ng-repeat-start="component in componentType.components">{{component.className}}</dt>
|
||||
<dd ng-repeat-end ng-repeat="arg in component.args"
|
||||
ng-class="{'ico-1': arg.booleanValue, 'ico-0': arg.booleanValue==false}">
|
||||
{{arg.name}}<span ng-show="arg.value">: {{arg.value}}</span>
|
||||
</dd>
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="terminfo-holder loaded clearfix" ng-class="{disabled: noTermData}" ng-show="is.field && !display.partialState">
|
||||
|
||||
<div class="trigger">
|
||||
|
||||
<button class="submit" ng-click="toggleTerms()"><span ng-class="{loader:isLoadingTerms}">Load Term Info</span></button>
|
||||
<br/>
|
||||
<span ng-show="isCloudEnabled">N.B. Loaded from a single core - not from the whole collection.</span>
|
||||
|
||||
<a ng-show="showTerms" ng-click="toggleAutoload()" ng-class="{on:isAutoload}" class="autoload" title="Automatically load Term Info?"><span>Autoload</span></a>
|
||||
|
||||
</div>
|
||||
|
||||
<p ng-show="showTerms && noTerms" class="status">Sorry, no Term Info available :(</p>
|
||||
|
||||
<div ng-show="showTerms && termInfo.topTerms" class="topterms-holder">
|
||||
|
||||
<form>
|
||||
<p class="head">
|
||||
<input type="text" ng-model="topTermsCount" ng-change="loadTermInfo()">
|
||||
<a class="max-holder" ng-click="loadAllTopTerms()" title="Load all Top-Terms">/<span class="max">{{termInfo.maxTerms | number}}</span></a> Top-Terms:
|
||||
<a id="query_link" href="#/{{core}}/query?q={{name}}:[* TO *]"><span>Query</span> </a>
|
||||
</p>
|
||||
</form>
|
||||
|
||||
<ul>
|
||||
<li class="clearfix" ng-repeat="countGroup in termInfo.topTerms">
|
||||
<p><span>{{countGroup.count}}</span></p>
|
||||
<ul>
|
||||
<li ng-repeat="term in countGroup.terms" ng-class="{odd:$odd}"><a ng-href="#/{{core}}/query?q=%7B!term+f%3D{{name | uriencode}}%7D{{term | uriencode}}">{{term}}</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
<div ng-show="showTerms && termInfo.histogram" class="histogram-holder">
|
||||
|
||||
<p class="head">Histogram:</p>
|
||||
<ul>
|
||||
<li ng-repeat="row in termInfo.histogram" ng-class="{odd:$odd}">
|
||||
<dl class="clearfix" style="width: {{(( row.value / termInfo.histogramMax ) * 100 )}}%;">
|
||||
<dt><span>{{ row.key | number}}</span></dt>
|
||||
<dd><span>{{ row.value | number }}</span></dd>
|
||||
</dl>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="related">
|
||||
<select id="type_or_name"
|
||||
ng-model="fieldOrType"
|
||||
chosen
|
||||
data-placeholder="Please select ..."
|
||||
ng-change="selectFieldOrType()"
|
||||
ng-options="f.value as f.label group by f.group for f in fieldsAndTypes"></select>
|
||||
|
||||
<dl id="f-df-t">
|
||||
|
||||
<dt class="field" ng-class="{active: selectedType=='Field'}" ng-show="leftbar.fields">Field</dt>
|
||||
<dd class="field" ng-class="{active: selectedType=='Field'}" ng-repeat="field in leftbar.fields"><a href="#/{{core}}/schema?field={{field}}">{{field}}</a></dd>
|
||||
|
||||
<dt class="copyfield" ng-show="leftbar.copyFieldSources">Copied from</dt>
|
||||
<dd class="copyfield" ng-repeat="field in leftbar.copyFieldSources">
|
||||
<div class="clearfix" ng-hide="isSchemaUpdatable">
|
||||
<a href="#/{{core}}/schema?field={{field.name}}">{{field.name}}</a>
|
||||
</div>
|
||||
<div class="clearfix updatable" ng-show="isSchemaUpdatable">
|
||||
<a style="float:left;width:80%" href="#/{{core}}/schema?field={{field.name}}">{{field.name}}</a>
|
||||
<span ng-click="toggleDeleteCopyField(field)" class="rem"> </span>
|
||||
</div>
|
||||
<div class="action delete" ng-show="field.show">
|
||||
<form class="delete">
|
||||
|
||||
<p class="clearfix"><em>Are you sure you want to delete this CopyField?</em></p>
|
||||
<div ng-repeat="error in field.errors" ng-show="field.errors" class="clearfix note error">
|
||||
<span>{{error}}</span></div>
|
||||
|
||||
<p class="clearfix buttons">
|
||||
<button class="submit" ng-class="{success: field.deleted}" ng-click="deleteCopyField(field, field.name, name)"><span>Delete</span></button>
|
||||
<button type="reset" class="reset" ng-click="toggleDeleteCopyField(field)"><span>Cancel</span></button>
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
||||
</dd>
|
||||
|
||||
<dt class="copyfield" ng-show="leftbar.copyFieldDests">Copied to</dt>
|
||||
<dd class="copyfield" ng-repeat="field in leftbar.copyFieldDests">
|
||||
<div class="clearfix" ng-hide="isSchemaUpdatable">
|
||||
<a href="#/{{core}}/schema?field={{field.name}}">{{field.name}}</a>
|
||||
</div>
|
||||
<div class="clearfix updatable" ng-show="isSchemaUpdatable">
|
||||
<a href="#/{{core}}/schema?field={{field.name}}">{{field.name}}</a>
|
||||
<span ng-click="toggleDeleteCopyField(field)" class="rem"> </span>
|
||||
</div>
|
||||
<div class="action delete" ng-show="field.show">
|
||||
<form class="delete">
|
||||
|
||||
<p class="clearfix"><em>Are you sure you want to delete this CopyField?</em></p>
|
||||
<div ng-repeat="error in field.errors" ng-show="field.errors" class="clearfix note error">
|
||||
<span>{{error}}</span></div>
|
||||
|
||||
<p class="clearfix buttons">
|
||||
<button class="submit" ng-class="{success: field.deleted}" ng-click="deleteCopyField(field, name, field.name)"><span>Delete</span></button>
|
||||
<button type="reset" class="reset" ng-click="toggleDeleteCopyField(field)"><span>Cancel</span></button>
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
||||
</dd>
|
||||
<dt class="dynamic-field" ng-class="{active: selectedType=='Dynamic Field'}" ng-show="leftbar.dynamicFields">Dynamic Field {{dynamicFields}} / {{dynamicFields.length()}}</dt>
|
||||
<dd class="dynamic-field" ng-class="{active: selectedType=='Dynamic Field'}" ng-repeat="field in leftbar.dynamicFields"><a href="#/{{core}}/schema?dynamic-field={{field}}">{{field}}</a></dd>
|
||||
|
||||
<dt class="type" ng-class="{active: selectedType=='Type'}" ng-show="leftbar.types">Type</dt>
|
||||
<dd class="type" ng-class="{active: selectedType=='Type'}" ng-repeat="type in leftbar.types"><a href="#/{{core}}/schema?type={{type}}">{{type}}</a></dd>
|
||||
|
||||
<dt></dt>
|
||||
<dd class="active delete-field" ng-show="isSchemaUpdatable && leftbar.fields &&!showDelete"><button ng-click="toggleDelete()"><span>delete field</span></button></dd>
|
||||
<dd class="active delete-field" ng-show="isSchemaUpdatable && leftbar.dynamicFields &&!showDelete"><button ng-click="toggleDelete()"><span>delete dynamic field</span></button></dd>
|
||||
|
||||
<div class="action delete" ng-show="showDelete">
|
||||
|
||||
<form class="delete">
|
||||
|
||||
<p class="clearfix"><em>Are you sure you want to delete this {{selectedType}}?</em></p>
|
||||
<div ng-repeat="error in deleteErrors" ng-show="deleteErrors" class="clearfix note error">
|
||||
<span>{{error}}</span></div>
|
||||
|
||||
<p class="clearfix buttons">
|
||||
<button class="submit" ng-class="{success: deleted}" ng-click="delete()"><span>Delete</span></button>
|
||||
<button type="reset" class="reset" ng-click="toggleDelete()"><span>Cancel</span></button>
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
||||
</dl>
|
||||
|
||||
<dl class="ukf-dsf">
|
||||
|
||||
<dt class="unique-key-field" ng-class="{active: isUniqueKeyField}" ng-show="uniqueKeyField">Unique Key Field</dt>
|
||||
<dd class="unique-key-field" ng-class="{active: isUniqueKeyField}"><a ng-href="#/{{core}}/schema?field={{uniqueKeyField}}">{{uniqueKeyField}}</a></dd>
|
||||
|
||||
<dt class="similarity" ng-class="{active: similarity.className}">Global Similarity:</dt>
|
||||
<dd class="similarity" ng-class="{active: similarity.className}" data-tip="{{ similarity.className }}">{{ similarity.details }}</dd>
|
||||
|
||||
</dl>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,99 @@
|
||||
<!--
|
||||
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="segments">
|
||||
<div class="clearfix">
|
||||
|
||||
<div class="block fieldlist" id="statistics">
|
||||
|
||||
<h2><span>Segments</span></h2>
|
||||
<p id="auto-refresh"><a ng-click="toggleAutoRefresh()" ng-class="{on:autorefresh}">Auto-Refresh</a></p>
|
||||
<a class="reload" ng-click="refresh()"><span>reload</span></a>
|
||||
|
||||
<div class="message-container">
|
||||
<div class="message"></div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
|
||||
<div id="result">
|
||||
|
||||
<div id="response">
|
||||
|
||||
<div class="segments-holder">
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<dl class="clearfix" style="width:100%;">
|
||||
<dt>
|
||||
<div>Size</div>
|
||||
</dt>
|
||||
<dd>
|
||||
<div class="start">0</div>
|
||||
<div class="w5" ng-repeat="x in xaxis">
|
||||
<span ng-show="x>0.001">{{x.value}}</span>
|
||||
<span ng-hide="x>0.001"> </span>
|
||||
</div>
|
||||
<div class="end">{{segmentMB | number}} MB</div>
|
||||
</dd>
|
||||
</dl>
|
||||
</li>
|
||||
<li ng-repeat="segment in segments">
|
||||
<dl class="clearfix" ng-style="{width: segment.totalSize+'%'}">
|
||||
<dt>
|
||||
<div>{{ segment.name }}</div>
|
||||
</dt>
|
||||
<dd>
|
||||
<div class="live" ng-class="{'merge-candidate':segment.mergeCandidate}"
|
||||
ng-style="{width: segment.aliveDocSize+'%'}"> </div>
|
||||
<div class="tooltip">
|
||||
<div>Segment <b>{{segment.name}}</b>:</div>
|
||||
<div class="label">#docs:</div>
|
||||
<div>{{ segment.size | number }}</div>
|
||||
<div class="label">#dels:</div>
|
||||
<div>{{ segment.delCount | number }}</div>
|
||||
<div class="label">size:</div>
|
||||
<div>{{ segment.sizeInBytes | number }} bytes</div>
|
||||
<div class="label">age:</div>
|
||||
<div>{{ segment.age }}</div>
|
||||
<div class="label">source:</div>
|
||||
<div>{{ segment.source }}</div>
|
||||
</div>
|
||||
<div class="deleted" ng-show="segment.deletedDocSize"
|
||||
style="width: {{ segment.deletedDocSize }}%; margin-left:{{ segment.aliveDocSize}}%;">
|
||||
</div>
|
||||
</dd>
|
||||
</dl>
|
||||
</li>
|
||||
<li>
|
||||
<dl>
|
||||
<dt></dt>
|
||||
<dd>Deletions: {{ deletionsPercentage }}%</dd>
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -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.
|
||||
-->
|
||||
<div id="stream" class="clearfix">
|
||||
|
||||
<div id="form">
|
||||
<form>
|
||||
<label for="expr" title="The expression string">
|
||||
Streaming Expression (expr)
|
||||
</label>
|
||||
<textarea name="expr" ng-model="expr" id="expr" title="The expression string.">search(....)</textarea>
|
||||
|
||||
<button type="submit" ng-click="doStream()">Execute</button>
|
||||
<input type="checkbox" ng-model="doExplanation" name="doExplanation" id="doExplanation" value="true">
|
||||
<label for="explain" class="checkbox" title="Enable Explanation." ng-click="doExplanation = !doExplanation">
|
||||
with explanation
|
||||
</label>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div id="result">
|
||||
|
||||
<a ng-show="response.data" id="url" class="address-bar" ng-href="{{url}}">{{hostPortContext}}{{url}}</a>
|
||||
|
||||
<div ng-show="showExplanation" id="explanation" class="clearfix">
|
||||
<div id="frame">
|
||||
<div explanation-graph id="explanation-content" data="explanationData" depth="depth" leaf-count="leafCount" class="content clearfix" ng-show="showGraph">
|
||||
<div id="legend">
|
||||
<svg width="100%" height="15">
|
||||
<g transform="translate(5,10)" class="stream-decorator"><circle r="4.5"></circle></g>
|
||||
<g transform="translate(15,14)"><text>Stream Decorator</text></g>
|
||||
<g transform="translate(140,10)" class="stream-source"><circle r="4.5"></circle></g>
|
||||
<g transform="translate(150,14)"><text>Stream Source</text></g>
|
||||
<g transform="translate(260,10)" class="graph-source"><circle r="4.5"></circle></g>
|
||||
<g transform="translate(270,14)"><text>Graph Source</text></g>
|
||||
<g transform="translate(375,10)" class="datastore"><circle r="4.5"></circle></g>
|
||||
<g transform="translate(385,14)"><text>Datastore</text></g>
|
||||
</svg>
|
||||
</div>
|
||||
<div id="canvas"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="response">
|
||||
<pre class="syntax language-json"><code ng-bind-html="response.data | highlight:json | unsafe"></code></pre>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,65 @@
|
||||
<!--
|
||||
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="threads" ng-class="showAllStacktraces ? 'expanded' : 'collapsed'">
|
||||
|
||||
<div class="controls">
|
||||
<a ng-click="toggleStacktraces()">
|
||||
<span>{{showAllStacktraces?"Hide":"Show"}} all Stacktraces</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div id="thread-dump">
|
||||
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
|
||||
<thead>
|
||||
|
||||
<tr>
|
||||
|
||||
<th class="name">name</th>
|
||||
<th class="time">cpuTime / userTime</th>
|
||||
|
||||
</tr>
|
||||
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr ng-repeat="thread in threads" class="{{$odd?'odd':''}} {{thread.lock?'lock':''}} {{thread.stackTrace?'stacktrace':''}} {{thread.state}}">
|
||||
<td class="name">
|
||||
<a title="{{thread.state}}" ng-click="toggleStacktrace(thread)"><span>{{thread.name}} ({{thread.id}})</span></a>
|
||||
<p title="Waiting on" ng-show="thread.lock">{{thread.lock}}</p>
|
||||
<div ng-show="thread.showStackTrace">
|
||||
<ul>
|
||||
<li ng-repeat="trace in thread.stackTrace track by trace.id">{{trace.trace}}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
<td class="time">{{thread.cpuTime}}<br>{{thread.userTime}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="controls">
|
||||
<a ng-click="toggleStacktraces()">
|
||||
<span>{{showAllStacktraces?"Hide":"Show"}} all Stacktraces</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
Reference in New Issue
Block a user