Skip to content

Commit 077284e

Browse files
authored
Merge pull request #2332 from ControlSystemStudio/elastic-8-2-alarm-logger
Elastic 8 2 alarm logger
2 parents 37e0cdb + 5bc493d commit 077284e

File tree

41 files changed

+1363
-820
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+1363
-820
lines changed

app/alarm/logging-ui/pom.xml

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,6 @@
1212
<artifactId>core-framework</artifactId>
1313
<version>4.6.10-SNAPSHOT</version>
1414
</dependency>
15-
<dependency>
16-
<groupId>org.elasticsearch.client</groupId>
17-
<artifactId>elasticsearch-rest-high-level-client</artifactId>
18-
<version>${es.version}</version>
19-
</dependency>
20-
<dependency>
21-
<groupId>org.elasticsearch.client</groupId>
22-
<artifactId>elasticsearch-rest-client-sniffer</artifactId>
23-
<version>${es.version}</version>
24-
</dependency>
2515
<dependency>
2616
<groupId>org.phoebus</groupId>
2717
<artifactId>core-ui</artifactId>
@@ -48,5 +38,30 @@
4838
<version>4.6.10-SNAPSHOT</version>
4939
<scope>compile</scope>
5040
</dependency>
41+
<dependency>
42+
<groupId>com.sun.jersey</groupId>
43+
<artifactId>jersey-client</artifactId>
44+
<version>1.19</version>
45+
</dependency>
46+
<dependency>
47+
<groupId>com.fasterxml.jackson.core</groupId>
48+
<artifactId>jackson-core</artifactId>
49+
<version>${jackson.version}</version>
50+
</dependency>
51+
<dependency>
52+
<groupId>com.fasterxml.jackson.core</groupId>
53+
<artifactId>jackson-annotations</artifactId>
54+
<version>${jackson.version}</version>
55+
</dependency>
56+
<dependency>
57+
<groupId>com.fasterxml.jackson.core</groupId>
58+
<artifactId>jackson-databind</artifactId>
59+
<version>${jackson.version}</version>
60+
</dependency>
61+
<dependency>
62+
<groupId>com.fasterxml.jackson.datatype</groupId>
63+
<artifactId>jackson-datatype-jsr310</artifactId>
64+
<version>${jackson.version}</version>
65+
</dependency>
5166
</dependencies>
5267
</project>

app/alarm/logging-ui/src/main/java/org/phoebus/applications/alarm/logging/ui/AdvancedSearchViewController.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,27 @@
11
package org.phoebus.applications.alarm.logging.ui;
22

3+
import com.sun.jersey.api.client.WebResource;
34
import javafx.application.Platform;
45
import javafx.beans.binding.Bindings;
56
import javafx.beans.value.ObservableValue;
67
import javafx.collections.MapChangeListener;
78
import javafx.collections.ObservableMap;
89
import javafx.fxml.FXML;
9-
import javafx.fxml.FXMLLoader;
1010
import javafx.geometry.Pos;
1111
import javafx.scene.control.Button;
12-
import javafx.scene.control.ComboBox;
13-
import javafx.scene.control.Label;
1412
import javafx.scene.control.TextField;
1513
import javafx.scene.layout.AnchorPane;
1614
import javafx.scene.layout.GridPane;
1715
import javafx.scene.layout.HBox;
1816
import javafx.scene.layout.VBox;
19-
import org.elasticsearch.client.RestHighLevelClient;
2017
import org.phoebus.applications.alarm.logging.ui.AlarmLogTableQueryUtil.Keys;
2118
import org.phoebus.ui.dialog.PopOver;
2219
import org.phoebus.ui.time.TimeRelativeIntervalPane;
2320
import org.phoebus.util.time.TimeParser;
2421
import org.phoebus.util.time.TimeRelativeInterval;
2522
import org.phoebus.util.time.TimestampFormats;
2623

27-
import java.io.IOException;
28-
import java.util.List;
29-
import java.util.logging.Level;
3024
import java.util.logging.Logger;
31-
import java.util.stream.Collectors;
3225

3326
import static org.phoebus.ui.time.TemporalAmountPane.Type.TEMPORAL_AMOUNTS_AND_NOW;
3427

