1111
1212import java .io .IOException ;
1313import java .time .Instant ;
14+ import java .time .LocalDateTime ;
1415import java .time .ZoneId ;
1516import java .time .format .DateTimeFormatter ;
17+ import java .util .logging .Level ;
18+ import java .util .logging .Logger ;
1619
1720@ JsonIgnoreProperties (ignoreUnknown = true )
1821@ JsonInclude (Include .NON_NULL )
1922public class AlarmLogMessage {
23+ private static final Logger logger = Logger .getLogger (AlarmLogMessage .class .getName ());
2024
2125 private String severity ;
2226 private String message ;
@@ -34,6 +38,7 @@ public class AlarmLogMessage {
3438 private String user ;
3539 private String host ;
3640 private String command ;
41+ @ JsonDeserialize (using = EnabledFieldDeserializer .class )
3742 private boolean enabled ;
3843
3944 public String getConfig () {
@@ -168,4 +173,25 @@ public Instant deserialize(JsonParser p, DeserializationContext ctxt) throws IOE
168173 return Instant .from (formatter .parse (p .getText ()));
169174 }
170175 }
171- }
176+
177+ public static class EnabledFieldDeserializer extends JsonDeserializer <Boolean > {
178+
179+ private static final DateTimeFormatter formatter = DateTimeFormatter .ISO_LOCAL_DATE_TIME ;
180+
181+ @ Override
182+ public Boolean deserialize (JsonParser p , DeserializationContext ctxt ) throws IOException , JsonProcessingException {
183+ String text = p .getText ();
184+ try {
185+ return Boolean .parseBoolean (text );
186+ } catch (Exception e ) {
187+ try {
188+ LocalDateTime .parse (text , formatter );
189+ return false ; // A date string means the alarm is disabled
190+ } catch (Exception ex ) {
191+ logger .log (Level .SEVERE , "Failed to parse enabled field: " + text , ex );
192+ return null ;
193+ }
194+ }
195+ }
196+ }
197+ }
0 commit comments