Code Monkey home page Code Monkey logo

monex's People

Contributors

adamretter avatar albicocca avatar dependabot-preview[bot] avatar dependabot-support avatar dependabot[bot] avatar dizzzz avatar duncdrum avatar jensopetersen avatar joernt avatar joewiz avatar line-o avatar patczar avatar reinhapa avatar windauer avatar wolfgangmm avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

monex's Issues

Data Visualizer considered harmful

Describe the bug
I was using monex to monitor the performance of a sluggish application. Among the monex left menu choices, I looked at monitoring, and the console (because the app prints a few key performance measures to the console), and then clicked on Data Visualizer (sic), which I had never used before, hoping to find something useful. It said something about "index mapping" and I didn't know what it was talking about, so I moved on, but noticed that performance went from a little slow to quite horrible (minutes to get a response from queries that normally take milliseconds or seconds).

Eventually I discovered that simply clicking "Data Visualizer" immediately triggered a run of /db/apps/monex/modules/index2json.xql and passed "/db/apps" as the collection. As far as I can see after looking at the XQL and the way it calls util:index-keys, that means it's going to try to count all of the nodes in the structural index by document for every collection under /db/apps.

The problem is, in one of my collections, I have tens of thousands of documents with tens of millions of nodes in the structural index (i.e., they have xml:id present). A recursive scan of all of those nodes basically locked up my production system with one mouse click. I attempted to kill the query running index2json.xql (in Monex) but after many hours it is still running and consuming 100% of one CPU on a 4-processor system. Since eXist is mostly single-threaded, any user query has to compete with that process that has the CPU pegged, thus explaining why things that should take milliseconds now take minutes.

Expected behavior
Don't make a self-inflicted DOS attack easier for the user than the alternatives. Specifically, when the user chooses "Data Vizualizer," don't do anything until the user specifies what s/he wants to visualize, and perhaps explain the implications of touching every node in the structural index of every collection under /db/apps.

To Reproduce
Choose "Data Visualizer" in Monex in any eXist instance that actually has a lot of data to visualize. "A lot" is relative, but tens of millions of nodes definitely brings things to a virtual halt.

Context (please always complete the following information):
eXist 5.2.0. Nothing else in this section is relevant.

Display Fails / Hits ratio

E.g.

dom.dbx: Size: 1639 / Used: 1639 / Fails: 8963 / Hits: 14192913 / Ratio: 0,63%
structure.dbx: Size 1639 / Used: 1639 / Fails: 4257873 / Hits: 14192913 / Ratio: 0,3%

A ratio exceeding certain values could further be emphasized (e.g. yellow, orange red background)

Cardinality issue sorting in browse indexes

stack trace:

exerr:ERROR XPTY0004: The actual cardinality for parameter 1 does not match the cardinality declared in the function's signature: concat($atomizable-values as xs:anyAtomicType?, ...) xs:string?. Expected cardinality: zero or one, got 2. [at line 755, column 54, source: /db/apps/monex/modules/indexes.xqm]
In function:
    indexes:remove-parameter-names(item()*, item()*) [752:9:/db/apps/monex/modules/indexes.xqm]
    indexes:remove-parameter-names(item()*) [248:65:/db/apps/monex/modules/indexes.xqm]
    indexes:show-index-keys(node(), map) [32:9:/db/apps/monex/modules/indexes.xqm]
    templates:call-with-args(function, function*, element(), map) [208:13:/Users/wessels/Library/Application Support/org.exist/expathrepo/shared-0.4.0/content/templates.xql]
    templates:process-output(element(), map, item()*, element()) [205:9:/Users/wessels/Library/Application Support/org.exist/expathrepo/shared-0.4.0/content/templates.xql]
    templates:call-by-introspection(element(), map, map, function) [187:28:/Users/wessels/Library/Application Support/org.exist/expathrepo/shared-0.4.0/content/templates.xql]
    templates:call(item(), element(), map) [143:37:/Users/wessels/Library/Application Support/org.exist/expathrepo/shared-0.4.0/content/templates.xql]
    templates:process(node()*, map) [277:13:/Users/wessels/Library/Application Support/org.exist/expathrepo/shared-0.4.0/content/templates.xql]
    templates:process-output(element(), map, item()*, element()) [205:9:/Users/wessels/Library/Application Support/org.exist/expathrepo/shared-0.4.0/content/templates.xql]
    templates:call-by-introspection(element(), map, map, function) [187:28:/Users/wessels/Library/Application Support/org.exist/expathrepo/shared-0.4.0/content/templates.xql]
    templates:call(item(), element(), map) [135:36:/Users/wessels/Library/Application Support/org.exist/expathrepo/shared-0.4.0/content/templates.xql]
    templates:process(node()*, map) [146:81:/Users/wessels/Library/Application Support/org.exist/expathrepo/shared-0.4.0/content/templates.xql]
    templates:process(node()*, map) [146:81:/Users/wessels/Library/Application Support/org.exist/expathrepo/shared-0.4.0/content/templates.xql]
    templates:process(node()*, map) [146:81:/Users/wessels/Library/Application Support/org.exist/expathrepo/shared-0.4.0/content/templates.xql]
    templates:process(node()*, map) [146:81:/Users/wessels/Library/Application Support/org.exist/expathrepo/shared-0.4.0/content/templates.xql]
    templates:process(node()*, map) [462:17:/Users/wessels/Library/Application Support/org.exist/expathrepo/shared-0.4.0/content/templates.xql]
    templates:surround(node(), map, xs:string, xs:string?, xs:string?, xs:string?) [32:9:/Users/wessels/Library/Application Support/org.exist/expathrepo/shared-0.4.0/content/templates.xql]
    templates:call-with-args(function, function*, element(), map) [208:13:/Users/wessels/Library/Application Support/org.exist/expathrepo/shared-0.4.0/content/templates.xql]
    templates:process-output(element(), map, item()*, element()) [205:9:/Users/wessels/Library/Application Support/org.exist/expathrepo/shared-0.4.0/content/templates.xql]
    templates:call-by-introspection(element(), map, map, function) [187:28:/Users/wessels/Library/Application Support/org.exist/expathrepo/shared-0.4.0/content/templates.xql]
    templates:call(item(), element(), map) [135:36:/Users/wessels/Library/Application Support/org.exist/expathrepo/shared-0.4.0/content/templates.xql]
    templates:process(node()*, map) [131:51:/Users/wessels/Library/Application Support/org.exist/expathrepo/shared-0.4.0/content/templates.xql]
    templates:process(node()*, map) [88:9:/Users/wessels/Library/Application Support/org.exist/expathrepo/shared-0.4.0/content/templates.xql]
    templates:apply(node()+, function, map?, map?) [43:5:/Users/wessels/Library/Application Support/org.exist/expathrepo/shared-0.4.0/content/templates.xql]

[BUG] java.lang.NoSuchMethodError: org.exist.source.Source.getKey()Ljava/lang/Object;

@joewiz commented on Nov 9, 2020, 10:28 PM UTC:

Describe the bug

Using the current develop branch, the xdb:xquery ant task throws this error:

XMLDB exception caught while executing query: Failed to invoke method queryPT in class org.exist.xmlrpc.RpcConnection: org.exist.source.Source.getKey()Ljava/lang/Object;

For the corresponding error in exist.log, see exist-hsg-project-log.txt - which culminates in:

Caused by: java.lang.NoSuchMethodError: org.exist.source.Source.getKey()Ljava/lang/Object;

The error is not present when building from the develop branch older than ~20 days ago. For example, 2ac8622 does not exhibit the error.

Expected behavior

I expected no such error.

To Reproduce

From a local checkout of https://github.com/HistoryAtState/hsg-project, run ant deploy-repo-to-localhost -Ddirectory="/Users/joe/workspace/hsg-project/repos/administrative-timeline". This calls xdb:xquery here: https://github.com/HistoryAtState/hsg-project/blob/master/build.xml#L284-L294.

Context (please always complete the following information):

  • OS: macOS 10.15.7
  • eXist-db version: eXist 5.3.0-SNAPSHOT 29d4817
  • Java Version: Liberica full OpenJDK 1.8.0_272

Additional context

  • How is eXist-db installed? built from source
  • Any custom changes in e.g. conf.xml? none

This issue was moved by adamretter from eXist-db/exist#3614.

[BUG] Firefox can’t establish a connection to the server at ws://myip:8080/rconsole.

