From: shaoqiu Date: Fri, 8 Nov 2019 03:09:08 +0000 (+0800) Subject: Add JpaPdpStatistics entity X-Git-Tag: 2.2.0~14^2 X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=080d80ba9292bc61924c7a4f4ba73dcbbcea2d5a;p=policy%2Fmodels.git Add JpaPdpStatistics entity Add JpaPdpStatistics entity which will be used in provider. Add Pdp Statistics entities Issue-ID: POLICY-1628 Signed-off-by: shaoqiu Change-Id: Iab12eb02e2e7f0e366aff64fa665b5d6674f2905 Signed-off-by: shaoqiu --- diff --git a/models-base/src/main/java/org/onap/policy/models/base/PfTimestampKey.java b/models-base/src/main/java/org/onap/policy/models/base/PfTimestampKey.java new file mode 100644 index 000000000..a2f11290d --- /dev/null +++ b/models-base/src/main/java/org/onap/policy/models/base/PfTimestampKey.java @@ -0,0 +1,156 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP Policy Model + * ================================================================================ + * Copyright (C) 2019 Nordix Foundation. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.models.base; + +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Embeddable; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NonNull; +import org.onap.policy.common.utils.validation.Assertions; + +@Embeddable +@Getter +@EqualsAndHashCode(callSuper = false) +public class PfTimestampKey extends PfKeyImpl { + private static final long serialVersionUID = -8410208962541783805L; + + private static final String TIMESTAMP_TOKEN = "timeStamp"; + + @Column(name = NAME_TOKEN, length = 120) + private String name; + + @Column(name = VERSION_TOKEN, length = 20) + private String version; + + @Column(name = TIMESTAMP_TOKEN) + private Date timeStamp; + + + /** + * The default constructor creates a null concept key. + */ + public PfTimestampKey() { + this(NULL_KEY_NAME, NULL_KEY_VERSION, new Date(0)); + } + + /** + * Copy constructor. + * + * @param copyConcept the concept to copy from + */ + public PfTimestampKey(@NonNull final PfTimestampKey copyConcept) { + super(copyConcept); + this.timeStamp = new Date(copyConcept.getTimeStamp().getTime()); + } + + /** + * Constructor to create a key with the specified name and version. + * + * @param name the key name + * @param version the key version + * @param timeStamp the timestamp of key + */ + public PfTimestampKey(@NonNull final String name, @NonNull final String version, + @NonNull final Date timeStamp) { + super(name, version); + this.timeStamp = new Date(timeStamp.getTime()); + } + + /** + * Constructor to create a key using the key and version from the specified key ID. + * + * @param id the key ID in a format that respects the KEY_ID_REGEXP + */ + public PfTimestampKey(final String id) { + super(id.substring(0, id.lastIndexOf(':'))); + this.timeStamp = new Date(Long.parseLong(id.substring(id.lastIndexOf(':') + 1))); + } + + @Override + public String getId() { + return getName() + ':' + getVersion() + ':' + getTimeStamp().getTime(); + } + + /** + * Get a null key. + * + * @return a null key + */ + public static final PfTimestampKey getNullKey() { + return new PfTimestampKey(PfKey.NULL_KEY_NAME, PfKey.NULL_KEY_VERSION, new Date(0)); + } + + @Override + public String toString() { + return "PfTimestampKey(name=" + getName() + ", version=" + getVersion() + ", timestamp=" + + getTimeStamp().getTime() + ")"; + } + + @Override + public boolean isNewerThan(@NonNull PfKey otherKey) { + Assertions.instanceOf(otherKey, PfTimestampKey.class); + + final PfTimestampKey otherConceptKey = (PfTimestampKey) otherKey; + + if (this.equals(otherConceptKey)) { + return false; + } + + if (!timeStamp.equals(otherConceptKey.timeStamp)) { + return timeStamp.after(otherConceptKey.timeStamp); + } + + return super.isNewerThan(otherKey); + } + + public void setTimeStamp(@NonNull final Date timeStamp) { + this.timeStamp = new Date(timeStamp.getTime()); + } + + @Override + public boolean isNullKey() { + return super.isNullKey() && getTimeStamp().getTime() == 0; + } + + @Override + public int compareTo(@NonNull final PfConcept otherObj) { + int result = super.compareTo(otherObj); + if (0 == result) { + final PfTimestampKey other = (PfTimestampKey) otherObj; + return timeStamp.compareTo(other.timeStamp); + } + return result; + } + + @Override + public void setName(@NonNull String name) { + this.name = Assertions.validateStringParameter(NAME_TOKEN, name, getNameRegEx()); + } + + @Override + public void setVersion(@NonNull String version) { + this.version = Assertions.validateStringParameter(VERSION_TOKEN, version, getVersionRegEx()); + } +} diff --git a/models-base/src/test/java/org/onap/policy/models/base/PfTimestampKeyTest.java b/models-base/src/test/java/org/onap/policy/models/base/PfTimestampKeyTest.java new file mode 100644 index 000000000..28b9fd922 --- /dev/null +++ b/models-base/src/test/java/org/onap/policy/models/base/PfTimestampKeyTest.java @@ -0,0 +1,95 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP Policy Model + * ================================================================================ + * Copyright (C) 2019 Nordix Foundation. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.models.base; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.Date; +import org.junit.Test; + +public class PfTimestampKeyTest { + private static final String VERSION001 = "0.0.1"; + private static final String CONCEPT_IS_NULL = "copyConcept is marked @NonNull but is null"; + private static final String NAME_IS_NULL = "name is marked @NonNull but is null"; + private static final String VERSION_IS_NULL = "version is marked @NonNull but is null"; + private static final String TIMESTAMP_IS_NULL = "timeStamp is marked @NonNull but is null"; + private static final long timeStamp = 1574832537641L; + + @Test + public void testTimestampKey() { + PfTimestampKey someKey0 = new PfTimestampKey(); + assertEquals(PfTimestampKey.getNullKey(), someKey0); + assertTrue(someKey0.isNullKey()); + assertEquals("PfTimestampKey(name=NULL, version=0.0.0, timestamp=0)", someKey0.toString()); + + PfTimestampKey someKey1 = new PfTimestampKey("my-name", VERSION001, new Date(timeStamp)); + PfTimestampKey someKey2 = new PfTimestampKey(someKey1); + PfTimestampKey someKey3 = new PfTimestampKey(someKey1.getId()); + assertEquals(someKey1, someKey2); + assertEquals(someKey1, someKey3); + assertFalse(someKey1.isNullVersion()); + assertEquals("PfTimestampKey(name=my-name, version=0.0.1, timestamp=1574832537641)", someKey1.toString()); + + assertEquals("my-name", someKey1.getName()); + assertEquals(VERSION001, someKey1.getVersion()); + + assertEquals(someKey2, someKey1.getKey()); + assertEquals(1, someKey1.getKeys().size()); + + assertThatThrownBy(() -> new PfTimestampKey((PfTimestampKey) null)).isInstanceOf(NullPointerException.class) + .hasMessage(CONCEPT_IS_NULL); + assertThatThrownBy(() -> new PfTimestampKey(null, null, null)).isInstanceOf(NullPointerException.class) + .hasMessage(NAME_IS_NULL); + assertThatThrownBy(() -> new PfTimestampKey("my-name", null, null)).isInstanceOf(NullPointerException.class) + .hasMessage(VERSION_IS_NULL); + assertThatThrownBy(() -> new PfTimestampKey("my-name", VERSION001, null)) + .isInstanceOf(NullPointerException.class).hasMessage(TIMESTAMP_IS_NULL); + + assertThatThrownBy(() -> someKey0.setName(null)).isInstanceOf(NullPointerException.class) + .hasMessage(NAME_IS_NULL); + assertThatThrownBy(() -> someKey0.setVersion(null)).isInstanceOf(NullPointerException.class) + .hasMessage(VERSION_IS_NULL); + assertThatThrownBy(() -> someKey0.setTimeStamp(null)).isInstanceOf(NullPointerException.class) + .hasMessage(TIMESTAMP_IS_NULL); + + assertFalse(someKey1.isNewerThan(someKey2)); + assertThatThrownBy(() -> someKey1.isNewerThan((PfKey) null)).isInstanceOf(NullPointerException.class) + .hasMessage("otherKey is marked @NonNull but is null"); + someKey2.setTimeStamp(new Date(timeStamp + 1)); + assertTrue(someKey2.isNewerThan(someKey1)); + someKey3.setName("my-name3"); + assertTrue(someKey3.isNewerThan(someKey1)); + + assertEquals(-1, someKey1.compareTo(someKey2)); + assertEquals(-1, someKey1.compareTo(someKey3)); + assertThatThrownBy(() -> someKey1.compareTo((PfConcept) null)).isInstanceOf(NullPointerException.class) + .hasMessage("otherObj is marked @NonNull but is null"); + + PfTimestampKey someKey4 = new PfTimestampKey("NULL", "0.0.0", new Date(timeStamp)); + assertFalse(someKey4.isNullKey()); + assertFalse(someKey1.isNullKey()); + } +} diff --git a/models-pdp/src/main/java/org/onap/policy/models/pdp/concepts/PdpEngineWorkerStatistics.java b/models-pdp/src/main/java/org/onap/policy/models/pdp/concepts/PdpEngineWorkerStatistics.java new file mode 100644 index 000000000..43fa6c072 --- /dev/null +++ b/models-pdp/src/main/java/org/onap/policy/models/pdp/concepts/PdpEngineWorkerStatistics.java @@ -0,0 +1,74 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2019 Nordix Foundation. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.models.pdp.concepts; + +import java.io.Serializable; +import javax.persistence.Embeddable; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; +import org.onap.policy.models.pdp.enums.PdpEngineWorkerState; + +@Embeddable +@Getter +@Setter +@ToString +@NoArgsConstructor +public class PdpEngineWorkerStatistics implements Serializable { + private static final long serialVersionUID = 8262176849743624013L; + + private String engineId; + private PdpEngineWorkerState engineWorkerState; + private long engineTimeStamp; + private long eventCount; + private long lastExecutionTime; + private double averageExecutionTime; + private long upTime; + private long lastEnterTime; + private long lastStart; + + /** + * Constructs the object, making a deep copy. + * + * @param source source from which to copy + */ + public PdpEngineWorkerStatistics(PdpEngineWorkerStatistics source) { + this.engineId = source.engineId; + this.engineWorkerState = source.engineWorkerState; + this.engineTimeStamp = source.engineTimeStamp; + this.eventCount = source.eventCount; + this.lastExecutionTime = source.lastExecutionTime; + this.averageExecutionTime = source.averageExecutionTime; + this.upTime = source.upTime; + this.lastEnterTime = source.lastEnterTime; + this.lastStart = source.lastStart; + } + + /** + * Tidy up any superfluous information such as leading and trailing white space. + */ + public void clean() { + if (engineId != null) { + engineId = engineId.trim(); + } + } +} diff --git a/models-pdp/src/main/java/org/onap/policy/models/pdp/concepts/PdpStatistics.java b/models-pdp/src/main/java/org/onap/policy/models/pdp/concepts/PdpStatistics.java index 1847eed77..ad5547ecf 100644 --- a/models-pdp/src/main/java/org/onap/policy/models/pdp/concepts/PdpStatistics.java +++ b/models-pdp/src/main/java/org/onap/policy/models/pdp/concepts/PdpStatistics.java @@ -21,10 +21,13 @@ package org.onap.policy.models.pdp.concepts; +import java.util.Date; +import java.util.List; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; +import org.onap.policy.models.base.PfUtils; /** * Class to represent statistics of a running PDP. @@ -38,12 +41,16 @@ import lombok.ToString; public class PdpStatistics { private String pdpInstanceId; + private Date timeStamp; + private String pdpGroupName; + private String pdpSubGroupName; private long policyDeployCount; private long policyDeploySuccessCount; private long policyDeployFailCount; private long policyExecutedCount; private long policyExecutedSuccessCount; private long policyExecutedFailCount; + private List engineStats; /** * Constructs the object, making a deep copy. @@ -52,11 +59,16 @@ public class PdpStatistics { */ public PdpStatistics(PdpStatistics source) { this.pdpInstanceId = source.pdpInstanceId; + this.timeStamp = source.timeStamp == null ? null : new Date(source.timeStamp.getTime()); + this.pdpGroupName = source.pdpGroupName; + this.pdpSubGroupName = source.pdpSubGroupName; this.policyDeployCount = source.policyDeployCount; this.policyDeployFailCount = source.policyDeployFailCount; this.policyDeploySuccessCount = source.policyDeploySuccessCount; this.policyExecutedCount = source.policyExecutedCount; this.policyExecutedFailCount = source.policyExecutedFailCount; this.policyExecutedSuccessCount = source.policyExecutedSuccessCount; + this.engineStats = PfUtils.mapList(source.engineStats, PdpEngineWorkerStatistics::new, null); } + } diff --git a/models-pdp/src/main/java/org/onap/policy/models/pdp/enums/PdpEngineWorkerState.java b/models-pdp/src/main/java/org/onap/policy/models/pdp/enums/PdpEngineWorkerState.java new file mode 100644 index 000000000..95b19471e --- /dev/null +++ b/models-pdp/src/main/java/org/onap/policy/models/pdp/enums/PdpEngineWorkerState.java @@ -0,0 +1,34 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2019 Nordix Foundation. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.models.pdp.enums; + +public enum PdpEngineWorkerState { + /** The state of the engine is not known. */ + UNDEFINED, + /** The engine is stopped. */ + STOPPED, + /** The engine is running and is waiting to execute a policy. */ + READY, + /** The engine is running and is executing a policy. */ + EXECUTING, + /** The engine has been ordered to stop and is stoping. */ + STOPPING; +} diff --git a/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatistics.java b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatistics.java new file mode 100644 index 000000000..d08a19a6a --- /dev/null +++ b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatistics.java @@ -0,0 +1,230 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP Policy Model + * ================================================================================ + * Copyright (C) 2019 Nordix Foundation. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.models.pdp.persistence.concepts; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; +import javax.persistence.Column; +import javax.persistence.ElementCollection; +import javax.persistence.EmbeddedId; +import javax.persistence.Entity; +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; +import javax.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NonNull; +import org.apache.commons.lang3.builder.CompareToBuilder; +import org.onap.policy.models.base.PfAuthorative; +import org.onap.policy.models.base.PfConcept; +import org.onap.policy.models.base.PfKey; +import org.onap.policy.models.base.PfTimestampKey; +import org.onap.policy.models.base.PfUtils; +import org.onap.policy.models.base.PfValidationMessage; +import org.onap.policy.models.base.PfValidationResult; +import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.pdp.concepts.PdpEngineWorkerStatistics; +import org.onap.policy.models.pdp.concepts.PdpStatistics; + + +/** + * Class to represent a PDP statistics in the database. + * + */ +@Entity +@Table(name = "PdpStatistics") +@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) +@Data +@AllArgsConstructor +@EqualsAndHashCode(callSuper = false) +public class JpaPdpStatistics extends PfConcept implements PfAuthorative, Serializable { + private static final long serialVersionUID = -7312974966820980659L; + private static final String NULL_NAME = "NULL"; + + @EmbeddedId + private PfTimestampKey key; + + @Column(length = 120) + private String pdpGroupName; + + @Column(length = 120) + private String pdpSubGroupName; + + @Column + private long policyDeployCount; + + @Column + private long policyDeploySuccessCount; + + @Column + private long policyDeployFailCount; + + @Column + private long policyExecutedCount; + + @Column + private long policyExecutedSuccessCount; + + @Column + private long policyExecutedFailCount; + + @ElementCollection + private List engineStats; + + /** + * The Default Constructor creates a {@link JpaPdpStatistics} object with a null key. + */ + public JpaPdpStatistics() { + this(new PfTimestampKey()); + } + + /** + * The Key Constructor creates a {@link JpaPdpStatistics} object with the given concept key. + * + * @param key the key + */ + public JpaPdpStatistics(@NonNull final PfTimestampKey key) { + this(key, NULL_NAME, NULL_NAME, 0L, 0L, 0L, 0L, 0L, 0L, null); + } + + + /** + * Copy constructor. + * + * @param copyConcept the concept to copy from + */ + public JpaPdpStatistics(@NonNull final JpaPdpStatistics copyConcept) { + super(copyConcept); + this.key = new PfTimestampKey(copyConcept.key); + this.pdpGroupName = copyConcept.pdpGroupName; + this.pdpSubGroupName = copyConcept.pdpSubGroupName; + this.policyDeployCount = copyConcept.policyDeployCount; + this.policyDeploySuccessCount = copyConcept.policyDeploySuccessCount; + this.policyDeployFailCount = copyConcept.policyDeployFailCount; + this.policyExecutedCount = copyConcept.policyExecutedCount; + this.policyExecutedSuccessCount = copyConcept.policyExecutedSuccessCount; + this.policyExecutedFailCount = copyConcept.policyExecutedFailCount; + this.engineStats = PfUtils.mapList(copyConcept.engineStats, PdpEngineWorkerStatistics::new, null); + } + + /** + * Authorative constructor. + * + * @param authorativeConcept the authorative concept to copy from + */ + public JpaPdpStatistics(@NonNull final PdpStatistics authorativeConcept) { + this.fromAuthorative(authorativeConcept); + } + + @Override + public int compareTo(PfConcept otherConcept) { + if (otherConcept == null) { + return -1; + } + if (this == otherConcept) { + return 0; + } + if (getClass() != otherConcept.getClass()) { + return getClass().getName().compareTo(otherConcept.getClass().getName()); + } + + final JpaPdpStatistics other = (JpaPdpStatistics) otherConcept; + return new CompareToBuilder().append(this.key, other.key).append(this.pdpGroupName, other.pdpGroupName) + .append(this.pdpSubGroupName, other.pdpSubGroupName) + .append(this.policyDeployCount, other.policyDeployCount) + .append(this.policyDeployFailCount, other.policyDeployFailCount) + .append(this.policyDeploySuccessCount, other.policyDeploySuccessCount) + .append(this.policyExecutedCount, other.policyExecutedCount) + .append(this.policyExecutedFailCount, other.policyExecutedFailCount) + .append(this.policyExecutedSuccessCount, other.policyExecutedSuccessCount).toComparison(); + } + + @Override + public PdpStatistics toAuthorative() { + PdpStatistics pdpStatistics = new PdpStatistics(); + pdpStatistics.setPdpInstanceId(key.getName()); + pdpStatistics.setTimeStamp(new Date(key.getTimeStamp().getTime())); + pdpStatistics.setPdpGroupName(pdpGroupName); + pdpStatistics.setPdpSubGroupName(pdpSubGroupName); + pdpStatistics.setPolicyDeployCount(policyDeployCount); + pdpStatistics.setPolicyDeployFailCount(policyDeployFailCount); + pdpStatistics.setPolicyDeploySuccessCount(policyDeploySuccessCount); + pdpStatistics.setPolicyExecutedCount(policyExecutedCount); + pdpStatistics.setPolicyExecutedFailCount(policyExecutedFailCount); + pdpStatistics.setPolicyExecutedSuccessCount(policyExecutedSuccessCount); + pdpStatistics.setEngineStats(PfUtils.mapList(engineStats, PdpEngineWorkerStatistics::new, null)); + + return pdpStatistics; + } + + @Override + public void fromAuthorative(@NonNull final PdpStatistics pdpStatistics) { + if (this.key == null || this.getKey().isNullKey()) { + this.setKey(new PfTimestampKey(pdpStatistics.getPdpInstanceId(), PfKey.NULL_KEY_VERSION, + new Date(pdpStatistics.getTimeStamp() == null ? 0 : pdpStatistics.getTimeStamp().getTime()))); + } + this.setPdpGroupName(pdpStatistics.getPdpGroupName()); + this.setPdpSubGroupName(pdpStatistics.getPdpSubGroupName()); + this.setPolicyDeployCount(pdpStatistics.getPolicyDeployCount()); + this.setPolicyDeployFailCount(pdpStatistics.getPolicyDeployFailCount()); + this.setPolicyDeploySuccessCount(pdpStatistics.getPolicyDeploySuccessCount()); + this.setPolicyExecutedCount(pdpStatistics.getPolicyExecutedCount()); + this.setPolicyExecutedFailCount(pdpStatistics.getPolicyExecutedFailCount()); + this.setPolicyExecutedSuccessCount(pdpStatistics.getPolicyExecutedSuccessCount()); + this.setEngineStats( + PfUtils.mapList(pdpStatistics.getEngineStats(), PdpEngineWorkerStatistics::new, null)); + } + + @Override + public List getKeys() { + return getKey().getKeys(); + } + + @Override + public PfValidationResult validate(@NonNull PfValidationResult resultIn) { + PfValidationResult result = resultIn; + + if (key.isNullKey()) { + result.addValidationMessage( + new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, "key is a null key")); + } + + result = key.validate(result); + + return result; + } + + @Override + public void clean() { + key.clean(); + pdpGroupName = pdpGroupName.trim(); + pdpSubGroupName = pdpSubGroupName.trim(); + if (engineStats != null) { + for (PdpEngineWorkerStatistics engineStat : engineStats) { + engineStat.clean(); + } + } + } +} diff --git a/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatisticsTest.java b/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatisticsTest.java new file mode 100644 index 000000000..62f0c5be0 --- /dev/null +++ b/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatisticsTest.java @@ -0,0 +1,42 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2019 Nordix Foundation. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.models.pdp.persistence.concepts; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import org.junit.Test; + +/** + * Test the {@link JpaPdpStatistics} class. + * + */ +public class JpaPdpStatisticsTest { + private static final String NULL_KEY_ERROR = "key is marked @NonNull but is null"; + private static final String PDP1 = "ThePDP"; + + // TODO More unit test cases will be added later. + @Test + public void testJpaPdpStatistics() { + assertThatThrownBy(() -> { + new JpaPdpStatistics((JpaPdpStatistics) null); + }).hasMessage("copyConcept is marked @NonNull but is null"); + } +} diff --git a/models-pdp/src/test/java/org/onap/policy/models/pdp/testconcepts/DummyJpaPdpStatisticsChild.java b/models-pdp/src/test/java/org/onap/policy/models/pdp/testconcepts/DummyJpaPdpStatisticsChild.java new file mode 100644 index 000000000..b428fc679 --- /dev/null +++ b/models-pdp/src/test/java/org/onap/policy/models/pdp/testconcepts/DummyJpaPdpStatisticsChild.java @@ -0,0 +1,34 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2019 Nordix Foundation. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.models.pdp.testconcepts; + +import org.onap.policy.models.pdp.persistence.concepts.JpaPdpStatistics; + +/** + * Test class for JpaPdpStatistics comparisons. + * + */ + +public class DummyJpaPdpStatisticsChild extends JpaPdpStatistics { + + private static final long serialVersionUID = -5911806849612508805L; + +} diff --git a/models-pdp/src/test/resources/META-INF/persistence.xml b/models-pdp/src/test/resources/META-INF/persistence.xml index 9d78e3abd..b1a1795ea 100644 --- a/models-pdp/src/test/resources/META-INF/persistence.xml +++ b/models-pdp/src/test/resources/META-INF/persistence.xml @@ -31,6 +31,7 @@ org.onap.policy.models.pdp.persistence.concepts.JpaPdpGroup org.onap.policy.models.pdp.persistence.concepts.JpaPdpSubGroup org.onap.policy.models.pdp.persistence.concepts.JpaPdp + org.onap.policy.models.pdp.persistence.concepts.JpaPdpStatistics diff --git a/models-provider/src/test/resources/META-INF/persistence.xml b/models-provider/src/test/resources/META-INF/persistence.xml index 7b5bc14b9..48f1b10a7 100644 --- a/models-provider/src/test/resources/META-INF/persistence.xml +++ b/models-provider/src/test/resources/META-INF/persistence.xml @@ -31,6 +31,7 @@ org.onap.policy.models.pdp.persistence.concepts.JpaPdpGroup org.onap.policy.models.pdp.persistence.concepts.JpaPdpSubGroup org.onap.policy.models.pdp.persistence.concepts.JpaPdp + org.onap.policy.models.pdp.persistence.concepts.JpaPdpStatistics