From e86be39dc5ff812b73398e0720aa3fbf0c48213c Mon Sep 17 00:00:00 2001 From: an4828 Date: Mon, 21 Aug 2017 11:05:08 -0400 Subject: Initial TCA commit into DCAEGEN2 Change-Id: I5f7f8af2a00419854cafc34b79277df60d1af095 Issue-ID: DCAEGEN2-53 Signed-off-by: an4828 --- .../domain/BaseDynamicPropertiesProvider.java | 69 +++++++++ .../analytics/model/domain/DCAEAnalyticsModel.java | 32 ++++ .../model/domain/DynamicPropertiesProvider.java | 56 +++++++ .../analytics/model/domain/cef/AlertAction.java | 32 ++++ .../apod/analytics/model/domain/cef/AlertType.java | 45 ++++++ .../analytics/model/domain/cef/BaseCEFModel.java | 41 ++++++ .../apod/analytics/model/domain/cef/CEFModel.java | 34 +++++ .../model/domain/cef/CommonEventHeader.java | 117 +++++++++++++++ .../analytics/model/domain/cef/Criticality.java | 31 ++++ .../apod/analytics/model/domain/cef/Event.java | 63 ++++++++ .../analytics/model/domain/cef/EventListener.java | 46 ++++++ .../analytics/model/domain/cef/EventSeverity.java | 36 +++++ .../domain/cef/MeasurementsForVfScalingFields.java | 57 ++++++++ .../model/domain/cef/PerformanceCounter.java | 65 +++++++++ .../apod/analytics/model/domain/cef/Priority.java | 32 ++++ .../domain/cef/ThresholdCrossingAlertFields.java | 161 +++++++++++++++++++++ .../analytics/model/domain/cef/VNicUsageArray.java | 79 ++++++++++ .../analytics/model/domain/policy/PolicyModel.java | 33 +++++ .../domain/policy/tca/BaseTCAPolicyModel.java | 37 +++++ .../model/domain/policy/tca/Direction.java | 68 +++++++++ .../policy/tca/MetricsPerFunctionalRole.java | 102 +++++++++++++ .../model/domain/policy/tca/TCAPolicy.java | 59 ++++++++ .../model/domain/policy/tca/TCAPolicyModel.java | 35 +++++ .../model/domain/policy/tca/Threshold.java | 114 +++++++++++++++ .../apod/analytics/model/facade/FacadeModel.java | 33 +++++ .../dcae/apod/analytics/model/facade/tca/AAI.java | 38 +++++ .../analytics/model/facade/tca/TCAFacadeModel.java | 31 ++++ .../analytics/model/facade/tca/TCAVESResponse.java | 49 +++++++ .../model/util/AnalyticsModelIOUtils.java | 137 ++++++++++++++++++ .../model/util/AnalyticsModelJsonUtils.java | 104 +++++++++++++ .../json/AnalyticsModelObjectMapperSupplier.java | 112 ++++++++++++++ .../model/util/json/CommonEventFormatModule.java | 84 +++++++++++ .../model/util/json/TCAFacadeModelModule.java | 49 +++++++ .../analytics/model/util/json/TCAPolicyModule.java | 61 ++++++++ .../mixin/BaseDynamicPropertiesProviderMixin.java | 61 ++++++++ .../analytics/model/util/json/mixin/JsonMixin.java | 31 ++++ .../util/json/mixin/cef/AlertActionMixin.java | 30 ++++ .../model/util/json/mixin/cef/AlertTypeMixin.java | 74 ++++++++++ .../util/json/mixin/cef/BaseCEFModelMixin.java | 33 +++++ .../json/mixin/cef/CommonEventHeaderMixin.java | 27 ++++ .../util/json/mixin/cef/CriticalityMixin.java | 30 ++++ .../util/json/mixin/cef/EventListenerMixin.java | 31 ++++ .../model/util/json/mixin/cef/EventMixin.java | 31 ++++ .../util/json/mixin/cef/EventSeverityMixin.java | 30 ++++ .../cef/MeasurementsForVfScalingFieldsMixin.java | 39 +++++ .../json/mixin/cef/PerformanceCounterMixin.java | 29 ++++ .../model/util/json/mixin/cef/PriorityMixin.java | 30 ++++ .../cef/ThresholdCrossingAlertFieldsMixin.java | 29 ++++ .../util/json/mixin/cef/VNicUsageArrayMixin.java | 48 ++++++ .../model/util/json/mixin/facade/tca/AAIMixin.java | 55 +++++++ .../facade/tca/VESCEFMessageResponseMixin.java | 56 +++++++ .../mixin/policy/tca/BaseTCAPolicyModelMixin.java | 30 ++++ .../util/json/mixin/policy/tca/DirectionMixin.java | 30 ++++ .../policy/tca/MetricsPerFunctionalRoleMixin.java | 28 ++++ .../util/json/mixin/policy/tca/TCAPolicyMixin.java | 28 ++++ .../util/json/mixin/policy/tca/ThresholdMixin.java | 44 ++++++ 56 files changed, 2966 insertions(+) create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/BaseDynamicPropertiesProvider.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/DCAEAnalyticsModel.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/DynamicPropertiesProvider.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/AlertAction.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/AlertType.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/BaseCEFModel.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/CEFModel.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/CommonEventHeader.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/Criticality.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/Event.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/EventListener.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/EventSeverity.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/MeasurementsForVfScalingFields.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/PerformanceCounter.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/Priority.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/ThresholdCrossingAlertFields.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/VNicUsageArray.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/PolicyModel.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/tca/BaseTCAPolicyModel.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/tca/Direction.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/tca/MetricsPerFunctionalRole.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/tca/TCAPolicy.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/tca/TCAPolicyModel.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/tca/Threshold.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/facade/FacadeModel.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/facade/tca/AAI.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/facade/tca/TCAFacadeModel.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/facade/tca/TCAVESResponse.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/AnalyticsModelIOUtils.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/AnalyticsModelJsonUtils.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/AnalyticsModelObjectMapperSupplier.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/CommonEventFormatModule.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/TCAFacadeModelModule.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/TCAPolicyModule.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/BaseDynamicPropertiesProviderMixin.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/JsonMixin.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/AlertActionMixin.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/AlertTypeMixin.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/BaseCEFModelMixin.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/CommonEventHeaderMixin.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/CriticalityMixin.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/EventListenerMixin.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/EventMixin.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/EventSeverityMixin.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/MeasurementsForVfScalingFieldsMixin.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/PerformanceCounterMixin.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/PriorityMixin.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/ThresholdCrossingAlertFieldsMixin.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/VNicUsageArrayMixin.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/facade/tca/AAIMixin.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/facade/tca/VESCEFMessageResponseMixin.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/BaseTCAPolicyModelMixin.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/DirectionMixin.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/MetricsPerFunctionalRoleMixin.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/TCAPolicyMixin.java create mode 100644 dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/ThresholdMixin.java (limited to 'dcae-analytics-model/src/main/java/org') diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/BaseDynamicPropertiesProvider.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/BaseDynamicPropertiesProvider.java new file mode 100644 index 0000000..4190587 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/BaseDynamicPropertiesProvider.java @@ -0,0 +1,69 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.domain; + +import lombok.Data; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + *

