11package org .phoebus .applications .alarm .logging .ui ;
22
3+ import com .fasterxml .jackson .core .JsonProcessingException ;
4+ import com .fasterxml .jackson .core .type .TypeReference ;
35import com .fasterxml .jackson .databind .DeserializationFeature ;
4- import com .fasterxml .jackson .databind .JsonNode ;
56import 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 ;
1915import java .time .ZoneId ;
2016import java .time .format .DateTimeFormatter ;
2117import java .util .Arrays ;
22- import java .util .HashMap ;
2318import java .util .List ;
24- import java .util .Map ;
2519import java .util .function .BiConsumer ;
2620import 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 */
3326public 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