diff --git a/hapi-fhir-jpaserver-subscription/src/main/java/ca/uhn/fhir/jpa/subscription/module/interceptor/SubscriptionDebugLogInterceptor.java b/hapi-fhir-jpaserver-subscription/src/main/java/ca/uhn/fhir/jpa/subscription/module/interceptor/SubscriptionDebugLogInterceptor.java index 8d35fdb6ce6..f17b99e963e 100644 --- a/hapi-fhir-jpaserver-subscription/src/main/java/ca/uhn/fhir/jpa/subscription/module/interceptor/SubscriptionDebugLogInterceptor.java +++ b/hapi-fhir-jpaserver-subscription/src/main/java/ca/uhn/fhir/jpa/subscription/module/interceptor/SubscriptionDebugLogInterceptor.java @@ -63,7 +63,7 @@ public class SubscriptionDebugLogInterceptor { public void step10_resourceModified(ResourceModifiedMessage theMessage) { String value = Long.toString(System.currentTimeMillis()); theMessage.setAttribute(SUBSCRIPTION_DEBUG_LOG_INTERCEPTOR_PRECHECK, value); - log(EventCodeEnum.SUBS10, "Resource {} was submitted to the processing pipeline (op={})", theMessage.getPayloadId(), theMessage.getOperationType()); + log(EventCodeEnum.SUBS1, "Resource {} was submitted to the processing pipeline (op={})", theMessage.getPayloadId(), theMessage.getOperationType()); } /* @@ -78,27 +78,27 @@ public class SubscriptionDebugLogInterceptor { @Hook(Pointcut.SUBSCRIPTION_BEFORE_PERSISTED_RESOURCE_CHECKED) public void step20_beforeChecked(ResourceModifiedMessage theMessage) { - log(EventCodeEnum.SUBS20, "Checking resource {} (op={}) for matching subscriptions", theMessage.getPayloadId(), theMessage.getOperationType()); + log(EventCodeEnum.SUBS2, "Checking resource {} (op={}) for matching subscriptions", theMessage.getPayloadId(), theMessage.getOperationType()); } @Hook(Pointcut.SUBSCRIPTION_RESOURCE_MATCHED) public void step30_subscriptionMatched(ResourceDeliveryMessage theMessage, SubscriptionMatchResult theResult) { - log(EventCodeEnum.SUBS30, "Resource {} matched by subscription {} (memory match={})", theMessage.getPayloadId(), theMessage.getSubscription().getIdElementString(), theResult.isInMemory()); + log(EventCodeEnum.SUBS3, "Resource {} matched by subscription {} (memory match={})", theMessage.getPayloadId(), theMessage.getSubscription().getIdElementString(), theResult.isInMemory()); } @Hook(Pointcut.SUBSCRIPTION_RESOURCE_DID_NOT_MATCH_ANY_SUBSCRIPTIONS) public void step35_subscriptionNotMatched(ResourceModifiedMessage theMessage) { - log(EventCodeEnum.SUBS35, "Resource {} did not match any subscriptions", theMessage.getPayloadId()); + log(EventCodeEnum.SUBS4, "Resource {} did not match any subscriptions", theMessage.getPayloadId()); } @Hook(Pointcut.SUBSCRIPTION_BEFORE_DELIVERY) public void step40_beforeDelivery(ResourceDeliveryMessage theMessage) { - log(EventCodeEnum.SUBS40, "Delivering resource {} for subscription {} to channel of type {} to endpoint {}", theMessage.getPayloadId(), theMessage.getSubscription().getIdElementString(), theMessage.getSubscription().getChannelType(), theMessage.getSubscription().getEndpointUrl()); + log(EventCodeEnum.SUBS5, "Delivering resource {} for subscription {} to channel of type {} to endpoint {}", theMessage.getPayloadId(), theMessage.getSubscription().getIdElementString(), theMessage.getSubscription().getChannelType(), theMessage.getSubscription().getEndpointUrl()); } @Hook(Pointcut.SUBSCRIPTION_AFTER_DELIVERY_FAILED) public void step45_deliveryFailed(ResourceDeliveryMessage theMessage, Exception theFailure) { - log(EventCodeEnum.SUBS45, "Delivery of resource {} for subscription {} to channel of type {} - Failure: {}", theMessage.getPayloadId(), theMessage.getSubscription().getIdElementString(), theMessage.getSubscription().getChannelType(), theFailure.toString()); + log(EventCodeEnum.SUBS6, "Delivery of resource {} for subscription {} to channel of type {} - Failure: {}", theMessage.getPayloadId(), theMessage.getSubscription().getIdElementString(), theMessage.getSubscription().getChannelType(), theFailure.toString()); } @Hook(Pointcut.SUBSCRIPTION_AFTER_DELIVERY) @@ -110,7 +110,7 @@ public class SubscriptionDebugLogInterceptor { .map(start -> new StopWatch(start).toString()) .orElse("(unknown)"); - log(EventCodeEnum.SUBS50, "Finished delivery of resource {} for subscription {} to channel of type {} - Total processing time: {}", theMessage.getPayloadId(), theMessage.getSubscription().getIdElementString(), theMessage.getSubscription().getChannelType(), processingTime); + log(EventCodeEnum.SUBS7, "Finished delivery of resource {} for subscription {} to channel of type {} - Total processing time: {}", theMessage.getPayloadId(), theMessage.getSubscription().getIdElementString(), theMessage.getSubscription().getChannelType(), processingTime); } protected void log(EventCodeEnum theEventCode, String theMessage, Object... theArguments) { @@ -141,34 +141,34 @@ public class SubscriptionDebugLogInterceptor { * A new/updated resource has been submitted to the processing pipeline and is about * to be placed on the matchign queue. */ - SUBS10, + SUBS1, /** * A resources has been dequeued from the matching queue and is about to be checked * for any matching subscriptions. */ - SUBS20, + SUBS2, /** * The resource has matched a subscription (logged once for each matching subscription) * and is about to be queued for delivery. */ - SUBS30, + SUBS3, /** * The resource did not match any subscriptions and processing is complete. */ - SUBS35, + SUBS4, /** * The resource has been dequeued from the delivery queue and is about to be * delivered. */ - SUBS40, + SUBS5, /** * Delivery failed */ - SUBS45, + SUBS6, /** * Delivery is now complete and processing is finished. */ - SUBS50 + SUBS7 } diff --git a/hapi-fhir-jpaserver-subscription/src/main/java/ca/uhn/fhir/jpa/subscription/module/subscriber/BaseSubscriptionDeliverySubscriber.java b/hapi-fhir-jpaserver-subscription/src/main/java/ca/uhn/fhir/jpa/subscription/module/subscriber/BaseSubscriptionDeliverySubscriber.java index 2fc7e4227f1..5b7f3ca675f 100644 --- a/hapi-fhir-jpaserver-subscription/src/main/java/ca/uhn/fhir/jpa/subscription/module/subscriber/BaseSubscriptionDeliverySubscriber.java +++ b/hapi-fhir-jpaserver-subscription/src/main/java/ca/uhn/fhir/jpa/subscription/module/subscriber/BaseSubscriptionDeliverySubscriber.java @@ -50,7 +50,7 @@ public abstract class BaseSubscriptionDeliverySubscriber implements MessageHandl } ResourceDeliveryMessage msg = (ResourceDeliveryMessage) theMessage.getPayload(); - String subscriptionId = msg.getSubscription().getIdElement(myFhirContext).getValue(); + String subscriptionId = msg.getSubscriptionId(myFhirContext); ActiveSubscription updatedSubscription = mySubscriptionRegistry.get(msg.getSubscription().getIdElement(myFhirContext).getIdPart()); if (updatedSubscription != null) { @@ -71,13 +71,14 @@ public abstract class BaseSubscriptionDeliverySubscriber implements MessageHandl } catch (Exception e) { + String errorMsg = "Failure handling subscription payload for subscription: " + subscriptionId; + ourLog.error(errorMsg, e); + // Interceptor call: SUBSCRIPTION_AFTER_DELIVERY if (!myInterceptorBroadcaster.callHooks(Pointcut.SUBSCRIPTION_AFTER_DELIVERY_FAILED, msg, msg.getSubscription(), e)) { return; } - String errorMsg = "Failure handling subscription payload for subscription: " + subscriptionId; - ourLog.error(errorMsg, e); throw new MessagingException(theMessage, errorMsg, e); } } diff --git a/hapi-fhir-jpaserver-subscription/src/main/java/ca/uhn/fhir/jpa/subscription/module/subscriber/ResourceDeliveryMessage.java b/hapi-fhir-jpaserver-subscription/src/main/java/ca/uhn/fhir/jpa/subscription/module/subscriber/ResourceDeliveryMessage.java index ce58da1f14a..d4c65aaf132 100644 --- a/hapi-fhir-jpaserver-subscription/src/main/java/ca/uhn/fhir/jpa/subscription/module/subscriber/ResourceDeliveryMessage.java +++ b/hapi-fhir-jpaserver-subscription/src/main/java/ca/uhn/fhir/jpa/subscription/module/subscriber/ResourceDeliveryMessage.java @@ -28,16 +28,10 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.Gson; -import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.builder.ToStringBuilder; import org.hl7.fhir.instance.model.api.IBaseResource; import org.hl7.fhir.instance.model.api.IIdType; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; - import static org.apache.commons.lang3.StringUtils.isNotBlank; @SuppressWarnings("WeakerAccess") @@ -133,4 +127,11 @@ public class ResourceDeliveryMessage extends BaseResourceMessage implements IRes .append("myOperationType", myOperationType) .toString(); } + + /** + * Helper method to fetch the subscription ID + */ + public String getSubscriptionId(FhirContext theFhirContext) { + return getSubscription().getIdElement(theFhirContext).getValue(); + } }