blob: c692bd0931e5bdd3a15a627068c0b2695fe62fd4 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.servicecomb.transport.rest.vertx;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Stream;
import org.apache.servicecomb.transport.common.TransportConfigUtils;
import org.springframework.util.StringUtils;
import com.netflix.config.DynamicPropertyFactory;
import com.netflix.config.DynamicStringProperty;
import io.vertx.core.Verticle;
import io.vertx.core.http.Http2Settings;
import io.vertx.core.http.HttpServerOptions;
public final class TransportConfig {
public static final int DEFAULT_SERVER_CONNECTION_IDLE_TIMEOUT_SECOND = 60;
public static final boolean DEFAULT_SERVER_COMPRESSION_SUPPORT = false;
// 32K
public static final int DEFAULT_SERVER_MAX_HEADER_SIZE = 32 * 1024;
public static final String SERVICECOMB_CORS_CONFIG_BASE = "servicecomb.cors";
private static Class<? extends Verticle> restServerVerticle = RestServerVerticle.class;
private TransportConfig() {
}
public static Class<? extends Verticle> getRestServerVerticle() {
return restServerVerticle;
}
public static void setRestServerVerticle(Class<? extends Verticle> restServerVerticle) {
TransportConfig.restServerVerticle = restServerVerticle;
}
public static String getAddress() {
DynamicStringProperty address =
DynamicPropertyFactory.getInstance().getStringProperty("servicecomb.rest.address", null);
return address.get();
}
public static int getMaxFormAttributeSize() {
return DynamicPropertyFactory.getInstance()
.getIntProperty("servicecomb.rest.server.maxFormAttributeSize",
HttpServerOptions.DEFAULT_MAX_FORM_ATTRIBUTE_SIZE).get();
}
public static int getCompressionLevel() {
return DynamicPropertyFactory.getInstance()
.getIntProperty("servicecomb.rest.server.compressionLevel",
HttpServerOptions.DEFAULT_COMPRESSION_LEVEL).get();
}
public static int getMaxChunkSize() {
return DynamicPropertyFactory.getInstance()
.getIntProperty("servicecomb.rest.server.maxChunkSize",
HttpServerOptions.DEFAULT_MAX_CHUNK_SIZE).get();
}
public static int getDecoderInitialBufferSize() {
return DynamicPropertyFactory.getInstance()
.getIntProperty("servicecomb.rest.server.decoderInitialBufferSize",
HttpServerOptions.DEFAULT_DECODER_INITIAL_BUFFER_SIZE).get();
}
public static int getHttp2ConnectionWindowSize() {
return DynamicPropertyFactory.getInstance()
.getIntProperty("servicecomb.rest.server.http2ConnectionWindowSize",
HttpServerOptions.DEFAULT_HTTP2_CONNECTION_WINDOW_SIZE).get();
}
public static int getThreadCount() {
return TransportConfigUtils.readVerticleCount(
"servicecomb.rest.server.verticle-count",
"servicecomb.rest.server.thread-count");
}
public static int getConnectionIdleTimeoutInSeconds() {
return DynamicPropertyFactory.getInstance()
.getIntProperty("servicecomb.rest.server.connection.idleTimeoutInSeconds",
DEFAULT_SERVER_CONNECTION_IDLE_TIMEOUT_SECOND)
.get();
}
public static boolean getCompressed() {
return DynamicPropertyFactory.getInstance()
.getBooleanProperty("servicecomb.rest.server.compression", DEFAULT_SERVER_COMPRESSION_SUPPORT)
.get();
}
public static boolean getDecompressionSupported() {
return DynamicPropertyFactory.getInstance()
.getBooleanProperty("servicecomb.rest.server.decompressionSupported",
HttpServerOptions.DEFAULT_DECOMPRESSION_SUPPORTED).get();
}
public static long getMaxConcurrentStreams() {
return DynamicPropertyFactory.getInstance()
.getLongProperty("servicecomb.rest.server.http2.concurrentStreams",
HttpServerOptions.DEFAULT_INITIAL_SETTINGS_MAX_CONCURRENT_STREAMS)
.get();
}
public static long getHttp2HeaderTableSize() {
return DynamicPropertyFactory.getInstance()
.getLongProperty("servicecomb.rest.server.http2.HeaderTableSize",
Http2Settings.DEFAULT_HEADER_TABLE_SIZE).get();
}
public static boolean getPushEnabled() {
return DynamicPropertyFactory.getInstance()
.getBooleanProperty("servicecomb.rest.server.http2.pushEnabled",
Http2Settings.DEFAULT_ENABLE_PUSH).get();
}
public static int getInitialWindowSize() {
return DynamicPropertyFactory.getInstance()
.getIntProperty("servicecomb.rest.server.http2.initialWindowSize",
Http2Settings.DEFAULT_INITIAL_WINDOW_SIZE).get();
}
public static int getMaxFrameSize() {
return DynamicPropertyFactory.getInstance()
.getIntProperty("servicecomb.rest.server.http2.maxFrameSize",
Http2Settings.DEFAULT_MAX_FRAME_SIZE).get();
}
public static int getMaxHeaderListSize() {
return DynamicPropertyFactory.getInstance()
.getIntProperty("servicecomb.rest.server.http2.maxHeaderListSize",
Http2Settings.DEFAULT_MAX_HEADER_LIST_SIZE).get();
}
public static boolean getUseAlpn() {
return DynamicPropertyFactory.getInstance()
.getBooleanProperty("servicecomb.rest.server.http2.useAlpnEnabled", true)
.get();
}
public static int getMaxHeaderSize() {
return DynamicPropertyFactory.getInstance()
.getIntProperty("servicecomb.rest.server.maxHeaderSize", DEFAULT_SERVER_MAX_HEADER_SIZE)
.get();
}
public static boolean isCorsEnabled() {
return DynamicPropertyFactory.getInstance()
.getBooleanProperty(SERVICECOMB_CORS_CONFIG_BASE + ".enabled", false)
.get();
}
public static String getCorsAllowedOrigin() {
return DynamicPropertyFactory.getInstance()
.getStringProperty(SERVICECOMB_CORS_CONFIG_BASE + ".origin", "*")
.get();
}
public static boolean isCorsAllowCredentials() {
return DynamicPropertyFactory.getInstance()
.getBooleanProperty(SERVICECOMB_CORS_CONFIG_BASE + ".allowCredentials", false)
.get();
}
public static Set<String> getCorsAllowedHeaders() {
String allowedHeaders = DynamicPropertyFactory.getInstance()
.getStringProperty(SERVICECOMB_CORS_CONFIG_BASE + ".allowedHeader", null)
.get();
return convertToSet(allowedHeaders);
}
public static Set<String> getCorsAllowedMethods() {
String allowedMethods = DynamicPropertyFactory.getInstance()
.getStringProperty(SERVICECOMB_CORS_CONFIG_BASE + ".allowedMethod", null)
.get();
return convertToSet(allowedMethods);
}
public static Set<String> getCorsExposedHeaders() {
String exposedHeaders = DynamicPropertyFactory.getInstance()
.getStringProperty(SERVICECOMB_CORS_CONFIG_BASE + ".exposedHeader", null)
.get();
return convertToSet(exposedHeaders);
}
public static int getCorsMaxAge() {
return DynamicPropertyFactory.getInstance()
.getIntProperty(SERVICECOMB_CORS_CONFIG_BASE + ".maxAge", -1)
.get();
}
private static Set<String> convertToSet(String setString) {
Set<String> resultSet = new HashSet<>();
if (!StringUtils.isEmpty(setString)) {
String[] arrString = setString.split(",");
Stream.of(arrString).map(String::trim).filter(str -> !StringUtils.isEmpty(str))
.forEach(resultSet::add);
}
return resultSet;
}
public static int getMaxInitialLineLength() {
return DynamicPropertyFactory.getInstance()
.getIntProperty("servicecomb.rest.server.maxInitialLineLength",
HttpServerOptions.DEFAULT_MAX_INITIAL_LINE_LENGTH)
.get();
}
}