From 691685407195ed4de7216d2f506d579e75bc2fa9 Mon Sep 17 00:00:00 2001 From: dotasek Date: Mon, 20 Nov 2023 13:40:03 -0500 Subject: [PATCH] Include Validation time in ValidationResponse --- .../hl7/fhir/validation/ValidationEngine.java | 7 +- .../cli/model/ValidatedFragments.java | 26 +++++ .../cli/model/ValidationResponse.java | 14 +++ .../validation/cli/model/ValidationTime.java | 102 ++++++++++++++++++ .../cli/services/ValidationService.java | 23 ++-- 5 files changed, 160 insertions(+), 12 deletions(-) create mode 100644 org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/model/ValidatedFragments.java create mode 100644 org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/model/ValidationTime.java diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidationEngine.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidationEngine.java index cd7cf08f9..cef4c2bb1 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidationEngine.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidationEngine.java @@ -90,6 +90,8 @@ import org.hl7.fhir.utilities.xhtml.XhtmlComposer; import org.hl7.fhir.validation.BaseValidator.ValidationControl; import org.hl7.fhir.validation.ValidatorUtils.SourceFile; import org.hl7.fhir.validation.cli.model.HtmlInMarkdownCheck; +import org.hl7.fhir.validation.cli.model.ValidatedFragments; +import org.hl7.fhir.validation.cli.model.ValidationTime; import org.hl7.fhir.validation.cli.services.IPackageInstaller; import org.hl7.fhir.validation.cli.utils.ProfileLoader; import org.hl7.fhir.validation.cli.utils.QuestionnaireMode; @@ -632,10 +634,11 @@ public class ValidationEngine implements IValidatorResourceFetcher, IValidationP } - public List validateAsFragments(byte[] source, FhirFormat cntType, List profiles, List messages) throws FHIRException, IOException, EOperationOutcome { + public ValidatedFragments validateAsFragments(byte[] source, FhirFormat cntType, List profiles, List messages) throws FHIRException, IOException, EOperationOutcome { InstanceValidator validator = getValidator(cntType); validator.validate(null, messages, new ByteArrayInputStream(source), cntType, asSdList(profiles)); - return validator.validatedContent; + return new ValidatedFragments(validator.validatedContent, + ValidationTime.fromTimeTracker(validator.timeTracker)); } public OperationOutcome validate(byte[] source, FhirFormat cntType, List profiles, List messages) throws FHIRException, IOException, EOperationOutcome { diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/model/ValidatedFragments.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/model/ValidatedFragments.java new file mode 100644 index 000000000..3c31ac004 --- /dev/null +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/model/ValidatedFragments.java @@ -0,0 +1,26 @@ +package org.hl7.fhir.validation.cli.model; + +import org.hl7.fhir.r5.elementmodel.ValidatedFragment; + +import java.util.List; + +public class ValidatedFragments { + + public List getValidatedFragments() { + return validatedFragments; + } + + public ValidationTime getValidationTime() { + return validationTime; + } + + private List validatedFragments; + + private ValidationTime validationTime; + + public ValidatedFragments(List validatedFragments, ValidationTime validationTime) { + this.validatedFragments = validatedFragments; + this.validationTime = validationTime; + } + +} diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/model/ValidationResponse.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/model/ValidationResponse.java index 5fa12f99c..e9b7a8fca 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/model/ValidationResponse.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/model/ValidationResponse.java @@ -13,6 +13,9 @@ public class ValidationResponse { @JsonProperty("sessionId") public String sessionId; + @JsonProperty("validationTime") + public ValidationTime validationTime; + public ValidationResponse() {} public ValidationResponse(List outcomes) { @@ -54,4 +57,15 @@ public class ValidationResponse { return this; } + @JsonProperty("validationTime") + public ValidationTime getValidationTime() { + return validationTime; + } + + @JsonProperty("validationTime") + public ValidationResponse setValidationTime(ValidationTime validationTime) { + this.validationTime = validationTime; + return this; + } + } \ No newline at end of file diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/model/ValidationTime.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/model/ValidationTime.java new file mode 100644 index 000000000..b596439c2 --- /dev/null +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/model/ValidationTime.java @@ -0,0 +1,102 @@ +package org.hl7.fhir.validation.cli.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import org.hl7.fhir.validation.TimeTracker; + +public class ValidationTime { + + + @JsonProperty("overall") + private long overall = 0; + + @JsonProperty("terminology") + private long txTime = 0; + + @JsonProperty("structureDefinition") + private long sdTime = 0; + + @JsonProperty("resourceParse") + private long loadTime = 0; + + @JsonProperty("fhirPath") + private long fpeTime = 0; + + @JsonProperty("checkingSpecials") + private long specTime = 0; + + @JsonProperty("terminology") + public long getTxTime() { + return txTime; + } + + @JsonProperty("terminology") + public ValidationTime setTxTime(long txTime) { + this.txTime = txTime; + return this; + } + + @JsonProperty("structureDefinition") + public long getSdTime() { + return sdTime; + } + + @JsonProperty("structureDefinition") + public ValidationTime setSdTime(long sdTime) { + this.sdTime = sdTime; + return this; + } + + @JsonProperty("resourceParse") + public long getLoadTime() { + return loadTime; + } + + @JsonProperty("resourceParse") + public ValidationTime setLoadTime(long loadTime) { + this.loadTime = loadTime; + return this; + } + + @JsonProperty("fhirPath") + public long getFpeTime() { + return fpeTime; + } + + @JsonProperty("fhirPath") + public ValidationTime setFpeTime(long fpeTime) { + this.fpeTime = fpeTime; + return this; + } + + @JsonProperty("checkingSpecials") + public long getSpecTime() { + return specTime; + } + + @JsonProperty("checkingSpecials") + public ValidationTime setSpecTime(long specTime) { + this.specTime = specTime; + return this; + } + + @JsonProperty("overall") + public long getOverall() { + return overall; + } + + @JsonProperty("overall") + public ValidationTime setOverall(long overall) { + this.overall = overall; + return this; + } + + public static ValidationTime fromTimeTracker(TimeTracker timeTracker) { + return new ValidationTime() + .setSdTime(timeTracker.getSdTime()) + .setTxTime(timeTracker.getTxTime()) + .setSpecTime(timeTracker.getSpecTime()) + .setFpeTime(timeTracker.getFpeTime()) + .setOverall(timeTracker.getOverall()) + .setLoadTime(timeTracker.getLoadTime()); + } +} diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/services/ValidationService.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/services/ValidationService.java index b96ebb9ba..b882729e5 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/services/ValidationService.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/services/ValidationService.java @@ -64,11 +64,7 @@ import org.hl7.fhir.utilities.npm.NpmPackage; import org.hl7.fhir.utilities.validation.ValidationMessage; import org.hl7.fhir.validation.*; import org.hl7.fhir.validation.ValidatorUtils.SourceFile; -import org.hl7.fhir.validation.cli.model.CliContext; -import org.hl7.fhir.validation.cli.model.FileInfo; -import org.hl7.fhir.validation.cli.model.ValidationOutcome; -import org.hl7.fhir.validation.cli.model.ValidationRequest; -import org.hl7.fhir.validation.cli.model.ValidationResponse; +import org.hl7.fhir.validation.cli.model.*; import org.hl7.fhir.validation.cli.renderers.CSVRenderer; import org.hl7.fhir.validation.cli.renderers.CompactRenderer; import org.hl7.fhir.validation.cli.renderers.DefaultRenderer; @@ -101,7 +97,8 @@ public class ValidationService { String definitions = VersionUtilities.packageForVersion(request.getCliContext().getSv()) + "#" + VersionUtilities.getCurrentVersion(request.getCliContext().getSv()); - String sessionId = initializeValidator(request.getCliContext(), definitions, new TimeTracker(), request.sessionId); + TimeTracker timeTracker = new TimeTracker(); + String sessionId = initializeValidator(request.getCliContext(), definitions, timeTracker, request.sessionId); ValidationEngine validator = sessionCache.fetchSessionValidatorEngine(sessionId); if (request.getCliContext().getProfiles().size() > 0) { @@ -124,11 +121,11 @@ public class ValidationService { List messages = new ArrayList<>(); - List validatedFragments = validator.validateAsFragments(fileToValidate.getFileContent().getBytes(), Manager.FhirFormat.getFhirFormat(fileToValidate.getFileType()), + ValidatedFragments validatedFragments = validator.validateAsFragments(fileToValidate.getFileContent().getBytes(), Manager.FhirFormat.getFhirFormat(fileToValidate.getFileType()), request.getCliContext().getProfiles(), messages); - if (validatedFragments.size() == 1 && !validatedFragments.get(0).isDerivedContent()) { - ValidatedFragment validatedFragment = validatedFragments.get(0); + if (validatedFragments.getValidatedFragments().size() == 1 && !validatedFragments.getValidatedFragments().get(0).isDerivedContent()) { + ValidatedFragment validatedFragment = validatedFragments.getValidatedFragments().get(0); ValidationOutcome outcome = new ValidationOutcome(); FileInfo fileInfo = new FileInfo( fileToValidate.getFileName(), @@ -138,7 +135,7 @@ public class ValidationService { outcome.setFileInfo(fileInfo); response.addOutcome(outcome); } else { - for (ValidatedFragment validatedFragment : validatedFragments) { + for (ValidatedFragment validatedFragment : validatedFragments.getValidatedFragments()) { ValidationOutcome outcome = new ValidationOutcome(); FileInfo fileInfo = new FileInfo( validatedFragment.getFilename(), @@ -149,7 +146,13 @@ public class ValidationService { response.addOutcome(outcome); } } + + if (request.getCliContext().isShowTimes()) + response.setValidationTime(validatedFragments.getValidationTime() + ); } + + System.out.println(" Max Memory: "+Runtime.getRuntime().maxMemory()); return response; }