@@ -64,15 +57,15 @@ public class AdvancedSearchViewController {
6457

6558
PopOver timeSearchPopover;
6659

67-
private RestHighLevelClient searchClient;
60+
private WebResource searchClient;
6861

6962
// Search parameters
7063
ObservableMap<Keys, String> searchParameters;
7164

7265
@FXML
7366
private AnchorPane advancedSearchPane;
7467

75-
public AdvancedSearchViewController(RestHighLevelClient client){
68+
public AdvancedSearchViewController(WebResource client){
7669
this.searchClient = client;
7770
}
7871

app/alarm/logging-ui/src/main/java/org/phoebus/applications/alarm/logging/ui/AlarmLogConfigSearchJob.java

Lines changed: 30 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,49 @@
11
package org.phoebus.applications.alarm.logging.ui;
22

3+
import com.fasterxml.jackson.core.JsonProcessingException;
4+
import com.fasterxml.jackson.core.type.TypeReference;
35
import com.fasterxml.jackson.databind.DeserializationFeature;
4-
import com.fasterxml.jackson.databind.JsonNode;
56
import com.fasterxml.jackson.databind.ObjectMapper;
6-
import com.fasterxml.jackson.databind.node.ObjectNode;
7-
import org.elasticsearch.action.search.SearchRequest;
8-
import org.elasticsearch.client.RequestOptions;
9-
import org.elasticsearch.client.RestHighLevelClient;
10-
import org.elasticsearch.index.query.BoolQueryBuilder;
11-
import org.elasticsearch.index.query.QueryBuilders;
12-
import org.elasticsearch.search.builder.SearchSourceBuilder;
13-
import org.elasticsearch.search.sort.SortOrder;
14-
import org.phoebus.framework.jobs.*;
7+
import com.sun.jersey.api.client.WebResource;
8+
import org.phoebus.framework.jobs.Job;
9+
import org.phoebus.framework.jobs.JobManager;
10+
import org.phoebus.framework.jobs.JobRunnableWithCancel;
1511

16-
import java.io.IOException;
17-
import java.time.Instant;
18-
import java.time.LocalDateTime;
12+
import javax.ws.rs.core.MediaType;
13+
import javax.ws.rs.core.MultivaluedHashMap;
14+
import javax.ws.rs.core.MultivaluedMap;
1915
import java.time.ZoneId;
2016
import java.time.format.DateTimeFormatter;
2117
import java.util.Arrays;
22-
import java.util.HashMap;
2318
import java.util.List;
24-
import java.util.Map;
2519
import java.util.function.BiConsumer;
2620
import java.util.function.Consumer;
27-
import java.util.stream.Collectors;
2821

2922
/**
3023
* A Job to retrieve the latest alarm configuration details
3124
* @author Kunal Shroff
3225
*/
3326
public class AlarmLogConfigSearchJob extends JobRunnableWithCancel {
34-
private final RestHighLevelClient client;
27+
private final WebResource client;
3528
private final String pattern;
36-
private final Consumer<List<String>> alarmMessageHandler;
29+
30+
private final Consumer<AlarmLogTableItem> alarmMessageHandler;
3731
private final BiConsumer<String, Exception> errorHandler;
3832

3933
private final ObjectMapper objectMapper;
4034
private DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS").withZone(ZoneId.of("UTC"));
4135

42-
public static Job submit(RestHighLevelClient client,
36+
public static Job submit(WebResource client,
4337
final String pattern,
44-
final Consumer<List<String>> alarmMessageHandler,
38+
final Consumer<AlarmLogTableItem> alarmMessageHandler,
4539
final BiConsumer<String, Exception> errorHandler) {
4640
return JobManager.schedule("searching alarm log messages for : " + pattern,
4741
new AlarmLogConfigSearchJob(client, pattern, alarmMessageHandler, errorHandler));
4842
}
4943

50-
private AlarmLogConfigSearchJob(RestHighLevelClient client,
44+
private AlarmLogConfigSearchJob(WebResource client,
5145
String pattern,
52-
Consumer<List<String>> alarmMessageHandler,
46+
Consumer<AlarmLogTableItem> alarmMessageHandler,
5347
BiConsumer<String, Exception> errorHandler) {
5448
super();
5549
this.client = client;
@@ -68,43 +62,22 @@ public String getName() {
6862
@Override
6963
public Runnable getRunnable() {
7064
return () -> {
71-
String searchPattern = "*".concat(pattern).concat("*");
72-
int size = 1;
73-
BoolQueryBuilder boolQuery = new BoolQueryBuilder();
74-
boolQuery.must(QueryBuilders.wildcardQuery("config", searchPattern));
75-
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
76-
sourceBuilder = sourceBuilder.query(boolQuery);
77-
sourceBuilder.size(size);
78-
sourceBuilder.sort("message_time", SortOrder.DESC);
65+
AlarmLogTableApp.logger.info("searching for alarm log entires : " +
66+
"config: " + pattern);
7967

80-
SearchRequest searchRequest = new SearchRequest("*alarms_config*");
81-
searchRequest.source(sourceBuilder);
82-
List<String> result;
8368
try {
84-
result = Arrays.asList(client.search(searchRequest, RequestOptions.DEFAULT).getHits().getHits()).stream()
85-
.map(hit -> {
86-
try {
87-
String source = hit.getSourceAsString();
88-
JsonNode root = objectMapper.readTree(source);
89-
JsonNode time = ((ObjectNode) root).remove("time");
90-
JsonNode message_time = ((ObjectNode) root).remove("message_time");
91-
JsonNode message = ((ObjectNode) root).get("config_msg");
92-
93-
String alarmSource = message.asText().trim();
94-
// Backwards compatibility for the old invalid json representation of alarm messages
95-
if (alarmSource.startsWith("AlarmConfigMessage")) {
96-
return alarmSource.replace("AlarmConfigMessage","");
97-
}
98-
Object json = objectMapper.readValue(alarmSource, Object.class);
99-
return objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(json);
100-
} catch (Exception e) {
101-
errorHandler.accept("Failed to search for alarm config ", e);
102-
return null;
103-
}
104-
}).collect(Collectors.toList());
105-
alarmMessageHandler.accept(result);
106-
} catch (IOException e) {
107-
errorHandler.accept("Failed to search for alarm config ", e);
69+
MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
70+
map.put("config", Arrays.asList(pattern));
71+
map.put("size", Arrays.asList(String.valueOf(1)));
72+
List<AlarmLogTableItem> result = objectMapper
73+
.readValue(client.path("/search/alarm/").queryParams(map).accept(MediaType.APPLICATION_JSON).get(String.class),
74+
new TypeReference<List<AlarmLogTableItem>>() {
75+
});
76+
if (result.size() >= 1) {
77+
alarmMessageHandler.accept(result.get(0));
78+
}
79+
} catch (JsonProcessingException e) {
80+
errorHandler.accept("Failed to search for alarm logs ", e);
10881
}
10982
};
11083
}

0 commit comments

Comments
 (0)