2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
6 * Copyright © 2017 Amdocs
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
21 * ECOMP is a trademark and service mark of AT&T Intellectual Property.
23 package org.onap.aai.sparky.aggregation.sync;
25 import java.util.ArrayList;
26 import java.util.List;
29 import org.onap.aai.cl.api.Logger;
30 import org.onap.aai.cl.eelf.LoggerFactory;
31 import org.onap.aai.sparky.config.oxm.SuggestionEntityDescriptor;
32 import org.onap.aai.sparky.config.oxm.SuggestionEntityLookup;
33 import org.onap.aai.sparky.dal.ActiveInventoryAdapter;
34 import org.onap.aai.sparky.dal.ElasticSearchAdapter;
35 import org.onap.aai.sparky.logging.AaiUiMsgs;
36 import org.onap.aai.sparky.sync.ElasticSearchIndexCleaner;
37 import org.onap.aai.sparky.sync.ElasticSearchSchemaFactory;
38 import org.onap.aai.sparky.sync.IndexCleaner;
39 import org.onap.aai.sparky.sync.IndexIntegrityValidator;
40 import org.onap.aai.sparky.sync.SyncController;
41 import org.onap.aai.sparky.sync.SyncControllerImpl;
42 import org.onap.aai.sparky.sync.SyncControllerRegistrar;
43 import org.onap.aai.sparky.sync.SyncControllerRegistry;
44 import org.onap.aai.sparky.sync.config.ElasticSearchEndpointConfig;
45 import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig;
46 import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig;
47 import org.onap.aai.sparky.sync.config.SyncControllerConfig;
49 public class AggregationSyncControllerFactory implements SyncControllerRegistrar {
51 private static final Logger LOG =
52 LoggerFactory.getInstance().getLogger(AggregationSyncControllerFactory.class);
54 private ActiveInventoryAdapter aaiAdapter;
55 private ElasticSearchAdapter esAdapter;
56 private SuggestionEntityLookup suggestionEntityLookup;
58 private Map<String, String> aggregationEntityToIndexMap;
59 private Map<String, ElasticSearchSchemaConfig> indexNameToSchemaConfigMap;
61 private ElasticSearchEndpointConfig elasticSearchEndpointConfig;
62 private SyncControllerConfig syncControllerConfig;
63 private SyncControllerRegistry syncControllerRegistry;
64 private NetworkStatisticsConfig aaiStatConfig;
65 private NetworkStatisticsConfig esStatConfig;
67 private List<SyncController> syncControllers;
69 public AggregationSyncControllerFactory(ElasticSearchEndpointConfig esEndpointConfig,
70 SyncControllerConfig syncControllerConfig, SyncControllerRegistry syncControllerRegistry,
71 SuggestionEntityLookup suggestionEntityLookup) {
72 this.syncControllers = new ArrayList<SyncController>();
73 this.elasticSearchEndpointConfig = esEndpointConfig;
74 this.syncControllerConfig = syncControllerConfig;
75 this.syncControllerRegistry = syncControllerRegistry;
76 this.suggestionEntityLookup = suggestionEntityLookup;
79 public NetworkStatisticsConfig getAaiStatConfig() {
83 public void setAaiStatConfig(NetworkStatisticsConfig aaiStatConfig) {
84 this.aaiStatConfig = aaiStatConfig;
87 public NetworkStatisticsConfig getEsStatConfig() {
91 public void setEsStatConfig(NetworkStatisticsConfig esStatConfig) {
92 this.esStatConfig = esStatConfig;
95 public Map<String, ElasticSearchSchemaConfig> getIndexNameToSchemaConfigMap() {
96 return indexNameToSchemaConfigMap;
99 public void setIndexNameToSchemaConfigMap(
100 Map<String, ElasticSearchSchemaConfig> indexNameToSchemaConfigMap) {
101 this.indexNameToSchemaConfigMap = indexNameToSchemaConfigMap;
104 public ElasticSearchEndpointConfig getElasticSearchEndpointConfig() {
105 return elasticSearchEndpointConfig;
108 public void setElasticSearchEndpointConfig(
109 ElasticSearchEndpointConfig elasticSearchEndpointConfig) {
110 this.elasticSearchEndpointConfig = elasticSearchEndpointConfig;
113 public SyncControllerConfig getSyncControllerConfig() {
114 return syncControllerConfig;
117 public void setSyncControllerConfig(SyncControllerConfig syncControllerConfig) {
118 this.syncControllerConfig = syncControllerConfig;
121 public ActiveInventoryAdapter getAaiAdapter() {
125 public void setAaiAdapter(ActiveInventoryAdapter aaiAdapter) {
126 this.aaiAdapter = aaiAdapter;
129 public ElasticSearchAdapter getEsAdapter() {
133 public void setEsAdapter(ElasticSearchAdapter esAdapter) {
134 this.esAdapter = esAdapter;
137 public SuggestionEntityLookup getSuggestionEntityLookup() {
138 return suggestionEntityLookup;
141 public void setSuggestionEntityLookup(SuggestionEntityLookup suggestionEntityLookup) {
142 this.suggestionEntityLookup = suggestionEntityLookup;
145 public Map<String, String> getAggregationEntityToIndexMap() {
146 return aggregationEntityToIndexMap;
149 public void setAggregationEntityToIndexMap(Map<String, String> aggregationEntityToIndexMap) {
150 this.aggregationEntityToIndexMap = aggregationEntityToIndexMap;
153 public void buildControllers() {
155 if (syncControllerConfig.isEnabled()) {
157 Map<String, SuggestionEntityDescriptor> suggestionEntitites =
158 suggestionEntityLookup.getSuggestionSearchEntityDescriptors();
159 SyncControllerImpl aggregationSyncController = null;
161 for (String entityType : suggestionEntitites.keySet()) {
163 String indexName = aggregationEntityToIndexMap.get(entityType);
165 if (indexName == null) {
166 LOG.error(AaiUiMsgs.ERROR_GENERIC,
167 "Could not determine aggregation index name" + " for entity type: " + entityType);
173 aggregationSyncController = new SyncControllerImpl(syncControllerConfig, entityType);
175 ElasticSearchSchemaConfig schemaConfig = indexNameToSchemaConfigMap.get(indexName);
177 if (schemaConfig == null) {
178 LOG.error(AaiUiMsgs.ERROR_GENERIC,
179 "Could not determine elastic search schema config for index name: " + indexName);
183 IndexIntegrityValidator aggregationIndexValidator =
184 new IndexIntegrityValidator(esAdapter, schemaConfig, elasticSearchEndpointConfig,
185 ElasticSearchSchemaFactory.getIndexSchema(schemaConfig));
187 aggregationSyncController.registerIndexValidator(aggregationIndexValidator);
189 AggregationSynchronizer aggSynchronizer = new AggregationSynchronizer(entityType,
190 schemaConfig, syncControllerConfig.getNumInternalSyncWorkers(),
191 syncControllerConfig.getNumSyncActiveInventoryWorkers(),
192 syncControllerConfig.getNumSyncElasticWorkers(), aaiStatConfig, esStatConfig);
194 aggSynchronizer.setAaiAdapter(aaiAdapter);
195 aggSynchronizer.setElasticSearchAdapter(esAdapter);
197 aggregationSyncController.registerEntitySynchronizer(aggSynchronizer);
199 IndexCleaner entityDataIndexCleaner =
200 new ElasticSearchIndexCleaner(esAdapter, elasticSearchEndpointConfig, schemaConfig);
202 aggregationSyncController.registerIndexCleaner(entityDataIndexCleaner);
204 syncControllers.add(aggregationSyncController);
205 } catch (Exception exc) {
207 exc.printStackTrace();
209 LOG.error(AaiUiMsgs.ERROR_GENERIC,
210 "Failed to build aggregation sync controller. Error : " + exc.getMessage());
215 LOG.info(AaiUiMsgs.INFO_GENERIC, "Sync controller with name = "
216 + syncControllerConfig.getControllerName() + " is disabled");
221 public void registerController() {
225 if (syncControllerRegistry != null) {
226 for (SyncController controller : syncControllers) {
227 syncControllerRegistry.registerSyncController(controller);