Skip to content

Commit 7ad1f99

Browse files
committed
Patch alarm logger deserialization to handle date strings in the enabled field
1 parent b0e33de commit 7ad1f99

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

services/alarm-logger/src/main/java/org/phoebus/alarm/logging/rest/AlarmLogMessage.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,16 @@
1111

1212
import java.io.IOException;
1313
import java.time.Instant;
14+
import java.time.LocalDateTime;
1415
import java.time.ZoneId;
1516
import 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)
1922
public 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

Comments
 (0)