All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.influxdb.client.osgi.InfluxDBConnector Maven / Gradle / Ivy

/*
 * The MIT License
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
package com.influxdb.client.osgi;

import java.util.Dictionary;
import java.util.Hashtable;

import com.influxdb.client.InfluxDBClient;
import com.influxdb.client.InfluxDBClientFactory;

import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.ConfigurationPolicy;
import org.osgi.service.component.annotations.Deactivate;
import org.osgi.service.metatype.annotations.AttributeDefinition;
import org.osgi.service.metatype.annotations.AttributeType;
import org.osgi.service.metatype.annotations.Designate;
import org.osgi.service.metatype.annotations.ObjectClassDefinition;

/**
 * InfluxDB connector managing {@link InfluxDBClient} OSGi service.
 *
 * 

Service is used to define an InfluxDB connection. A {@link com.influxdb.client.InfluxDBClient} service is * registered by the connector, and it can be referenced by any custom OSGi component.

* *
    *
  1. InfluxDB V2 client is created if token is set.
  2. *
  3. InfluxDB V1 (V1.7+) client is created if token is not set but database.
  4. *
  5. InfluxDB V2 client is created (by username and password) otherwise.
  6. *
* *

The following connector properties are added to InfluxDB client too: organization, bucket, * database, url and alias.

*/ @Component(immediate = true, configurationPolicy = ConfigurationPolicy.REQUIRE, service = InfluxDBConnector.class) @Designate(ocd = InfluxDBConnector.Config.class) public class InfluxDBConnector { static final String URL = "url"; static final String ORGANIZATION = "organization"; static final String BUCKET = "bucket"; static final String DATABASE = "database"; static final String ALIAS = "alias"; /** * Configuration for InfluxDB connector. */ @ObjectClassDefinition(name = "InfluxDB connector", description = "InfluxDB connector configuration options") public @interface Config { /** * Alias (discriminator) to select {@link InfluxDBClient} service instance by OSGi target filter. */ @AttributeDefinition(name = "InfluxDB connector alias", description = "Alias that can be used by OSGi filters") String alias(); /** * InfluxDB URL, i.e. http://localhost:8086 */ @AttributeDefinition(name = "InfluxDB URL") String url(); /** * InfluxDB token. */ @AttributeDefinition(required = false, name = "InfluxDB token", type = AttributeType.PASSWORD) String token(); /** * InfluxDB organization. */ @AttributeDefinition(required = false, name = "InfluxDB organization") String organization(); /** * InfluxDB bucket. */ @AttributeDefinition(required = false, name = "InfluxDB bucket") String bucket(); /** * InfluxDB username. */ @AttributeDefinition(required = false, name = "InfluxDB username") String username(); /** * InfluxDB password. */ @AttributeDefinition(required = false, name = "InfluxDB password", type = AttributeType.PASSWORD) String password(); /** * InfluxDB (V1) database. */ @Deprecated @AttributeDefinition(required = false, name = "InfluxDB (V1) database") String database(); /** * InfluxDB (V1) retention policy. */ @Deprecated @AttributeDefinition(required = false, name = "InfluxDB (V1) retention policy") String retentionPolicy(); } private Config config; InfluxDBClient client; ServiceRegistration clientServiceRegistration; /** * Start OSGi component. * * @param bundleContext OSGi bundle context * @param config configuration */ @Activate void start(final BundleContext bundleContext, final Config config) { this.config = config; if (config.token() != null) { client = InfluxDBClientFactory.create( config.url(), config.token().toCharArray(), config.organization(), config.bucket()); } else if (config.database() != null) { client = InfluxDBClientFactory.createV1( config.url(), config.username(), config.password().toCharArray(), config.database(), config.retentionPolicy()); } else { client = InfluxDBClientFactory.create( config.url(), config.username(), config.password().toCharArray()); } try { clientServiceRegistration = bundleContext.registerService( InfluxDBClient.class, client, getServiceProperties()); } catch (RuntimeException ex) { client.close(); throw ex; } } /** * Stop OSGi component. */ @Deactivate void stop() { try { clientServiceRegistration.unregister(); client.close(); } finally { clientServiceRegistration = null; client = null; } } private Dictionary getServiceProperties() { final Dictionary props = new Hashtable<>(); props.put(URL, config.url()); if (config.organization() != null) { props.put(ORGANIZATION, config.organization()); } if (config.bucket() != null) { props.put(BUCKET, config.bucket()); } if (config.database() != null) { props.put(DATABASE, config.database()); } if (config.alias() != null) { props.put(ALIAS, config.alias()); } return props; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy