Skip to content

Commit

Permalink
Merge pull request #1131 from sabith-nadakkavil/SpanReverted
Browse files Browse the repository at this point in the history
chore: add opentelemetry-sdk-logs dependency and uncomment all manual spans and traces in the application
  • Loading branch information
ratheesh-kr authored Feb 4, 2025
2 parents ddaa7b4 + 8be0e94 commit f95f822
Show file tree
Hide file tree
Showing 7 changed files with 353 additions and 361 deletions.
15 changes: 2 additions & 13 deletions hub-prime/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
</parent>
<groupId>org.techbd</groupId>
<artifactId>hub-prime</artifactId>
<version>0.454.0</version>
<version>0.455.0</version>
<packaging>war</packaging>
<name>Tech by Design Hub (Prime)</name>
<description>Tech by Design Hub (Primary)</description>
Expand Down Expand Up @@ -337,21 +337,10 @@
<artifactId>okio</artifactId>
<version>3.9.1</version>
</dependency>

<!-- <dependency>
<groupId>io.opentelemetry.instrumentation</groupId>
<artifactId>opentelemetry-logback-appender-1.0</artifactId>
<version>2.12.0-alpha</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-otlp-logs</artifactId>
<version>1.26.0-alpha</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk-logs</artifactId>
</dependency> -->
</dependency>
</dependencies>

<build>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.context.support.DefaultProfileValidationSupport;
import ca.uhn.fhir.validation.FhirValidator;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.Tracer;
import jakarta.validation.constraints.NotNull;

/**
Expand Down Expand Up @@ -126,34 +128,33 @@ public class OrchestrationEngine {
private final List<OrchestrationSession> sessions;
private final Map<ValidationEngineKey, ValidationEngine> validationEngineCache;
private static final Logger LOG = LoggerFactory.getLogger(OrchestrationEngine.class);
// private final Tracer tracer;
public OrchestrationEngine(
// final Tracer tracer
) {
private final Tracer tracer;

public OrchestrationEngine(final Tracer tracer) {
this.sessions = new ArrayList<>();
this.validationEngineCache = new HashMap<>();
// this.tracer = tracer;
this.tracer = tracer;
}

public List<OrchestrationSession> getSessions() {
return Collections.unmodifiableList(sessions);
}

public synchronized void orchestrate(@NotNull final OrchestrationSession... sessions) {
// Span span = tracer.spanBuilder("OrchestrationEngine.orchestrate").startSpan();
// try {
Span span = tracer.spanBuilder("OrchestrationEngine.orchestrate").startSpan();
try {
for (final OrchestrationSession session : sessions) {
this.sessions.add(session);
session.validate();
}
// } finally {
// span.end();
// }
} finally {
span.end();
}
}

public void clear(@NotNull final OrchestrationSession... sessionsToRemove) {
// Span span = tracer.spanBuilder("OrchestrationEngine.clear").startSpan();
// try {
Span span = tracer.spanBuilder("OrchestrationEngine.clear").startSpan();
try {
if (sessionsToRemove != null && CollectionUtils.isNotEmpty(sessions)) {
synchronized (this) {
Set<String> sessionIdsToRemove = Arrays.stream(sessionsToRemove)
Expand All @@ -168,24 +169,22 @@ public void clear(@NotNull final OrchestrationSession... sessionsToRemove) {
}
}
}
// } finally {
// span.end();
// }
} finally {
span.end();
}
}

public synchronized ValidationEngine getValidationEngine(@NotNull final ValidationEngineIdentifier type,
@NotNull final String fhirProfileUrl, final Map<String, Map<String, String>> igPackages,
final String igVersion
// ,final Tracer tracer
,String interactionId) {
final String igVersion, final Tracer tracer, String interactionId) {
final ValidationEngineKey key = new ValidationEngineKey(type, fhirProfileUrl);
return validationEngineCache.computeIfAbsent(key, k -> {
switch (type) {
case HAPI:
return new HapiValidationEngine.Builder().withFhirProfileUrl(fhirProfileUrl)
.withIgPackages(igPackages)
.withIgVersion(igVersion)
// .withTracer(tracer)
.withTracer(tracer)
.withInteractionId(interactionId)
.build();
case HL7_EMBEDDED:
Expand Down Expand Up @@ -273,8 +272,9 @@ public static class HapiValidationEngine implements OrchestrationEngine.Validati
private final Map<String, Map<String, String>> igPackages;
private final String igVersion;
private final FhirValidator fhirValidator;
// private final Tracer tracer;
private final Tracer tracer;
private final String interactionId;

private HapiValidationEngine(final Builder builder) {
this.fhirProfileUrl = builder.fhirProfileUrl;
this.fhirContext = FhirContext.forR4();
Expand All @@ -287,36 +287,38 @@ private HapiValidationEngine(final Builder builder) {
engineConstructedAt);
this.igPackages = builder.igPackages;
this.igVersion = builder.igVersion;
// this.tracer = builder.tracer;
this.tracer = builder.tracer;
this.interactionId = builder.interactionId;
this.fhirValidator = initializeFhirValidator();
}

public FhirValidator initializeFhirValidator() {
// Span span = tracer.spanBuilder("OrchestrationEngine.initializeFhirValidator").startSpan();
// try {
Span span = tracer.spanBuilder("OrchestrationEngine.initializeFhirValidator").startSpan();
try {
final var supportChain = new ValidationSupportChain();
final var defaultSupport = new DefaultProfileValidationSupport(fhirContext);

LOG.info("Version of igPackage : {} for interaction Id : {} " , igVersion,interactionId);
LOG.info("Add IG Packages to npmPackageValidationSupport -BEGIN for interaction Id : {}",interactionId);
LOG.info("Version of igPackage : {} for interaction Id : {} ", igVersion, interactionId);
LOG.info("Add IG Packages to npmPackageValidationSupport -BEGIN for interaction Id : {}",
interactionId);
NpmPackageValidationSupport npmPackageValidationSupport = new NpmPackageValidationSupport(fhirContext);

if (igPackages != null && igPackages.containsKey("fhir-v4")) {
Map<String, String> igMap = igPackages.get("fhir-v4");
LOG.info("No. of packages to be add : {} for interaction Id : {}", igMap.size(),interactionId);
LOG.info("No. of packages to be add : {} for interaction Id : {}", igMap.size(), interactionId);
for (String igKey : igMap.keySet()) {
String packagePath = igMap.get(igKey);
try {
LOG.info("Add IG Package {} -BEGIN for interaction Id : {} ", packagePath,interactionId);
LOG.info("Add IG Package {} -BEGIN for interaction Id : {} ", packagePath, interactionId);
npmPackageValidationSupport.loadPackageFromClasspath(packagePath + "/package.tgz");
LOG.info("Add IG Package {} -END for interaction Id : {} ", packagePath,interactionId);
LOG.info("Add IG Package {} -END for interaction Id : {} ", packagePath, interactionId);
} catch (Exception e) {
LOG.error("Failed to load the package {} for interactionId : {} ", packagePath, interactionId, e);
LOG.error("Failed to load the package {} for interactionId : {} ", packagePath,
interactionId, e);
}
}
} else {
LOG.error("IG Package path not defined for Interaction Id :{} ",interactionId);
LOG.error("IG Package path not defined for Interaction Id :{} ", interactionId);
}

supportChain.addValidationSupport(npmPackageValidationSupport);
Expand All @@ -327,42 +329,39 @@ public FhirValidator initializeFhirValidator() {
supportChain.addValidationSupport(new SnapshotGeneratingValidationSupport(fhirContext));
supportChain.addValidationSupport(new InMemoryTerminologyServerValidationSupport(fhirContext));

final var prePopulateSupport = new PrePopulateSupport(
// tracer
);
final var prePopulateSupport = new PrePopulateSupport(tracer);
var prePopulatedValidationSupport = prePopulateSupport.build(fhirContext);
prePopulateSupport.addCodeSystems(supportChain, prePopulatedValidationSupport);

supportChain.addValidationSupport(prePopulatedValidationSupport);
prePopulatedValidationSupport = null;

final var postPopulateSupport = new PostPopulateSupport(
// tracer
);
final var postPopulateSupport = new PostPopulateSupport(tracer);
postPopulateSupport.update(supportChain);

final var cache = new CachingValidationSupport(supportChain);
final var instanceValidator = new FhirInstanceValidator(cache);
return fhirContext.newValidator().registerValidatorModule(instanceValidator);
// } finally {
// span.end();
// }
} finally {
span.end();
}
}

@Override
public OrchestrationEngine.ValidationResult validate(@NotNull final String payload,
final String interactionId) {
final var initiatedAt = Instant.now();
// Span span = tracer.spanBuilder("OrchestrationEngine.validate").startSpan();
// try {
Span span = tracer.spanBuilder("OrchestrationEngine.validate").startSpan();
try {
try {
LOG.info("VALIDATOR -BEGIN initiated At : {} for interactionid:{} ", initiatedAt, interactionId);
LOG.debug("BUNDLE PAYLOAD parse -BEGIN for interactionId:{}", interactionId);
final var bundle = fhirContext.newJsonParser().parseResource(Bundle.class, payload);
LOG.debug("BUNDLE PAYLOAD parse -END");
final var hapiVR = fhirValidator.validateWithResult(bundle);
final var completedAt = Instant.now();
LOG.info("VALIDATOR -END completed at :{} ms for interactionId:{} ", Duration.between(initiatedAt, completedAt).toMillis(), interactionId);
LOG.info("VALIDATOR -END completed at :{} ms for interactionId:{} ",
Duration.between(initiatedAt, completedAt).toMillis(), interactionId);
return new OrchestrationEngine.ValidationResult() {
@Override
@JsonSerialize(using = JsonTextSerializer.class)
Expand Down Expand Up @@ -402,20 +401,20 @@ public Instant getCompletedAt() {
}
};

} catch (final Exception e) {
final var completedAt = Instant.now();
return new OrchestrationEngine.ValidationResult() {
@Override
@JsonSerialize(using = JsonTextSerializer.class)
public String getOperationOutcome() {
OperationOutcome operationOutcome = new OperationOutcome();
OperationOutcomeIssueComponent issue = new OperationOutcomeIssueComponent();
issue.setSeverity(IssueSeverity.FATAL);
issue.setDiagnostics(e.getMessage());
issue.setCode(OperationOutcome.IssueType.EXCEPTION);
operationOutcome.addIssue(issue);
return FhirContext.forR4().newJsonParser().encodeResourceToString(operationOutcome);
}
} catch (final Exception e) {
final var completedAt = Instant.now();
return new OrchestrationEngine.ValidationResult() {
@Override
@JsonSerialize(using = JsonTextSerializer.class)
public String getOperationOutcome() {
OperationOutcome operationOutcome = new OperationOutcome();
OperationOutcomeIssueComponent issue = new OperationOutcomeIssueComponent();
issue.setSeverity(IssueSeverity.FATAL);
issue.setDiagnostics(e.getMessage());
issue.setCode(OperationOutcome.IssueType.EXCEPTION);
operationOutcome.addIssue(issue);
return FhirContext.forR4().newJsonParser().encodeResourceToString(operationOutcome);
}

@Override
public boolean isValid() {
Expand Down Expand Up @@ -448,9 +447,9 @@ public Instant getCompletedAt() {
}
};
}
// } finally {
// span.end();
// }
} finally {
span.end();
}

}

Expand All @@ -459,7 +458,7 @@ public static class Builder {
private Map<String, Map<String, String>> igPackages;
private String igVersion;
private String interactionId;
// private Tracer tracer;
private Tracer tracer;

public Builder withInteractionId(@NotNull final String interactionId) {
this.interactionId = interactionId;
Expand All @@ -481,10 +480,10 @@ public Builder withIgVersion(@NotNull final String igVersion) {
return this;
}

// public Builder withTracer(@NotNull final Tracer tracer) {
// this.tracer = tracer;
// return this;
// }
public Builder withTracer(@NotNull final Tracer tracer) {
this.tracer = tracer;
return this;
}

public HapiValidationEngine build() {
return new HapiValidationEngine(this);
Expand Down Expand Up @@ -801,7 +800,7 @@ public static class Builder {
private String igVersion;
private String sessionId;
private String interactionId;
// private Tracer tracer;
private Tracer tracer;

public Builder(@NotNull final OrchestrationEngine engine) {
this.engine = engine;
Expand Down Expand Up @@ -846,10 +845,10 @@ public Builder withIgVersion(@NotNull final String igVersion) {
return this;
}

// public Builder withTracer(@NotNull final Tracer tracer) {
// this.tracer = tracer;
// return this;
// }
public Builder withTracer(@NotNull final Tracer tracer) {
this.tracer = tracer;
return this;
}

public Builder withUserAgentValidationStrategy(final String uaStrategyJson, final boolean clearExisting) {
if (uaStrategyJson != null) {
Expand Down Expand Up @@ -908,23 +907,21 @@ public synchronized Builder addHapiValidationEngine() {
this.validationEngines
.add(engine.getValidationEngine(ValidationEngineIdentifier.HAPI, this.fhirProfileUrl,
this.igPackages,
this.igVersion
// ,this.tracer
,this.interactionId));
this.igVersion, this.tracer, this.interactionId));
return this;
}

public synchronized Builder addHl7ValidationEmbeddedEngine() {
this.validationEngines
.add(engine.getValidationEngine(ValidationEngineIdentifier.HL7_EMBEDDED, this.fhirProfileUrl,
null, null,null));
null, null, null, null));
return this;
}

public synchronized Builder addHl7ValidationApiEngine() {
this.validationEngines
.add(engine.getValidationEngine(ValidationEngineIdentifier.HL7_API, this.fhirProfileUrl, null,
null,null));
null, null, null));
return this;
}

Expand Down
Loading

0 comments on commit f95f822

Please sign in to comment.