+ * Base Dynamic Provider provide functionality so that all the + * additional dynamic Properties can be accumalated in a map. + *

+ * + * @author Rajiv Singla . Creation Date: 11/5/2016. + */ +@Data +public abstract class BaseDynamicPropertiesProvider implements DynamicPropertiesProvider { + + /** + * All non-required properties should be captured in additional properties + * + * @param dynamicProperties Dynamic properties + * @return dynamic properties + */ + private Map dynamicProperties = new LinkedHashMap<>(); + + + /** + * Add a dynamic property to Common Event Format Entity + * + * @param propertyName property name + * @param propertyValue property value + */ + @Override + public void addDynamicProperties(String propertyName, Object propertyValue) { + dynamicProperties.put(propertyName, propertyValue); + } + + /** + * Determines if dynamic properties are present for the CEF Entity + * + * @return return true if Dynamic Properties are present + */ + public boolean isDynamicPropertiesPresent() { + return dynamicProperties.size() == 0; + } + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/DCAEAnalyticsModel.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/DCAEAnalyticsModel.java new file mode 100644 index 0000000..5bb017e --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/DCAEAnalyticsModel.java @@ -0,0 +1,32 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.domain; + +import java.io.Serializable; + +/** + *

+ * Marker Interface for all DCAE Analytics Model implementations + *

+ * @author Rajiv Singla . Creation Date: 11/5/2016. + */ +public interface DCAEAnalyticsModel extends Serializable { +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/DynamicPropertiesProvider.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/DynamicPropertiesProvider.java new file mode 100644 index 0000000..28b607a --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/DynamicPropertiesProvider.java @@ -0,0 +1,56 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.domain; + +import java.util.Map; + +/** + *

+ * Problem: Many Entities have dynamic properties as well as known properties. + * Known properites can be binded explicitly with all dynamic properties need + * to be captured also ensuring that there must not be any loss in information + * during deserialization / serialization process. + *

+ *

+ * This contract allows the deserialization mechanism to catch those dynamic properties + * in a Map so that deserialization mechanism will not loose any information and + * can be serialized back with no loss in dynamic properties information + *

+ * @author Rajiv Singla . Creation Date: 10/18/2016. + */ +public interface DynamicPropertiesProvider extends DCAEAnalyticsModel { + + + /** + * Adds dynamic properties in a Map object + * + * @param propertyName property name + * @param propertyValue property value + */ + void addDynamicProperties(String propertyName, Object propertyValue); + + /** + * Provides dynamic properties map + * + * @return dynamic properties map object + */ + Map getDynamicProperties(); +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/AlertAction.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/AlertAction.java new file mode 100644 index 0000000..654820b --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/AlertAction.java @@ -0,0 +1,32 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.domain.cef; + +/** + * Common Event Format Alert Action + * + * @author Rajiv Singla . Creation Date: 11/3/2016. + */ +public enum AlertAction implements CEFModel { + + CLEAR, CONT, SET; + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/AlertType.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/AlertType.java new file mode 100644 index 0000000..a20c75c --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/AlertType.java @@ -0,0 +1,45 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.domain.cef; + +/** + * + * @author Rajiv Singla . Creation Date: 11/3/2016. + */ +public enum AlertType implements CEFModel { + + CARD_ANOMALY("CARD-ANOMALY"), + ELEMENT_ANOMALY("ELEMENT-ANOMALY"), + INTERFACE_ANOMALY("INTERFACE-ANOMALY"), + SERVICE_ANOMALY("SERVICE-ANOMALY"), + UNKNOWN(null); + + private String name; + + AlertType(String name) { + this.name = name; + } + + public String getName() { + return name; + } + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/BaseCEFModel.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/BaseCEFModel.java new file mode 100644 index 0000000..bdba70f --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/BaseCEFModel.java @@ -0,0 +1,41 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.domain.cef; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.openecomp.dcae.apod.analytics.model.domain.BaseDynamicPropertiesProvider; + +/** + *

+ * Base CEF Model should be extended by all CEF Model Entities. + * By extending CEF Model all the additional dynamic Properties + * can be accumalated in a map. + *

+ * + * @author Rajiv Singla . Creation Date: 10/18/2016. + */ +@Data +@EqualsAndHashCode(callSuper = true) +public abstract class BaseCEFModel extends BaseDynamicPropertiesProvider implements CEFModel { + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/CEFModel.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/CEFModel.java new file mode 100644 index 0000000..a98b634 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/CEFModel.java @@ -0,0 +1,34 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.domain.cef; + +import org.openecomp.dcae.apod.analytics.model.domain.DCAEAnalyticsModel; + +/** + *

+ * Marker interface for all DCAE Analytics Common Event Format Model implementations + *

+ * @author Rajiv Singla . Creation Date: 10/17/2016. + */ +public interface CEFModel extends DCAEAnalyticsModel { + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/CommonEventHeader.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/CommonEventHeader.java new file mode 100644 index 0000000..7cc45d7 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/CommonEventHeader.java @@ -0,0 +1,117 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.domain.cef; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * Fields common to all Events + *

+ * @author Rajiv Singla . Creation Date: 10/17/2016. + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class CommonEventHeader extends BaseCEFModel { + + + private static final long serialVersionUID = 1L; + + /** + * The eventing domain associated with this event + * + * @param domain New value for domain + * @return The eventing domain associated with this event + */ + private String domain; + + /** + * Event key that is unique to the event source + * + * @param eventId New value for event key + * @return Event key that is unique to the event source + */ + private String eventId; + + /** + * Function of the source e.g. eNodeB, MME, PCRF + * + * @param functionalRole New value for functional Role + * @return Function of the source e.g. eNodeB, MME, PCRF + */ + private String functionalRole; + + + /** + * The latest unix time aka epoch time associated with the event from any component--as microseconds elapsed since + * 1 Jan 1970 not including leap seconds + * + * @param lastEpochMicrosec New value for last Epoc Microsec + * @return The latest unix time associated with the event from any component + */ + private Long lastEpochMicrosec; + + + /** + * Processing Priority + * + * @param priority New value for processing Priority + * @return Processing Priority + */ + private Priority priority; + + + /** + * Name of the entity reporting the event, for example, an OAM VM + * + * @param reportingEntityName New value for reporting Entity Name + * @return Name of the entity reporting the event, for example, an OAM VM + */ + private String reportingEntityName; + + + /** + * Ordering of events communicated by an event source instance or 0 if not needed + * + * @param sequence New value for Sequence + * @return Ordering of events communicated by an event source instance or 0 if not needed + */ + private Integer sequence; + + + /** + * Name of the entity experiencing the event issue + * + * @param sourceName New value for source name + * @return Name of the entity experiencing the event issue + */ + private String sourceName; + + + /** + * the earliest unix time aka epoch time associated with the event from any component--as microseconds elapsed + * since 1 Jan 1970 not including leap seconds + * + * @param startEpochMicrosec New value for start Epoc Microsec + * @return The earliest unix time associated with the event from any component + */ + private Long startEpochMicrosec; +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/Criticality.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/Criticality.java new file mode 100644 index 0000000..48a9411 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/Criticality.java @@ -0,0 +1,31 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.domain.cef; + +/** + * Performance Criticality + * + * @author Rajiv Singla . Creation Date: 11/3/2016. + */ +public enum Criticality implements CEFModel { + + CRIT, MAJ, UNKNOWN; +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/Event.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/Event.java new file mode 100644 index 0000000..5fe59a4 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/Event.java @@ -0,0 +1,63 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.domain.cef; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * Generic Event Format + *

+ * @author Rajiv Singla . Creation Date: 10/17/2016. + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class Event extends BaseCEFModel { + + + private static final long serialVersionUID = 1L; + + /** + * Fields common to all Events + * + * @param commonEventHeader New value for common Event Header + * @return Fields common to all Events + */ + private CommonEventHeader commonEventHeader; + + /** + * MeasurementsForVfScaling fields + * + * @param measurementsForVfScalingFields New value for MeasurementsForVfScaling + * @return MeasurementsForVfScaling fields + */ + private MeasurementsForVfScalingFields measurementsForVfScalingFields; + + /** + * Threshold crossing Fields + * + * @param thresholdCrossingAlertFields New value for Threshold crossing Fields + * @return Threshold crossing Fields + */ + private ThresholdCrossingAlertFields thresholdCrossingAlertFields; + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/EventListener.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/EventListener.java new file mode 100644 index 0000000..df97ebe --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/EventListener.java @@ -0,0 +1,46 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.domain.cef; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * Common Event Format - Base Event Listener + *

+ * @author Rajiv Singla . Creation Date: 10/17/2016. + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class EventListener extends BaseCEFModel { + + + private static final long serialVersionUID = 1L; + /** + * Common Event Format - Event + * + * @param event New value for Event + * @return Common Event Format Event + */ + private Event event; + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/EventSeverity.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/EventSeverity.java new file mode 100644 index 0000000..1021cfb --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/EventSeverity.java @@ -0,0 +1,36 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.domain.cef; + +/** + * CEF Event severity or priority + * + * @author Rajiv Singla . Creation Date: 11/3/2016. + */ +public enum EventSeverity implements CEFModel { + + //NOTE: enum order must not be changed. Events severity is ordered from high to low + CRITICAL, + MAJOR, + MINOR, + WARNING, + NORMAL; +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/MeasurementsForVfScalingFields.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/MeasurementsForVfScalingFields.java new file mode 100644 index 0000000..a6bf113 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/MeasurementsForVfScalingFields.java @@ -0,0 +1,57 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.domain.cef; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * Common Event Format - MeasurementsForVfScaling fields + *

+ * @author Rajiv Singla . Creation Date: 10/17/2016. + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class MeasurementsForVfScalingFields extends BaseCEFModel { + + + private static final long serialVersionUID = 1L; + + /** + * Interval over which measurements are being reported in seconds + * + * @param measurementInterval New value for measurement Interval + * @return Interval over which measurements are being reported in seconds + */ + private Long measurementInterval; + + /** + * Virtual Network Card Usage Array + * + * @param vNicUsageArray New value for Virtual Network Card Usage Array + * @return Virtual Network Card Usage Array + */ + private List vNicUsageArray; + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/PerformanceCounter.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/PerformanceCounter.java new file mode 100644 index 0000000..e84c852 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/PerformanceCounter.java @@ -0,0 +1,65 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.domain.cef; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * Common Event Format - Performance PerformanceCounter + * + * @author Rajiv Singla . Creation Date: 11/3/2016. + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class PerformanceCounter extends BaseCEFModel { + + private static final long serialVersionUID = 1L; + /** + * Performance Counter Criticality + * + * @param criticality New value for Criticality + * @return Performance Counter Criticality + */ + private Criticality criticality; + /** + * Performance Counter Name + * + * @param name New value for Performance counter name + * @return Performance Counter Name + */ + private String name; + /** + * Performance Counter Threshold Crossed + * + * @param thresholdCrossed New value for Performance Counter Threshold Crossed + * @return Performance Counter Threshold Crossed + */ + private String thresholdCrossed; + /** + * Performance Counter Value + * + * @param value New Performance Counter Value + * @return Performance Counter Value + */ + private String value; + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/Priority.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/Priority.java new file mode 100644 index 0000000..3cfce75 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/Priority.java @@ -0,0 +1,32 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.domain.cef; + +/** + * Common Event Format - Event processing priority + *

+ * @author Rajiv Singla . Creation Date: 10/17/2016. + */ +public enum Priority implements CEFModel { + + High, Medium, Normal, Low; + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/ThresholdCrossingAlertFields.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/ThresholdCrossingAlertFields.java new file mode 100644 index 0000000..340b788 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/ThresholdCrossingAlertFields.java @@ -0,0 +1,161 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.domain.cef; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * Common Event Format - Fields Specific to threshold crossing alert events + * + * @author Rajiv Singla . Creation Date: 11/3/2016. + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class ThresholdCrossingAlertFields extends BaseCEFModel { + + private static final long serialVersionUID = 1L; + + /** + * Additional Performance counters + * + * @param additionalParameters New value for Additional Performance counters + * @return Additional Performance counters + */ + private List additionalParameters; + + /** + * Event Action + * + * @param alertAction New Event Action + * @return Event Action + */ + private AlertAction alertAction; + + /** + * Unique short alert description such as IF-SHUB-ERRDROP + * + * @param alertDescription New value for Unique short alert description + * @return Unique short alert description + */ + private String alertDescription; + + /** + * Alert type + * + * @param alertType New value for Alert Type + * @return Alert Type + */ + private AlertType alertType; + + /** + * Calculated API value (if applicable) + * + * @param alertValue New Calculated API value + * @return Calculated API value (if applicable) + */ + private String alertValue; + + /** + * List of eventIds associated with the event being reported + * + * @param associatedAlertIdList New value for eventIds associated with the event + * @return List of eventIds associated with the event being reported + */ + private List associatedAlertIdList; + + /** + * Time when the performance collector picked up the data; with RFC 2822 compliant format: + * ‘Sat, 13 Mar 2010 11:29:05 -0800’ + * + * @param collectionTimestamp Set new value for time when the performance collector picked up the data + * @return Time when the performance collector picked up the data + */ + private String collectionTimestamp; + + /** + * Specific performance collector instance used + * + * @param dataCollector New value for specific performance collector instance used + * @return Specific performance collector instance used + */ + private String dataCollector; + + /** + * Type of network element - internal field + * + * @param elementType New value for type of network element - internal field + * @return Type of network element - internal field + */ + private String elementType; + + /** + * Event severity or priority + * + * @param eventSeverity New value for event severity or priority + * @return Event severity or priority + */ + private EventSeverity eventSeverity; + + /** + * Time closest to when the measurement was made; with RFC 2822 compliant format: ‘Sat, 13 Mar 2010 11:29:05 -0800’ + * + * @param eventStartTimestamp New value for time closest to when the measurement was made + * @return Time closest to when the measurement was made + */ + private String eventStartTimestamp; + + /** + * Physical or logical port or card (if applicable) + * + * @param interfaceName New value for Physical or logical port or card (if applicable) + * @return Physical or logical port or card (if applicable) + */ + private String interfaceName; + + /** + * Network name - internal field + * + * @param networkService New value for network name - internal field + * @return Network name - internal field + */ + private String networkService; + + /** + * Possible Root Cause (reserved for future use) + * + * @param possibleRootCause New value for possible root cause (reserved for future) + * @return Possible Root Cause (reserved for future use) + */ + private String possibleRootCause; + + /** + * Version of the thresholdCrossingAlertFields block + * + * @param thresholdCrossingFieldsVersion New value for version of the thresholdCrossingAlertFields block + * @return Version of the thresholdCrossingAlertFields block + */ + private Integer thresholdCrossingFieldsVersion; + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/VNicUsageArray.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/VNicUsageArray.java new file mode 100644 index 0000000..e364ca0 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/cef/VNicUsageArray.java @@ -0,0 +1,79 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.domain.cef; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * Usage of an array of virtual network interface cards + *

+ * @author Rajiv Singla . Creation Date: 10/17/2016. + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class VNicUsageArray extends BaseCEFModel { + + + private static final long serialVersionUID = 1L; + + /** + * Virtual Network Card - Bytes In + * + * @param bytesIn New value for Virtual Network Card - Bytes In + * @return Virtual Network Card - Bytes In + */ + private Long bytesIn; + + /** + * Virtual Network Card - Bytes Out + * + * @param bytesOut New value for Virtual Network Card - Bytes Out + * @return Virtual Network Card - Bytes Out + */ + private Long bytesOut; + + /** + * Virtual Network Card - Packets In + * + * @param packetsIn New value for Virtual Network Card - Packets In + * @return Virtual Network Card - Packets In + */ + private Long packetsIn; + + /** + * Virtual Network Card - Packets Out + * + * @param packetsOut New value for Virtual Network Card - Packets Out + * @return Virtual Network Card - Packets Out + */ + private Long packetsOut; + + /** + * Virtual Network Card Identifier + * + * @param vNicIdentifier New value for Virtual Network Card Identifier + * @return Virtual Network Card Identifier + */ + private String vNicIdentifier; + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/PolicyModel.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/PolicyModel.java new file mode 100644 index 0000000..b20f179 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/PolicyModel.java @@ -0,0 +1,33 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.domain.policy; + +import org.openecomp.dcae.apod.analytics.model.domain.DCAEAnalyticsModel; + +/** + *

+ * Marker Interface all DCAE Analytics Policy Model implementations + *

+ * + * @author Rajiv Singla . Creation Date: 11/5/2016. + */ +public interface PolicyModel extends DCAEAnalyticsModel { +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/tca/BaseTCAPolicyModel.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/tca/BaseTCAPolicyModel.java new file mode 100644 index 0000000..117b75e --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/tca/BaseTCAPolicyModel.java @@ -0,0 +1,37 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.domain.policy.tca; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.openecomp.dcae.apod.analytics.model.domain.BaseDynamicPropertiesProvider; + +/** + *

+ * A Base TCA Policy Model which accumulates all dynamic properties in a dynamicProperties Map + *

+ * + * @author Rajiv Singla . Creation Date: 11/5/2016. + */ +@Data +@EqualsAndHashCode(callSuper = true) +public abstract class BaseTCAPolicyModel extends BaseDynamicPropertiesProvider implements TCAPolicyModel { +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/tca/Direction.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/tca/Direction.java new file mode 100644 index 0000000..dc85d97 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/tca/Direction.java @@ -0,0 +1,68 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.domain.policy.tca; + +import javax.annotation.Nonnull; + +/** + *

+ * Enum for Threshold Direction + *

+ * @author Rajiv Singla . Creation Date: 11/5/2016. + */ +public enum Direction implements TCAPolicyModel { + + LESS { + @Override + public Boolean operate(@Nonnull Long value1, @Nonnull Long value2) { + return value1 < value2; + } + }, + LESS_OR_EQUAL { + @Override + public Boolean operate(@Nonnull Long value1, @Nonnull Long value2) { + return value1 <= value2; + } + }, + GREATER { + @Override + public Boolean operate(@Nonnull Long value1, @Nonnull Long value2) { + return value1 > value2; + } + }, + GREATER_OR_EQUAL { + @Override + public Boolean operate(@Nonnull Long value1, @Nonnull Long value2) { + return value1 >= value2; + } + }; + + /** + * Configure logic for a particular Direction + * + * @param value1 left operand for Direction operation + * @param value2 right operand for Direction operation + * + * @return result of operation for the direction logic + */ + public abstract Boolean operate(@Nonnull Long value1, @Nonnull Long value2); + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/tca/MetricsPerFunctionalRole.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/tca/MetricsPerFunctionalRole.java new file mode 100644 index 0000000..4edbac1 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/tca/MetricsPerFunctionalRole.java @@ -0,0 +1,102 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.domain.policy.tca; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.ArrayList; +import java.util.List; + +/** + * TCA Metrics that need to applied to each functional Role + * + * @author Rajiv Singla . Creation Date: 11/5/2016. + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class MetricsPerFunctionalRole extends BaseTCAPolicyModel{ + + + private static final long serialVersionUID = 1L; + + /** + * Functional Role to which TCA Policy needs to applied. + * + * @param functionalRole New value for Functional Role to which TCA Policy needs to applied + * @return Functional Role to which TCA Policy needs to applied + */ + private String functionalRole; + + /** + * Policy Scope + * + * @param policyScope New value for Policy Scope + * @return Policy Scope + */ + private String policyScope; + + /** + * Policy Name + * + * @param policyName New value for Policy Name + * @return Policy Name + */ + private String policyName; + + /** + * Policy Version + * + * @param policyVersion New value for Policy Version + * @return Policy Version + */ + private String policyVersion; + + /** + * Policy Thresholds + * + * @param thresholds New value for Policy Thresholds + * @return Policy Thresholds + */ + private List thresholds; + + + /** + * Creates a copy of given {@link MetricsPerFunctionalRole} + * + * @param metricsPerFunctionalRole metrics Per functional role that need to copied + * + * @return copy of new metrics per function role with values copied from given metrics per functional role + */ + public static MetricsPerFunctionalRole copy(final MetricsPerFunctionalRole metricsPerFunctionalRole) { + final MetricsPerFunctionalRole newMetricsPerFunctionalRole = new MetricsPerFunctionalRole(); + newMetricsPerFunctionalRole.setFunctionalRole(metricsPerFunctionalRole.getFunctionalRole()); + newMetricsPerFunctionalRole.setPolicyScope(metricsPerFunctionalRole.getPolicyScope()); + newMetricsPerFunctionalRole.setPolicyName(metricsPerFunctionalRole.getPolicyName()); + newMetricsPerFunctionalRole.setPolicyVersion(metricsPerFunctionalRole.getPolicyVersion()); + if (metricsPerFunctionalRole.getThresholds() != null) { + newMetricsPerFunctionalRole.setThresholds(new ArrayList<>(metricsPerFunctionalRole.getThresholds())); + } + return newMetricsPerFunctionalRole; + } + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/tca/TCAPolicy.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/tca/TCAPolicy.java new file mode 100644 index 0000000..b62d91d --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/tca/TCAPolicy.java @@ -0,0 +1,59 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.domain.policy.tca; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.openecomp.dcae.apod.analytics.model.domain.cef.CommonEventHeader; + +import java.util.List; + +/** + *

+ * TCA (Threshold Crossing Alert) Root + *

+ * + * @author Rajiv Singla . Creation Date: 11/5/2016. + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class TCAPolicy extends BaseTCAPolicyModel { + + private static final long serialVersionUID = 1L; + + /** + * TCA Policy domain which is associated with TCA incoming CEF message {@link CommonEventHeader#getDomain()} + * + * @param domain New value for domain + * @return Policy domain which is associated with incoming CEF message + */ + private String domain; + + /** + * Contains TCA Policy metrics that needs to be applied to each Functional Role + * + * @param metricsPerFunctionalRole New value for metrics that needs to be applied to each Functional Role + * @return Contains TCA Policy metrics that needs to be applied to each Functional Role + */ + private List metricsPerFunctionalRole; + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/tca/TCAPolicyModel.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/tca/TCAPolicyModel.java new file mode 100644 index 0000000..18cd8a5 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/tca/TCAPolicyModel.java @@ -0,0 +1,35 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.domain.policy.tca; + +import org.openecomp.dcae.apod.analytics.model.domain.policy.PolicyModel; + +/** + *

+ * Marker interface for all TCA Policy Models + *

+ * + * @author Rajiv Singla . Creation Date: 11/5/2016. + */ +public interface TCAPolicyModel extends PolicyModel { + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/tca/Threshold.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/tca/Threshold.java new file mode 100644 index 0000000..b23d109 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/domain/policy/tca/Threshold.java @@ -0,0 +1,114 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.domain.policy.tca; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.openecomp.dcae.apod.analytics.model.domain.cef.EventSeverity; + +/** + * + * @author Rajiv Singla . Creation Date: 11/5/2016. + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class Threshold extends BaseTCAPolicyModel { + + private static final long serialVersionUID = 1L; + + /** + * Closed Loop Control Name + * + * @param closedLoopControlName New value for Closed Loop Control Name + * @return Closed Loop Control Name + */ + private String closedLoopControlName; + + /** + * Threshold Version + * + * @param version New value for Threshold Version + * @return Threshold Version + */ + private String version; + + /** + * Path of the field inside Common Event Format which needs to be monitored by TCA App + * for threshold crossing + * + * @param fieldPath New value for Path of the field inside CEF which needs to be monitored for TCA + * @return Path of the field inside Common Event Format which needs to be monitored by TCA App + */ + private String fieldPath; + + /** + * Threshold Value + * + * @param thresholdValue New value for Threshold Value + * @return Threshold Value + */ + private Long thresholdValue; + + /** + * Direction of threshold + * + * @param direction New value for Direction of threshold + * @return Direction of threshold + */ + private Direction direction; + + /** + * Severity of Event based on CEF Convention + * + * @param severity New value for Severity of Event based on CEF Convention + * @return Severity of Event based on CEF Convention + */ + private EventSeverity severity; + + + /** + * Actual Field value that caused the threshold violation. Ignored for deserialization + * + * + * @param actualFieldValue new value value for actual Field value that caused the violation + * @return actual field value that caused the violation + */ + private Long actualFieldValue; + + /** + * Creates a copy of give {@link Threshold} + * + * @param threshold threshold that need to be copied + * + * @return new instance of threshold with copied value for give threshold + */ + public static Threshold copy(final Threshold threshold) { + final Threshold newThreshold = new Threshold(); + newThreshold.setClosedLoopControlName(threshold.getClosedLoopControlName()); + newThreshold.setFieldPath(threshold.getFieldPath()); + newThreshold.setThresholdValue(threshold.getThresholdValue()); + newThreshold.setDirection(threshold.getDirection()); + newThreshold.setSeverity(threshold.getSeverity()); + newThreshold.setActualFieldValue(threshold.getActualFieldValue()); + return newThreshold; + } + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/facade/FacadeModel.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/facade/FacadeModel.java new file mode 100644 index 0000000..4369cd7 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/facade/FacadeModel.java @@ -0,0 +1,33 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.facade; + +import java.io.Serializable; + +/** + *

+ * Marker Interface for all Facade (outgoing) DCAE Analytics Model + *

+ * + * @author Rajiv Singla . Creation Date: 11/9/2016. + */ +public interface FacadeModel extends Serializable { +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/facade/tca/AAI.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/facade/tca/AAI.java new file mode 100644 index 0000000..dcfb8f7 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/facade/tca/AAI.java @@ -0,0 +1,38 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.facade.tca; + +import lombok.Data; + +/** + * + * @author Rajiv Singla . Creation Date: 11/9/2016. + */ +@Data +public class AAI implements TCAFacadeModel { + + private static final long serialVersionUID = 1L; + + private String genericVNFId; + + private String genericServerId; + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/facade/tca/TCAFacadeModel.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/facade/tca/TCAFacadeModel.java new file mode 100644 index 0000000..ca63711 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/facade/tca/TCAFacadeModel.java @@ -0,0 +1,31 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.facade.tca; + +import org.openecomp.dcae.apod.analytics.model.facade.FacadeModel; + +/** + * Marker Interface for all TCA Facade Models + * + * @author Rajiv Singla . Creation Date: 11/9/2016. + */ +public interface TCAFacadeModel extends FacadeModel { +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/facade/tca/TCAVESResponse.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/facade/tca/TCAVESResponse.java new file mode 100644 index 0000000..78a2c96 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/facade/tca/TCAVESResponse.java @@ -0,0 +1,49 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.facade.tca; + +import lombok.Data; + +/** + * Response generated by TCA for VES Message + * + * @author Rajiv Singla . Creation Date: 11/9/2016. + */ +@Data +public class TCAVESResponse implements TCAFacadeModel { + + private static final long serialVersionUID = 1L; + + private String closedLoopControlName; + private String version; + private String requestID; + private Long closedLoopAlarmStart; + private String closedLoopEventClient; + private String targetType; + private AAI aai; + private String target; + private String from; + private String policyScope; + private String policyName; + private String policyVersion; + private String closedLoopEventStatus; + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/AnalyticsModelIOUtils.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/AnalyticsModelIOUtils.java new file mode 100644 index 0000000..d6d5dc2 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/AnalyticsModelIOUtils.java @@ -0,0 +1,137 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.util; + +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.Charset; +import java.util.Properties; + +/** + * Utility class containing methods for IO related operations + *

+ * @author Rajiv Singla . Creation Date: 10/17/2016. + */ +public abstract class AnalyticsModelIOUtils extends AnalyticsModelJsonUtils { + + private static final Logger LOG = LoggerFactory.getLogger(AnalyticsModelIOUtils.class); + + /** + * Parses given valid JSON file Location to object of given binding class type. + * + * @param fileLocation valid JSON File Location + * @param bindingClass class Type of Binding object + * + * @param binding Class Type + * + * @return binding Class Object which properties populated from JSON File Location + */ + public static final T convertToJsonObject(String fileLocation, Class bindingClass) { + + // Load Resource from give path + final InputStream resourceAsStream = loadResourceAsStream(fileLocation); + + // If resource is null throw an exception + if (resourceAsStream == null) { + final String errorMessage = String.format("Invalid File location: %s", fileLocation); + throw new RuntimeException(errorMessage, new FileNotFoundException(errorMessage)); + } + + // Parse input stream + try (InputStreamReader inputStreamReader = new InputStreamReader(resourceAsStream, Charset.forName("UTF-8"))) { + + return ANALYTICS_MODEL_OBJECT_MAPPER.readValue(inputStreamReader, bindingClass); + + } catch (JsonMappingException | JsonParseException e) { + + // If parsing fails due to Invalid Json or Json IO Issues throw an exception + final String errorMessage = String.format("Json parsing error while parsing Json File location: %s", + fileLocation); + + LOG.error(errorMessage); + throw new RuntimeException(errorMessage, e); + + } catch (IOException e) { + + // If parsing fails due to IO Issues throw an exception + final String errorMessage = String.format("IO Error while parsing Json File location: %s", fileLocation); + LOG.error(errorMessage); + throw new RuntimeException(errorMessage, e); + + } + + } + + /** + * Loads properties from a given file location. Throws {@link RuntimeException} if file location is invalid + * or there were exception when loading properties + * + * @param propertiesFileLocation path string for properties file + * @param properties properties object that needs to be populated with give file properties + * + * @return properties object with populated properties from properties file + * + */ + public static Properties loadPropertiesFile(String propertiesFileLocation, final Properties properties) { + + // Load Resource from give properties file path + final InputStream propertiesFileInputStream = loadResourceAsStream(propertiesFileLocation); + + // If properties file is not present throw an exception + if (propertiesFileInputStream == null) { + final String errorMessage = String.format("Invalid Properties File at location: %s", + propertiesFileLocation); + throw new RuntimeException(errorMessage, new FileNotFoundException(errorMessage)); + } + + try { + properties.load(propertiesFileInputStream); + } catch (IOException e) { + final String errorMessage = String.format("IO Exception while reading Properties File at location: %s", + propertiesFileLocation); + throw new RuntimeException(errorMessage, e); + } + + return properties; + + } + + /** + * Loads Input file from the given classpath file location and returns file InputStream + * + * @param fileLocation classpath file location + * + * @return {@link InputStream} for classpath file + */ + public static InputStream loadResourceAsStream(String fileLocation) { + // Load Resource from give path + return Thread.currentThread().getContextClassLoader().getResourceAsStream(fileLocation); + } + + +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/AnalyticsModelJsonUtils.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/AnalyticsModelJsonUtils.java new file mode 100644 index 0000000..f6b9dc9 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/AnalyticsModelJsonUtils.java @@ -0,0 +1,104 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.util; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.base.Suppliers; +import org.openecomp.dcae.apod.analytics.model.util.json.AnalyticsModelObjectMapperSupplier; + +import java.io.IOException; +import java.io.InputStream; + +/** + * + * @author Rajiv Singla . Creation Date: 11/7/2016. + */ +public abstract class AnalyticsModelJsonUtils { + + /** + * Object mapper to be used for all TCA Json Parsing + */ + protected static final ObjectMapper ANALYTICS_MODEL_OBJECT_MAPPER = + Suppliers.memoize(new AnalyticsModelObjectMapperSupplier()).get(); + + + /** + * Converts Input Stream to given type reference object + * + * @param inputStream input stream + * @param valueTypeRef type reference + * @param type of type reference + * + * @return parsed json object + * + * @throws IOException IO Exception + */ + public static T readValue(InputStream inputStream, TypeReference valueTypeRef) throws IOException { + return ANALYTICS_MODEL_OBJECT_MAPPER.readValue(inputStream, valueTypeRef); + } + + + /** + * Converts Input Stream to given target class object + * + * @param inputStream input stream + * @param targetClass target class type + * @param type of class + * + * @return parsed json object + * + * @throws IOException IO Exception + */ + public static T readValue(InputStream inputStream, Class targetClass) throws IOException { + return ANALYTICS_MODEL_OBJECT_MAPPER.readValue(inputStream, targetClass); + } + + + /** + * Converts given object to JSON string + * + * @param value object that needs to converted to json string + * + * @return json string + * @throws JsonProcessingException Json Processing exception + */ + public static String writeValueAsString(Object value) throws JsonProcessingException { + return ANALYTICS_MODEL_OBJECT_MAPPER.writeValueAsString(value); + } + + + /** + * Method to deserialize JSON content from given JSON content String. + * + * @param jsonString JSON String + * @param objectClass target object class + * @param object class type + * + * @return converted Object from JSON String + * + * @throws IOException IO Exception + */ + public static T readValue(final String jsonString, final Class objectClass) throws IOException { + return ANALYTICS_MODEL_OBJECT_MAPPER.readValue(jsonString, objectClass); + } +} diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/AnalyticsModelObjectMapperSupplier.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/AnalyticsModelObjectMapperSupplier.java new file mode 100644 index 0000000..75561a8 --- /dev/null +++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/AnalyticsModelObjectMapperSupplier.java @@ -0,0 +1,112 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.model.util.json; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.base.Supplier; +import com.jayway.jsonpath.Configuration; +import com.jayway.jsonpath.JsonPath; +import com.jayway.jsonpath.Option; +import com.jayway.jsonpath.spi.json.JacksonJsonProvider; +import com.jayway.jsonpath.spi.json.JsonProvider; +import com.jayway.jsonpath.spi.mapper.JacksonMappingProvider; +import com.jayway.jsonpath.spi.mapper.MappingProvider; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; + +import java.util.EnumSet; +import java.util.Set; + +/** + *

+ * {@link Supplier} that can be used by clients to get Object Mapper which specializes + * in serialize and deserialize - DCAE Analytics Model JSON Objects. Clients can + * choose to memoize this Supplier for performance enhancements + *
+ * NOTE: This supplier also setups up {@link JsonPath} default + * config to make use of this Supplier object mapper + *

+ * @author Rajiv Singla . Creation Date: 11/10/2016. + */ +@SuppressFBWarnings("SIC_INNER_SHOULD_BE_STATIC_ANON") +public class AnalyticsModelObjectMapperSupplier implements Supplier { + + @Override + public ObjectMapper get() { + + final ObjectMapper objectMapper = new ObjectMapper(); + + // Serialize null values + objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + + // Don't fail on unknown properties + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + // Register Common Event Format Module + objectMapper.registerModule(new CommonEventFormatModule()); + // Register TCA Policy Module + objectMapper.registerModule(new TCAPolicyModule()); + // Register TCA Facade Module + objectMapper.registerModule(new TCAFacadeModelModule()); + + + // Setup JsonPath default config + setupJsonPathDefaultConfig(objectMapper); + + return objectMapper; + } + + + /** + * Setups up default Config for {@link JsonPath} + * + * @param objectMapper Jackson object mapper + */ + private void setupJsonPathDefaultConfig(final ObjectMapper objectMapper) { + + Configuration.setDefaults(new Configuration.Defaults() { + + private final JsonProvider jsonProvider = new JacksonJsonProvider(objectMapper); + private final MappingProvider mappingProvider = new JacksonMappingProvider(objectMapper); + + @Override + public JsonProvider jsonProvider() { + return jsonProvider; + } + + @Override + public MappingProvider mappingProvider() { + return mappingProvider; + } + + @Override + public Set