blob: c45a617f8ac38692b77cf8e99195b1b57487dea1 [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.skywalking.oap.query.graphql.resolver;
import graphql.kickstart.tools.GraphQLQueryResolver;
import java.io.IOException;
import java.util.Set;
import org.apache.skywalking.oap.server.core.CoreModule;
import org.apache.skywalking.oap.server.core.UnexpectedException;
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.TagType;
import org.apache.skywalking.oap.server.core.query.LogQueryService;
import org.apache.skywalking.oap.server.core.query.TagAutoCompleteQueryService;
import org.apache.skywalking.oap.server.core.query.enumeration.Order;
import org.apache.skywalking.oap.server.core.query.input.Duration;
import org.apache.skywalking.oap.server.core.query.input.LogQueryCondition;
import org.apache.skywalking.oap.server.core.query.type.Logs;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
import org.apache.skywalking.oap.server.library.util.CollectionUtils;
import org.apache.skywalking.oap.server.library.util.StringUtil;
import static java.util.Objects.isNull;
public class LogQuery implements GraphQLQueryResolver {
private final ModuleManager moduleManager;
private LogQueryService logQueryService;
private TagAutoCompleteQueryService tagQueryService;
public LogQuery(ModuleManager moduleManager) {
this.moduleManager = moduleManager;
}
private LogQueryService getQueryService() {
if (logQueryService == null) {
this.logQueryService = moduleManager.find(CoreModule.NAME).provider().getService(LogQueryService.class);
}
return logQueryService;
}
private TagAutoCompleteQueryService getTagQueryService() {
if (tagQueryService == null) {
this.tagQueryService = moduleManager.find(CoreModule.NAME).provider().getService(TagAutoCompleteQueryService.class);
}
return tagQueryService;
}
public boolean supportQueryLogsByKeywords() {
return getQueryService().supportQueryLogsByKeywords();
}
public Logs queryLogs(LogQueryCondition condition) throws IOException {
if (isNull(condition.getQueryDuration()) && isNull(condition.getRelatedTrace())) {
throw new UnexpectedException("The condition must contains either queryDuration or relatedTrace.");
}
Order queryOrder = isNull(condition.getQueryOrder()) ? Order.DES : condition.getQueryOrder();
if (CollectionUtils.isNotEmpty(condition.getTags())) {
condition.getTags().forEach(tag -> {
if (tag != null) {
if (StringUtil.isNotEmpty(tag.getKey())) {
tag.setKey(tag.getKey().trim());
}
if (StringUtil.isNotEmpty(tag.getValue())) {
tag.setValue(tag.getValue().trim());
}
}
});
}
return getQueryService().queryLogs(
condition.getServiceId(),
condition.getServiceInstanceId(),
condition.getEndpointId(),
condition.getRelatedTrace(),
condition.getPaging(),
queryOrder,
condition.getQueryDuration(),
condition.getTags(),
condition.getKeywordsOfContent(),
condition.getExcludingKeywordsOfContent()
);
}
public Set<String> queryLogTagAutocompleteKeys(final Duration queryDuration) throws IOException {
return getTagQueryService().queryTagAutocompleteKeys(TagType.LOG, queryDuration);
}
public Set<String> queryLogTagAutocompleteValues(final String tagKey, final Duration queryDuration) throws IOException {
return getTagQueryService().queryTagAutocompleteValues(TagType.LOG, tagKey, queryDuration);
}
}