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.rest.config.RestEndpointConfig;
34 import org.onap.aai.sparky.logging.AaiUiMsgs;
35 import org.onap.aai.sparky.sync.ElasticSearchSchemaFactory;
36 import org.onap.aai.sparky.sync.IndexIntegrityValidator;
37 import org.onap.aai.sparky.sync.SyncController;
38 import org.onap.aai.sparky.sync.SyncControllerImpl;
39 import org.onap.aai.sparky.sync.SyncControllerRegistrar;
40 import org.onap.aai.sparky.sync.SyncControllerRegistry;
41 import org.onap.aai.sparky.search.SearchServiceAdapter;
42 import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig;
43 import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig;
44 import org.onap.aai.sparky.sync.config.SyncControllerConfig;
46 public class AggregationSyncControllerFactory implements SyncControllerRegistrar {
48 private static final Logger LOG =
49 LoggerFactory.getInstance().getLogger(AggregationSyncControllerFactory.class);
51 private ActiveInventoryAdapter aaiAdapter;
52 private SearchServiceAdapter searchServiceAdapter;
53 private SuggestionEntityLookup suggestionEntityLookup;
55 private Map<String, String> aggregationEntityToIndexMap;
56 private Map<String, ElasticSearchSchemaConfig> indexNameToSchemaConfigMap;
58 private RestEndpointConfig endpointConfig;
59 private SyncControllerConfig syncControllerConfig;
60 private SyncControllerRegistry syncControllerRegistry;
61 private NetworkStatisticsConfig aaiStatConfig;
62 private NetworkStatisticsConfig esStatConfig;
63 private OxmEntityLookup oxmEntityLookup;
64 private ElasticSearchSchemaFactory elasticSearchSchemaFactory;
66 private List<SyncController> syncControllers;
68 public AggregationSyncControllerFactory(RestEndpointConfig endpointConfig,
69 SyncControllerConfig syncControllerConfig, SyncControllerRegistry syncControllerRegistry,
70 SuggestionEntityLookup suggestionEntityLookup,
71 OxmEntityLookup oxmEntityLookup,
72 ElasticSearchSchemaFactory elasticSearchSchemaFactory) {
73 this.elasticSearchSchemaFactory = elasticSearchSchemaFactory;
74 this.syncControllers = new ArrayList<SyncController>();
75 this.endpointConfig = endpointConfig;
76 this.syncControllerConfig = syncControllerConfig;
77 this.syncControllerRegistry = syncControllerRegistry;
78 this.suggestionEntityLookup = suggestionEntityLookup;
79 this.oxmEntityLookup = oxmEntityLookup;
82 public NetworkStatisticsConfig getAaiStatConfig() {
86 public void setAaiStatConfig(NetworkStatisticsConfig aaiStatConfig) {
87 this.aaiStatConfig = aaiStatConfig;
90 public NetworkStatisticsConfig getEsStatConfig() {
94 public void setEsStatConfig(NetworkStatisticsConfig esStatConfig) {
95 this.esStatConfig = esStatConfig;
98 public Map<String, ElasticSearchSchemaConfig> getIndexNameToSchemaConfigMap() {
99 return indexNameToSchemaConfigMap;
102 public void setIndexNameToSchemaConfigMap(
103 Map<String, ElasticSearchSchemaConfig> indexNameToSchemaConfigMap) {
104 this.indexNameToSchemaConfigMap = indexNameToSchemaConfigMap;
107 public RestEndpointConfig getEndpointConfig() {
108 return endpointConfig;
111 public void setEndpointConfig(
112 RestEndpointConfig endpointConfig) {
113 this.endpointConfig = endpointConfig;
116 public SyncControllerConfig getSyncControllerConfig() {
117 return syncControllerConfig;
120 public void setSyncControllerConfig(SyncControllerConfig syncControllerConfig) {
121 this.syncControllerConfig = syncControllerConfig;
124 public ActiveInventoryAdapter getAaiAdapter() {
128 public void setAaiAdapter(ActiveInventoryAdapter aaiAdapter) {
129 this.aaiAdapter = aaiAdapter;
132 public SearchServiceAdapter getSearchServiceAdapter() {
133 return searchServiceAdapter;
136 public void setSearchServiceAdapter(SearchServiceAdapter searchServiceAdapter) {
137 this.searchServiceAdapter = searchServiceAdapter;
140 public SuggestionEntityLookup getSuggestionEntityLookup() {
141 return suggestionEntityLookup;
144 public void setSuggestionEntityLookup(SuggestionEntityLookup suggestionEntityLookup) {
145 this.suggestionEntityLookup = suggestionEntityLookup;
148 public Map<String, String> getAggregationEntityToIndexMap() {
149 return aggregationEntityToIndexMap;
152 public void setAggregationEntityToIndexMap(Map<String, String> aggregationEntityToIndexMap) {
153 this.aggregationEntityToIndexMap = aggregationEntityToIndexMap;
156 public void buildControllers() {
158 if (syncControllerConfig.isEnabled()) {
160 Map<String, SuggestionEntityDescriptor> suggestionEntitites =
161 suggestionEntityLookup.getSuggestionSearchEntityDescriptors();
162 SyncControllerImpl aggregationSyncController = null;
164 for (String entityType : suggestionEntitites.keySet()) {
166 String indexName = aggregationEntityToIndexMap.get(entityType);
168 if (indexName == null) {
169 LOG.error(AaiUiMsgs.ERROR_GENERIC,
170 "Could not determine aggregation index name" + " for entity type: " + entityType);
176 aggregationSyncController = new SyncControllerImpl(syncControllerConfig, entityType);
178 ElasticSearchSchemaConfig schemaConfig = indexNameToSchemaConfigMap.get(indexName);
180 if (schemaConfig == null) {
181 LOG.error(AaiUiMsgs.ERROR_GENERIC,
182 "Could not determine elastic search schema config for index name: " + indexName);
186 IndexIntegrityValidator aggregationIndexValidator = new IndexIntegrityValidator(searchServiceAdapter,
187 schemaConfig, endpointConfig, elasticSearchSchemaFactory.getIndexSchema(schemaConfig));
189 aggregationSyncController.registerIndexValidator(aggregationIndexValidator);
191 AggregationSynchronizer aggSynchronizer = new AggregationSynchronizer(entityType,
192 schemaConfig, syncControllerConfig.getNumInternalSyncWorkers(),
193 syncControllerConfig.getNumSyncActiveInventoryWorkers(),
194 syncControllerConfig.getNumSyncElasticWorkers(), aaiStatConfig, esStatConfig,
197 aggSynchronizer.setAaiAdapter(aaiAdapter);
198 aggSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
200 aggregationSyncController.registerEntitySynchronizer(aggSynchronizer);
202 syncControllers.add(aggregationSyncController);
203 } catch (Exception exc) {
205 exc.printStackTrace();
207 LOG.error(AaiUiMsgs.ERROR_GENERIC,
208 "Failed to build aggregation sync controller. Error : " + exc.getMessage());
213 LOG.info(AaiUiMsgs.INFO_GENERIC, "Sync controller with name = "
214 + syncControllerConfig.getControllerName() + " is disabled");
219 public void registerController() {
223 if ( syncControllerRegistry != null ) {
224 for ( SyncController controller : syncControllers ) {
225 syncControllerRegistry.registerSyncController(controller);