Files
vpd-permission-poc/src/main/java/com/cloudhandson/vpdbackoffice/service/ProbeErrorClassifier.java
2026-06-29 07:01:53 +09:00

59 lines
1.9 KiB
Java

package com.cloudhandson.vpdbackoffice.service;
import com.cloudhandson.vpdbackoffice.domain.probe.ProbeStatus;
import java.net.ConnectException;
import java.net.NoRouteToHostException;
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
import org.springframework.http.HttpStatusCode;
import org.springframework.stereotype.Component;
import org.springframework.web.client.ResourceAccessException;
@Component
public class ProbeErrorClassifier {
public ProbeStatus classify(HttpStatusCode status, String body) {
String text = body == null ? "" : body;
if (text.contains("ORA-20002")) {
return ProbeStatus.INVALID_TOKEN;
}
if (text.contains("ORA-00942") || text.contains("ORA-01031")) {
return ProbeStatus.OBJECT_NOT_ACCESSIBLE;
}
if (text.contains("ORA-28110") || text.contains("SQL Error Code 28110")) {
return ProbeStatus.VPD_FILTER_ERROR;
}
if (status != null && (status.value() == 401 || status.value() == 403)) {
return ProbeStatus.INVALID_TOKEN;
}
if (status != null && status.value() == 404) {
return ProbeStatus.ORDS_PATH_NOT_FOUND;
}
if (text.contains("\"code\"") && text.contains("NotFound")) {
return ProbeStatus.ORDS_PATH_NOT_FOUND;
}
return ProbeStatus.UNKNOWN_ERROR;
}
public boolean isTimeout(ResourceAccessException exception) {
return hasCause(exception, SocketTimeoutException.class);
}
public boolean isUnavailable(ResourceAccessException exception) {
return hasCause(exception, ConnectException.class)
|| hasCause(exception, NoRouteToHostException.class)
|| hasCause(exception, UnknownHostException.class);
}
private boolean hasCause(Throwable throwable, Class<? extends Throwable> type) {
Throwable cause = throwable;
while (cause != null) {
if (type.isInstance(cause)) {
return true;
}
cause = cause.getCause();
}
return false;
}
}