Hello,

I have a fresh installation of eXist-db 5.2. running on CentOs 7. When I open the Monex application I'm asked for the admin password; after successfully logging in I get a ' Alert! Connection to server failed. Retrying ... ' message at the top of the page, and I have these errors in the console:

Firefox can’t establish a connection to the server at ws://myip:8080/rconsole. exadmin.js:231:25

WebSocket Error:  
error
​
bubbles: false
​
cancelBubble: false
​
cancelable: false
​
composed: false
​
currentTarget: null
​
defaultPrevented: false
​
eventPhase: 0
​
explicitOriginalTarget: WebSocket { url: "ws://myip222:8080/rconsole", readyState: 3, bufferedAmount: 0, … }
​
isTrusted: true
​
originalTarget: WebSocket { url: "ws://myip:8080/rconsole", readyState: 3, bufferedAmount: 0, … }
​
returnValue: true
​
srcElement: WebSocket { url: "ws://myip:8080/rconsole", readyState: 3, bufferedAmount: 0, … }
​
target: WebSocket { url: "ws://myip:8080/rconsole", readyState: 3, bufferedAmount: 0, … }
​
timeStamp: 3058
​
type: "error"
​
<get isTrusted()>: function isTrusted()
​
<prototype>: EventPrototype { composedPath: composedPath(), stopPropagation: stopPropagation(), stopImmediatePropagation: stopImmediatePropagation(), … }
exadmin.js:236:21
Request URL:http://myip:8080/status?c=instances&c=processes&c=locking&c=memory&c=caches&c=system&c=operatingsystem&token=false
Request Method:GET
Remote Address:myip:8080
Status Code:
403
Version:HTTP/1.1

Filter reports by source

This is a request for a new feature in Monex.

Is your feature request related to a problem? Please describe.

I'm always frustrated when I can't easily focus on my own code in Monex profiling reports because results that concern the code that I wrote are intermingled with results produced by Monex itself.

Describe the solution you'd like
A clear and concise description of what you want to happen.

When I look at any of the three reporting tabs in Monex (queries, functions, index usage) the leftmost column is always the source, and it usually contains a path to some resource within the database (or occasionally just a reference to string with an id number). Those sources, at least in the types of queries I run, seem to be primarily of three types:

  1. My own app, e.g., /db/apps/app-name/…
  2. Monex, e.g., /db/apps/monex/…
  3. Standard eXist-db library files, e.g. /Users/userid/Library/Application Support/…, or other resources (e.g., String)

If I’ve understood correctly, Monex knows about these sources because if it didn't it couldn’t list them. I care about # 1, I don’t care about # 2, and I understand how the ultimate source of the operations that show up in # 3 might be ambiguous, since either my own app or Monex might call on standard library resources.

If I could tell Monex to hide # 2 and show me the others, or to show me only # 1, that would be an improvement over having to read around a mixture of the three.

Describe alternatives you've considered

Disabling tracing, clearing, enabling tracing, running, disabling tracing again, and refreshing seems to produce the cleanest view, but it still intermingles results that I don't care about with results that I do care about (at the extremes, it intermingles results produced by Monex itself with results produced my my own code). Monex cannot know what I care about, of course, but since it knows about sources, if it supported dynamic filtering of sources during viewing I could configure what was shown and what was hidden. For example, it might let me enter "/db/apps/app-name" and show me only lines in the reports where the source value begins with that string.

Additional context

I discussed this issue briefly with @line-o in the eXist-db Slack workspace (#community channel) on 2022-09-06. @line-o alerted me that "I am not sure monex is able to determine the source of each running process". While I understand that the ultimate source may not be accessible (for example, whether it is Monex or my app that starts a process in the standard eXist-db library resources, which is my # 3, above), support for user control over filtering results according to the source as Monex already reports it would be a substantial improvement in usability over the current static reporting.

[BUG] facets might be displayed incorrectly

Describe the bug

The display of elements that are in a facet (or dimension) might be incorrect. The count for each entry might be incorrect.
This can lead to confusion as monex is used as a tool to check if indices of a collection are set up properly.

Expected behavior

A complete list of elements present in a facet each with the correct count.

To Reproduce

Set up a collection with at least on facet and one field on an QName. The field must not be present on every element that is indexed.

Open the index view in Monex. Navigate to the facet of said collection. The elements in this facet is reduced to those that also have the field.

Reason is:

The link is constructed with the fields parameter populated. In the code this triggers the search options to include those fields.
This then excludes all entries from being returned in the result that do not have an entry in the sparse field.

Example link:

http://localhost:8080/exist/apps/monex/facet.html?
  collection=/db/lucenetest&
  facet=place&
  fields=place,from,to,date,time,datetime,likes,score&
  node-name=letter

Screenshots
Screenshot 2021-11-25 at 14 17 14

Minimal Test-Setup

(:
 : eXist-db Open Source Native XML Database
 : Copyright (C) 2001 The eXist-db Authors
 :
 : [email protected]
 : http://www.exist-db.org
 :
 : This library is free software; you can redistribute it and/or
 : modify it under the terms of the GNU Lesser General Public
 : License as published by the Free Software Foundation; either
 : version 2.1 of the License, or (at your option) any later version.
 :
 : This library is distributed in the hope that it will be useful,
 : but WITHOUT ANY WARRANTY; without even the implied warranty of
 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 : Lesser General Public License for more details.
 :
 : You should have received a copy of the GNU Lesser General Public
 : License along with this library; if not, write to the Free Software
 : Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 :)
(:
 : stripped-down version of facets.xql with a field index configured that is only present in 
 : some of the matching elements (//letter/dateTime).
 :)
xquery version "3.1";

declare variable $local:XML :=
    <letters>
        <letter>
            <place>Berlin</place>
            <dateTime>1972-06-08T10:00:00-05:00</dateTime>
        </letter>
        <letter>
            <place>Berlin</place>
            <dateTime>1970-07-03T00:00:00-05:00</dateTime>
        </letter>
        <letter>
            <place>Hamburg</place>
        </letter>
        <letter>
            <place></place>
        </letter>
        <letter>
            <place>Wrocław</place>
        </letter>
        <letter>
            <place>Wrocław</place>
        </letter>
    </letters>;

declare variable $local:XCONF1 :=
    <collection xmlns="http://exist-db.org/collection-config/1.0">
        <index xmlns:xs="http://www.w3.org/2001/XMLSchema">
            <lucene>
                <analyzer class="org.exist.indexing.lucene.analyzers.NoDiacriticsStandardAnalyzer" id="nodiacritics"/>
                <text qname="letter" analyzer="nodiacritics">
                    <facet dimension="place" expression="place"/>
                    <field name="dateTime" expression="dateTime" type="xs:dateTime"/>
                </text>
            </lucene>
        </index>
    </collection>;

declare
function local:setup() {
    let $testCol := xmldb:create-collection("/db", "lucenetest")
    let $confCol := xmldb:create-collection("/db/system/config/db", "lucenetest")
    return (
        xmldb:store($confCol, "collection.xconf", $local:XCONF1),
        xmldb:store($testCol, "test.xml", $local:XML),
        xmldb:reindex($personsCol)
    )
};

local:setup()

Context (please always complete the following information):

  • OS: OSX 10.15.7
  • eXist-db Version: 5.3.0
  • Java Version: AdoptOpen JDK 8
  • App Version: 3.0.3

Additional context

  • How is eXist-db installed? built from source (eXist-5.3.0)
  • Any custom changes in e.g. conf.xml? none

Improve exception handling

Currently, if the server running monex runs out of memory, monex will emit an errant notification stating that the remote monitored server is out of memory, instead of the server instance running monex. For example, I received this confirmed incorrect email from my monex server saying my production server was out of memory:

Server Name:  history.state.gov
Message:  java:java.lang.OutOfMemoryError
Timestamp:  2015-09-30T23:55:16.946Z

As Wolfgang stated:

I assume monex reports the out of memory for hsg because it catches that exception while trying to pull the server. so we should output a different alert for locally catched exceptions.

index browser is missing mock indexes

index browser had some test indexes that we used for … testing, they are missing in monex 2.0.0
Screenshot 2019-04-24 at 14 27 56

1) Monex indexes should load Browse Indexes:
     CypressError: Timed out retrying: Expected to find content: '/db/apps/mone
x/indexes-test' but never did.

console logs entire source for XQuery

console:log(...)
logs the function name to console,html when called inside a function in the 'source' column (before line/column).

However, when console:log(...) is called from an XQuery body, the entire XQuery source is logged to the 'source' column - which gives large output for large XQueries.

Just logging the XQuery filename in those cases would be an improvement.

Update for compatibility with eXist 5.0.0

According to @adamretter, XML format of JMX in 5.0.0 has changed slightly, and monex's javascript is tightly coupled to old JMX output.

  • Make parsing of JMX XML more resilient, if one element fails, just ignore and move to the next instead of exploding.
  • Update javascript to use new names for JMX format
  • Extend functionality to report new cache info
  • Write unit tests
  • Write integration tests

[BUG] GitHub Actions CI runs are failing

Alas, I was wrong in #172 (comment) when I said:

I seem to recall that the important CI runs here ("push") are passing - and that the failing ones ("pull_request") won't matter once the PR is merged.

I'd be grateful for any insights into what is causing this pattern with master:

Screen Shot 2022-01-31 at 10 53 30 PM

Errors showing keys for Lucene indexes [BUG]

I've run into two problems trying to use Monex to inspect Lucene indexes.

  1. Trying to view index keys by QName returns 0 keys even when the index is populated. This looks similar to issue #191
  2. Trying to view index keys by Node gives a 500 error with a message "name is empty"

At first I thought this was an error in the way that I created the indexes but after testing with a minimal example this seems to be a bug.

To reproduce this error I created a minimal collection.xconf file defining a Lucene index and reindexed a collection that contained a document.

<collection xmlns="http://exist-db.org/collection-config/1.0">
    <index xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <lucene>
            <analyzer class="org.apache.lucene.analysis.standard.StandardAnalyzer"/>
            <analyzer id="ws" class="org.apache.lucene.analysis.core.WhitespaceAnalyzer"/>
            
            <text qname="article"/>
        </lucene>
        
    </index>
</collection>

I verified that the index is populated by using eXide to run a simple query using ft:query.

Then open Monex. Click on Indexes, then click on the collection. The Lucene index on "article" is displayed.

Click on QName. There is a message "0 keys returned in 0.409s" and the table that should show index keys is empty.

Go back.

Click on Node. An error with a stack trace is displayed. I've copied the full error message below.

Context (please always complete the following information):

  • OS: Windows
  • eXist-db Version: 6.0.1
  • Java Version: 11.0.16 (also tried Java 8)
  • App Version: 3.0.4

Additional context

  • How is eXist-db installed? Fresh install by extracting zip file.

Here is the full error message:

<html><body>
<!--StartFragment--><h2>HTTP ERROR 500 javax.servlet.ServletException: 
javax.servlet.ServletException: An error occurred while processing 
request to /exist/apps/monex/index-keys.html: An unknown error occurred:
 name is empty</h2>


URI: | /exist/apps/monex/index-keys.html
-- | --
500
javax.servlet.ServletException:  javax.servlet.ServletException: An error occurred while processing  request to /exist/apps/monex/index-keys.html: An unknown error occurred:  name is empty
XQueryURLRewrite
javax.servlet.ServletException:  javax.servlet.ServletException: An error occurred while processing  request to /exist/apps/monex/index-keys.html: An unknown error occurred:  name is empty
javax.servlet.ServletException: An error  occurred while processing request to /exist/apps/monex/index-keys.html:  An unknown error occurred: name is empty
javax.servlet.ServletException: An unknown error occurred: name is empty
java.lang.IllegalArgumentException: name is empty


<h3>Caused by:</h3><pre>javax.servlet.ServletException: javax.servlet.ServletException: An error occurred while processing request to /exist/apps/monex/index-keys.html: An unknown error occurred: name is empty
	at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:162)
	at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:763)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
	at org.eclipse.jetty.server.Server.handle(Server.java:516)
	at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:400)
	at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:645)
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:392)
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
	at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
	at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: javax.servlet.ServletException: An error occurred while processing request to /exist/apps/monex/index-keys.html: An unknown error occurred: name is empty
	at org.exist.http.urlrewrite.XQueryURLRewrite.service(XQueryURLRewrite.java:366)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
	at org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1450)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)
	at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1631)
	at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:228)
	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
	at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:571)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1434)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1349)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
	at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:234)
	at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
	... 18 more
