2 * ===============================LICENSE_START======================================
\r
4 * ================================================================================
\r
5 * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
\r
6 * ================================================================================
\r
7 * Licensed under the Apache License, Version 2.0 (the "License");
\r
8 * you may not use this file except in compliance with the License.
\r
9 * You may obtain a copy of the License at
\r
11 * http://www.apache.org/licenses/LICENSE-2.0
\r
13 * Unless required by applicable law or agreed to in writing, software
\r
14 * distributed under the License is distributed on an "AS IS" BASIS,
\r
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
16 * See the License for the specific language governing permissions and
\r
17 * limitations under the License.
\r
18 * ============================LICENSE_END===========================================
\r
21 package org.openecomp.dcae.apod.analytics.cdap.common.persistance.tca;
\r
23 import co.cask.cdap.api.data.schema.Schema;
\r
24 import co.cask.cdap.api.data.schema.UnsupportedTypeException;
\r
25 import co.cask.cdap.api.dataset.DatasetProperties;
\r
26 import co.cask.cdap.api.dataset.lib.IndexedTable;
\r
27 import co.cask.cdap.api.dataset.lib.ObjectMappedTable;
\r
28 import co.cask.cdap.api.dataset.lib.ObjectMappedTableProperties;
\r
29 import com.google.common.base.Joiner;
\r
30 import com.google.common.collect.ImmutableList;
\r
31 import org.openecomp.dcae.apod.analytics.cdap.common.CDAPComponentsConstants;
\r
32 import org.openecomp.dcae.apod.analytics.common.exception.DCAEAnalyticsRuntimeException;
\r
33 import org.openecomp.dcae.apod.analytics.common.utils.PersistenceUtils;
\r
34 import org.openecomp.dcae.apod.analytics.model.domain.cef.EventListener;
\r
35 import org.openecomp.dcae.apod.analytics.model.domain.policy.tca.MetricsPerEventName;
\r
36 import org.openecomp.dcae.apod.analytics.model.domain.policy.tca.Threshold;
\r
37 import org.openecomp.dcae.apod.analytics.model.facade.tca.TCAVESResponse;
\r
38 import org.slf4j.Logger;
\r
39 import org.slf4j.LoggerFactory;
\r
41 import java.util.Date;
\r
42 import java.util.List;
\r
44 import static org.openecomp.dcae.apod.analytics.common.utils.PersistenceUtils.TABLE_ROW_KEY_COLUMN_NAME;
\r
47 * Utility methods to persist TCA Alerts Abatement information
\r
49 * @author Rajiv Singla . Creation Date: 9/11/2017.
\r
51 public abstract class TCAAlertsAbatementPersister {
\r
53 private static final Logger LOG = LoggerFactory.getLogger(TCAAlertsAbatementPersister.class);
\r
55 private static final Joiner KEY_JOINER = Joiner.on(PersistenceUtils.ROW_KEY_DELIMITER);
\r
57 private TCAAlertsAbatementPersister() {
\r
58 // private constructor
\r
62 * Creates {@link DatasetProperties} for Alerts Table
\r
64 * @param timeToLiveSeconds alerts table Time to Live
\r
66 * @return Alerts Abatement table properties
\r
68 public static DatasetProperties getDatasetProperties(final int timeToLiveSeconds) {
\r
70 return ObjectMappedTableProperties.builder()
\r
71 .setType(TCAAlertsAbatementEntity.class)
\r
72 .setRowKeyExploreName(TABLE_ROW_KEY_COLUMN_NAME)
\r
73 .setRowKeyExploreType(Schema.Type.STRING)
\r
74 .add(IndexedTable.PROPERTY_TTL, timeToLiveSeconds)
\r
75 .setDescription(CDAPComponentsConstants.TCA_FIXED_ALERTS_ABATEMENT_DESCRIPTION_TABLE)
\r
77 } catch (UnsupportedTypeException e) {
\r
78 final String errorMessage = "Unable to convert TCAAlertsAbatementEntity class to Schema";
\r
79 throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, e);
\r
84 public static void persist(final EventListener eventListener,
\r
85 final MetricsPerEventName violatedMetricsPerEventName,
\r
86 final TCAVESResponse tcavesResponse,
\r
87 final String abatementTS,
\r
88 final ObjectMappedTable<TCAAlertsAbatementEntity> tcaAlertsAbatementTable) {
\r
89 final String abatementTableKey = createKey(eventListener, violatedMetricsPerEventName);
\r
91 final long currentTimestamp = new Date().getTime();
\r
92 final String requestID = tcavesResponse.getRequestID();
\r
93 final TCAAlertsAbatementEntity tcaAlertsAbatementEntity = new TCAAlertsAbatementEntity(currentTimestamp,
\r
94 requestID, abatementTS);
\r
95 tcaAlertsAbatementTable.write(abatementTableKey, tcaAlertsAbatementEntity);
\r
97 LOG.debug("Persisted AlertsAbatementEntity: {} with Key: {}", tcaAlertsAbatementEntity, abatementTableKey);
\r
101 public static TCAAlertsAbatementEntity lookUpByKey(final EventListener eventListener,
\r
102 final MetricsPerEventName violatedMetricsPerEventName,
\r
103 final ObjectMappedTable<TCAAlertsAbatementEntity>
\r
104 tcaAlertsAbatementTable) {
\r
105 final String abatementTableKey = createKey(eventListener, violatedMetricsPerEventName);
\r
106 return tcaAlertsAbatementTable.read(abatementTableKey);
\r
110 public static String createKey(final EventListener eventListener,
\r
111 final MetricsPerEventName violatedMetricsPerEventName) {
\r
112 // no null check required as all are required fields
\r
113 final String eventName = violatedMetricsPerEventName.getEventName();
\r
114 final String sourceName = eventListener.getEvent().getCommonEventHeader().getSourceName();
\r
115 final String reportingEntityName = eventListener.getEvent().getCommonEventHeader().getReportingEntityName();
\r
116 // violated threshold will always be present
\r
117 final Threshold violatedThreshold = violatedMetricsPerEventName.getThresholds().get(0);
\r
118 final String closedLoopControlName = violatedThreshold.getClosedLoopControlName();
\r
119 final String fieldPath = violatedThreshold.getFieldPath();
\r
121 final List<String> abatementKeyList =
\r
122 ImmutableList.of(eventName, sourceName, reportingEntityName, closedLoopControlName, fieldPath);
\r
124 return KEY_JOINER.join(abatementKeyList);
\r