diff options
Diffstat (limited to 'solr-8.1.1/server/solr-webapp/webapp/partials')
23 files changed, 3662 insertions, 0 deletions
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/analysis.html b/solr-8.1.1/server/solr-webapp/webapp/partials/analysis.html new file mode 100644 index 000000000..23527f735 --- /dev/null +++ b/solr-8.1.1/server/solr-webapp/webapp/partials/analysis.html @@ -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> diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/cloud.html b/solr-8.1.1/server/solr-webapp/webapp/partials/cloud.html new file mode 100644 index 000000000..1e64d2976 --- /dev/null +++ b/solr-8.1.1/server/solr-webapp/webapp/partials/cloud.html @@ -0,0 +1,302 @@ +<!-- +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]; h = nodes[firstLiveNodeForHost(key)]"> + <td rowspan="{{hosts[h.host].nodes.length}}" ng-show="isFirstNodeForHost(key)"> + <div class="host-name">{{h.host}}</div> + <span class="host-spec" ng-show="!showDetails[h.host]"> + <span title="{{h.system.system.uptime}}">{{h.system.system.name}}</span> + <span title="free: {{h.memFree}}">{{h.memTotal}}</span> + <span title="{{h.system.jvm.name}} {{h.system.jvm.version}}">Java {{h.system.jvm.spec.version}}</span> + <br/>Load: {{h.loadAvg}} + </span> + <div class="host-spec" ng-show="showDetails[h.host]"> + {{h.system.system.name}} {{h.system.system.version}}, {{h.system.system.availableProcessors}}cpu<br/> + Uptime: {{h.uptime}}<br/> + <span title="Used: {{h.memUsed}} - includes OS file-cache, and it is normal for it to approach 100%">Memory: {{h.memTotal}}</span><br/> + File descriptors: {{h.openFileDescriptorCount}}/{{h.maxFileDescriptorCount}}<br/> + Disk: <span class="{{h.diskUsedPctStyle}}" title="Nodes may use other disks too">{{h.diskTotal}} used: {{h.diskUsedPct}}%</span><br/> + Load: {{h.loadAvg}} + </div> + <div class="node-spec" ng-click="toggleHostDetails(h.host)"> + <a ng-show="showDetails[h.host]">hide details...</a> + <a ng-show="!showDetails[h.host]">show details...</a> + </div> + </td> + <td ng-class="{'dead-node': n.dead}"><div class="node-name"><a href="{{n.base_url}}">{{key.replace(n.host+':', '')}}</a></div> + <div ng-show="n.dead" class="node-down">(DEAD)</div> + <div ng-show="!n.dead"> + 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> + </div> + </td> + <td ng-class="{'dead-node': n.dead}"> + <div class="node-cpu" ng-show="!n.dead"> + <span class="{{n.cpuPctStyle}}">{{n.cpuPct}}%</span> + </div> + </td> + <td ng-class="{'dead-node': n.dead}"> + <div class="node-heap" title="total: {{n.heapTotal}} free: {{n.heapFree}} used%: {{n.heapUsedPct}}%" ng-show="!n.dead"> + <span class="{{n.heapUsedPctStyle}}">{{n.heapUsedPct}}%</span> + </div> + <div class="node-spec" ng-show="showDetails[key] && !n.dead"> + Max: {{n.heapTotal}}<br/> + Used: {{n.heapUsed}} + </div> + </td> + <td class="scroll-height-250" ng-class="{'dead-node': n.dead}"> + <div> + <div class="node-disk" title="Available disk: {{n.diskTotal}} free: {{n.diskFree}} used by this node: {{n.size}}" ng-show="!n.dead"> + {{n.size}} + </div> + <div class="node-spec" ng-show="showDetails[key] && !n.dead"> + Total #docs: {{n.numDocs}}<br/> + Avg size/doc: {{n.sizePerDoc}} + </div> + <div id="chart{{n.id}}" ng-show="showDetails[key] && !n.dead"></div> + </div> + </td> + <td ng-class="{'dead-node': n.dead}"><div class="node-requests" title="1minRate: {{n.req1minRate}} 5minRate: {{n.req5minRate}} 15minRate: {{n.req15minRate}} p75: {{n.reqp75_ms}} p99: {{n.reqp99_ms}}" ng-show="!n.dead"> + RPM: {{n.req15minRate}}<br/>p95: {{n.reqp95_ms}}ms</div> + </td> + <td ng-class="{'dead-node': n.dead}"> + <div ng-show="!n.collections">(none)</div> + <div ng-repeat="c in n.collections | limitTo:showDetails[key]?999:2 track by $index"> + <a href="{{h.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" ng-class="{'dead-node': n.dead}"> + <div ng-show="!n.cores">(none)</div> + <div ng-repeat="core in n.cores | limitTo:showDetails[key]?999:2 track by $index"> + <div ng-show="!n.dead"><a class="{{core.leader ? 'leader' : 'replica'}}" href="{{core.base_url + '/#/' + core.core + '/core-overview'}}">{{ core.label }}</a> ({{core.numDocsHuman}} docs)</div> + <div ng-show="n.dead">{{ core.label }}</div> + <ul class="core-details" ng-show="showDetails[key] && !n.dead" > + <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] && !n.dead"> + <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" 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> diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/cluster_suggestions.html b/solr-8.1.1/server/solr-webapp/webapp/partials/cluster_suggestions.html new file mode 100644 index 000000000..892b0bbc9 --- /dev/null +++ b/solr-8.1.1/server/solr-webapp/webapp/partials/cluster_suggestions.html @@ -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> + diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/collection_overview.html b/solr-8.1.1/server/solr-webapp/webapp/partials/collection_overview.html new file mode 100644 index 000000000..ba09bd95f --- /dev/null +++ b/solr-8.1.1/server/solr-webapp/webapp/partials/collection_overview.html @@ -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> diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/collections.html b/solr-8.1.1/server/solr-webapp/webapp/partials/collections.html new file mode 100644 index 000000000..60ef47ad0 --- /dev/null +++ b/solr-8.1.1/server/solr-webapp/webapp/partials/collections.html @@ -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> diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/core_overview.html b/solr-8.1.1/server/solr-webapp/webapp/partials/core_overview.html new file mode 100644 index 000000000..f1826f65c --- /dev/null +++ b/solr-8.1.1/server/solr-webapp/webapp/partials/core_overview.html @@ -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> diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/cores.html b/solr-8.1.1/server/solr-webapp/webapp/partials/cores.html new file mode 100644 index 000000000..161576956 --- /dev/null +++ b/solr-8.1.1/server/solr-webapp/webapp/partials/cores.html @@ -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> diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/dataimport.html b/solr-8.1.1/server/solr-webapp/webapp/partials/dataimport.html new file mode 100644 index 000000000..dd11f5471 --- /dev/null +++ b/solr-8.1.1/server/solr-webapp/webapp/partials/dataimport.html @@ -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> diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/documents.html b/solr-8.1.1/server/solr-webapp/webapp/partials/documents.html new file mode 100644 index 000000000..2bf3f1298 --- /dev/null +++ b/solr-8.1.1/server/solr-webapp/webapp/partials/documents.html @@ -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> + + diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/files.html b/solr-8.1.1/server/solr-webapp/webapp/partials/files.html new file mode 100644 index 000000000..6a31096f0 --- /dev/null +++ b/solr-8.1.1/server/solr-webapp/webapp/partials/files.html @@ -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> diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/index.html b/solr-8.1.1/server/solr-webapp/webapp/partials/index.html new file mode 100644 index 000000000..b9e6a90f4 --- /dev/null +++ b/solr-8.1.1/server/solr-webapp/webapp/partials/index.html @@ -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> diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/java-properties.html b/solr-8.1.1/server/solr-webapp/webapp/partials/java-properties.html new file mode 100644 index 000000000..047de48d5 --- /dev/null +++ b/solr-8.1.1/server/solr-webapp/webapp/partials/java-properties.html @@ -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> + diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/logging-levels.html b/solr-8.1.1/server/solr-webapp/webapp/partials/logging-levels.html new file mode 100644 index 000000000..5a4a2d681 --- /dev/null +++ b/solr-8.1.1/server/solr-webapp/webapp/partials/logging-levels.html @@ -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> diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/logging.html b/solr-8.1.1/server/solr-webapp/webapp/partials/logging.html new file mode 100644 index 000000000..9952360b3 --- /dev/null +++ b/solr-8.1.1/server/solr-webapp/webapp/partials/logging.html @@ -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> diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/login.html b/solr-8.1.1/server/solr-webapp/webapp/partials/login.html new file mode 100644 index 000000000..29c8c7150 --- /dev/null +++ b/solr-8.1.1/server/solr-webapp/webapp/partials/login.html @@ -0,0 +1,160 @@ +<!-- +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="authScheme === 'Bearer'"> + <h1>OpenID Connect (JWT) authentication</h1> + <div class="login-error" ng-show="statusText || authParamsError || error"> + {{statusText}} {{authParamsError}} {{error}} {{errorDescription}} + </div> + <div ng-show="isCallback"> + Callback from ID Provider received. + <p ng-show="error"> + There were errors during login with ID Provider. Please try again.<br/> + </p> + </div> + <div ng-show="!isLoggedIn() && !isCallback"> + <p> + Solr requires authentication for resource {{authLocation === '/' ? 'Dashboard' : authLocation}}. + </p> + <div ng-show="authData !== null && jwtIsLoginNode()"> + <p> + Please log in with your Identity Provider (IdP) for realm {{authRealm}}. + </p> + <p> + Clicking the button below, you will be redirected to the authorization endpoint of the ID provider:<br/> + {{authData['authorizationEndpoint']}} + </p> + <br/> + <div ng-show="error" class="alert alert-danger">{{error}}</div> + <form name="form" ng-submit="jwtLogin()" role="form"> + <div class="form-actions"> + <button type="submit" class="btn btn-danger">Redirect to Identity Provider</button> + </div> + </form> + </div> + <div ng-show="authData !== null && !jwtIsLoginNode()"> + <p> + In order to log in to the identity provider, you need to load this page from the Solr node registered as callback node:<br/> + {{jwtFindLoginNode()}}<br/> + After successful login you will be able to navigate to other nodes. + </p> + <p> + <form name="form" ng-submit="jwtGotoLoginNode()" role="form"> + <div class="form-actions"> + <button type="submit" class="btn btn-danger">Redirect to {{jwtFindLoginNode()}}</button> + </div> + </form> + </p> + </div> + <div class="login-error" ng-show="authData === null"> + Unable to login. There is a problem with the Solr backend. Please consult Solr logs. + </div> + </div> + + <div ng-show="isLoggedIn()"> + <p> + Logged in as user {{authLoggedinUser}}. Realm={{authRealm}}.<br/> + </p> + <br/> + <form name="logoutForm" ng-submit="jwtLogout()" 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="!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> diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/plugins.html b/solr-8.1.1/server/solr-webapp/webapp/partials/plugins.html new file mode 100644 index 000000000..aaa424d3b --- /dev/null +++ b/solr-8.1.1/server/solr-webapp/webapp/partials/plugins.html @@ -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> diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/query.html b/solr-8.1.1/server/solr-webapp/webapp/partials/query.html new file mode 100644 index 000000000..2a7735505 --- /dev/null +++ b/solr-8.1.1/server/solr-webapp/webapp/partials/query.html @@ -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> diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/replication.html b/solr-8.1.1/server/solr-webapp/webapp/partials/replication.html new file mode 100644 index 000000000..b3d668422 --- /dev/null +++ b/solr-8.1.1/server/solr-webapp/webapp/partials/replication.html @@ -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> diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/schema.html b/solr-8.1.1/server/solr-webapp/webapp/partials/schema.html new file mode 100644 index 000000000..e94b6dab4 --- /dev/null +++ b/solr-8.1.1/server/solr-webapp/webapp/partials/schema.html @@ -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> diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/segments.html b/solr-8.1.1/server/solr-webapp/webapp/partials/segments.html new file mode 100644 index 000000000..e1174aba5 --- /dev/null +++ b/solr-8.1.1/server/solr-webapp/webapp/partials/segments.html @@ -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> diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/stream.html b/solr-8.1.1/server/solr-webapp/webapp/partials/stream.html new file mode 100644 index 000000000..683cf76d9 --- /dev/null +++ b/solr-8.1.1/server/solr-webapp/webapp/partials/stream.html @@ -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> diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/threads.html b/solr-8.1.1/server/solr-webapp/webapp/partials/threads.html new file mode 100644 index 000000000..f1e6fdeb2 --- /dev/null +++ b/solr-8.1.1/server/solr-webapp/webapp/partials/threads.html @@ -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> diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/unknown.html b/solr-8.1.1/server/solr-webapp/webapp/partials/unknown.html new file mode 100644 index 000000000..51895ab8b --- /dev/null +++ b/solr-8.1.1/server/solr-webapp/webapp/partials/unknown.html @@ -0,0 +1,23 @@ +<!-- +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="unknown" class="clearfix"> + + <div> + Oops, this URL is unknown to us, redirecting you back to Dashboard + </div> + +</div> |