blob: 465c913bde3022242f2339c23a0becc379d652bd [file] [log] [blame]
// Copyright (C) 2021 The Android Open Source Project
//
// 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.googlesource.gerrit.plugins.pubsub;
import com.google.gerrit.common.Nullable;
import com.google.gerrit.extensions.annotations.PluginName;
import com.google.gerrit.server.config.GerritInstanceId;
import com.google.gerrit.server.config.PluginConfig;
import com.google.gerrit.server.config.PluginConfigFactory;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@Singleton
public class PubSubConfiguration {
private static final String DEFAULT_NUMBER_OF_SUBSCRIBERS = "6";
private static final String DEFAULT_ACK_DEADLINE_SECONDS = "10";
private static final String DEFAULT_SUBSCTIPRION_TIMEOUT = "10";
private static final String DEFAULT_SHUTDOWN_TIMEOUT = "10";
private final String gcloudProject;
private final String subscriptionId;
private final Integer numberOfSubscribers;
private final String privateKeyLocation;
private final Integer ackDeadlineSeconds;
private final Long subscribtionTimeoutInSeconds;
private final Long shutdownTimeoutInSeconds;
private final PluginConfig fromGerritConfig;
@Inject
public PubSubConfiguration(
PluginConfigFactory configFactory,
@PluginName String pluginName,
@Nullable @GerritInstanceId String instanceId) {
this.fromGerritConfig = configFactory.getFromGerritConfig(pluginName);
this.gcloudProject = getMandatoryString("gcloudProject");
this.subscriptionId = getMandatoryString("subscriptionId", instanceId);
this.privateKeyLocation = getMandatoryString("privateKeyLocation");
this.numberOfSubscribers =
Integer.parseInt(
fromGerritConfig.getString("numberOfSubscribers", DEFAULT_NUMBER_OF_SUBSCRIBERS));
this.ackDeadlineSeconds =
Integer.parseInt(
fromGerritConfig.getString("ackDeadlineSeconds", DEFAULT_ACK_DEADLINE_SECONDS));
this.subscribtionTimeoutInSeconds =
Long.parseLong(
fromGerritConfig.getString(
"subscribtionTimeoutInSeconds", DEFAULT_SUBSCTIPRION_TIMEOUT));
this.shutdownTimeoutInSeconds =
Long.parseLong(
fromGerritConfig.getString("shutdownTimeoutInSeconds", DEFAULT_SHUTDOWN_TIMEOUT));
}
public String getGCloudProject() {
return gcloudProject;
}
public Integer getNumberOfSubscribers() {
return numberOfSubscribers;
}
public String getPrivateKeyLocation() {
return privateKeyLocation;
}
public String getSubscriptionId() {
return subscriptionId;
}
public Integer getAckDeadlineSeconds() {
return ackDeadlineSeconds;
}
public Long getSubscribtionTimeoutInSeconds() {
return subscribtionTimeoutInSeconds;
}
public Long getShutdownTimeoutInSeconds() {
return shutdownTimeoutInSeconds;
}
private String getMandatoryString(String name) throws IllegalStateException {
return getMandatoryString(name, null);
}
private String getMandatoryString(String name, String defaultValue) throws IllegalStateException {
String value = fromGerritConfig.getString(name, defaultValue);
if (value == null) {
throw new IllegalStateException(
String.format("Invalid configuration: parameter '%s' is mandatory", name));
}
return value;
}
}