Caused by: javax.servlet.ServletException: An unknown error occurred: name is empty
	at org.exist.http.servlets.EXistServlet.doPost(EXistServlet.java:572)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
	at org.exist.http.servlets.EXistServlet.service(EXistServlet.java:588)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
	at org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1459)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)
	at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1631)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:618)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1434)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1349)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
	at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:167)
	at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:81)
	at org.exist.http.urlrewrite.Forward.doRewrite(Forward.java:50)
	at org.exist.http.urlrewrite.XQueryURLRewrite.doRewrite(XQueryURLRewrite.java:523)
	at org.exist.http.urlrewrite.XQueryURLRewrite.applyViews(XQueryURLRewrite.java:406)
	at org.exist.http.urlrewrite.XQueryURLRewrite.service(XQueryURLRewrite.java:347)
	... 41 more
Caused by: java.lang.IllegalArgumentException: name is empty
	at org.exist.dom.persistent.SymbolTable.getSymbol(SymbolTable.java:201)
	at org.exist.indexing.lucene.LuceneUtil.encodeQName(LuceneUtil.java:90)
	at org.exist.indexing.lucene.LuceneIndexWorker.lambda$scanIndexByQName$9(LuceneIndexWorker.java:1199)
	at org.exist.indexing.lucene.LuceneIndex.withReader(LuceneIndex.java:250)
	at org.exist.indexing.lucene.LuceneIndexWorker.scanIndexByQName(LuceneIndexWorker.java:1197)
	at org.exist.indexing.lucene.LuceneIndexWorker.scanIndex(LuceneIndexWorker.java:1167)
	at org.exist.xquery.functions.util.IndexKeys.eval(IndexKeys.java:161)
	at org.exist.xquery.BasicFunction.eval(BasicFunction.java:73)
	at org.exist.xquery.InternalFunctionCall.eval(InternalFunctionCall.java:62)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.SwitchExpression.eval(SwitchExpression.java:109)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:98)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall.evalFunction(FunctionCall.java:289)
	at org.exist.xquery.FunctionCall.evalFunction(FunctionCall.java:248)
	at org.exist.xquery.value.FunctionReference.evalFunction(FunctionReference.java:99)
	at org.exist.xquery.functions.fn.FunHigherOrderFun.eval(FunHigherOrderFun.java:235)
	at org.exist.xquery.BasicFunction.eval(BasicFunction.java:73)
	at org.exist.xquery.InternalFunctionCall.eval(InternalFunctionCall.java:62)
	at org.exist.xquery.DynamicCardinalityCheck.eval(DynamicCardinalityCheck.java:73)
	at org.exist.xquery.FunctionCall.eval(FunctionCall.java:189)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall.evalFunction(FunctionCall.java:289)
	at org.exist.xquery.FunctionCall.eval(FunctionCall.java:207)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:98)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall$DeferredFunctionCallImpl.execute(FunctionCall.java:421)
	at org.exist.xquery.DeferredFunctionCall.realize(DeferredFunctionCall.java:57)
	at org.exist.xquery.DeferredFunctionCall.iterate(DeferredFunctionCall.java:232)
	at org.exist.xquery.value.ValueSequence.addAll(ValueSequence.java:173)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall$DeferredFunctionCallImpl.execute(FunctionCall.java:421)
	at org.exist.xquery.DeferredFunctionCall.realize(DeferredFunctionCall.java:57)
	at org.exist.xquery.DeferredFunctionCall.iterate(DeferredFunctionCall.java:232)
	at org.exist.xquery.value.ValueSequence.addAll(ValueSequence.java:173)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:82)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:82)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.EnclosedExpr.eval(EnclosedExpr.java:82)
	at org.exist.xquery.ElementConstructor.eval(ElementConstructor.java:330)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.TypeswitchExpression.eval(TypeswitchExpression.java:110)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:65)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall$DeferredFunctionCallImpl.execute(FunctionCall.java:421)
	at org.exist.xquery.DeferredFunctionCall.realize(DeferredFunctionCall.java:57)
	at org.exist.xquery.DeferredFunctionCall.iterate(DeferredFunctionCall.java:232)
	at org.exist.xquery.value.ValueSequence.addAll(ValueSequence.java:173)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:82)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:82)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.EnclosedExpr.eval(EnclosedExpr.java:82)
	at org.exist.xquery.ElementConstructor.eval(ElementConstructor.java:330)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.TypeswitchExpression.eval(TypeswitchExpression.java:110)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:65)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall$DeferredFunctionCallImpl.execute(FunctionCall.java:421)
	at org.exist.xquery.DeferredFunctionCall.realize(DeferredFunctionCall.java:57)
	at org.exist.xquery.DeferredFunctionCall.iterate(DeferredFunctionCall.java:232)
	at org.exist.xquery.value.ValueSequence.addAll(ValueSequence.java:173)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:82)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:82)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.EnclosedExpr.eval(EnclosedExpr.java:82)
	at org.exist.xquery.ElementConstructor.eval(ElementConstructor.java:330)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.TypeswitchExpression.eval(TypeswitchExpression.java:110)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:65)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall$DeferredFunctionCallImpl.execute(FunctionCall.java:421)
	at org.exist.xquery.DeferredFunctionCall.realize(DeferredFunctionCall.java:57)
	at org.exist.xquery.DeferredFunctionCall.iterate(DeferredFunctionCall.java:232)
	at org.exist.xquery.value.ValueSequence.addAll(ValueSequence.java:173)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:82)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:82)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.EnclosedExpr.eval(EnclosedExpr.java:82)
	at org.exist.xquery.ElementConstructor.eval(ElementConstructor.java:330)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.TypeswitchExpression.eval(TypeswitchExpression.java:110)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:65)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall$DeferredFunctionCallImpl.execute(FunctionCall.java:421)
	at org.exist.xquery.DeferredFunctionCall.realize(DeferredFunctionCall.java:57)
	at org.exist.xquery.DeferredFunctionCall.iterate(DeferredFunctionCall.java:232)
	at org.exist.xquery.value.ValueSequence.addAll(ValueSequence.java:173)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:82)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:82)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.EnclosedExpr.eval(EnclosedExpr.java:82)
	at org.exist.xquery.ElementConstructor.eval(ElementConstructor.java:330)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.TypeswitchExpression.eval(TypeswitchExpression.java:110)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:65)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall$DeferredFunctionCallImpl.execute(FunctionCall.java:421)
	at org.exist.xquery.DeferredFunctionCall.realize(DeferredFunctionCall.java:57)
	at org.exist.xquery.DeferredFunctionCall.isEmpty(DeferredFunctionCall.java:200)
	at org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:83)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:82)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.EnclosedExpr.eval(EnclosedExpr.java:82)
	at org.exist.xquery.ElementConstructor.eval(ElementConstructor.java:330)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:98)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall.evalFunction(FunctionCall.java:289)
	at org.exist.xquery.FunctionCall.eval(FunctionCall.java:207)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall.evalFunction(FunctionCall.java:289)
	at org.exist.xquery.FunctionCall.eval(FunctionCall.java:207)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:98)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall$DeferredFunctionCallImpl.execute(FunctionCall.java:421)
	at org.exist.xquery.DeferredFunctionCall.realize(DeferredFunctionCall.java:57)
	at org.exist.xquery.DeferredFunctionCall.iterate(DeferredFunctionCall.java:232)
	at org.exist.xquery.value.ValueSequence.addAll(ValueSequence.java:173)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall$DeferredFunctionCallImpl.execute(FunctionCall.java:421)
	at org.exist.xquery.DeferredFunctionCall.realize(DeferredFunctionCall.java:57)
	at org.exist.xquery.DeferredFunctionCall.isEmpty(DeferredFunctionCall.java:200)
	at org.exist.xquery.DynamicCardinalityCheck.eval(DynamicCardinalityCheck.java:75)
	at org.exist.xquery.FunctionCall.eval(FunctionCall.java:189)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall.evalFunction(FunctionCall.java:289)
	at org.exist.xquery.FunctionCall.eval(FunctionCall.java:207)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:98)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall$DeferredFunctionCallImpl.execute(FunctionCall.java:421)
	at org.exist.xquery.DeferredFunctionCall.realize(DeferredFunctionCall.java:57)
	at org.exist.xquery.DeferredFunctionCall.iterate(DeferredFunctionCall.java:232)
	at org.exist.xquery.value.ValueSequence.addAll(ValueSequence.java:173)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall$DeferredFunctionCallImpl.execute(FunctionCall.java:421)
	at org.exist.xquery.DeferredFunctionCall.realize(DeferredFunctionCall.java:57)
	at org.exist.xquery.DeferredFunctionCall.iterate(DeferredFunctionCall.java:232)
	at org.exist.xquery.value.ValueSequence.addAll(ValueSequence.java:173)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.TypeswitchExpression.eval(TypeswitchExpression.java:110)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:65)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall.evalFunction(FunctionCall.java:289)
	at org.exist.xquery.FunctionCall.eval(FunctionCall.java:207)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:65)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall.evalFunction(FunctionCall.java:289)
	at org.exist.xquery.FunctionCall.eval(FunctionCall.java:207)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.XQuery.execute(XQuery.java:373)
	at org.exist.xquery.XQuery.execute(XQuery.java:295)
	at org.exist.http.RESTServer.executeXQuery(RESTServer.java:1558)
	at org.exist.http.RESTServer.doPost(RESTServer.java:683)
	at org.exist.http.servlets.EXistServlet.doPost(EXistServlet.java:538)
	... 67 more
