/***************************************************************************
* Copyright (c) 2014-2015 VMware, Inc. All Rights Reserved.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
***************************************************************************/
package com.vmware.bdd.manager.collection;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import org.apache.log4j.Logger;
import com.vmware.bdd.service.collection.ICollectionInitializerService;
import com.vmware.bdd.utils.CommonUtil;
import com.vmware.bdd.utils.PropertiesUtil;
public class CollectionDriverManager {
static final Logger logger = Logger.getLogger(CollectionDriverManager.class);
protected CollectionDriver driver;
protected static File file;
private ICollectionInitializerService collectionInitializerService;
private CollectOperationManager collectOperationManager;
private DataContainer dataContainer;
private String driverClass;
public void init() {
try {
Class<?> newClass = Class.forName(driverClass);
if (newClass != null) {
CollectionDriver collectionDriver =
(CollectionDriver) newClass.newInstance();
registerDriver(collectionDriver);
setInstanceId(collectionInitializerService.getInstanceId());
}
} catch (ClassNotFoundException e) {
logger.error("Not found class " + driverClass + ": "
+ e.getLocalizedMessage());
} catch (InstantiationException | IllegalAccessException e) {
logger.error("Failed to instance class " + driverClass + ": "
+ e.getLocalizedMessage());
}
startCollection(collectOperationManager, dataContainer);
}
private void startCollection(CollectOperationManager collectOperationMgr, DataContainer container) {
collectOperationManager = collectOperationMgr;
collectOperationManager.setCollectionDriverManager(this);
dataContainer = container;
ScheduledExecutorService service = Executors.newScheduledThreadPool(2);
TimelyDataConsumer timelyDataConsumer = new TimelyDataConsumer(dataContainer, getDriver());
timelyDataConsumer.setCollectOperationManager(collectOperationManager);
TimelyDataProducer timelyDataProducer = new TimelyDataProducer(dataContainer, getDriver());
timelyDataProducer.setCollectOperationManager(collectOperationManager);
service.scheduleAtFixedRate(timelyDataConsumer, 20, 10, TimeUnit.SECONDS);
service.scheduleAtFixedRate(timelyDataProducer, 20, 10, TimeUnit.SECONDS);
}
private void registerDriver(CollectionDriver collectionDriver) {
this.driver = collectionDriver;
file =
CommonUtil.getConfigurationFile(driver.getConfigurationFilePath(),
"Configuration");
}
private void setInstanceId(String instanceId) {
driver.setInstanceId(instanceId);
}
public CollectionDriver getDriver() {
return driver;
}
public synchronized void changeCollectionSwitchStatus(boolean enabled) {
if (driver != null) {
logger.debug("In method changeCollectionSwitchStatus of class CollectionDriverManager, enabled is: "
+ enabled);
try {
new PropertiesUtil(getConfigurationFile()).setProperty(
driver.getCollectionSwitchName(), String.valueOf(enabled))
.saveLastKey();
} catch (IOException e) {
logger.warn("Fail to change configuration file of data collection: "
+ e.getLocalizedMessage());
}
} else {
logger.error("In the method changeCollectionSwitchStatus of class CollectionDriverManager, driver is null.");
}
}
public boolean getCollectionSwitchStatus() {
boolean collectionSwitchStatus = false;
if (getDriver() != null) {
File file = getConfigurationFile();
if (file != null) {
PropertiesUtil propertiesUtil = new PropertiesUtil(file);
if (propertiesUtil != null) {
String status =
propertiesUtil.getProperty(getDriver()
.getCollectionSwitchName());
if (status.equalsIgnoreCase("true")) {
collectionSwitchStatus = true;
}
}
}
} else {
logger.error("In the method changeCollectionSwitchStatus of class CollectionDriverManager, driver is null.");
}
return collectionSwitchStatus;
}
public static File getConfigurationFile() {
return file;
}
public void setDriver(CollectionDriver driver) {
this.driver = driver;
}
public static void setFile(File file) {
CollectionDriverManager.file = file;
}
public void setCollectionInitializerService(ICollectionInitializerService collectionInitializerService) {
this.collectionInitializerService = collectionInitializerService;
}
public void setCollectOperationManager(CollectOperationManager collectOperationManager) {
this.collectOperationManager = collectOperationManager;
}
public void setDataContainer(DataContainer dataContainer) {
this.dataContainer = dataContainer;
}
public void setDriverClass(String driverClass) {
this.driverClass = driverClass;
}
}