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;
67 private List<SyncController> syncControllers;
69 public AggregationSyncControllerFactory(ElasticSearchEndpointConfig esEndpointConfig,
70 SyncControllerConfig syncControllerConfig, SyncControllerRegistry syncControllerRegistry,
71 SuggestionEntityLookup suggestionEntityLookup,
72 OxmEntityLookup oxmEntityLookup) {
73 this.syncControllers = new ArrayList<SyncController>();
74 this.elasticSearchEndpointConfig = esEndpointConfig;
75 this.syncControllerConfig = syncControllerConfig;
76 this.syncControllerRegistry = syncControllerRegistry;
77 this.suggestionEntityLookup = suggestionEntityLookup;
78 this.oxmEntityLookup = oxmEntityLookup;
81 public NetworkStatisticsConfig getAaiStatConfig() {
85 public void setAaiStatConfig(NetworkStatisticsConfig aaiStatConfig) {
86 this.aaiStatConfig = aaiStatConfig;
89 public NetworkStatisticsConfig getEsStatConfig() {
93 public void setEsStatConfig(NetworkStatisticsConfig esStatConfig) {
94 this.esStatConfig = esStatConfig;
97 public Map<String, ElasticSearchSchemaConfig> getIndexNameToSchemaConfigMap() {
98 return indexNameToSchemaConfigMap;
101 public void setIndexNameToSchemaConfigMap(
102 Map<String, ElasticSearchSchemaConfig> indexNameToSchemaConfigMap) {
103 this.indexNameToSchemaConfigMap = indexNameToSchemaConfigMap;
106 public ElasticSearchEndpointConfig getElasticSearchEndpointConfig() {
107 return elasticSearchEndpointConfig;
110 public void setElasticSearchEndpointConfig(
111 ElasticSearchEndpointConfig elasticSearchEndpointConfig) {
112 this.elasticSearchEndpointConfig = elasticSearchEndpointConfig;
115 public SyncControllerConfig getSyncControllerConfig() {
116 return syncControllerConfig;
119 public void setSyncControllerConfig(SyncControllerConfig syncControllerConfig) {
120 this.syncControllerConfig = syncControllerConfig;
123 public ActiveInventoryAdapter getAaiAdapter() {
127 public void setAaiAdapter(ActiveInventoryAdapter aaiAdapter) {
128 this.aaiAdapter = aaiAdapter;
131 public ElasticSearchAdapter getEsAdapter() {
135 public void setEsAdapter(ElasticSearchAdapter esAdapter) {
136 this.esAdapter = esAdapter;
139 public SuggestionEntityLookup getSuggestionEntityLookup() {
140 return suggestionEntityLookup;
143 public void setSuggestionEntityLookup(SuggestionEntityLookup suggestionEntityLookup) {
144 this.suggestionEntityLookup = suggestionEntityLookup;
147 public Map<String, String> getAggregationEntityToIndexMap() {
148 return aggregationEntityToIndexMap;
151 public void setAggregationEntityToIndexMap(Map<String, String> aggregationEntityToIndexMap) {
152 this.aggregationEntityToIndexMap = aggregationEntityToIndexMap;
155 public void buildControllers() {
157 if (syncControllerConfig.isEnabled()) {
159 Map<String, SuggestionEntityDescriptor> suggestionEntitites =
160 suggestionEntityLookup.getSuggestionSearchEntityDescriptors();
161 SyncControllerImpl aggregationSyncController = null;
163 for (String entityType : suggestionEntitites.keySet()) {
165 String indexName = aggregationEntityToIndexMap.get(entityType);
167 if (indexName == null) {
168 LOG.error(AaiUiMsgs.ERROR_GENERIC,
169 "Could not determine aggregation index name" + " for entity type: " + entityType);
175 aggregationSyncController = new SyncControllerImpl(syncControllerConfig, entityType);
177 ElasticSearchSchemaConfig schemaConfig = indexNameToSchemaConfigMap.get(indexName);
179 if (schemaConfig == null) {
180 LOG.error(AaiUiMsgs.ERROR_GENERIC,
181 "Could not determine elastic search schema config for index name: " + indexName);
185 IndexIntegrityValidator aggregationIndexValidator = new IndexIntegrityValidator(esAdapter,
186 schemaConfig, elasticSearchEndpointConfig, ElasticSearchSchemaFactory.getIndexSchema(schemaConfig));
188 aggregationSyncController.registerIndexValidator(aggregationIndexValidator);
190 AggregationSynchronizer aggSynchronizer = new AggregationSynchronizer(entityType,
191 schemaConfig, syncControllerConfig.getNumInternalSyncWorkers(),
192 syncControllerConfig.getNumSyncActiveInventoryWorkers(),
193 syncControllerConfig.getNumSyncElasticWorkers(), aaiStatConfig, esStatConfig,
196 aggSynchronizer.setAaiAdapter(aaiAdapter);
197 aggSynchronizer.setElasticSearchAdapter(esAdapter);
199 aggregationSyncController.registerEntitySynchronizer(aggSynchronizer);
201 IndexCleaner entityDataIndexCleaner =
202 new ElasticSearchIndexCleaner(esAdapter, elasticSearchEndpointConfig, schemaConfig);
204 aggregationSyncController.registerIndexCleaner(entityDataIndexCleaner);
206 syncControllers.add(aggregationSyncController);
207 } catch (Exception exc) {
209 exc.printStackTrace();
211 LOG.error(AaiUiMsgs.ERROR_GENERIC,
212 "Failed to build aggregation sync controller. Error : " + exc.getMessage());
217 LOG.info(AaiUiMsgs.INFO_GENERIC, "Sync controller with name = "
218 + syncControllerConfig.getControllerName() + " is disabled");
223 public void registerController() {
227 if ( syncControllerRegistry != null ) {
228 for ( SyncController controller : syncControllers ) {
229 syncControllerRegistry.registerSyncController(controller);