Skip to content

Commit

Permalink
Support search enable configuration (#3579)
Browse files Browse the repository at this point in the history
  • Loading branch information
mrproliu committed Oct 26, 2023
1 parent fa681ee commit b34a84e
Show file tree
Hide file tree
Showing 10 changed files with 104 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ public class HTTPQueryConfig extends ModuleConfig {
private int uiQueryLimit = 10;
private String uiEnvironment = "";
private long uiDefaultLookback = 900000L;
private boolean uiSearchEnabled = true;
private String allowedOrigins = "*";

private boolean uiEnable = true;
Expand All @@ -46,14 +45,14 @@ public class HTTPQueryConfig extends ModuleConfig {
private double dependencyLowErrorRate = 0.5; // 50% of calls in error turns line yellow
private double dependencyHighErrorRate = 0.75;// 75% of calls in error turns line red

public ZipkinQueryConfig toSkyWalkingConfig() {
public ZipkinQueryConfig toSkyWalkingConfig(boolean searchEnabled) {
final ZipkinQueryConfig result = new ZipkinQueryConfig();
result.setLookback(lookback);
result.setNamesMaxAge(namesMaxAge);
result.setUiQueryLimit(uiQueryLimit);
result.setUiEnvironment(uiEnvironment);
result.setUiDefaultLookback(uiDefaultLookback);
result.setUiSearchEnabled(uiSearchEnabled);
result.setUiSearchEnabled(searchEnabled);
return result;
}

Expand Down Expand Up @@ -97,14 +96,6 @@ public void setUiDefaultLookback(long uiDefaultLookback) {
this.uiDefaultLookback = uiDefaultLookback;
}

public boolean getUiSearchEnabled() {
return uiSearchEnabled;
}

public void setUiSearchEnabled(boolean uiSearchEnabled) {
this.uiSearchEnabled = uiSearchEnabled;
}

public boolean getStrictTraceId() {
return strictTraceId;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
import java.io.IOException;
import java.io.StringWriter;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
Expand All @@ -56,15 +57,69 @@
public class HTTPQueryHandler extends ZipkinQueryHandler {
private final HTTPQueryConfig config;
private final ModuleManager moduleManager;
private final boolean searchEnable;

private final AggregatedHttpResponse EMPTY_ARRAY_RESPONSE = AggregatedHttpResponse.of(ResponseHeaders.builder(HttpStatus.OK)
.contentType(MediaType.JSON)
.build(), HttpData.wrap("[]".getBytes(StandardCharsets.UTF_8)));

private IZipkinQueryDAO zipkinQueryDAO;
private IZipkinDependencyQueryDAO dependencyQueryDAO;
public HTTPQueryHandler(HTTPQueryConfig config, ModuleManager moduleManager) {
super(config.toSkyWalkingConfig(), moduleManager);
public HTTPQueryHandler(boolean searchEnable, HTTPQueryConfig config, ModuleManager moduleManager) {
super(config.toSkyWalkingConfig(searchEnable), moduleManager);
this.searchEnable = searchEnable;
this.config = config;
this.moduleManager = moduleManager;
}

@Override
public AggregatedHttpResponse getServiceNames() throws IOException {
if (!searchEnable) {
return EMPTY_ARRAY_RESPONSE;
}
return super.getServiceNames();
}

@Override
public AggregatedHttpResponse getRemoteServiceNames(String serviceName) throws IOException {
if (!searchEnable) {
return EMPTY_ARRAY_RESPONSE;
}
return super.getRemoteServiceNames(serviceName);
}

@Override
public AggregatedHttpResponse getAutocompleteKeys() throws IOException {
if (!searchEnable) {
return EMPTY_ARRAY_RESPONSE;
}
return super.getAutocompleteKeys();
}

@Override
public AggregatedHttpResponse getAutocompleteValues(String key) throws IOException {
if (!searchEnable) {
return EMPTY_ARRAY_RESPONSE;
}
return super.getAutocompleteValues(key);
}

@Override
public AggregatedHttpResponse getTraces(Optional<String> serviceName, Optional<String> remoteServiceName, Optional<String> spanName, Optional<String> annotationQuery, Optional<Long> minDuration, Optional<Long> maxDuration, Optional<Long> endTs, Optional<Long> lookback, int limit) throws IOException {
if (!searchEnable) {
return EMPTY_ARRAY_RESPONSE;
}
return super.getTraces(serviceName, remoteServiceName, spanName, annotationQuery, minDuration, maxDuration, endTs, lookback, limit);
}

@Override
public AggregatedHttpResponse getSpanNames(String serviceName) throws IOException {
if (!searchEnable) {
return EMPTY_ARRAY_RESPONSE;
}
return super.getSpanNames(serviceName);
}

@Override
public AggregatedHttpResponse getUIConfig() throws IOException {
StringWriter writer = new StringWriter();
Expand All @@ -73,7 +128,7 @@ public AggregatedHttpResponse getUIConfig() throws IOException {
generator.writeStringField("environment", config.getUiEnvironment());
generator.writeNumberField("queryLimit", config.getUiQueryLimit());
generator.writeNumberField("defaultLookback", config.getUiDefaultLookback());
generator.writeBooleanField("searchEnabled", config.getUiSearchEnabled());
generator.writeBooleanField("searchEnabled", searchEnable);
generator.writeObjectFieldStart("dependency");
generator.writeBooleanField("enabled", config.getDependencyEnabled());
generator.writeNumberField("lowErrorRate", config.getDependencyLowErrorRate());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import com.linecorp.armeria.server.file.HttpFile;
import org.apache.skywalking.oap.query.zipkin.ZipkinQueryModule;
import org.apache.skywalking.oap.server.core.CoreModule;
import org.apache.skywalking.oap.server.core.config.ConfigService;
import org.apache.skywalking.oap.server.core.server.HTTPHandlerRegister;
import org.apache.skywalking.oap.server.library.module.ModuleConfig;
import org.apache.skywalking.oap.server.library.module.ModuleDefine;
Expand All @@ -37,6 +38,7 @@
import org.apache.skywalking.oap.server.library.server.http.HTTPServer;
import org.apache.skywalking.oap.server.library.server.http.HTTPServerConfig;
import zipkin.server.core.services.HTTPConfigurableServer;
import zipkin.server.core.services.ZipkinConfigService;

import java.io.IOException;
import java.io.InputStream;
Expand Down Expand Up @@ -115,7 +117,9 @@ public void start() throws ServiceNotProvidedException, ModuleStartException {
server.decorator(corsBuilder::build);
};

final HTTPQueryHandler httpService = new HTTPQueryHandler(moduleConfig, getManager());
final ConfigService configService = getManager().find(CoreModule.NAME).provider().getService(ConfigService.class);
final boolean searchEnable = ((ZipkinConfigService) configService).getSearchEnable();
final HTTPQueryHandler httpService = new HTTPQueryHandler(searchEnable, moduleConfig, getManager());
if (httpServer != null) {
httpServer.addHandler(httpService, Collections.singletonList(HttpMethod.GET));
httpServer.addHandler(corsConfiguration, Arrays.asList(HttpMethod.GET, HttpMethod.POST));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,8 @@ public class CoreModuleConfig extends ModuleConfig {
*/
private int remoteTimeout = 20;

private boolean searchEnable = true;

private static final String DEFAULT_SEARCHABLE_TAG_KEYS = String.join(
Const.COMMA,
"http.method"
Expand Down Expand Up @@ -354,4 +356,12 @@ public int getRestMaxRequestHeaderSize() {
public void setRestMaxRequestHeaderSize(int restMaxRequestHeaderSize) {
this.restMaxRequestHeaderSize = restMaxRequestHeaderSize;
}

public boolean getSearchEnable() {
return searchEnable;
}

public void setSearchEnable(boolean searchEnable) {
this.searchEnable = searchEnable;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -97,17 +97,16 @@
public class CoreModuleProvider extends ModuleProvider {
private CoreModuleConfig moduleConfig;

private EndpointNameGrouping endpointNameGrouping;
private final ZipkinSourceReceiverImpl receiver;
private final ZipkinAnnotationScan annotationScan;
private final StorageModels storageModels;
private final ZipkinAnnotationScan annotationScan;
private EndpointNameGrouping endpointNameGrouping;
private ZipkinSourceReceiverImpl receiver;
private RemoteClientManager remoteClientManager;
private GRPCServer grpcServer;
private HTTPServer httpServer;

public CoreModuleProvider() {
this.annotationScan = new ZipkinAnnotationScan();
this.receiver = new ZipkinSourceReceiverImpl();
this.storageModels = new StorageModels();
}

Expand Down Expand Up @@ -147,8 +146,9 @@ public void prepare() throws ServiceNotProvidedException, ModuleStartException {
);
this.registerServiceImplementation(NamingControl.class, namingControl);

receiver = new ZipkinSourceReceiverImpl(moduleConfig.getSearchEnable());
annotationScan.registerListener(new DefaultScopeDefine.Listener());
annotationScan.registerListener(new ZipkinStreamAnnotationListener(getManager()));
annotationScan.registerListener(new ZipkinStreamAnnotationListener(getManager(), moduleConfig.getSearchEnable()));

HTTPServerConfig httpServerConfig = HTTPServerConfig.builder()
.host(moduleConfig.getRestHost())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,16 @@
import io.github.classgraph.ScanResult;
import org.apache.skywalking.oap.server.core.analysis.DispatcherManager;
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.TagAutocompleteDispatcher;
import org.apache.skywalking.oap.server.core.zipkin.dispatcher.ZipkinSpanRecordDispatcher;

import java.io.IOException;

public class ZipkinDispatcherManager extends DispatcherManager {
private final boolean searchEnable;

public ZipkinDispatcherManager(boolean searchEnable) {
this.searchEnable = searchEnable;
}

@Override
public void scan() throws IOException, IllegalAccessException, InstantiationException {
Expand All @@ -42,6 +48,10 @@ public void scan() throws IOException, IllegalAccessException, InstantiationExce
@Override
public void addIfAsSourceDispatcher(Class aClass) throws IllegalAccessException, InstantiationException {
if (aClass.getSimpleName().startsWith("Zipkin") || aClass.equals(TagAutocompleteDispatcher.class)) {
// If search is disabled, only the span can be stored.
if (!searchEnable && !aClass.equals(ZipkinSpanRecordDispatcher.class)) {
return;
}
super.addIfAsSourceDispatcher(aClass);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@
public class ZipkinSourceReceiverImpl implements SourceReceiver {
private final ZipkinDispatcherManager mgr;

public ZipkinSourceReceiverImpl() {
mgr = new ZipkinDispatcherManager();
public ZipkinSourceReceiverImpl(boolean searchEnable) {
mgr = new ZipkinDispatcherManager(searchEnable);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,24 @@
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.TagAutocompleteData;
import org.apache.skywalking.oap.server.core.analysis.manual.spanattach.SpanAttachedEventRecord;
import org.apache.skywalking.oap.server.core.storage.StorageException;
import org.apache.skywalking.oap.server.core.zipkin.ZipkinSpanRecord;
import org.apache.skywalking.oap.server.library.module.ModuleDefineHolder;

public class ZipkinStreamAnnotationListener extends StreamAnnotationListener {
private final boolean searchEnable;

public ZipkinStreamAnnotationListener(ModuleDefineHolder moduleDefineHolder) {
public ZipkinStreamAnnotationListener(ModuleDefineHolder moduleDefineHolder, boolean searchEnable) {
super(moduleDefineHolder);
this.searchEnable = searchEnable;
}

@Override
public void notify(Class aClass) throws StorageException {
// only including all zipkin streaming
if (aClass.getSimpleName().startsWith("Zipkin") || aClass.equals(TagAutocompleteData.class) || aClass.equals(SpanAttachedEventRecord.class)) {
if (!searchEnable && !aClass.equals(ZipkinSpanRecord.class)) {
return;
}
super.notify(aClass);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ public ZipkinConfigService(CoreModuleConfig moduleConfig, ModuleProvider provide
this.moduleConfig = moduleConfig;
}

public boolean getSearchEnable() {
return moduleConfig.getSearchEnable();
}

public ZipkinReceiverConfig toZipkinReceiverConfig() {
final ZipkinReceiverConfig config = new ZipkinReceiverConfig();
config.setSearchableTracesTags(moduleConfig.getSearchableTracesTags());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ core:
restIdleTimeOut: ${ZIPKIN_REST_IDLE_TIMEOUT:30000}
restAcceptQueueSize: ${ZIPKIN_REST_QUEUE_SIZE:0}
restMaxRequestHeaderSize: ${ZIPKIN_REST_MAX_REQUEST_HEADER_SIZE:8192}
searchEnable: ${ZIPKIN_SEARCH_ENABLED:true}

storage: &storage
selector: ${ZIPKIN_STORAGE:h2}
Expand Down

0 comments on commit b34a84e

Please sign in to comment.