2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.be.dao.impl;
23 import fj.data.Either;
24 import org.elasticsearch.index.query.BoolQueryBuilder;
25 import org.elasticsearch.index.query.QueryBuilder;
26 import org.elasticsearch.index.query.QueryBuilders;
27 import org.openecomp.sdc.be.config.BeEcompErrorManager;
28 import org.openecomp.sdc.be.dao.api.ActionStatus;
29 import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
30 import org.openecomp.sdc.be.resources.data.auditing.AuditingGenericEvent;
31 import org.openecomp.sdc.be.resources.data.auditing.AuditingTypesConstants;
32 import org.openecomp.sdc.be.resources.data.auditing.ResourceAdminEvent;
33 import org.openecomp.sdc.common.datastructure.AuditingFieldsKey;
34 import org.openecomp.sdc.common.datastructure.ESTimeBasedEvent;
35 import org.openecomp.sdc.common.log.wrappers.Logger;
36 import org.springframework.stereotype.Component;
38 import javax.annotation.PostConstruct;
40 import java.util.Map.Entry;
42 @Component("auditingDao")
43 public class AuditingDao extends ESTimeBasedDao {
45 private static final String SERVICE_INSTANCE_ID_FIELD = AuditingFieldsKey.AUDIT_SERVICE_INSTANCE_ID
46 .getDisplayName(); // "serviceInstanceId";
47 private static final String STATUS_FIELD = AuditingFieldsKey.AUDIT_STATUS.getDisplayName(); // "status";
48 private static final String ACTION_FIELD = AuditingFieldsKey.AUDIT_ACTION.getDisplayName(); // "action";
49 private static final String DISTRIBUTION_ID_FIELD = AuditingFieldsKey.AUDIT_DISTRIBUTION_ID.getDisplayName(); // "distributionId";
50 private static Logger log = Logger.getLogger(AuditingDao.class.getName());
51 public static final String AUDITING_INDEX = "auditingevents";
55 AuditingActionEnum[] values = AuditingActionEnum.values();
56 for (AuditingActionEnum value : values) {
57 typesToClasses.put(value.getAuditingEsType(), ESTimeBasedEvent.class);
62 public String getIndexPrefix() {
63 return AUDITING_INDEX;
66 public ActionStatus addRecord(Map<AuditingFieldsKey, Object> params, String type) {
68 // TODO rhalili - remove? check debugEnabled?
69 Map<String, Object> displayFields = new HashMap<>();
70 StringBuilder sb = new StringBuilder();
71 for (Entry<AuditingFieldsKey, Object> entry : params.entrySet()) {
72 displayFields.put(entry.getKey().getDisplayName(), entry.getValue());
73 sb.append(entry.getKey().getDisplayName()).append(" = ").append(entry.getValue()).append(",");
77 // String type = clazz.getSimpleName().toLowerCase();
78 AuditingGenericEvent auditingGenericEvent = new AuditingGenericEvent();
79 populateCommonFields(params, auditingGenericEvent);
80 auditingGenericEvent.getFields().putAll(displayFields);
82 log.debug("Auditing: Persisting object of type {}, fields: {}", type, sb.toString());
84 return write(type, auditingGenericEvent);
87 public ActionStatus addRecord(AuditingGenericEvent auditEvent, String type) {
89 log.debug("Auditing: Persisting object of type {}, fields: {}", type, auditEvent.getAction());
90 // auditEvent.fillFields();
91 return write(type, auditEvent);
94 public Either<List<ESTimeBasedEvent>, ActionStatus> getListOfDistributionStatuses(String did) {
96 QueryBuilder componentNameMatch = QueryBuilders.matchQuery(DISTRIBUTION_ID_FIELD, did);
97 QueryBuilder componentVersionMatch = QueryBuilders.matchQuery(ACTION_FIELD,
98 AuditingActionEnum.DISTRIBUTION_STATUS.getName());
99 QueryBuilder remainingElementQueryBuilder = QueryBuilders.boolQuery().must(componentNameMatch)
100 .must(componentVersionMatch);
101 List<ESTimeBasedEvent> remainingElements = null;
103 remainingElements = customFindEvent(AuditingTypesConstants.DISTRIBUTION_STATUS_EVENT_TYPE,
104 remainingElementQueryBuilder, null);
105 } catch (Exception e) {
106 BeEcompErrorManager.getInstance().logBeDaoSystemError("Get DistributionStatuses List");
107 log.debug("failed to get distribution statuses for ", e);
108 return Either.right(ActionStatus.GENERAL_ERROR);
110 if (remainingElements != null && !remainingElements.isEmpty()) {
111 return Either.left(remainingElements);
113 log.debug("not found distribution statuses for did {}", did);
114 remainingElements = new ArrayList<>();
115 return Either.left(remainingElements);
120 public Either<List<ESTimeBasedEvent>, ActionStatus> getServiceDistributionStatusesList(String serviceInstanceId) {
122 List<ESTimeBasedEvent> resList = new ArrayList<>();
123 QueryBuilder componentNameMatch = QueryBuilders.matchQuery(SERVICE_INSTANCE_ID_FIELD, serviceInstanceId);
124 QueryBuilder componentVersionMatch = QueryBuilders.matchQuery(ACTION_FIELD,
125 AuditingActionEnum.DISTRIBUTION_STATE_CHANGE_REQUEST.getName());
126 QueryBuilder remainingElementQueryBuilder = QueryBuilders.boolQuery().must(componentNameMatch)
127 .must(componentVersionMatch);
128 List<ESTimeBasedEvent> remainingElements = null;
130 remainingElements = customFindEvent(AuditingTypesConstants.RESOURCE_ADMIN_EVENT_TYPE,
131 remainingElementQueryBuilder, null);
132 } catch (Exception e) {
133 BeEcompErrorManager.getInstance().logBeDaoSystemError("Get Service DistributionStatuses List");
134 log.debug("failed to get distribution statuses for action {}",
135 AuditingActionEnum.DISTRIBUTION_STATE_CHANGE_REQUEST.getName(), e);
136 return Either.right(ActionStatus.GENERAL_ERROR);
138 if (remainingElements != null && !remainingElements.isEmpty()) {
139 resList.addAll(remainingElements);
142 componentVersionMatch = QueryBuilders.matchQuery(ACTION_FIELD,
143 AuditingActionEnum.DISTRIBUTION_DEPLOY.getName());
144 remainingElementQueryBuilder = QueryBuilders.boolQuery().must(componentNameMatch).must(componentVersionMatch);
145 List<ESTimeBasedEvent> dResultElements = null;
147 dResultElements = customFindEvent(AuditingTypesConstants.DISTRIBUTION_DEPLOY_EVENT_TYPE,
148 remainingElementQueryBuilder, null);
149 } catch (Exception e) {
150 BeEcompErrorManager.getInstance().logBeDaoSystemError("Get Service DistributionStatuses List");
151 log.debug("failed to get distribution statuses for action {}",
152 AuditingActionEnum.DISTRIBUTION_DEPLOY.getName(), e);
153 return Either.right(ActionStatus.GENERAL_ERROR);
155 if (dResultElements != null && !dResultElements.isEmpty()) {
156 resList.addAll(dResultElements);
159 componentVersionMatch = QueryBuilders.matchQuery(ACTION_FIELD,
160 AuditingActionEnum.DISTRIBUTION_NOTIFY.getName());
161 remainingElementQueryBuilder = QueryBuilders.boolQuery().must(componentNameMatch).must(componentVersionMatch);
162 List<ESTimeBasedEvent> dNotifyElements = null;
164 dNotifyElements = customFindEvent(AuditingTypesConstants.DISTRIBUTION_NOTIFICATION_EVENT_TYPE,
165 remainingElementQueryBuilder, null);
166 } catch (Exception e) {
167 BeEcompErrorManager.getInstance().logBeDaoSystemError("Get Service DistributionStatuses List");
168 log.debug("failed to get distribution statuses for action {}",
169 AuditingActionEnum.DISTRIBUTION_NOTIFY.getName(), e);
170 return Either.right(ActionStatus.GENERAL_ERROR);
172 if (remainingElements != null && !remainingElements.isEmpty()) {
173 resList.addAll(dNotifyElements);
176 return Either.left(resList);
180 public Either<List<ESTimeBasedEvent>, ActionStatus> getFilteredResourceAdminAuditingEvents(
181 Map<AuditingFieldsKey, Object> filterMap) {
183 Iterator<Entry<AuditingFieldsKey, Object>> filterItr = filterMap.entrySet().iterator();
184 BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
185 while (filterItr.hasNext()) {
186 Entry<AuditingFieldsKey, Object> curr = filterItr.next();
187 boolQuery = boolQuery.must(QueryBuilders.termQuery(curr.getKey().getDisplayName(), curr.getValue()));
191 List<ESTimeBasedEvent> customFindEvent = customFindEvent(
192 ResourceAdminEvent.class.getSimpleName().toLowerCase(), boolQuery, null);
193 return Either.left(customFindEvent);
194 } catch (Exception e) {
195 log.debug("Failed to query AuditRecords in es");
196 return Either.right(ActionStatus.GENERAL_ERROR);
201 public Either<List<ESTimeBasedEvent>, ActionStatus> getListOfDistributionByAction(String did, String actionType,
202 String requestedStatus, Class<? extends AuditingGenericEvent> clazz) {
204 QueryBuilder distributionIdMatch = QueryBuilders.matchQuery(DISTRIBUTION_ID_FIELD, did);
205 QueryBuilder distributionActionMatch = QueryBuilders.matchQuery(ACTION_FIELD, actionType);
206 QueryBuilder remainingElementQueryBuilder;
208 if (requestedStatus != null && !requestedStatus.isEmpty()) {
209 QueryBuilder statusMatch = QueryBuilders.matchQuery(STATUS_FIELD, requestedStatus);
210 remainingElementQueryBuilder = QueryBuilders.boolQuery().must(distributionIdMatch)
211 .must(distributionActionMatch).must(statusMatch);
213 remainingElementQueryBuilder = QueryBuilders.boolQuery().must(distributionIdMatch)
214 .must(distributionActionMatch);
217 List<ESTimeBasedEvent> remainingElements = null;
219 remainingElements = customFindEvent(clazz.getSimpleName().toLowerCase(), remainingElementQueryBuilder,
221 } catch (Exception e) {
222 BeEcompErrorManager.getInstance().logBeDaoSystemError("Get DistributionStatuses List");
223 log.debug("failed to get distribution statuses for action {}", actionType, e);
224 return Either.right(ActionStatus.GENERAL_ERROR);
227 return Either.left(remainingElements);
231 private void populateCommonFields(Map<AuditingFieldsKey, Object> params,
232 AuditingGenericEvent timeBasedIndexedData) {
233 String dateStr = (String) params.get(AuditingFieldsKey.AUDIT_TIMESTAMP);
234 if (dateStr != null) {
235 timeBasedIndexedData.setTimestamp(dateStr);
237 timeBasedIndexedData.setAction((String) params.get(AuditingFieldsKey.AUDIT_ACTION));
238 Object statusObj = params.get(AuditingFieldsKey.AUDIT_STATUS);
239 // For BC. status was Integer and is String
240 if (statusObj != null) {
241 timeBasedIndexedData.setStatus(String.valueOf(statusObj));
243 timeBasedIndexedData.setStatus(null);
245 // timeBasedIndexedData.setStatus((String)params.get(AuditingFieldsKey.AUDIT_STATUS));
246 timeBasedIndexedData.setDesc((String) params.get(AuditingFieldsKey.AUDIT_DESC));
248 .setServiceInstanceId((String) params.get(AuditingFieldsKey.AUDIT_SERVICE_INSTANCE_ID));
249 timeBasedIndexedData.setRequestId((String) params.get(AuditingFieldsKey.AUDIT_REQUEST_ID));