</pre>
<hr><a href="https://eclipse.org/jetty">Powered by Jetty:// 9.4.44.v20210927</a><hr>



<!--EndFragment-->
</body>
</html>HTTP ERROR 500 javax.servlet.ServletException: javax.servlet.ServletException: An error occurred while processing request to /exist/apps/monex/index-keys.html: An unknown error occurred: name is empty
URI:	/exist/apps/monex/index-keys.html
STATUS:	500
MESSAGE:	javax.servlet.ServletException: javax.servlet.ServletException: An error occurred while processing request to /exist/apps/monex/index-keys.html: An unknown error occurred: name is empty
SERVLET:	XQueryURLRewrite
CAUSED BY:	javax.servlet.ServletException: javax.servlet.ServletException: An error occurred while processing request to /exist/apps/monex/index-keys.html: An unknown error occurred: name is empty
CAUSED BY:	javax.servlet.ServletException: An error occurred while processing request to /exist/apps/monex/index-keys.html: An unknown error occurred: name is empty
CAUSED BY:	javax.servlet.ServletException: An unknown error occurred: name is empty
CAUSED BY:	java.lang.IllegalArgumentException: name is empty
Caused by:

javax.servlet.ServletException: javax.servlet.ServletException: An error occurred while processing request to /exist/apps/monex/index-keys.html: An unknown error occurred: name is empty
	at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:162)
	at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:763)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
	at org.eclipse.jetty.server.Server.handle(Server.java:516)
	at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:400)
	at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:645)
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:392)
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
	at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
	at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: javax.servlet.ServletException: An error occurred while processing request to /exist/apps/monex/index-keys.html: An unknown error occurred: name is empty
	at org.exist.http.urlrewrite.XQueryURLRewrite.service(XQueryURLRewrite.java:366)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
	at org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1450)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)
	at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1631)
	at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:228)
	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
	at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:571)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1434)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1349)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
	at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:234)
	at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
	... 18 more
Caused by: javax.servlet.ServletException: An unknown error occurred: name is empty
	at org.exist.http.servlets.EXistServlet.doPost(EXistServlet.java:572)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
	at org.exist.http.servlets.EXistServlet.service(EXistServlet.java:588)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
	at org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1459)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)
	at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1631)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:618)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1434)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1349)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
	at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:167)
	at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:81)
	at org.exist.http.urlrewrite.Forward.doRewrite(Forward.java:50)
	at org.exist.http.urlrewrite.XQueryURLRewrite.doRewrite(XQueryURLRewrite.java:523)
	at org.exist.http.urlrewrite.XQueryURLRewrite.applyViews(XQueryURLRewrite.java:406)
	at org.exist.http.urlrewrite.XQueryURLRewrite.service(XQueryURLRewrite.java:347)
	... 41 more
