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

io.stargate.grpc.GrpcActivator Maven / Gradle / Ivy

There is a newer version: 2.1.0-BETA-19
Show newest version
/*
 * Copyright The Stargate Authors
 *
 * 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 io.stargate.grpc;

import io.stargate.auth.AuthenticationService;
import io.stargate.core.activator.BaseActivator;
import io.stargate.core.metrics.api.Metrics;
import io.stargate.db.DbActivator;
import io.stargate.db.Persistence;
import io.stargate.grpc.impl.GrpcImpl;
import io.stargate.grpc.metrics.api.GrpcMetricsTagProvider;
import io.stargate.grpc.metrics.api.NoopGrpcMetricsTagProvider;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;

public class GrpcActivator extends BaseActivator {

  /**
   * Id if the {@link io.stargate.grpc.metrics.api.GrpcMetricsTagProvider}. If not set, this
   * activator will register a default impl.
   */
  private static final String GRPC_TAG_PROVIDER_ID =
      System.getProperty("stargate.metrics.grpc_tag_provider.id");

  private GrpcImpl grpc;
  private final ServicePointer metrics = ServicePointer.create(Metrics.class);
  private final ServicePointer grpcTagProvider =
      ServicePointer.create(GrpcMetricsTagProvider.class);
  private final ServicePointer authentication =
      ServicePointer.create(
          AuthenticationService.class,
          "AuthIdentifier",
          System.getProperty("stargate.auth_id", "AuthTableBasedService"));
  private final ServicePointer persistence =
      ServicePointer.create(Persistence.class, "Identifier", DbActivator.PERSISTENCE_IDENTIFIER);

  public GrpcActivator() {
    super("gRPC", true);
  }

  @Override
  protected List createServices() {
    if (grpc != null) { // Already started
      return null;
    }

    GrpcMetricsTagProvider grpcMetricsTagProvider =
        Optional.ofNullable(grpcTagProvider.get()).orElseGet(NoopGrpcMetricsTagProvider::new);

    grpc =
        new GrpcImpl(
            persistence.get(), metrics.get(), authentication.get(), grpcMetricsTagProvider);
    grpc.start();

    return Collections.emptyList();
  }

  @Override
  protected void stopService() {
    if (grpc == null) { // Not started
      return;
    }
    grpc.stop();
    grpc = null;
  }

  @Override
  protected List> dependencies() {
    ArrayList> dependencies = new ArrayList<>();
    dependencies.add(metrics);
    dependencies.add(persistence);
    dependencies.add(authentication);

    // depend on the gRPC tag provider only if it's set
    if (null != GRPC_TAG_PROVIDER_ID) {
      dependencies.add(grpcTagProvider);
    }

    return dependencies;
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy