2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
6 * Copyright © 2017-2018 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 package org.onap.aai.sparky.aggregation.sync;
23 import java.util.ArrayList;
24 import java.util.List;
27 import org.onap.aai.cl.api.Logger;
28 import org.onap.aai.cl.eelf.LoggerFactory;
29 import org.onap.aai.sparky.config.oxm.OxmEntityLookup;
30 import org.onap.aai.sparky.config.oxm.SuggestionEntityDescriptor;
31 import org.onap.aai.sparky.config.oxm.SuggestionEntityLookup;
32 import org.onap.aai.sparky.dal.ActiveInventoryAdapter;
33 import org.onap.aai.sparky.dal.ElasticSearchAdapter;
34 import org.onap.aai.sparky.logging.AaiUiMsgs;
35 import org.onap.aai.sparky.sync.ElasticSearchIndexCleaner;
36 import org.onap.aai.sparky.sync.ElasticSearchSchemaFactory;
37 import org.onap.aai.sparky.sync.IndexCleaner;
38 import org.onap.aai.sparky.sync.IndexIntegrityValidator;
39 import org.onap.aai.sparky.sync.SyncController;
40 import org.onap.aai.sparky.sync.SyncControllerImpl;
41 import org.onap.aai.sparky.sync.SyncControllerRegistrar;
42 import org.onap.aai.sparky.sync.SyncControllerRegistry;
43 import org.onap.aai.sparky.sync.config.ElasticSearchEndpointConfig;
44 import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig;
45 import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig;
46 import org.onap.aai.sparky.sync.config.SyncControllerConfig;
48 public class AggregationSyncControllerFactory implements SyncControllerRegistrar {
50 private static final Logger LOG =
51 LoggerFactory.getInstance().getLogger(AggregationSyncControllerFactory.class);
53 private ActiveInventoryAdapter aaiAdapter;
54 private ElasticSearchAdapter esAdapter;
55 private SuggestionEntityLookup suggestionEntityLookup;
57 private Map<String, String> aggregationEntityToIndexMap;
58 private Map<String, ElasticSearchSchemaConfig> indexNameToSchemaConfigMap;
60 private ElasticSearchEndpointConfig elasticSearchEndpointConfig;
61 private SyncControllerConfig syncControllerConfig;
62 private SyncControllerRegistry syncControllerRegistry;
63 private NetworkStatisticsConfig aaiStatConfig;
64 private NetworkStatisticsConfig esStatConfig;
65 private OxmEntityLookup oxmEntityLookup;
66 private ElasticSearchSchemaFactory elasticSearchSchemaFactory;
68 private List<SyncController> syncControllers;
70 public AggregationSyncControllerFactory(ElasticSearchEndpointConfig esEndpointConfig,
71 SyncControllerConfig syncControllerConfig, SyncControllerRegistry syncControllerRegistry,
72 SuggestionEntityLookup suggestionEntityLookup,
73 OxmEntityLookup oxmEntityLookup,
74 ElasticSearchSchemaFactory elasticSearchSchemaFactory) {
75 this.elasticSearchSchemaFactory = elasticSearchSchemaFactory;
76 this.syncControllers = new ArrayList<SyncController>();
77 this.elasticSearchEndpointConfig = esEndpointConfig;
78 this.syncControllerConfig = syncControllerConfig;
79 this.syncControllerRegistry = syncControllerRegistry;
80 this.suggestionEntityLookup = suggestionEntityLookup;
81 this.oxmEntityLookup = oxmEntityLookup;
84 public NetworkStatisticsConfig getAaiStatConfig() {
88 public void setAaiStatConfig(NetworkStatisticsConfig aaiStatConfig) {
89 this.aaiStatConfig = aaiStatConfig;
92 public NetworkStatisticsConfig getEsStatConfig() {
96 public void setEsStatConfig(NetworkStatisticsConfig esStatConfig) {
97 this.esStatConfig = esStatConfig;
100 public Map<String, ElasticSearchSchemaConfig> getIndexNameToSchemaConfigMap() {
101 return indexNameToSchemaConfigMap;
104 public void setIndexNameToSchemaConfigMap(
105 Map<String, ElasticSearchSchemaConfig> indexNameToSchemaConfigMap) {
106 this.indexNameToSchemaConfigMap = indexNameToSchemaConfigMap;
109 public ElasticSearchEndpointConfig getElasticSearchEndpointConfig() {
110 return elasticSearchEndpointConfig;
113 public void setElasticSearchEndpointConfig(
114 ElasticSearchEndpointConfig elasticSearchEndpointConfig) {
115 this.elasticSearchEndpointConfig = elasticSearchEndpointConfig;
118 public SyncControllerConfig getSyncControllerConfig() {
119 return syncControllerConfig;
122 public void setSyncControllerConfig(SyncControllerConfig syncControllerConfig) {
123 this.syncControllerConfig = syncControllerConfig;
126 public ActiveInventoryAdapter getAaiAdapter() {
130 public void setAaiAdapter(ActiveInventoryAdapter aaiAdapter) {
131 this.aaiAdapter = aaiAdapter;
134 public ElasticSearchAdapter getEsAdapter() {
138 public void setEsAdapter(ElasticSearchAdapter esAdapter) {
139 this.esAdapter = esAdapter;
142 public SuggestionEntityLookup getSuggestionEntityLookup() {
143 return suggestionEntityLookup;
146 public void setSuggestionEntityLookup(SuggestionEntityLookup suggestionEntityLookup) {
147 this.suggestionEntityLookup = suggestionEntityLookup;
150 public Map<String, String> getAggregationEntityToIndexMap() {
151 return aggregationEntityToIndexMap;
154 public void setAggregationEntityToIndexMap(Map<String, String> aggregationEntityToIndexMap) {
155 this.aggregationEntityToIndexMap = aggregationEntityToIndexMap;
158 public void buildControllers() {
160 if (syncControllerConfig.isEnabled()) {
162 Map<String, SuggestionEntityDescriptor> suggestionEntitites =
163 suggestionEntityLookup.getSuggestionSearchEntityDescriptors();
164 SyncControllerImpl aggregationSyncController = null;
166 for (String entityType : suggestionEntitites.keySet()) {
168 String indexName = aggregationEntityToIndexMap.get(entityType);
170 if (indexName == null) {
171 LOG.error(AaiUiMsgs.ERROR_GENERIC,
172 "Could not determine aggregation index name" + " for entity type: " + entityType);
178 aggregationSyncController = new SyncControllerImpl(syncControllerConfig, entityType);
180 ElasticSearchSchemaConfig schemaConfig = indexNameToSchemaConfigMap.get(indexName);
182 if (schemaConfig == null) {
183 LOG.error(AaiUiMsgs.ERROR_GENERIC,
184 "Could not determine elastic search schema config for index name: " + indexName);
188 IndexIntegrityValidator aggregationIndexValidator = new IndexIntegrityValidator(esAdapter,
189 schemaConfig, elasticSearchEndpointConfig, elasticSearchSchemaFactory.getIndexSchema(schemaConfig));
191 aggregationSyncController.registerIndexValidator(aggregationIndexValidator);
193 AggregationSynchronizer aggSynchronizer = new AggregationSynchronizer(entityType,
194 schemaConfig, syncControllerConfig.getNumInternalSyncWorkers(),
195 syncControllerConfig.getNumSyncActiveInventoryWorkers(),
196 syncControllerConfig.getNumSyncElasticWorkers(), aaiStatConfig, esStatConfig,
199 aggSynchronizer.setAaiAdapter(aaiAdapter);
200 aggSynchronizer.setElasticSearchAdapter(esAdapter);
202 aggregationSyncController.registerEntitySynchronizer(aggSynchronizer);
204 IndexCleaner entityDataIndexCleaner =
205 new ElasticSearchIndexCleaner(esAdapter, elasticSearchEndpointConfig, schemaConfig);
207 aggregationSyncController.registerIndexCleaner(entityDataIndexCleaner);
209 syncControllers.add(aggregationSyncController);
210 } catch (Exception exc) {
212 exc.printStackTrace();
214 LOG.error(AaiUiMsgs.ERROR_GENERIC,
215 "Failed to build aggregation sync controller. Error : " + exc.getMessage());
220 LOG.info(AaiUiMsgs.INFO_GENERIC, "Sync controller with name = "
221 + syncControllerConfig.getControllerName() + " is disabled");
226 public void registerController() {
230 if ( syncControllerRegistry != null ) {
231 for ( SyncController controller : syncControllers ) {
232 syncControllerRegistry.registerSyncController(controller);