Caused by: java.lang.IllegalArgumentException: name is empty
	at org.exist.dom.persistent.SymbolTable.getSymbol(SymbolTable.java:201)
	at org.exist.indexing.lucene.LuceneUtil.encodeQName(LuceneUtil.java:90)
	at org.exist.indexing.lucene.LuceneIndexWorker.lambda$scanIndexByQName$9(LuceneIndexWorker.java:1199)
	at org.exist.indexing.lucene.LuceneIndex.withReader(LuceneIndex.java:250)
	at org.exist.indexing.lucene.LuceneIndexWorker.scanIndexByQName(LuceneIndexWorker.java:1197)
	at org.exist.indexing.lucene.LuceneIndexWorker.scanIndex(LuceneIndexWorker.java:1167)
	at org.exist.xquery.functions.util.IndexKeys.eval(IndexKeys.java:161)
	at org.exist.xquery.BasicFunction.eval(BasicFunction.java:73)
	at org.exist.xquery.InternalFunctionCall.eval(InternalFunctionCall.java:62)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.SwitchExpression.eval(SwitchExpression.java:109)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:98)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall.evalFunction(FunctionCall.java:289)
	at org.exist.xquery.FunctionCall.evalFunction(FunctionCall.java:248)
	at org.exist.xquery.value.FunctionReference.evalFunction(FunctionReference.java:99)
	at org.exist.xquery.functions.fn.FunHigherOrderFun.eval(FunHigherOrderFun.java:235)
	at org.exist.xquery.BasicFunction.eval(BasicFunction.java:73)
	at org.exist.xquery.InternalFunctionCall.eval(InternalFunctionCall.java:62)
	at org.exist.xquery.DynamicCardinalityCheck.eval(DynamicCardinalityCheck.java:73)
	at org.exist.xquery.FunctionCall.eval(FunctionCall.java:189)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall.evalFunction(FunctionCall.java:289)
	at org.exist.xquery.FunctionCall.eval(FunctionCall.java:207)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:98)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall$DeferredFunctionCallImpl.execute(FunctionCall.java:421)
	at org.exist.xquery.DeferredFunctionCall.realize(DeferredFunctionCall.java:57)
	at org.exist.xquery.DeferredFunctionCall.iterate(DeferredFunctionCall.java:232)
	at org.exist.xquery.value.ValueSequence.addAll(ValueSequence.java:173)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall$DeferredFunctionCallImpl.execute(FunctionCall.java:421)
	at org.exist.xquery.DeferredFunctionCall.realize(DeferredFunctionCall.java:57)
	at org.exist.xquery.DeferredFunctionCall.iterate(DeferredFunctionCall.java:232)
	at org.exist.xquery.value.ValueSequence.addAll(ValueSequence.java:173)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:82)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:82)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.EnclosedExpr.eval(EnclosedExpr.java:82)
	at org.exist.xquery.ElementConstructor.eval(ElementConstructor.java:330)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.TypeswitchExpression.eval(TypeswitchExpression.java:110)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:65)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall$DeferredFunctionCallImpl.execute(FunctionCall.java:421)
	at org.exist.xquery.DeferredFunctionCall.realize(DeferredFunctionCall.java:57)
	at org.exist.xquery.DeferredFunctionCall.iterate(DeferredFunctionCall.java:232)
	at org.exist.xquery.value.ValueSequence.addAll(ValueSequence.java:173)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:82)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:82)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.EnclosedExpr.eval(EnclosedExpr.java:82)
	at org.exist.xquery.ElementConstructor.eval(ElementConstructor.java:330)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.TypeswitchExpression.eval(TypeswitchExpression.java:110)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:65)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall$DeferredFunctionCallImpl.execute(FunctionCall.java:421)
	at org.exist.xquery.DeferredFunctionCall.realize(DeferredFunctionCall.java:57)
	at org.exist.xquery.DeferredFunctionCall.iterate(DeferredFunctionCall.java:232)
	at org.exist.xquery.value.ValueSequence.addAll(ValueSequence.java:173)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:82)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:82)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.EnclosedExpr.eval(EnclosedExpr.java:82)
	at org.exist.xquery.ElementConstructor.eval(ElementConstructor.java:330)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.TypeswitchExpression.eval(TypeswitchExpression.java:110)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:65)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall$DeferredFunctionCallImpl.execute(FunctionCall.java:421)
	at org.exist.xquery.DeferredFunctionCall.realize(DeferredFunctionCall.java:57)
	at org.exist.xquery.DeferredFunctionCall.iterate(DeferredFunctionCall.java:232)
	at org.exist.xquery.value.ValueSequence.addAll(ValueSequence.java:173)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:82)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:82)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.EnclosedExpr.eval(EnclosedExpr.java:82)
	at org.exist.xquery.ElementConstructor.eval(ElementConstructor.java:330)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.TypeswitchExpression.eval(TypeswitchExpression.java:110)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:65)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall$DeferredFunctionCallImpl.execute(FunctionCall.java:421)
	at org.exist.xquery.DeferredFunctionCall.realize(DeferredFunctionCall.java:57)
	at org.exist.xquery.DeferredFunctionCall.iterate(DeferredFunctionCall.java:232)
	at org.exist.xquery.value.ValueSequence.addAll(ValueSequence.java:173)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:82)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:82)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.EnclosedExpr.eval(EnclosedExpr.java:82)
	at org.exist.xquery.ElementConstructor.eval(ElementConstructor.java:330)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.TypeswitchExpression.eval(TypeswitchExpression.java:110)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:65)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall$DeferredFunctionCallImpl.execute(FunctionCall.java:421)
	at org.exist.xquery.DeferredFunctionCall.realize(DeferredFunctionCall.java:57)
	at org.exist.xquery.DeferredFunctionCall.isEmpty(DeferredFunctionCall.java:200)
	at org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:83)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:82)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.EnclosedExpr.eval(EnclosedExpr.java:82)
	at org.exist.xquery.ElementConstructor.eval(ElementConstructor.java:330)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:98)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall.evalFunction(FunctionCall.java:289)
	at org.exist.xquery.FunctionCall.eval(FunctionCall.java:207)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall.evalFunction(FunctionCall.java:289)
	at org.exist.xquery.FunctionCall.eval(FunctionCall.java:207)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:98)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall$DeferredFunctionCallImpl.execute(FunctionCall.java:421)
	at org.exist.xquery.DeferredFunctionCall.realize(DeferredFunctionCall.java:57)
	at org.exist.xquery.DeferredFunctionCall.iterate(DeferredFunctionCall.java:232)
	at org.exist.xquery.value.ValueSequence.addAll(ValueSequence.java:173)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall$DeferredFunctionCallImpl.execute(FunctionCall.java:421)
	at org.exist.xquery.DeferredFunctionCall.realize(DeferredFunctionCall.java:57)
	at org.exist.xquery.DeferredFunctionCall.isEmpty(DeferredFunctionCall.java:200)
	at org.exist.xquery.DynamicCardinalityCheck.eval(DynamicCardinalityCheck.java:75)
	at org.exist.xquery.FunctionCall.eval(FunctionCall.java:189)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall.evalFunction(FunctionCall.java:289)
	at org.exist.xquery.FunctionCall.eval(FunctionCall.java:207)
	at org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:98)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall$DeferredFunctionCallImpl.execute(FunctionCall.java:421)
	at org.exist.xquery.DeferredFunctionCall.realize(DeferredFunctionCall.java:57)
	at org.exist.xquery.DeferredFunctionCall.iterate(DeferredFunctionCall.java:232)
	at org.exist.xquery.value.ValueSequence.addAll(ValueSequence.java:173)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall$DeferredFunctionCallImpl.execute(FunctionCall.java:421)
	at org.exist.xquery.DeferredFunctionCall.realize(DeferredFunctionCall.java:57)
	at org.exist.xquery.DeferredFunctionCall.iterate(DeferredFunctionCall.java:232)
	at org.exist.xquery.value.ValueSequence.addAll(ValueSequence.java:173)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.TypeswitchExpression.eval(TypeswitchExpression.java:110)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:65)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall.evalFunction(FunctionCall.java:289)
	at org.exist.xquery.FunctionCall.eval(FunctionCall.java:207)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:65)
	at org.exist.xquery.ForExpr.processItem(ForExpr.java:248)
	at org.exist.xquery.ForExpr.eval(ForExpr.java:187)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:161)
	at org.exist.xquery.FunctionCall.evalFunction(FunctionCall.java:289)
	at org.exist.xquery.FunctionCall.eval(FunctionCall.java:207)
	at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.LetExpr.eval(LetExpr.java:110)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.PathExpr.eval(PathExpr.java:279)
	at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71)
	at org.exist.xquery.XQuery.execute(XQuery.java:373)
	at org.exist.xquery.XQuery.execute(XQuery.java:295)
	at org.exist.http.RESTServer.executeXQuery(RESTServer.java:1558)
	at org.exist.http.RESTServer.doPost(RESTServer.java:683)
	at org.exist.http.servlets.EXistServlet.doPost(EXistServlet.java:538)
	... 67 more

