Skip to content

Commit 47157a2

Browse files
committed
[refactor] Switch from JMX CompositeData to TabularData for Running Queries, Recent Queries, Running Jobs, and Scheduled Jobs. This improves interoperability with a number of tools that consume JMX
1 parent 7073590 commit 47157a2

File tree

2 files changed

+73
-20
lines changed

2 files changed

+73
-20
lines changed

exist-core/src/main/java/org/exist/management/impl/ProcessReport.java

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@
2121
*/
2222
package org.exist.management.impl;
2323

24-
import java.util.ArrayList;
2524
import java.util.List;
25+
import java.util.Map;
26+
import java.util.HashMap;
27+
import java.util.TreeMap;
2628

2729
import org.exist.scheduler.ScheduledJobInfo;
2830
import org.exist.scheduler.Scheduler;
@@ -66,30 +68,30 @@ public String getInstanceId() {
6668
}
6769

6870
@Override
69-
public List<Job> getScheduledJobs() {
70-
final List<Job> jobList = new ArrayList<>();
71+
public Map<String, Job> getScheduledJobs() {
72+
final Map<String, Job> jobList = new HashMap<>();
7173

7274
final List<ScheduledJobInfo> jobs = scheduler.getScheduledJobs();
7375
for (final ScheduledJobInfo job : jobs) {
74-
jobList.add(new Job(job.getName(), job.getGroup(), job.getTriggerExpression()));
76+
jobList.put(job.getName(), new Job(job.getName(), job.getGroup(), job.getTriggerExpression()));
7577
}
7678
return jobList;
7779
}
7880

7981
@Override
80-
public List<Job> getRunningJobs() {
81-
final List<Job> jobList = new ArrayList<>();
82+
public Map<String, Job> getRunningJobs() {
83+
final Map<String, Job> jobList = new HashMap<>();
8284

8385
final ProcessMonitor.JobInfo[] jobs = processMonitor.runningJobs();
8486
for (final ProcessMonitor.JobInfo job : jobs) {
85-
jobList.add(new Job(job.getThread().getName(), job.getAction(), job.getAddInfo().toString()));
87+
jobList.put(job.getThread().getName(), new Job(job.getThread().getName(), job.getAction(), job.getAddInfo().toString()));
8688
}
8789
return jobList;
8890
}
8991

9092
@Override
91-
public List<RunningQuery> getRunningQueries() {
92-
final List<RunningQuery> queries = new ArrayList<>();
93+
public Map<QueryKey, RunningQuery> getRunningQueries() {
94+
final Map<QueryKey, RunningQuery> queries = new TreeMap<>();
9395

9496
final XQueryWatchDog[] watchdogs = processMonitor.getRunningXQueries();
9597
for (final XQueryWatchDog watchdog : watchdogs) {
@@ -98,7 +100,8 @@ public List<RunningQuery> getRunningQueries() {
98100
requestURI = ProcessMonitor.getRequestURI(watchdog);
99101
}
100102

101-
queries.add(new RunningQuery(watchdog, requestURI));
103+
final RunningQuery runningQuery = new RunningQuery(watchdog, requestURI);
104+
queries.put(new QueryKey(runningQuery.getId(), runningQuery.getSourceKey()), runningQuery);
102105
}
103106
return queries;
104107
}
@@ -119,12 +122,12 @@ public void killQuery(final int id) {
119122
}
120123

121124
@Override
122-
public List<RecentQueryHistory> getRecentQueryHistory() {
123-
final List<RecentQueryHistory> history = new ArrayList<>();
125+
public Map<QueryKey, RecentQueryHistory> getRecentQueryHistory() {
126+
final Map<QueryKey, RecentQueryHistory> history = new TreeMap<>();
124127
final QueryHistory[] queryHistories = processMonitor.getRecentQueryHistory();
125-
int i = 0;
126-
for (final QueryHistory queryHistory : queryHistories) {
127-
history.add(new RecentQueryHistory(i++, queryHistory));
128+
for (int i = 0; i < queryHistories.length; i++) {
129+
final QueryHistory queryHistory = queryHistories[i];
130+
history.put(new QueryKey(i, queryHistory.getSource()), new RecentQueryHistory(i, queryHistory));
128131
}
129132
return history;
130133
}

exist-core/src/main/java/org/exist/management/impl/ProcessReportMXBean.java

Lines changed: 55 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,18 @@
2121
*/
2222
package org.exist.management.impl;
2323

24-
import java.util.List;
24+
import java.util.Map;
2525

2626
public interface
2727
ProcessReportMXBean extends PerInstanceMBean {
2828

29-
List<Job> getScheduledJobs();
29+
Map<String, Job> getScheduledJobs();
3030

31-
List<Job> getRunningJobs();
31+
Map<String, Job> getRunningJobs();
3232

33-
List<RunningQuery> getRunningQueries();
33+
Map<QueryKey, RunningQuery> getRunningQueries();
3434

35-
List<RecentQueryHistory> getRecentQueryHistory();
35+
Map<QueryKey, RecentQueryHistory> getRecentQueryHistory();
3636

3737
void killQuery(int id);
3838

@@ -77,4 +77,54 @@
7777
void setTrackRequestURI(boolean track);
7878

7979
boolean getTrackRequestURI();
80+
81+
class QueryKey implements Comparable<QueryKey> {
82+
private final int id;
83+
private final String key;
84+
85+
public QueryKey(final int id, final String key) {
86+
this.id = id;
87+
this.key = key;
88+
}
89+
90+
public int getId() {
91+
return id;
92+
}
93+
94+
public String getKey() {
95+
return key;
96+
}
97+
98+
@Override
99+
public boolean equals(final Object other) {
100+
if (this == other) {
101+
return true;
102+
}
103+
if (other == null || getClass() != other.getClass()) {
104+
return false;
105+
}
106+
107+
QueryKey queryKey = (QueryKey) other;
108+
if (id != queryKey.id) {
109+
return false;
110+
}
111+
return key.equals(queryKey.key);
112+
}
113+
114+
@Override
115+
public int hashCode() {
116+
int result = id;
117+
result = 31 * result + key.hashCode();
118+
return result;
119+
}
120+
121+
@Override
122+
public int compareTo(final QueryKey other) {
123+
if (other == null) {
124+
return 1;
125+
}
126+
127+
return key.compareTo(other.key);
128+
}
129+
}
80130
}

0 commit comments

Comments
 (0)