44c1ef8c7251620b8dc34e973a8597730a1d2644
[sdc.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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=========================================================
19  */
20
21 package org.openecomp.sdc.enrichment.impl.external.artifact;
22
23 import org.openecomp.core.enrichment.types.ArtifactCategory;
24 import org.openecomp.core.enrichment.types.ComponentMonitoringUploadInfo;
25 import org.openecomp.core.enrichment.types.MonitoringArtifactInfo;
26 import org.openecomp.core.enrichment.types.MonitoringUploadType;
27 import org.openecomp.core.model.dao.EnrichedServiceModelDao;
28 import org.openecomp.core.model.dao.EnrichedServiceModelDaoFactory;
29 import org.openecomp.core.model.types.ServiceArtifact;
30 import org.openecomp.core.utilities.file.FileContentHandler;
31 import org.openecomp.core.utilities.file.FileUtils;
32 import org.openecomp.sdc.common.errors.Messages;
33 import org.openecomp.sdc.datatypes.error.ErrorLevel;
34 import org.openecomp.sdc.datatypes.error.ErrorMessage;
35 import org.openecomp.sdc.enrichment.EnrichmentInfo;
36 import org.openecomp.sdc.enrichment.inter.ExternalArtifactEnricherInterface;
37 import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
38 import org.openecomp.sdc.tosca.datatypes.ToscaNodeType;
39 import org.openecomp.sdc.tosca.services.DataModelUtil;
40 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentArtifactDao;
41 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDao;
42 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDaoFactory;
43 import org.openecomp.sdc.vendorsoftwareproduct.dao.MonitoringUploadDaoFactory;
44 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
45 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentMonitoringUploadEntity;
46 import org.openecomp.sdc.versioning.dao.types.Version;
47
48 import java.io.File;
49 import java.io.IOException;
50 import java.util.Collection;
51 import java.util.HashMap;
52 import java.util.List;
53 import java.util.Map;
54 import java.util.Optional;
55 import java.util.Set;
56
57 public class MonitoringMibEnricher implements ExternalArtifactEnricherInterface {
58
59   private EnrichedServiceModelDao enrichedServiceModelDao;
60   private ComponentDao componentDao;
61   private ComponentArtifactDao componentArtifactDao;
62   private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
63
64   /**
65    * Enrich map.
66    *
67    * @param enrichmentInfo the enrichmentInfo
68    * @return the map
69    */
70   public Map<String, List<ErrorMessage>> enrich(EnrichmentInfo enrichmentInfo) {
71
72     Map<String, List<ErrorMessage>> errors = new HashMap<>();
73     String vspId = enrichmentInfo.getKey();
74     Version version = enrichmentInfo.getVersion();
75
76     Collection<ComponentEntity> components =
77         getComponentDao().list(new ComponentEntity(vspId, version, null));
78     components
79         .forEach(componentEntry -> errors.putAll(enrichComponent(componentEntry, vspId, version)));
80
81     return errors;
82   }
83
84   Map<String, List<ErrorMessage>> enrichComponent(ComponentEntity componentEntry, String vspId,
85                                                   Version version) {
86
87
88     mdcDataDebugMessage.debugEntryMessage(null, null);
89
90     Map<String, List<ErrorMessage>> errors = new HashMap<>();
91     ComponentMonitoringUploadInfo componentMonitoringUploadInfo =
92         extractComponentMibInfo(componentEntry, vspId, version, errors);
93     enrichComponentMib(componentMonitoringUploadInfo, vspId, version, errors);
94
95     mdcDataDebugMessage.debugExitMessage(null, null);
96     return errors;
97   }
98
99   private ComponentMonitoringUploadInfo extractComponentMibInfo(ComponentEntity componentEntity,
100                                                                 String vspId,
101                                                                 Version version,
102                                                                 Map<String, List<ErrorMessage>> errors) {
103
104
105     mdcDataDebugMessage.debugEntryMessage(null, null);
106
107     String componentId = componentEntity.getId();
108     ComponentMonitoringUploadEntity entity = new ComponentMonitoringUploadEntity();
109
110     entity.setVspId(vspId);
111     entity.setVersion(version);
112     entity.setComponentId(componentId);
113     String componentName = componentEntity.getComponentCompositionData().getName();
114     ComponentMonitoringUploadInfo componentMonitoringUploadInfo =
115         new ComponentMonitoringUploadInfo();
116     for (MonitoringUploadType monitoringUploadType : MonitoringUploadType.values()) {
117       updComponentMibInfoByType(componentName, monitoringUploadType, entity,
118           componentMonitoringUploadInfo,
119           errors);
120     }
121 //    updComponentMibInfoByType(componentName, MonitoringUploadType.SNMP_POLL, entity,
122 //        componentMonitoringUploadInfo,
123 //        errors);
124 //    updComponentMibInfoByType(componentName, MonitoringUploadType.SNMP_TRAP, entity,
125 //        componentMonitoringUploadInfo,
126 //        errors);
127
128     mdcDataDebugMessage.debugExitMessage(null, null);
129     return componentMonitoringUploadInfo;
130   }
131
132   private void updComponentMibInfoByType(String componentName, MonitoringUploadType type,
133                                          ComponentMonitoringUploadEntity componentMonitoringUploadEntity,
134                                          ComponentMonitoringUploadInfo componentMonitoringUploadInfo,
135                                          Map<String, List<ErrorMessage>> errors) {
136
137
138     mdcDataDebugMessage.debugEntryMessage(null, null);
139
140     String path;
141     componentMonitoringUploadEntity.setType(type);
142     Optional<ComponentMonitoringUploadEntity> artifact =
143         getComponentArtifactDao().getByType(componentMonitoringUploadEntity);
144
145     if (!artifact.isPresent()) {
146       return;
147     }
148     String unifiedComponentNodeType =
149         ToscaNodeType.ABSTRACT_NODE_TYPE_PREFIX + DataModelUtil.getNamespaceSuffix(componentName);
150     path = unifiedComponentNodeType + File.separator + ArtifactCategory.DEPLOYMENT.getDisplayName()
151         + File.separator + type.name();
152     MonitoringArtifactInfo monitoringArtifactInfo = new MonitoringArtifactInfo();
153     monitoringArtifactInfo.setName(path);
154     monitoringArtifactInfo.setContent(artifact.get().getArtifact().array());
155     switch (type) { //todo as part of ATTASDC-4503
156       case SNMP_POLL:
157         componentMonitoringUploadInfo.setSnmpPoll(monitoringArtifactInfo);
158         break;
159       case SNMP_TRAP:
160         componentMonitoringUploadInfo.setSnmpTrap(monitoringArtifactInfo);
161         break;
162       case VES_EVENTS:
163         componentMonitoringUploadInfo.setVesEvent(monitoringArtifactInfo);
164         break;
165       default:
166         break;
167     }
168
169     mdcDataDebugMessage.debugExitMessage(null, null);
170   }
171
172   private void enrichComponentMib(ComponentMonitoringUploadInfo componentMonitoringUploadInfo,
173                                   String vspId,
174                                   Version version,
175                                   Map<String, List<ErrorMessage>> errors) {
176
177
178     mdcDataDebugMessage.debugEntryMessage(null, null);
179
180     ServiceArtifact mibServiceArtifact = new ServiceArtifact();
181     mibServiceArtifact.setVspId(vspId);
182     mibServiceArtifact.setVersion(version);
183     enrichMibFiles(mibServiceArtifact, componentMonitoringUploadInfo, errors);
184
185     mdcDataDebugMessage.debugExitMessage(null, null);
186   }
187
188   private void enrichMibFiles(ServiceArtifact monitoringArtifact,
189                               ComponentMonitoringUploadInfo componentMonitoringUploadInfo,
190                               Map<String, List<ErrorMessage>> errors) {
191
192
193     mdcDataDebugMessage.debugEntryMessage(null, null);
194
195     if (componentMonitoringUploadInfo == null) {
196       return;
197     }
198     //todo fix as part of ATTASDC-4503
199     enrichMibByType(componentMonitoringUploadInfo.getSnmpTrap(), MonitoringUploadType.SNMP_TRAP,
200         monitoringArtifact,
201         errors);
202     enrichMibByType(componentMonitoringUploadInfo.getSnmpPoll(), MonitoringUploadType.SNMP_POLL,
203         monitoringArtifact,
204         errors);
205     enrichMibByType(componentMonitoringUploadInfo.getVesEvent(), MonitoringUploadType.VES_EVENTS,
206         monitoringArtifact,
207         errors);
208
209     mdcDataDebugMessage.debugExitMessage(null, null);
210   }
211
212   private void enrichMibByType(MonitoringArtifactInfo monitoringArtifactInfo,
213                                MonitoringUploadType type,
214                                ServiceArtifact mibServiceArtifact,
215                                Map<String, List<ErrorMessage>> errors) {
216
217
218     mdcDataDebugMessage.debugEntryMessage(null, null);
219
220     if (monitoringArtifactInfo == null) {
221       return;
222     }
223     FileContentHandler mibs;
224     try {
225       mibs = FileUtils
226           .getFileContentMapFromZip(FileUtils.toByteArray(monitoringArtifactInfo.getContent()));
227     } catch (IOException ioException) {
228       ErrorMessage.ErrorMessageUtil
229           .addMessage(mibServiceArtifact.getName() + "." + type.name(), errors)
230           .add(new ErrorMessage(ErrorLevel.ERROR, Messages.INVALID_ZIP_FILE.getErrorMessage()));
231       return;
232     }
233     Set<String> fileList = mibs.getFileList();
234     for (String fileName : fileList) {
235       mibServiceArtifact.setContentData(FileUtils.toByteArray(mibs.getFileContent(fileName)));
236       mibServiceArtifact.setName(monitoringArtifactInfo.getName() + File.separator + fileName);
237       getEnrichedServiceModelDao().storeExternalArtifact(mibServiceArtifact);
238     }
239
240     mdcDataDebugMessage.debugExitMessage(null, null);
241   }
242
243   private EnrichedServiceModelDao getEnrichedServiceModelDao() {
244     if (enrichedServiceModelDao == null) {
245       enrichedServiceModelDao = EnrichedServiceModelDaoFactory.getInstance().createInterface();
246     }
247     return enrichedServiceModelDao;
248   }
249
250   private ComponentDao getComponentDao() {
251     if (componentDao == null) {
252       componentDao = ComponentDaoFactory.getInstance().createInterface();
253     }
254     return componentDao;
255   }
256
257   private ComponentArtifactDao getComponentArtifactDao() {
258     if (componentArtifactDao == null) {
259       componentArtifactDao = MonitoringUploadDaoFactory.getInstance().createInterface();
260     }
261     return componentArtifactDao;
262   }
263
264 }