[Powered by Jetty:// 9.4.44.v20210927](https://eclipse.org/jetty)

Menu bar drop down list

screen shot 2014-05-06 at 14 10 12

Would it make sense to add monex to the task bar / menu bar drop down list of applications to launch?
Also Upgrading to 0.3 via dashboard required a restart of exist 2.1RC1 in order for monex to work properly. Maybe a line about that in the package description could be added.

Great app!

[Question] accessing log file from monex

It just occurred to me that it is strange that we don't have a quick access to the exist log file from within monex. This could help with quick diagnosis from a distance, without having to jump through the hoop of setting up remote console, etc.
The left bar with "Monitoring local", "Profiling", "Indexes", … seems the natural place for another entry, that opens the log file in the browser/ or to download a copy.

Thoughts?

make handling of instances.xml more robust

instances.xml is currently handled like any other resource. Which means that it is easy to accidentally include tokens for remote instances in pull-request, and that remote configs don't persist through updates.
It would be both more convenient and secure if the file would be handled slightly differently. But i m not yet sure how to go about it: move it to /db/system/monex?

[BUG] mvn release:perform failure

The dry run and rollback worked fine, and the prepare worked fine, but the perform failed, at this point:

    [INFO] Creating release 3.0.4
    [ERROR] 
    org.kohsuke.github.GHFileNotFoundException: {"message":"Not Found","documentation_url":"https://docs.github.com/rest/reference/repos#create-a-release"}
        at org.kohsuke.github.Requester.handleApiError (Requester.java:699)
        at org.kohsuke.github.Requester._to (Requester.java:306)
        at org.kohsuke.github.Requester.to (Requester.java:247)
        at org.kohsuke.github.GHReleaseBuilder.create (GHReleaseBuilder.java:71)
        at de.jutzig.github.release.plugin.UploadMojo.execute (UploadMojo.java:196)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
        at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
        at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
        at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
        at org.apache.maven.cli.MavenCli.execute (MavenCli.java:972)
        at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:293)
        at org.apache.maven.cli.MavenCli.main (MavenCli.java:196)
        at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke (Method.java:498)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
    Caused by: java.io.FileNotFoundException: https://api.github.com/repos/eXist-db/monex/releases
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0 (Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance (Constructor.java:423)
        at sun.net.www.protocol.http.HttpURLConnection$10.run (HttpURLConnection.java:1952)
        at sun.net.www.protocol.http.HttpURLConnection$10.run (HttpURLConnection.java:1947)
        at java.security.AccessController.doPrivileged (Native Method)
        at sun.net.www.protocol.http.HttpURLConnection.getChainedException (HttpURLConnection.java:1946)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream0 (HttpURLConnection.java:1516)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream (HttpURLConnection.java:1500)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream (HttpsURLConnectionImpl.java:268)
        at org.kohsuke.github.Requester.parse (Requester.java:625)
        at org.kohsuke.github.Requester.parse (Requester.java:607)
        at org.kohsuke.github.Requester._to (Requester.java:285)
        at org.kohsuke.github.Requester.to (Requester.java:247)
        at org.kohsuke.github.GHReleaseBuilder.create (GHReleaseBuilder.java:71)
        at de.jutzig.github.release.plugin.UploadMojo.execute (UploadMojo.java:196)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
        at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
        at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
        at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
        at org.apache.maven.cli.MavenCli.execute (MavenCli.java:972)
        at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:293)
        at org.apache.maven.cli.MavenCli.main (MavenCli.java:196)
        at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke (Method.java:498)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
    Caused by: java.io.FileNotFoundException: https://api.github.com/repos/eXist-db/monex/releases
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream0 (HttpURLConnection.java:1898)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream (HttpURLConnection.java:1500)
        at java.net.HttpURLConnection.getResponseCode (HttpURLConnection.java:480)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode (HttpsURLConnectionImpl.java:352)
        at org.kohsuke.github.Requester.parse (Requester.java:615)
        at org.kohsuke.github.Requester.parse (Requester.java:607)
        at org.kohsuke.github.Requester._to (Requester.java:285)
        at org.kohsuke.github.Requester.to (Requester.java:247)
        at org.kohsuke.github.GHReleaseBuilder.create (GHReleaseBuilder.java:71)
        at de.jutzig.github.release.plugin.UploadMojo.execute (UploadMojo.java:196)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
        at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
        at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
        at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
        at org.apache.maven.cli.MavenCli.execute (MavenCli.java:972)
        at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:293)
        at org.apache.maven.cli.MavenCli.main (MavenCli.java:196)
        at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke (Method.java:498)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD FAILURE
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  02:17 min
    [INFO] Finished at: 2022-01-31T22:34:33-05:00
    [INFO] ------------------------------------------------------------------------
    [ERROR] Failed to execute goal de.jutzig:github-release-plugin:1.4.0:release (github-upload) on project monex: Failed to create release: {"message":"Not Found","documentation_url":"https://docs.github.com/rest/reference/repos#create-a-release"}: https://api.github.com/repos/eXist-db/monex/releases -> [Help 1]
    [ERROR] 
    [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
    [ERROR] Re-run Maven using the -X switch to enable full debug logging.
    [ERROR] 
    [ERROR] For more information about the errors and possible solutions, please read the following articles:
    [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  02:21 min
[INFO] Finished at: 2022-01-31T22:34:33-05:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.5.3:perform (default-cli) on project monex: Maven execution failed, exit code: '1' -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

As a result, I performed the final push of the prepare and perform commits, and I published the .xar to GitHub Releases manually.

Something failed with GitHub Release?

If anyone has any suggestions, it would be great to get this working.

Can't install monex in eXist 5.0.0-RC*

As reported in exist-open (https://markmail.org/message/nlhzzsojc44bjvgi), eXist-5.0.0-RC* is unable to install the current version of monex (v0.9.17) because monex has a dependency on eXist, expressed as semver-min="5.0.0-SNAPSHOT" (see https://github.com/eXist-db/monex/blob/master/pom.xml#L66). According to semver 2.0 precedence rules for pre-release metadata (see https://semver.org/#spec-item-11), 5.0.0-RC < 5.0.0-SNAPSHOT because R comes before S, "lexically in ASCII sort order". Generally, it's bad practice to target pre-release versions, but a workaround would be for us to release a new version of monex with semver-min="5.0.0-R" (which would be < all RC and SNAPSHOT versions).

The goal would be to push out a new release of monex out soon so users of eXist-5.0.0-RC* can install a working version of monex - and so future releases can ship with one.

[BUG] indexes on namespaced nodes can not be displayed

image
image
image

Context (please always complete the following information):

  • win 10
  • eXist-db version: [e.g. 5.2.0]
  • Java Version [e.g. Java8u121]

Additional context

  • How is eXist-db installed? [e.g. JAR installer]
  • Any custom changes in e.g. conf.xml?
    no

[BUG] Cypress test failures under eXist 5.4.0

Describe the bug

Since updating monex's pom.xml to require eXist 5.4.0 (to prepare a version compatible with this release), CI and local runs of npm run cypress tests fail on the monitoring page at http://localhost:8080/exist/apps/monex/console.html.

See the output below (from my local system) showing the failures.

This is strange, because in the past when the monitoring page failed, the cause was a mismatch between the version of Jackson used in monex vs. eXist. But the versions are aligned: 2.13.1.

  Monex
    monitoring page
      ✓ should load start page (2021ms)
    profiling
      ✓ should load Query Profiling (2154ms)
    indexes
      ✓ should load Browse Indexes (1661ms)
    remote console
      1) should load remote dev console
      2) should show log message
    remote monitoring
      ✓ should load remote monitoring (1501ms)


  4 passing (18s)
  2 failing

  1) Monex
       remote console
         should load remote dev console:
     AssertionError: Timed out retrying after 4000ms: Expected to find content: 'Connected' within the element: <label#status.label.label-info.control-label> but never did.
      at Context.eval (http://localhost:8080/__cypress/tests?p=src/test/cypress/integration/monex_spec.js:125:46)

  2) Monex
       remote console
         should show log message:
     AssertionError: Timed out retrying after 4000ms: Expected to find content: 'Connected' within the element: <label#status.label.label-info.control-label> but never did.
      at Context.eval (http://localhost:8080/__cypress/tests?p=src/test/cypress/integration/monex_spec.js:129:46)

Context (please always complete the following information):

  • OS: macOS 12.1
  • eXist-db Version: 5.4.0
  • Java Version: openjdk version "1.8.0_322" (Liberica 1.8.0_322-b06)
  • App Version: master HEAD

Additional context

  • How is eXist-db installed? [e.g. JAR installer, DMG, … ]: DMG
  • Any custom changes in e.g. conf.xml? none

[BUG] Monex doesn't handle websocket errors

Monex WebSocket needs to handle errors

As reported by Andreas Wagner:

[Scheduler-123456789-1] WARN (JsrEvents.java [callError]:158) -
Unable to report throwable to websocket (no @OnError handler declared):
org.exist.remoteconsole.RemoteConsoleEndpoint
org.eclipse.jetty.websocket.api.CloseException:
java.util.concurrent.TimeoutException: Idle timeout expired: 14000/10000
ms
   at
   org.eclipse.jetty.websocket.common.io.AbstractWebSocketConection.onReadTimeout(AbstratWebSocketConnection.java:567)

[BUG] RemoteConsoleEndpoint should declare an error handler

2019-12-20 12:10:09,656 [Scheduler-982565180-1] WARN  (JsrEvents.java [callError]:158) - Unable to report throwable to websocket (no @OnError handler declared): org.exist.remoteconsole.RemoteConsoleEndpoint
org.eclipse.jetty.websocket.api.CloseException: java.util.concurrent.TimeoutException: Idle timeout expired: 36688/10000 ms

login form action guides to get-url

why not simply action="index.html":question:
the login form action attribute is generated by the function app:form-action-to-current-url in app.xql. This function returns the request:get-url(). behind a proxy (in my case apache mod_proxy, that does not rewrite the request header) it guides to any localhost:port location, while a simple forward to index.html is just fine.

Index for new range field doesn’t show keys [BUG]

Describe the bug
I created a range index field for a collection, but Monex doesn’t show any keys for that index. However, a query using the range functions confirms that the index has been populated.

Expected behavior
I expected to see the keys indexed for the given field.

To Reproduce

xquery version "3.1";

  module namespace t="http://example.org/ns/test";
(:  NAMESPACES  :)
  declare namespace range="http://exist-db.org/xquery/range";
  declare namespace test="http://exist-db.org/xquery/xqsuite";
  declare namespace xdb="http://exist-db.org/xquery/xmldb";

(:~
  Check to make sure a named field exists in the new range index.
  
  @author Ash Clark
  2022
 :)
 
(:  VARIABLES  :)
  declare variable $t:pseudojson :=
    <fn:map>
      <fn:string key="id">apple</fn:string>
      <fn:array key="related">
        <fn:string>orange</fn:string>
        <fn:string>pear</fn:string>
      </fn:array>
    </fn:map>;
  
  declare variable $t:xconf :=
    <collection xmlns="http://exist-db.org/collection-config/1.0">
      <index xmlns:fn="http://www.w3.org/2005/xpath-functions"
         xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <range>
          <create qname="fn:string">
            <condition attribute="key" operator="eq" value="id"/>
            <field name="string-id" type="xs:string"/>
          </create>
          <create qname="@key" type="xs:string"/>
        </range>
      </index>
    </collection>;

(:  FUNCTIONS  :)
  
  declare %test:setUp function t:set-up() {
    let $dir := xdb:create-collection('/db', 'sudoJson')
    let $cDir := xdb:create-collection('/db/system/config/db', 'sudoJson')
    let $storeFiles := (
        xdb:store($cDir, 'collection.xconf', $t:xconf),
        xdb:store($dir, 'example.xml', $t:pseudojson)
      )
    return xdb:reindex('/db/sudoJson')
  };
  
  (:declare %test:tearDown function t:tear-down() {
    xdb:remove('/db/sudoJson'), xdb:remove('/db/system/config/db/sudoJson')
  };:)
  
  declare
    %test:assertEquals('apple')
  function t:id-string-field-indexed() {
    collection('/db/sudoJson')/range:index-keys-for-field('string-id', '', 
      function ($i, $d) { $i }, 10)
  };
  
  declare
    %test:assertExists
  function t:query-finds-apple-id() {
    collection('/db/sudoJson')//fn:string[@key eq 'id'][. eq 'apple']
  };
  
  declare
    %test:assertExists
  function t:range-finds-apple-id() {
    collection('/db/sudoJson')/range:field-eq('string-id', 'apple')
  };
  
  declare
    %test:assertEquals(2)
  function t:key-attributes-indexed() {
    let $instances :=
      util:index-keys(collection('/db/sudoJson')//@key, '', function ($i, $d) {
        $d[2]
      }, 10, 'range-index')
    return sum($instances)
  };

