129 lines
5.7 KiB
Java
129 lines
5.7 KiB
Java
/*
|
|
* Copyright (c) 2014 Hewlett-Packard Development Company, L.P.
|
|
*
|
|
* 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 monasca.api.infrastructure;
|
|
|
|
import javax.inject.Singleton;
|
|
|
|
import org.influxdb.InfluxDB;
|
|
import org.influxdb.InfluxDBFactory;
|
|
|
|
import com.google.inject.AbstractModule;
|
|
import com.google.inject.Provides;
|
|
import com.google.inject.ProvisionException;
|
|
import monasca.api.ApiConfig;
|
|
import monasca.api.domain.model.alarm.AlarmRepo;
|
|
import monasca.api.domain.model.alarmdefinition.AlarmDefinitionRepo;
|
|
import monasca.api.domain.model.alarmstatehistory.AlarmStateHistoryRepo;
|
|
import monasca.api.domain.model.measurement.MeasurementRepo;
|
|
import monasca.api.domain.model.metric.MetricDefinitionRepo;
|
|
import monasca.api.domain.model.notificationmethod.NotificationMethodRepo;
|
|
import monasca.api.domain.model.statistic.StatisticRepo;
|
|
import monasca.api.infrastructure.persistence.influxdb.InfluxV8AlarmStateHistoryRepo;
|
|
import monasca.api.infrastructure.persistence.influxdb.InfluxV8MeasurementRepo;
|
|
import monasca.api.infrastructure.persistence.influxdb.InfluxV8MetricDefinitionRepo;
|
|
import monasca.api.infrastructure.persistence.influxdb.InfluxV8StatisticRepo;
|
|
import monasca.api.infrastructure.persistence.influxdb.InfluxV9AlarmStateHistoryRepo;
|
|
import monasca.api.infrastructure.persistence.influxdb.InfluxV9MeasurementRepo;
|
|
import monasca.api.infrastructure.persistence.influxdb.InfluxV9MetricDefinitionRepo;
|
|
import monasca.api.infrastructure.persistence.influxdb.InfluxV9RepoReader;
|
|
import monasca.api.infrastructure.persistence.influxdb.InfluxV9StatisticRepo;
|
|
import monasca.api.infrastructure.persistence.mysql.AlarmDefinitionMySqlRepoImpl;
|
|
import monasca.api.infrastructure.persistence.mysql.AlarmMySqlRepoImpl;
|
|
import monasca.api.infrastructure.persistence.mysql.NotificationMethodMySqlRepoImpl;
|
|
import monasca.api.infrastructure.persistence.vertica.AlarmStateHistoryVerticaRepoImpl;
|
|
import monasca.api.infrastructure.persistence.vertica.MeasurementVerticaRepoImpl;
|
|
import monasca.api.infrastructure.persistence.vertica.MetricDefinitionVerticaRepoImpl;
|
|
import monasca.api.infrastructure.persistence.vertica.StatisticVerticaRepoImpl;
|
|
|
|
/**
|
|
* Infrastructure layer bindings.
|
|
*/
|
|
public class InfrastructureModule extends AbstractModule {
|
|
private ApiConfig config;
|
|
|
|
private static final String VERTICA = "vertica";
|
|
private static final String INFLUXDB = "influxdb";
|
|
private static final String INFLUXDB_V8 = "v8";
|
|
private static final String INFLUXDB_V9 = "v9";
|
|
|
|
public InfrastructureModule(ApiConfig config) {
|
|
this.config = config;
|
|
}
|
|
|
|
@Override
|
|
protected void configure() {
|
|
|
|
// Bind repositories
|
|
bind(AlarmRepo.class).to(AlarmMySqlRepoImpl.class).in(Singleton.class);
|
|
bind(AlarmDefinitionRepo.class).to(AlarmDefinitionMySqlRepoImpl.class).in(
|
|
Singleton.class);
|
|
|
|
if (config.databaseConfiguration.getDatabaseType().trim().equalsIgnoreCase(VERTICA)) {
|
|
|
|
bind(AlarmStateHistoryRepo.class).to(AlarmStateHistoryVerticaRepoImpl.class).in(
|
|
Singleton.class);
|
|
bind(MetricDefinitionRepo.class).to(MetricDefinitionVerticaRepoImpl.class).in(
|
|
Singleton.class);
|
|
bind(MeasurementRepo.class).to(MeasurementVerticaRepoImpl.class).in(
|
|
Singleton.class);
|
|
bind(StatisticRepo.class).to(StatisticVerticaRepoImpl.class).in(Singleton.class);
|
|
|
|
} else if (config.databaseConfiguration.getDatabaseType().trim().equalsIgnoreCase(INFLUXDB)) {
|
|
|
|
// Check for null to not break existing configs. If no version, default to V8.
|
|
if (config.influxDB.getVersion() == null
|
|
|| config.influxDB.getVersion().trim().equalsIgnoreCase(INFLUXDB_V8)) {
|
|
|
|
bind(AlarmStateHistoryRepo.class).to(InfluxV8AlarmStateHistoryRepo.class)
|
|
.in(Singleton.class);
|
|
bind(MetricDefinitionRepo.class).to(InfluxV8MetricDefinitionRepo.class).in(Singleton.class);
|
|
bind(MeasurementRepo.class).to(InfluxV8MeasurementRepo.class).in(Singleton.class);
|
|
bind(StatisticRepo.class).to(InfluxV8StatisticRepo.class).in(Singleton.class);
|
|
|
|
} else if (config.influxDB.getVersion().trim().equalsIgnoreCase(INFLUXDB_V9)) {
|
|
|
|
bind(InfluxV9RepoReader.class).in(Singleton.class);
|
|
|
|
bind(AlarmStateHistoryRepo.class).to(InfluxV9AlarmStateHistoryRepo.class)
|
|
.in(Singleton.class);
|
|
bind(MetricDefinitionRepo.class).to(InfluxV9MetricDefinitionRepo.class).in(Singleton.class);
|
|
bind(MeasurementRepo.class).to(InfluxV9MeasurementRepo.class).in(Singleton.class);
|
|
bind(StatisticRepo.class).to(InfluxV9StatisticRepo.class).in(Singleton.class);
|
|
|
|
} else {
|
|
|
|
throw new ProvisionException(
|
|
"Found unknown Influxdb version: " + config.influxDB.getVersion() + "."
|
|
+ " Supported Influxdb versions are 'v8' and 'v9'. Please check your config file");
|
|
|
|
}
|
|
|
|
} else {
|
|
throw new ProvisionException("Failed to detect supported database. Supported databases are "
|
|
+ "'vertica' and 'influxdb'. Check your config file.");
|
|
}
|
|
|
|
bind(NotificationMethodRepo.class).to(NotificationMethodMySqlRepoImpl.class).in(
|
|
Singleton.class);
|
|
}
|
|
|
|
@Provides
|
|
InfluxDB provideInfluxDB() {
|
|
InfluxDB influxDB =
|
|
InfluxDBFactory.connect(this.config.influxDB.getUrl(), this.config.influxDB.getUser(),
|
|
this.config.influxDB.getPassword());
|
|
return influxDB;
|
|
}
|
|
}
|