The test suite above should completely pass, and return something like:

<testsuites>
    <testsuite package="http://example.org/ns/test" timestamp="2022-03-25T10:06:51.3-04:00" tests="4" failures="0" errors="0" pending="0" time="PT0.017S">
        <testcase name="id-string-field-indexed" class="t:id-string-field-indexed"/>
        <testcase name="key-attributes-indexed" class="t:key-attributes-indexed"/>
        <testcase name="query-finds-apple-id" class="t:query-finds-apple-id"/>
        <testcase name="range-finds-apple-id" class="t:range-finds-apple-id"/>
    </testsuite>
</testsuites>

The tear-down function is commented out, because now you can check what Monex has:

There will be 0 results when there should be 1.

Context

  • OS: macOS 11.6
  • eXist-db Version: 6.0.1
  • Java Version: openjdk 1.8.0_292
  • App Version: 3.0.4

New feature requirement: actual file sizes of indexes in jmx status report

@pwin commented on Oct 2, 2018, 12:30 PM UTC:

What is the problem

I had a paradoxical extremely large index file (ngram.dbx) occur in exist-db v2.1 but did not "see" this developing from the data in e.g. monex

What is the suggestion

proposal for jmx information to be extended to include actual size of the index files (in addition to the memory footprint of the index caches)

This issue was moved by duncdrum from eXist-db/exist#2184.

Remote console (websockets) regression

Problem: Requests to ws://localhost:8080/exist/rconsole fail return a 404 with monex 1.0.0 and 1.0.1, whereas the 0.9.16 release does not exhibit this error.

Background: As reported on exist-open by @craigberry and confirmed by @simar0at:

I'm trying to debug something with eXist-db 4.7.0 which apparently comes with monex 1.0.1. Any attempt to open the remote console fails and leaves something like the following in the JavaScript console:

WebSocket connection to 'ws://localhost:8080/exist/rconsole' failed: Unexpected response code: 404

I can reproduce the exact same problem with eXist 4.7.0 running on macOS Mojave, RHEL 7.6, and Ubuntu 16.04.

@simar0at added:

I also saw that problem yesterday with our instances of exist-db 4.3.1 which offered 1.0.1 as an upgrade to Monex which I installed... I installed the 0.9.16 monex xar and things work as expected.

@craigberry confirmed:

Thanks. That trick worked for me as well with eXist 4.7.0. First I uninstalled monex, then installed the 0.9.16 monex xar, then restarted eXist. I now have a functioning remote console.

Small textual changes... request

We can probable remove text like

To use this feature you need a version of eXist build after April 10th, 2014. Older versions may work in part.

and

This feature only works on eXist version 2.2RC2 or higher

Adding collation attribute-value pairs corrupts the view of the index

Adding collation attribute-value pairs corrupts the view of the index in Monex. Consequently, some less stable people, like myself, freak out :)

Without collation, this is what my index looks like:

the good index

With collation:

<collection xmlns="http://exist-db.org/collection-config/1.0">
<index>
    <range>
        <create qname="orth" 
            type="xs:string" 
            collation="?lang=sr&amp;strength=primary"/>
    </range>
</index>

I get the

the freaky index

The index itself in eXist is ok and can be queried, so this is a Monex issue.

potential regression rconsole NPE is back

Just updated to exist 3.5.0 and Monex 0.9.9
and the log shows multiple variations of:

/exist/rconsole 
java.lang.NullPointerException: null
	at org.eclipse.jetty.websocket.servlet.WebSocketServlet.service(WebSocketServlet.java:152) ~[websocket-servlet-9.3.9.v20160517.jar:9.3.9.v20160517]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) ~[servlet-api-3.1.jar:3.1.0]
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:833) ~[jetty-servlet-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:535) ~[jetty-servlet-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[jetty-server-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524) ~[jetty-security-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) ~[jetty-server-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:190) ~[jetty-server-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595) ~[jetty-server-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188) ~[jetty-server-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253) ~[jetty-server-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168) ~[jetty-server-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473) ~[jetty-servlet-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564) ~[jetty-server-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166) ~[jetty-server-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155) ~[jetty-server-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[jetty-server-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:219) ~[jetty-server-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126) ~[jetty-server-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:521) ~[jetty-server-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) ~[jetty-server-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.server.Server.handle(Server.java:564) ~[jetty-server-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:317) [jetty-server-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251) [jetty-server-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279) [jetty-io-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:110) [jetty-io-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124) [jetty-io-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.util.thread.Invocable.invokePreferred(Invocable.java:128) [jetty-util-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.util.thread.Invocable$InvocableExecutor.invoke(Invocable.java:222) [jetty-util-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:294) [jetty-util-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:199) [jetty-util-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:673) [jetty-util-9.4.6.v20170531.jar:9.4.6.v20170531]
	at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:591) [jetty-util-9.4.6.v20170531.jar:9.4.6.v20170531]
	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_144]

so far I can't tell what's going on, will update / close here as things progress.
also i see the option to connect to history.state.gov for remote monitoring…@joewiz ??
screenshot 2017-09-28 21 45 25

New build required: wrong content 0.9.13

The freshly released version v0.9.13 contains too many JAR files (from jetty to be specific).

I think these JAR files were not cleaned wit ant clean or so. exist.xml does not contain any references anymore to the jetty jars, which is good.

please regenerate the XAR without these jetty JAR files.

Align version in public-repo with source in GitHub, prepare version bump

The version of monex available in the public-repo (0.9.6) contains changes that are not in the GitHub repo (still at 0.9.5). We should update the source in GitHub to the latest changes in public-repo (as discussed with @dizzzz in eXist-db/dashboard#48), update the release notes, and prepare a new release (0.9.7) to get users on the version built directly from source control.

Index Usage source string cut short

A long file path for the collection.xconf file causes the string to be cut short making it difficult to figure out what should be indexed.

Transfer monex repository to exist organization

The app has risen from an experimental project to improve the old admin app to an app of central importance to eXist. If being included in the list of autodeployed xars and having an entry in eXist's task bar entry is any measure of an app's importance to eXist, then monex certainly meets the bar for living in the official eXist organization.

[BUG] Monex 3.0.2 refuses to install from the package manager's list

It is not possible to update / install Monex when clicking on the 'install' icon in the list of available packages or when updating an existing installation of Monex (say 2.x).

Expected behavior
I'd expect to install Monex when clicking on the install package icon from the package manager.

To Reproduce
Go to the package manager where there's an old version of Monex, click 'update'. Or go to the "available packages" tab, click on the install icon in the Monex box. Threre'll be a 'package installed' message, although the package will not be installed.

logs:

2021-03-11 21:48:03,567 [qtp1853015270-92] ERROR (Deploy.java [installAndDeploy]:215) - Failed to install dependency from http://exist-db.org/exist/apps/public-repo/modules/find.xql?name=http%3A%2F%2Fexist-db.org%2Fapps%2Fmonex&processor=5.3.0-SNAPSHOT&version=3.0.2: Read timed out 
java.io.IOException: Failed to install dependency from http://exist-db.org/exist/apps/public-repo/modules/find.xql?name=http%3A%2F%2Fexist-db.org%2Fapps%2Fmonex&processor=5.3.0-SNAPSHOT&version=3.0.2: Read timed out

The package is installed correctly when uploading the .xar downloaded from GitHub.

For this test I used eXist-db snapshot of 10 March 2021.

Error "Cannot find module class from EXPath repository" when starting previous monex 0.9.6 installation under eXist 3.1.1

I've encountered the same glitch on two machines when opening monex for the first time after starting eXist 3.1.1 on an existing database (initialized under 3.1.0) where monex 0.9.6 had been installed. I got this error when starting monex (via http://localhost:8080/exist/apps/monex/index.html):

/db/apps/monex/modules/view.xqlexerr:ERROR error found while loading module indexes: Error while loading module indexes.xqm: error found while loading module console: Cannot find module class from EXPath repository: org.exist.console.xquery.ConsoleModule

The default package manager tells me 0.9.6 is installed, and the 0.9.6 jars are on disk:

$ cd /Users/joe/Library/Application Support/org.exist/expathrepo/monex-0.9.6
$ ls content
exist-monex-0.9.6.jar websocket-api-9.3.9.v20160517.jar websocket-server-9.3.9.v20160517.jar
jetty-util-ajax-9.3.9.v20160517.jar websocket-common-9.3.9.v20160517.jar websocket-servlet-9.3.9.v20160517.jar

monex's modules/indexes.xqm imports the module here: https://github.com/wolfgangmm/monex/blob/master/modules/indexes.xqm#L15

Restarting the database doesn't help. The only thing that fixes the issue is installing monex again (I installed 0.9.7, since this update was available in the package manager).

At the same time, the following query returns true():

xquery version "3.1";

some $module in util:registered-modules() satisfies $module eq "http://exist-db.org/xquery/console"

I wonder why 3.1.1 would fail to recognize java modules installed under 3.1.0?

the build system is messy, let's switch or fix.

currently the build system requires a full local clone of exist (still pointing to wolfgangs develop clone), this seems all kinds of bad with respect to repeatable builds. There is also around 100 .jar on the classpath for no discernible reason, other then exist/**.jar is quick to type.

I've been able to wiggle these down to 5, but i m stomped by a build that runs on local yet throws weird java io ivy errors on ci. My attempts at mavenizing the build similarly have hit a wall. So hopefully others more deeply versed in ivy and maven for exist can help me out here.

This is the last of the default apps that doesn't sport a repeatable build, so whichever route ivy / maven we should fix this. Since monex is a showstopper for 5.0.0 we should switch the build system before or together with the required changes for the next major release.

Ideally this improved build system should:

  • handle java dependencies gracefully, e.g. using jetty version that actually ship with a given exist version.
  • not include the kitchensink
  • allow us to include additional xquery and java tests
  • allow us to declare and update the frontend js dependencies which are all outdated and not versioned
  • enable monex to be build and tested on travis

include java version in system info

screen shot 2014-08-19 at 7 55 21 pm
Wouldn't it make sense to show the java version in system info box? Especially on mac os x with its competing java releases, i remember having to manually fiddle to make sure exist uses the right java. So having it all in one spot, might make for a little quality of live improvement.

Does not work when running in Tomcat 7

When you try and access Monex from the dashboard of eXist 2.2 HEAD deployed as a WAR file in Tomcat 7, you get the following error when it hits http://localhost:8080/exist/apps/monex/index.html:

<exception>
  <path>/db/apps/monex/modules/view.xql</path>
  <message>
exerr:ERROR error found while loading module app: Error while loading module app.xql: error found while loading module console: Cannot find module class from EXPath repository: org.exist.console.xquery.ConsoleModule
  </message>
</exception>

/status url depends on controller-config.xml

Hi, just tried out this nice app, thanks ; )
I came across an issue (because my controller-config.xml file is not standard : <root pattern="/app" path="xmldb:exist:///db/apps"/> ). Instead of requesting jmx status with urls like /localhost:8080/status/..., the app was sending /localhost:8080/exist/app/index.html/status/... .

changing the url para in (exadmin.js. line 90)

var url = location.pathname.replace(/^(.*)\/app\/.*$/, "$1");
        $.ajax({
            url:  url + "/status?c=instances&c=processes&c=locking&c=memory&c=caches&c=system",
            type: "GET",
            success: function(xml) {
                $("#jmx-system-info").each(function() {

to just (without the regex on the url - which is not adding much here) :

url:  "/status?c=instances&c=processes&c=locking&c=memory&c=caches&c=system",

made it back to work.

This might help make the app more robust when users do not have standard configs.
Cheers,
C.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.