Unify query services and DAOs codes time range condition to `Duration`. (#9702)
This commit is contained in:
parent
fba069f4fb
commit
4a7e8191dd
|
|
@ -27,6 +27,7 @@
|
|||
* Fix the wrong watch semantics in Kubernetes watchers, which causes heavy traffic to API server in some Kubernetes clusters,
|
||||
we should use `Get State and Start at Most Recent` semantic instead of `Start at Exact`
|
||||
because we don't need the changing history events, see https://kubernetes.io/docs/reference/using-api/api-concepts/#semantics-for-watch.
|
||||
* Unify query services and DAOs codes time range condition to `Duration`.
|
||||
|
||||
#### UI
|
||||
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import java.io.IOException;
|
|||
import java.util.List;
|
||||
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.Tag;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Alarms;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Pagination;
|
||||
import org.apache.skywalking.oap.server.core.storage.StorageModule;
|
||||
|
|
@ -45,9 +46,9 @@ public class AlarmQueryService implements Service {
|
|||
return alarmQueryDAO;
|
||||
}
|
||||
|
||||
public Alarms getAlarm(final Integer scopeId, final String keyword, final Pagination paging, final long startTB,
|
||||
final long endTB, final List<Tag> tags) throws IOException {
|
||||
public Alarms getAlarm(final Integer scopeId, final String keyword, final Pagination paging,
|
||||
final Duration duration, final List<Tag> tags) throws IOException {
|
||||
PaginationUtils.Page page = PaginationUtils.INSTANCE.exchange(paging);
|
||||
return getAlarmQueryDAO().getAlarm(scopeId, keyword, page.getLimit(), page.getFrom(), startTB, endTB, tags);
|
||||
return getAlarmQueryDAO().getAlarm(scopeId, keyword, page.getLimit(), page.getFrom(), duration, tags);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import java.io.IOException;
|
|||
import java.util.Optional;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.skywalking.oap.server.core.browser.source.BrowserErrorCategory;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.query.type.BrowserErrorLogs;
|
||||
import org.apache.skywalking.oap.server.core.query.type.ErrorCategory;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Pagination;
|
||||
|
|
@ -47,8 +48,7 @@ public class BrowserLogQueryService implements Service {
|
|||
final String serviceVersionId,
|
||||
final String pagePathId,
|
||||
final ErrorCategory category,
|
||||
final long startSecondTB,
|
||||
final long endSecondTB,
|
||||
final Duration duration,
|
||||
final Pagination paging) throws IOException {
|
||||
PaginationUtils.Page page = PaginationUtils.INSTANCE.exchange(paging);
|
||||
BrowserErrorCategory errorCategory = Optional.ofNullable(category)
|
||||
|
|
@ -57,7 +57,7 @@ public class BrowserLogQueryService implements Service {
|
|||
.orElse(null);
|
||||
|
||||
return getBrowserLogQueryDAO().queryBrowserErrorLogs(
|
||||
serviceId, serviceVersionId, pagePathId, errorCategory, startSecondTB, endSecondTB,
|
||||
serviceId, serviceVersionId, pagePathId, errorCategory, duration,
|
||||
page.getLimit(),
|
||||
page.getFrom()
|
||||
);
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ package org.apache.skywalking.oap.server.core.query;
|
|||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.library.util.StringUtil;
|
||||
import org.apache.skywalking.oap.server.core.analysis.IDManager;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.Tag;
|
||||
|
|
@ -61,8 +62,7 @@ public class LogQueryService implements Service {
|
|||
TraceScopeCondition relatedTrace,
|
||||
Pagination paging,
|
||||
Order queryOrder,
|
||||
final long startTB,
|
||||
final long endTB,
|
||||
final Duration duration,
|
||||
final List<Tag> tags,
|
||||
List<String> keywordsOfContent,
|
||||
List<String> excludingKeywordsOfContent) throws IOException {
|
||||
|
|
@ -85,7 +85,7 @@ public class LogQueryService implements Service {
|
|||
relatedTrace,
|
||||
queryOrder,
|
||||
page.getFrom(), page.getLimit(),
|
||||
startTB, endTB, tags,
|
||||
duration, tags,
|
||||
keywordsOfContent, excludingKeywordsOfContent
|
||||
);
|
||||
logs.getLogs().forEach(log -> {
|
||||
|
|
|
|||
|
|
@ -78,9 +78,9 @@ public class MetadataQueryService implements org.apache.skywalking.oap.server.li
|
|||
return getMetadataQueryDAO().getInstance(instanceId);
|
||||
}
|
||||
|
||||
public List<ServiceInstance> listInstances(final long startTimestamp, final long endTimestamp,
|
||||
public List<ServiceInstance> listInstances(final Duration duration,
|
||||
final String serviceId) throws IOException {
|
||||
return getMetadataQueryDAO().listInstances(startTimestamp, endTimestamp, serviceId)
|
||||
return getMetadataQueryDAO().listInstances(duration, serviceId)
|
||||
.stream().distinct().collect(Collectors.toList());
|
||||
}
|
||||
|
||||
|
|
@ -108,7 +108,7 @@ public class MetadataQueryService implements org.apache.skywalking.oap.server.li
|
|||
if (duration.getEndTimeBucket() < duration.getStartTimeBucket()) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return getMetadataQueryDAO().listProcesses(instanceId, duration.getStartTimeBucket(), duration.getEndTimeBucket(), true);
|
||||
return getMetadataQueryDAO().listProcesses(instanceId, duration, true);
|
||||
}
|
||||
|
||||
public Process getProcess(String processId) throws IOException {
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import java.io.IOException;
|
|||
import java.util.Set;
|
||||
import org.apache.skywalking.oap.server.core.CoreModuleConfig;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.TagType;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.storage.StorageModule;
|
||||
import org.apache.skywalking.oap.server.core.storage.query.ITagAutoCompleteQueryDAO;
|
||||
import org.apache.skywalking.oap.server.library.module.ModuleManager;
|
||||
|
|
@ -45,16 +46,14 @@ public class TagAutoCompleteQueryService implements Service {
|
|||
}
|
||||
|
||||
public Set<String> queryTagAutocompleteKeys(final TagType tagType,
|
||||
final long startSecondTB,
|
||||
final long endSecondTB) throws IOException {
|
||||
return getTagAutoCompleteQueryDAO().queryTagAutocompleteKeys(tagType, config.getAutocompleteTagKeysQueryMaxSize(), startSecondTB, endSecondTB);
|
||||
final Duration duration) throws IOException {
|
||||
return getTagAutoCompleteQueryDAO().queryTagAutocompleteKeys(tagType, config.getAutocompleteTagKeysQueryMaxSize(), duration);
|
||||
}
|
||||
|
||||
public Set<String> queryTagAutocompleteValues(final TagType tagType,
|
||||
final String tagKey,
|
||||
final long startSecondTB,
|
||||
final long endSecondTB) throws IOException {
|
||||
final Duration duration) throws IOException {
|
||||
return getTagAutoCompleteQueryDAO().queryTagAutocompleteValues(
|
||||
tagType, tagKey, config.getAutocompleteTagValuesQueryMaxSize(), startSecondTB, endSecondTB);
|
||||
tagType, tagKey, config.getAutocompleteTagValuesQueryMaxSize(), duration);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ import org.apache.skywalking.oap.server.core.Const;
|
|||
import org.apache.skywalking.oap.server.core.CoreModule;
|
||||
import org.apache.skywalking.oap.server.core.analysis.IDManager;
|
||||
import org.apache.skywalking.oap.server.core.config.IComponentLibraryCatalogService;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Call;
|
||||
import org.apache.skywalking.oap.server.core.query.type.EndpointNode;
|
||||
import org.apache.skywalking.oap.server.core.query.type.EndpointTopology;
|
||||
|
|
@ -72,23 +73,22 @@ public class TopologyQueryService implements Service {
|
|||
return componentLibraryCatalogService;
|
||||
}
|
||||
|
||||
public Topology getGlobalTopology(final long startTB,
|
||||
final long endTB) throws IOException {
|
||||
public Topology getGlobalTopology(final Duration duration) throws IOException {
|
||||
List<Call.CallDetail> serviceRelationServerCalls = getTopologyQueryDAO().loadServiceRelationsDetectedAtServerSide(
|
||||
startTB, endTB);
|
||||
duration);
|
||||
List<Call.CallDetail> serviceRelationClientCalls = getTopologyQueryDAO().loadServiceRelationDetectedAtClientSide(
|
||||
startTB, endTB);
|
||||
duration);
|
||||
|
||||
ServiceTopologyBuilder builder = new ServiceTopologyBuilder(moduleManager);
|
||||
return builder.build(serviceRelationClientCalls, serviceRelationServerCalls);
|
||||
}
|
||||
|
||||
public Topology getServiceTopology(final long startTB, final long endTB,
|
||||
public Topology getServiceTopology(final Duration duration,
|
||||
final List<String> serviceIds) throws IOException {
|
||||
List<Call.CallDetail> serviceRelationClientCalls = getTopologyQueryDAO().loadServiceRelationDetectedAtClientSide(
|
||||
startTB, endTB, serviceIds);
|
||||
duration, serviceIds);
|
||||
List<Call.CallDetail> serviceRelationServerCalls = getTopologyQueryDAO().loadServiceRelationsDetectedAtServerSide(
|
||||
startTB, endTB, serviceIds);
|
||||
duration, serviceIds);
|
||||
|
||||
ServiceTopologyBuilder builder = new ServiceTopologyBuilder(moduleManager);
|
||||
Topology topology = builder.build(serviceRelationClientCalls, serviceRelationServerCalls);
|
||||
|
|
@ -109,7 +109,7 @@ public class TopologyQueryService implements Service {
|
|||
if (CollectionUtils.isNotEmpty(outScopeSourceServiceIds)) {
|
||||
// If exist, query them as the server side to get the target's component.
|
||||
List<Call.CallDetail> sourceCalls = getTopologyQueryDAO().loadServiceRelationsDetectedAtServerSide(
|
||||
startTB, endTB, outScopeSourceServiceIds);
|
||||
duration, outScopeSourceServiceIds);
|
||||
topology.getNodes().forEach(node -> {
|
||||
if (Strings.isNullOrEmpty(node.getType())) {
|
||||
for (Call.CallDetail call : sourceCalls) {
|
||||
|
|
@ -127,22 +127,21 @@ public class TopologyQueryService implements Service {
|
|||
|
||||
public ServiceInstanceTopology getServiceInstanceTopology(final String clientServiceId,
|
||||
final String serverServiceId,
|
||||
final long startTB,
|
||||
final long endTB) throws IOException {
|
||||
final Duration duration) throws IOException {
|
||||
List<Call.CallDetail> serviceInstanceRelationClientCalls = getTopologyQueryDAO().loadInstanceRelationDetectedAtClientSide(
|
||||
clientServiceId, serverServiceId, startTB, endTB);
|
||||
clientServiceId, serverServiceId, duration);
|
||||
List<Call.CallDetail> serviceInstanceRelationServerCalls = getTopologyQueryDAO().loadInstanceRelationDetectedAtServerSide(
|
||||
clientServiceId, serverServiceId, startTB, endTB);
|
||||
clientServiceId, serverServiceId, duration);
|
||||
|
||||
ServiceInstanceTopologyBuilder builder = new ServiceInstanceTopologyBuilder(moduleManager);
|
||||
return builder.build(serviceInstanceRelationClientCalls, serviceInstanceRelationServerCalls);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public Topology getEndpointTopology(final long startTB, final long endTB,
|
||||
public Topology getEndpointTopology(final Duration duration,
|
||||
final String endpointId) throws IOException {
|
||||
List<Call.CallDetail> serverSideCalls = getTopologyQueryDAO().loadEndpointRelation(
|
||||
startTB, endTB, endpointId);
|
||||
duration, endpointId);
|
||||
|
||||
Topology topology = new Topology();
|
||||
serverSideCalls.forEach(callDetail -> {
|
||||
|
|
@ -169,10 +168,10 @@ public class TopologyQueryService implements Service {
|
|||
return topology;
|
||||
}
|
||||
|
||||
public EndpointTopology getEndpointDependencies(final long startTB, final long endTB,
|
||||
public EndpointTopology getEndpointDependencies(final Duration duration,
|
||||
final String endpointId) throws IOException {
|
||||
List<Call.CallDetail> serverSideCalls = getTopologyQueryDAO().loadEndpointRelation(
|
||||
startTB, endTB, endpointId);
|
||||
duration, endpointId);
|
||||
|
||||
EndpointTopology topology = new EndpointTopology();
|
||||
serverSideCalls.forEach(callDetail -> {
|
||||
|
|
@ -199,9 +198,9 @@ public class TopologyQueryService implements Service {
|
|||
return topology;
|
||||
}
|
||||
|
||||
public ProcessTopology getProcessTopology(final String instanceId, final long startTB, final long endTB) throws IOException {
|
||||
final List<Call.CallDetail> clientCalls = getTopologyQueryDAO().loadProcessRelationDetectedAtClientSide(instanceId, startTB, endTB);
|
||||
final List<Call.CallDetail> serverCalls = getTopologyQueryDAO().loadProcessRelationDetectedAtServerSide(instanceId, startTB, endTB);
|
||||
public ProcessTopology getProcessTopology(final String instanceId, final Duration duration) throws IOException {
|
||||
final List<Call.CallDetail> clientCalls = getTopologyQueryDAO().loadProcessRelationDetectedAtClientSide(instanceId, duration);
|
||||
final List<Call.CallDetail> serverCalls = getTopologyQueryDAO().loadProcessRelationDetectedAtServerSide(instanceId, duration);
|
||||
|
||||
final ProcessTopologyBuilder topologyBuilder = new ProcessTopologyBuilder(moduleManager, storageModels);
|
||||
return topologyBuilder.build(clientCalls, serverCalls);
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ import org.apache.skywalking.oap.server.core.CoreModule;
|
|||
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.Tag;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.segment.SegmentRecord;
|
||||
import org.apache.skywalking.oap.server.core.config.IComponentLibraryCatalogService;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.query.type.KeyValue;
|
||||
import org.apache.skywalking.oap.server.core.query.type.LogEntity;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Pagination;
|
||||
|
|
@ -82,13 +83,12 @@ public class TraceQueryService implements Service {
|
|||
final TraceState traceState,
|
||||
final QueryOrder queryOrder,
|
||||
final Pagination paging,
|
||||
final long startTB,
|
||||
final long endTB,
|
||||
final Duration duration,
|
||||
final List<Tag> tags) throws IOException {
|
||||
PaginationUtils.Page page = PaginationUtils.INSTANCE.exchange(paging);
|
||||
|
||||
return getTraceQueryDAO().queryBasicTraces(
|
||||
startTB, endTB, minTraceDuration, maxTraceDuration, serviceId, serviceInstanceId, endpointId,
|
||||
duration, minTraceDuration, maxTraceDuration, serviceId, serviceInstanceId, endpointId,
|
||||
traceId, page.getLimit(), page.getFrom(), traceState, queryOrder, tags
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import com.google.common.base.Charsets;
|
|||
import com.google.gson.Gson;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.Tag;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Alarms;
|
||||
import org.apache.skywalking.oap.server.core.query.type.KeyValue;
|
||||
import org.apache.skywalking.oap.server.core.storage.DAO;
|
||||
|
|
@ -34,8 +35,8 @@ public interface IAlarmQueryDAO extends DAO {
|
|||
|
||||
Gson GSON = new Gson();
|
||||
|
||||
Alarms getAlarm(final Integer scopeId, final String keyword, final int limit, final int from, final long startTB,
|
||||
final long endTB, final List<Tag> tags) throws IOException;
|
||||
Alarms getAlarm(final Integer scopeId, final String keyword, final int limit, final int from,
|
||||
final Duration duration, final List<Tag> tags) throws IOException;
|
||||
|
||||
/**
|
||||
* Parser the raw tags.
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import com.google.protobuf.InvalidProtocolBufferException;
|
|||
import java.io.IOException;
|
||||
import java.util.Base64;
|
||||
import org.apache.skywalking.oap.server.core.browser.source.BrowserErrorCategory;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.query.type.BrowserErrorLog;
|
||||
import org.apache.skywalking.oap.server.core.query.type.BrowserErrorLogs;
|
||||
import org.apache.skywalking.oap.server.core.query.type.ErrorCategory;
|
||||
|
|
@ -31,8 +32,7 @@ public interface IBrowserLogQueryDAO extends Service {
|
|||
String serviceVersionId,
|
||||
String pagePathId,
|
||||
BrowserErrorCategory category,
|
||||
long startSecondTB,
|
||||
long endSecondTB,
|
||||
Duration duration,
|
||||
int limit,
|
||||
int from) throws IOException;
|
||||
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import java.util.List;
|
|||
import org.apache.skywalking.apm.network.logging.v3.LogTags;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.Tag;
|
||||
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.TraceScopeCondition;
|
||||
import org.apache.skywalking.oap.server.core.query.type.KeyValue;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Logs;
|
||||
|
|
@ -43,8 +44,7 @@ public interface ILogQueryDAO extends Service {
|
|||
Order queryOrder,
|
||||
int from,
|
||||
int limit,
|
||||
final long startTB,
|
||||
final long endTB,
|
||||
final Duration duration,
|
||||
final List<Tag> tags,
|
||||
final List<String> keywordsOfContent,
|
||||
final List<String> excludingKeywordsOfContent) throws IOException;
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import java.io.IOException;
|
|||
import java.util.List;
|
||||
|
||||
import org.apache.skywalking.oap.server.core.query.enumeration.ProfilingSupportStatus;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Endpoint;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Process;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Service;
|
||||
|
|
@ -42,12 +43,11 @@ public interface IMetadataQueryDAO extends DAO {
|
|||
List<Service> getServices(final String serviceId) throws IOException;
|
||||
|
||||
/**
|
||||
* @param startTimestamp The instance is required to be live after this timestamp
|
||||
* @param endTimestamp The instance is required to be live before this timestamp.
|
||||
* @param duration The instance is required to be live in this duration.
|
||||
* @param serviceId the owner of the instances.
|
||||
* @return list of instances matching the given conditions.
|
||||
*/
|
||||
List<ServiceInstance> listInstances(final long startTimestamp, final long endTimestamp,
|
||||
List<ServiceInstance> listInstances(final Duration duration,
|
||||
final String serviceId) throws IOException;
|
||||
|
||||
ServiceInstance getInstance(final String instanceId) throws IOException;
|
||||
|
|
@ -71,11 +71,9 @@ public interface IMetadataQueryDAO extends DAO {
|
|||
|
||||
/**
|
||||
* @param serviceInstanceId the instance id of the process.
|
||||
* @param lastPingStartTimeBucket the start time bucket of last ping.
|
||||
* @param lastPingEndTimeBucket the end time bucket of last ping.
|
||||
* @param duration the start and end time bucket of last ping.
|
||||
*/
|
||||
List<Process> listProcesses(final String serviceInstanceId, final long lastPingStartTimeBucket,
|
||||
final long lastPingEndTimeBucket, boolean includeVirtual) throws IOException;
|
||||
List<Process> listProcesses(final String serviceInstanceId, final Duration duration, boolean includeVirtual) throws IOException;
|
||||
|
||||
/**
|
||||
* @param agentId the agent id of the process.
|
||||
|
|
|
|||
|
|
@ -21,17 +21,16 @@ package org.apache.skywalking.oap.server.core.storage.query;
|
|||
import java.io.IOException;
|
||||
import java.util.Set;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.TagType;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.library.module.Service;
|
||||
|
||||
public interface ITagAutoCompleteQueryDAO extends Service {
|
||||
Set<String> queryTagAutocompleteKeys(final TagType tagType,
|
||||
final int limit,
|
||||
final long startSecondTB,
|
||||
final long endSecondTB) throws IOException;
|
||||
final Duration duration) throws IOException;
|
||||
|
||||
Set<String> queryTagAutocompleteValues(final TagType tagType,
|
||||
final String tagKey,
|
||||
final int limit,
|
||||
final long startSecondTB,
|
||||
final long endSecondTB) throws IOException;
|
||||
final Duration duration) throws IOException;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import org.apache.skywalking.oap.server.core.analysis.manual.relation.instance.S
|
|||
import org.apache.skywalking.oap.server.core.analysis.manual.relation.instance.ServiceInstanceRelationServerSideMetrics;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.relation.service.ServiceRelationClientSideMetrics;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.relation.service.ServiceRelationServerSideMetrics;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Call;
|
||||
import org.apache.skywalking.oap.server.library.module.Service;
|
||||
|
||||
|
|
@ -31,26 +32,24 @@ public interface ITopologyQueryDAO extends Service {
|
|||
/**
|
||||
* Query {@link ServiceRelationServerSideMetrics} through the given conditions
|
||||
*/
|
||||
List<Call.CallDetail> loadServiceRelationsDetectedAtServerSide(long startTB, long endTB,
|
||||
List<Call.CallDetail> loadServiceRelationsDetectedAtServerSide(Duration duration,
|
||||
List<String> serviceIds) throws IOException;
|
||||
|
||||
/**
|
||||
* Query {@link ServiceRelationClientSideMetrics} through the given conditions
|
||||
*/
|
||||
List<Call.CallDetail> loadServiceRelationDetectedAtClientSide(long startTB, long endTB,
|
||||
List<Call.CallDetail> loadServiceRelationDetectedAtClientSide(Duration duration,
|
||||
List<String> serviceIds) throws IOException;
|
||||
|
||||
/**
|
||||
* Query {@link ServiceRelationServerSideMetrics} globally, without given serviceIds
|
||||
*/
|
||||
List<Call.CallDetail> loadServiceRelationsDetectedAtServerSide(long startTB,
|
||||
long endTB) throws IOException;
|
||||
List<Call.CallDetail> loadServiceRelationsDetectedAtServerSide(Duration duration) throws IOException;
|
||||
|
||||
/**
|
||||
* Query {@link ServiceRelationClientSideMetrics} globally, without given serviceIds
|
||||
*/
|
||||
List<Call.CallDetail> loadServiceRelationDetectedAtClientSide(long startTB,
|
||||
long endTB) throws IOException;
|
||||
List<Call.CallDetail> loadServiceRelationDetectedAtClientSide(Duration duration) throws IOException;
|
||||
|
||||
/**
|
||||
* Query {@link ServiceInstanceRelationServerSideMetrics} through given conditions, including the specific
|
||||
|
|
@ -58,8 +57,7 @@ public interface ITopologyQueryDAO extends Service {
|
|||
*/
|
||||
List<Call.CallDetail> loadInstanceRelationDetectedAtServerSide(String clientServiceId,
|
||||
String serverServiceId,
|
||||
long startTB,
|
||||
long endTB) throws IOException;
|
||||
Duration duration) throws IOException;
|
||||
|
||||
/**
|
||||
* Query {@link ServiceInstanceRelationClientSideMetrics} through given conditions, including the specific
|
||||
|
|
@ -67,14 +65,12 @@ public interface ITopologyQueryDAO extends Service {
|
|||
*/
|
||||
List<Call.CallDetail> loadInstanceRelationDetectedAtClientSide(String clientServiceId,
|
||||
String serverServiceId,
|
||||
long startTB,
|
||||
long endTB) throws IOException;
|
||||
Duration duration) throws IOException;
|
||||
|
||||
/**
|
||||
* Query the endpoint relationship. Endpoint dependency is not detected from server side agent.
|
||||
*/
|
||||
List<Call.CallDetail> loadEndpointRelation(long startTB,
|
||||
long endTB,
|
||||
List<Call.CallDetail> loadEndpointRelation(Duration duration,
|
||||
String destEndpointId) throws IOException;
|
||||
|
||||
/**
|
||||
|
|
@ -82,14 +78,12 @@ public interface ITopologyQueryDAO extends Service {
|
|||
* through given conditions, including the specific service instance id
|
||||
*/
|
||||
List<Call.CallDetail> loadProcessRelationDetectedAtClientSide(String serviceInstanceId,
|
||||
long startTB,
|
||||
long endTB) throws IOException;
|
||||
Duration duration) throws IOException;
|
||||
|
||||
/**
|
||||
* Query {@link org.apache.skywalking.oap.server.core.analysis.manual.relation.process.ProcessRelationServerSideMetrics}
|
||||
* through given conditions, including the specific service instance id
|
||||
*/
|
||||
List<Call.CallDetail> loadProcessRelationDetectedAtServerSide(String serviceInstanceId,
|
||||
long startTB,
|
||||
long endTB) throws IOException;
|
||||
Duration duration) throws IOException;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import java.io.IOException;
|
|||
import java.util.List;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.Tag;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.segment.SegmentRecord;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.query.type.QueryOrder;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Span;
|
||||
import org.apache.skywalking.oap.server.core.query.type.TraceBrief;
|
||||
|
|
@ -30,8 +31,7 @@ import org.apache.skywalking.oap.server.library.module.Service;
|
|||
|
||||
public interface ITraceQueryDAO extends Service {
|
||||
|
||||
TraceBrief queryBasicTraces(long startSecondTB,
|
||||
long endSecondTB,
|
||||
TraceBrief queryBasicTraces(Duration duration,
|
||||
long minDuration,
|
||||
long maxDuration,
|
||||
String serviceId,
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ package org.apache.skywalking.oap.server.core.storage.query;
|
|||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.storage.DAO;
|
||||
import zipkin2.Span;
|
||||
import zipkin2.storage.QueryRequest;
|
||||
|
|
@ -34,7 +35,7 @@ public interface IZipkinQueryDAO extends DAO {
|
|||
|
||||
List<Span> getTrace(final String traceId) throws IOException;
|
||||
|
||||
List<List<Span>> getTraces(final QueryRequest request) throws IOException;
|
||||
List<List<Span>> getTraces(final QueryRequest request, final Duration duration) throws IOException;
|
||||
|
||||
List<List<Span>> getTraces(final Set<String> traceIds) throws IOException;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -86,18 +86,14 @@ public class AlarmQuery implements GraphQLQueryResolver {
|
|||
if (scope != null) {
|
||||
scopeId = scope.getScopeId();
|
||||
}
|
||||
long startSecondTB = 0;
|
||||
long endSecondTB = 0;
|
||||
final EventQueryCondition.EventQueryConditionBuilder conditionPrototype =
|
||||
EventQueryCondition.builder()
|
||||
.paging(new Pagination(1, IEventQueryDAO.MAX_SIZE));
|
||||
if (nonNull(duration)) {
|
||||
startSecondTB = duration.getStartTimeBucketInSec();
|
||||
endSecondTB = duration.getEndTimeBucketInSec();
|
||||
conditionPrototype.time(duration);
|
||||
}
|
||||
Alarms alarms = getQueryService().getAlarm(
|
||||
scopeId, keyword, paging, startSecondTB, endSecondTB, tags);
|
||||
scopeId, keyword, paging, duration, tags);
|
||||
|
||||
final boolean selectEvents = env.getSelectionSet().contains("**/events/**");
|
||||
|
||||
|
|
|
|||
|
|
@ -27,8 +27,6 @@ import org.apache.skywalking.oap.server.core.query.input.BrowserErrorLogQueryCon
|
|||
import org.apache.skywalking.oap.server.core.query.type.BrowserErrorLogs;
|
||||
import org.apache.skywalking.oap.server.library.module.ModuleManager;
|
||||
|
||||
import static java.util.Objects.nonNull;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class BrowserLogQuery implements GraphQLQueryResolver {
|
||||
private final ModuleManager moduleManager;
|
||||
|
|
@ -42,17 +40,10 @@ public class BrowserLogQuery implements GraphQLQueryResolver {
|
|||
}
|
||||
|
||||
public BrowserErrorLogs queryBrowserErrorLogs(BrowserErrorLogQueryCondition condition) throws IOException {
|
||||
long startSecondTB = 0, endSecondTB = 0;
|
||||
if (nonNull(condition.getQueryDuration())) {
|
||||
startSecondTB = condition.getQueryDuration()
|
||||
.getStartTimeBucketInSec();
|
||||
endSecondTB = condition.getQueryDuration()
|
||||
.getEndTimeBucketInSec();
|
||||
}
|
||||
|
||||
return getQueryService().queryBrowserErrorLogs(
|
||||
condition.getServiceId(), condition.getServiceVersionId(), condition.getPagePathId(),
|
||||
condition.getCategory(), startSecondTB, endSecondTB, condition.getPaging()
|
||||
condition.getCategory(), condition.getQueryDuration(), condition.getPaging()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,7 +35,6 @@ import org.apache.skywalking.oap.server.library.util.CollectionUtils;
|
|||
import org.apache.skywalking.oap.server.library.util.StringUtil;
|
||||
|
||||
import static java.util.Objects.isNull;
|
||||
import static java.util.Objects.nonNull;
|
||||
|
||||
public class LogQuery implements GraphQLQueryResolver {
|
||||
private final ModuleManager moduleManager;
|
||||
|
|
@ -68,12 +67,7 @@ public class LogQuery implements GraphQLQueryResolver {
|
|||
if (isNull(condition.getQueryDuration()) && isNull(condition.getRelatedTrace())) {
|
||||
throw new UnexpectedException("The condition must contains either queryDuration or relatedTrace.");
|
||||
}
|
||||
long startSecondTB = 0;
|
||||
long endSecondTB = 0;
|
||||
if (nonNull(condition.getQueryDuration())) {
|
||||
startSecondTB = condition.getQueryDuration().getStartTimeBucketInSec();
|
||||
endSecondTB = condition.getQueryDuration().getEndTimeBucketInSec();
|
||||
}
|
||||
|
||||
Order queryOrder = isNull(condition.getQueryOrder()) ? Order.DES : condition.getQueryOrder();
|
||||
if (CollectionUtils.isNotEmpty(condition.getTags())) {
|
||||
condition.getTags().forEach(tag -> {
|
||||
|
|
@ -94,7 +88,7 @@ public class LogQuery implements GraphQLQueryResolver {
|
|||
condition.getRelatedTrace(),
|
||||
condition.getPaging(),
|
||||
queryOrder,
|
||||
startSecondTB, endSecondTB,
|
||||
condition.getQueryDuration(),
|
||||
condition.getTags(),
|
||||
condition.getKeywordsOfContent(),
|
||||
condition.getExcludingKeywordsOfContent()
|
||||
|
|
@ -102,10 +96,10 @@ public class LogQuery implements GraphQLQueryResolver {
|
|||
}
|
||||
|
||||
public Set<String> queryLogTagAutocompleteKeys(final Duration queryDuration) throws IOException {
|
||||
return getTagQueryService().queryTagAutocompleteKeys(TagType.LOG, queryDuration.getStartTimeBucketInSec(), queryDuration.getEndTimeBucketInSec());
|
||||
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.getStartTimeBucketInSec(), queryDuration.getEndTimeBucketInSec());
|
||||
return getTagQueryService().queryTagAutocompleteValues(TagType.LOG, tagKey, queryDuration);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -86,8 +86,7 @@ public class MetadataQuery implements GraphQLQueryResolver {
|
|||
|
||||
public List<ServiceInstance> getServiceInstances(final Duration duration,
|
||||
final String serviceId) throws IOException {
|
||||
return getMetadataQueryService().listInstances(
|
||||
duration.getStartTimestamp(), duration.getEndTimestamp(), serviceId);
|
||||
return getMetadataQueryService().listInstances(duration, serviceId);
|
||||
}
|
||||
|
||||
public List<Endpoint> searchEndpoint(final String keyword, final String serviceId,
|
||||
|
|
|
|||
|
|
@ -77,8 +77,7 @@ public class MetadataQueryV2 implements GraphQLQueryResolver {
|
|||
|
||||
public List<ServiceInstance> listInstances(final Duration duration,
|
||||
final String serviceId) throws IOException {
|
||||
return getMetadataQueryService().listInstances(
|
||||
duration.getStartTimestamp(), duration.getEndTimestamp(), serviceId);
|
||||
return getMetadataQueryService().listInstances(duration, serviceId);
|
||||
}
|
||||
|
||||
public ServiceInstance getInstance(final String instanceId) throws IOException {
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ public class TopologyQuery implements GraphQLQueryResolver {
|
|||
}
|
||||
|
||||
public Topology getGlobalTopology(final Duration duration) throws IOException {
|
||||
return getQueryService().getGlobalTopology(duration.getStartTimeBucket(), duration.getEndTimeBucket());
|
||||
return getQueryService().getGlobalTopology(duration);
|
||||
}
|
||||
|
||||
public Topology getServiceTopology(final String serviceId, final Duration duration) throws IOException {
|
||||
|
|
@ -58,8 +58,7 @@ public class TopologyQuery implements GraphQLQueryResolver {
|
|||
}
|
||||
|
||||
public Topology getServicesTopology(final List<String> serviceIds, final Duration duration) throws IOException {
|
||||
return getQueryService().getServiceTopology(
|
||||
duration.getStartTimeBucket(), duration.getEndTimeBucket(), serviceIds);
|
||||
return getQueryService().getServiceTopology(duration, serviceIds);
|
||||
}
|
||||
|
||||
public ServiceInstanceTopology getServiceInstanceTopology(final String clientServiceId,
|
||||
|
|
@ -67,7 +66,7 @@ public class TopologyQuery implements GraphQLQueryResolver {
|
|||
final Duration duration) throws IOException {
|
||||
return getQueryService().getServiceInstanceTopology(
|
||||
clientServiceId, serverServiceId,
|
||||
duration.getStartTimeBucket(), duration.getEndTimeBucket()
|
||||
duration
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -76,17 +75,15 @@ public class TopologyQuery implements GraphQLQueryResolver {
|
|||
*/
|
||||
@Deprecated
|
||||
public Topology getEndpointTopology(final String endpointId, final Duration duration) throws IOException {
|
||||
return getQueryService().getEndpointTopology(
|
||||
duration.getStartTimeBucket(), duration.getEndTimeBucket(), endpointId);
|
||||
return getQueryService().getEndpointTopology(duration, endpointId);
|
||||
}
|
||||
|
||||
public EndpointTopology getEndpointDependencies(final String endpointId,
|
||||
final Duration duration) throws IOException {
|
||||
return getQueryService().getEndpointDependencies(
|
||||
duration.getStartTimeBucket(), duration.getEndTimeBucket(), endpointId);
|
||||
return getQueryService().getEndpointDependencies(duration, endpointId);
|
||||
}
|
||||
|
||||
public ProcessTopology getProcessTopology(final String instanceId, final Duration duration) throws IOException {
|
||||
return getQueryService().getProcessTopology(instanceId, duration.getStartTimeBucket(), duration.getEndTimeBucket());
|
||||
return getQueryService().getProcessTopology(instanceId, duration);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ import org.apache.skywalking.oap.server.core.query.type.TraceBrief;
|
|||
import org.apache.skywalking.oap.server.core.query.type.TraceState;
|
||||
import org.apache.skywalking.oap.server.library.module.ModuleManager;
|
||||
|
||||
import static java.util.Objects.nonNull;
|
||||
import static java.util.Objects.isNull;
|
||||
|
||||
public class TraceQuery implements GraphQLQueryResolver {
|
||||
|
||||
|
|
@ -64,16 +64,11 @@ public class TraceQuery implements GraphQLQueryResolver {
|
|||
}
|
||||
|
||||
public TraceBrief queryBasicTraces(final TraceQueryCondition condition) throws IOException {
|
||||
long startSecondTB = 0;
|
||||
long endSecondTB = 0;
|
||||
String traceId = Const.EMPTY_STRING;
|
||||
|
||||
if (!Strings.isNullOrEmpty(condition.getTraceId())) {
|
||||
traceId = condition.getTraceId();
|
||||
} else if (nonNull(condition.getQueryDuration())) {
|
||||
startSecondTB = condition.getQueryDuration().getStartTimeBucketInSec();
|
||||
endSecondTB = condition.getQueryDuration().getEndTimeBucketInSec();
|
||||
} else {
|
||||
} else if (isNull(condition.getQueryDuration())) {
|
||||
throw new UnexpectedException("The condition must contains either queryDuration or traceId.");
|
||||
}
|
||||
|
||||
|
|
@ -86,7 +81,7 @@ public class TraceQuery implements GraphQLQueryResolver {
|
|||
|
||||
return getQueryService().queryBasicTraces(
|
||||
condition.getServiceId(), condition.getServiceInstanceId(), endpointId, traceId, minDuration,
|
||||
maxDuration, traceState, queryOrder, pagination, startSecondTB, endSecondTB, condition.getTags()
|
||||
maxDuration, traceState, queryOrder, pagination, condition.getQueryDuration(), condition.getTags()
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -95,10 +90,10 @@ public class TraceQuery implements GraphQLQueryResolver {
|
|||
}
|
||||
|
||||
public Set<String> queryTraceTagAutocompleteKeys(final Duration queryDuration) throws IOException {
|
||||
return getTagQueryService().queryTagAutocompleteKeys(TagType.TRACE, queryDuration.getStartTimeBucketInSec(), queryDuration.getEndTimeBucketInSec());
|
||||
return getTagQueryService().queryTagAutocompleteKeys(TagType.TRACE, queryDuration);
|
||||
}
|
||||
|
||||
public Set<String> queryTraceTagAutocompleteValues(final String tagKey, final Duration queryDuration) throws IOException {
|
||||
return getTagQueryService().queryTagAutocompleteValues(TagType.TRACE, tagKey, queryDuration.getStartTimeBucketInSec(), queryDuration.getEndTimeBucketInSec());
|
||||
return getTagQueryService().queryTagAutocompleteValues(TagType.TRACE, tagKey, queryDuration);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,19 +22,23 @@ import com.linecorp.armeria.common.HttpRequest;
|
|||
import com.linecorp.armeria.common.HttpResponse;
|
||||
import com.linecorp.armeria.server.ServiceRequestContext;
|
||||
import com.linecorp.armeria.server.annotation.ExceptionHandlerFunction;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import static com.linecorp.armeria.common.HttpStatus.BAD_REQUEST;
|
||||
import static com.linecorp.armeria.common.HttpStatus.INTERNAL_SERVER_ERROR;
|
||||
import static com.linecorp.armeria.common.MediaType.ANY_TEXT_TYPE;
|
||||
|
||||
@Slf4j
|
||||
public class ZipkinQueryExceptionHandler implements ExceptionHandlerFunction {
|
||||
@Override
|
||||
public HttpResponse handleException(final ServiceRequestContext ctx, final HttpRequest req, final Throwable cause) {
|
||||
String rspMsg = cause.getMessage() != null ? cause.getMessage() : cause.getClass().getSimpleName();
|
||||
// Response msg for illegal query args.
|
||||
if (cause instanceof IllegalArgumentException) {
|
||||
log.error(cause.getMessage(), cause);
|
||||
return HttpResponse.of(BAD_REQUEST, ANY_TEXT_TYPE, rspMsg);
|
||||
} else {
|
||||
log.error(cause.getMessage(), cause);
|
||||
return HttpResponse.of(INTERNAL_SERVER_ERROR, ANY_TEXT_TYPE, rspMsg);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,16 +42,17 @@ import java.util.List;
|
|||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import org.apache.skywalking.oap.server.core.CoreModule;
|
||||
import org.apache.skywalking.oap.server.core.analysis.DownSampling;
|
||||
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.TagType;
|
||||
import org.apache.skywalking.oap.server.core.query.TagAutoCompleteQueryService;
|
||||
import org.apache.skywalking.oap.server.core.query.enumeration.Step;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.storage.StorageModule;
|
||||
import org.apache.skywalking.oap.server.core.storage.query.IZipkinQueryDAO;
|
||||
import org.apache.skywalking.oap.server.library.module.ModuleManager;
|
||||
import org.apache.skywalking.oap.query.zipkin.ZipkinQueryConfig;
|
||||
import org.apache.skywalking.oap.server.library.util.CollectionUtils;
|
||||
import org.apache.skywalking.oap.server.library.util.StringUtil;
|
||||
import org.joda.time.DateTime;
|
||||
import zipkin2.Span;
|
||||
import zipkin2.codec.SpanBytesEncoder;
|
||||
import zipkin2.storage.QueryRequest;
|
||||
|
|
@ -175,7 +176,13 @@ public class ZipkinQueryHandler {
|
|||
.lookback(lookback.orElse(defaultLookback))
|
||||
.limit(limit)
|
||||
.build();
|
||||
List<List<Span>> traces = getZipkinQueryDAO().getTraces(queryRequest);
|
||||
Duration duration = new Duration();
|
||||
duration.setStep(Step.SECOND);
|
||||
DateTime endTime = new DateTime(queryRequest.endTs());
|
||||
DateTime startTime = endTime.minus(org.joda.time.Duration.millis(queryRequest.lookback()));
|
||||
duration.setStart(startTime.toString("yyyy-MM-dd HHmmss"));
|
||||
duration.setEnd(endTime.toString("yyyy-MM-dd HHmmss"));
|
||||
List<List<Span>> traces = getZipkinQueryDAO().getTraces(queryRequest, duration);
|
||||
return response(encodeTraces(traces));
|
||||
}
|
||||
|
||||
|
|
@ -201,26 +208,26 @@ public class ZipkinQueryHandler {
|
|||
@Get("/api/v2/autocompleteKeys")
|
||||
@Blocking
|
||||
public AggregatedHttpResponse getAutocompleteKeys() throws IOException {
|
||||
long endTimeMillis = System.currentTimeMillis();
|
||||
long startTimeMillis = endTimeMillis - defaultLookback;
|
||||
Set<String> autocompleteKeys =
|
||||
getTagQueryService().queryTagAutocompleteKeys(
|
||||
TagType.ZIPKIN, TimeBucket.getTimeBucket(startTimeMillis, DownSampling.Second),
|
||||
TimeBucket.getTimeBucket(endTimeMillis, DownSampling.Second)
|
||||
);
|
||||
Duration duration = new Duration();
|
||||
duration.setStep(Step.SECOND);
|
||||
DateTime endTime = DateTime.now();
|
||||
DateTime startTime = endTime.minus(org.joda.time.Duration.millis(defaultLookback));
|
||||
duration.setStart(startTime.toString("yyyy-MM-dd HHmmss"));
|
||||
duration.setEnd(endTime.toString("yyyy-MM-dd HHmmss"));
|
||||
Set<String> autocompleteKeys = getTagQueryService().queryTagAutocompleteKeys(TagType.ZIPKIN, duration);
|
||||
return cachedResponse(true, new ArrayList<>(autocompleteKeys));
|
||||
}
|
||||
|
||||
@Get("/api/v2/autocompleteValues")
|
||||
@Blocking
|
||||
public AggregatedHttpResponse getAutocompleteValues(@Param("key") String key) throws IOException {
|
||||
long endTimeMillis = System.currentTimeMillis();
|
||||
long startTimeMillis = endTimeMillis - defaultLookback;
|
||||
Set<String> autocompleteValues =
|
||||
getTagQueryService().queryTagAutocompleteValues(
|
||||
TagType.ZIPKIN, key, TimeBucket.getTimeBucket(startTimeMillis, DownSampling.Second),
|
||||
TimeBucket.getTimeBucket(endTimeMillis, DownSampling.Second)
|
||||
);
|
||||
Duration duration = new Duration();
|
||||
duration.setStep(Step.SECOND);
|
||||
DateTime endTime = DateTime.now();
|
||||
DateTime startTime = endTime.minus(org.joda.time.Duration.millis(defaultLookback));
|
||||
duration.setStart(startTime.toString("yyyy-MM-dd HHmmss"));
|
||||
duration.setEnd(endTime.toString("yyyy-MM-dd HHmmss"));
|
||||
Set<String> autocompleteValues = getTagQueryService().queryTagAutocompleteValues(TagType.ZIPKIN, key, duration);
|
||||
return cachedResponse(autocompleteValues.size() > 3, new ArrayList<>(autocompleteValues));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ import org.apache.skywalking.oap.server.core.analysis.manual.process.ProcessTraf
|
|||
import org.apache.skywalking.oap.server.core.analysis.manual.service.ServiceTraffic;
|
||||
import org.apache.skywalking.oap.server.core.query.enumeration.Language;
|
||||
import org.apache.skywalking.oap.server.core.query.enumeration.ProfilingSupportStatus;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Attribute;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Endpoint;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Process;
|
||||
|
|
@ -133,7 +134,7 @@ public class BanyanDBMetadataQueryDAO extends AbstractBanyanDBDAO implements IMe
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<ServiceInstance> listInstances(long startTimestamp, long endTimestamp, String serviceId) throws IOException {
|
||||
public List<ServiceInstance> listInstances(Duration duration, String serviceId) throws IOException {
|
||||
MeasureQueryResponse resp = query(InstanceTraffic.INDEX_NAME,
|
||||
INSTANCE_TRAFFIC_TAGS,
|
||||
Collections.emptySet(),
|
||||
|
|
@ -143,7 +144,7 @@ public class BanyanDBMetadataQueryDAO extends AbstractBanyanDBDAO implements IMe
|
|||
if (StringUtil.isNotEmpty(serviceId)) {
|
||||
query.and(eq(InstanceTraffic.SERVICE_ID, serviceId));
|
||||
}
|
||||
final long minuteTimeBucket = TimeBucket.getMinuteTimeBucket(startTimestamp);
|
||||
final long minuteTimeBucket = TimeBucket.getMinuteTimeBucket(duration.getStartTimestamp());
|
||||
query.and(gte(InstanceTraffic.LAST_PING_TIME_BUCKET, minuteTimeBucket));
|
||||
}
|
||||
});
|
||||
|
|
@ -225,7 +226,9 @@ public class BanyanDBMetadataQueryDAO extends AbstractBanyanDBDAO implements IMe
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<Process> listProcesses(String serviceInstanceId, long lastPingStartTimeBucket, long lastPingEndTimeBucket, boolean includeVirtual) throws IOException {
|
||||
public List<Process> listProcesses(String serviceInstanceId, Duration duration, boolean includeVirtual) throws IOException {
|
||||
long lastPingStartTimeBucket = duration.getStartTimeBucket();
|
||||
long lastPingEndTimeBucket = duration.getEndTimeBucket();
|
||||
MeasureQueryResponse resp = query(ProcessTraffic.INDEX_NAME,
|
||||
PROCESS_TRAFFIC_TAGS,
|
||||
Collections.emptySet(),
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import org.apache.skywalking.banyandb.v1.client.TimestampRange;
|
|||
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.TagAutocompleteData;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.TagType;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.storage.query.ITagAutoCompleteQueryDAO;
|
||||
import org.apache.skywalking.oap.server.storage.plugin.banyandb.BanyanDBStorageClient;
|
||||
import org.apache.skywalking.oap.server.storage.plugin.banyandb.stream.AbstractBanyanDBDAO;
|
||||
|
|
@ -35,6 +36,8 @@ import java.util.Collections;
|
|||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import static java.util.Objects.nonNull;
|
||||
|
||||
public class BanyanDBTagAutocompleteQueryDAO extends AbstractBanyanDBDAO implements ITagAutoCompleteQueryDAO {
|
||||
private static final Set<String> TAGS_KEY = ImmutableSet.of(TagAutocompleteData.TAG_TYPE,
|
||||
TagAutocompleteData.TAG_KEY);
|
||||
|
|
@ -47,10 +50,16 @@ public class BanyanDBTagAutocompleteQueryDAO extends AbstractBanyanDBDAO impleme
|
|||
}
|
||||
|
||||
@Override
|
||||
public Set<String> queryTagAutocompleteKeys(TagType tagType, int limit, long startSecondTB, long endSecondTB) throws IOException {
|
||||
public Set<String> queryTagAutocompleteKeys(TagType tagType, int limit, Duration duration) throws IOException {
|
||||
long startTB = 0;
|
||||
long endTB = 0;
|
||||
if (nonNull(duration)) {
|
||||
startTB = TimeBucket.getMinuteTimeBucket(duration.getStartTimestamp());
|
||||
endTB = TimeBucket.getMinuteTimeBucket(duration.getEndTimestamp());
|
||||
}
|
||||
TimestampRange range = null;
|
||||
if (startSecondTB > 0 && endSecondTB > 0) {
|
||||
range = new TimestampRange(TimeBucket.getTimestamp(startSecondTB), TimeBucket.getTimestamp(endSecondTB));
|
||||
if (startTB > 0 && endTB > 0) {
|
||||
range = new TimestampRange(TimeBucket.getTimestamp(startTB), TimeBucket.getTimestamp(endTB));
|
||||
}
|
||||
MeasureQueryResponse resp = query(TagAutocompleteData.INDEX_NAME,
|
||||
TAGS_KEY, Collections.emptySet(),
|
||||
|
|
@ -77,10 +86,20 @@ public class BanyanDBTagAutocompleteQueryDAO extends AbstractBanyanDBDAO impleme
|
|||
}
|
||||
|
||||
@Override
|
||||
public Set<String> queryTagAutocompleteValues(TagType tagType, String tagKey, int limit, long startSecondTB, long endSecondTB) throws IOException {
|
||||
public Set<String> queryTagAutocompleteValues(TagType tagType, String tagKey, int limit, Duration duration) throws IOException {
|
||||
long startSecondTB = 0;
|
||||
long endSecondTB = 0;
|
||||
if (nonNull(duration)) {
|
||||
startSecondTB = duration.getStartTimeBucketInSec();
|
||||
endSecondTB = duration.getEndTimeBucketInSec();
|
||||
}
|
||||
|
||||
long startTB = startSecondTB / 1000000 * 10000;
|
||||
long endTB = endSecondTB / 1000000 * 10000 + 2359;
|
||||
|
||||
TimestampRange range = null;
|
||||
if (startSecondTB > 0 && endSecondTB > 0) {
|
||||
range = new TimestampRange(TimeBucket.getTimestamp(startSecondTB), TimeBucket.getTimestamp(endSecondTB));
|
||||
if (startTB > 0 && endTB > 0) {
|
||||
range = new TimestampRange(TimeBucket.getTimestamp(startTB), TimeBucket.getTimestamp(endTB));
|
||||
}
|
||||
MeasureQueryResponse resp = query(TagAutocompleteData.INDEX_NAME,
|
||||
TAGS_KV, Collections.emptySet(),
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ import org.apache.skywalking.oap.server.core.analysis.manual.relation.process.Pr
|
|||
import org.apache.skywalking.oap.server.core.analysis.manual.relation.service.ServiceRelationClientSideMetrics;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.relation.service.ServiceRelationServerSideMetrics;
|
||||
import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Call;
|
||||
import org.apache.skywalking.oap.server.core.source.DetectPoint;
|
||||
import org.apache.skywalking.oap.server.core.storage.query.ITopologyQueryDAO;
|
||||
|
|
@ -47,6 +48,8 @@ import org.apache.skywalking.oap.server.library.util.CollectionUtils;
|
|||
import org.apache.skywalking.oap.server.storage.plugin.banyandb.BanyanDBStorageClient;
|
||||
import org.apache.skywalking.oap.server.storage.plugin.banyandb.stream.AbstractBanyanDBDAO;
|
||||
|
||||
import static java.util.Objects.nonNull;
|
||||
|
||||
public class BanyanDBTopologyQueryDAO extends AbstractBanyanDBDAO implements ITopologyQueryDAO {
|
||||
|
||||
public BanyanDBTopologyQueryDAO(final BanyanDBStorageClient client) {
|
||||
|
|
@ -54,35 +57,35 @@ public class BanyanDBTopologyQueryDAO extends AbstractBanyanDBDAO implements ITo
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<Call.CallDetail> loadServiceRelationsDetectedAtServerSide(long startTB, long endTB, List<String> serviceIds) throws IOException {
|
||||
public List<Call.CallDetail> loadServiceRelationsDetectedAtServerSide(Duration duration, List<String> serviceIds) throws IOException {
|
||||
if (CollectionUtils.isEmpty(serviceIds)) {
|
||||
throw new UnexpectedException("Service id is empty");
|
||||
}
|
||||
|
||||
List<QueryBuilder<MeasureQuery>> queryBuilderList = buildServiceRelationsQueries(serviceIds);
|
||||
|
||||
return queryServiceRelation(startTB, endTB, queryBuilderList, DetectPoint.SERVER);
|
||||
return queryServiceRelation(duration, queryBuilderList, DetectPoint.SERVER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Call.CallDetail> loadServiceRelationDetectedAtClientSide(long startTB, long endTB, List<String> serviceIds) throws IOException {
|
||||
public List<Call.CallDetail> loadServiceRelationDetectedAtClientSide(Duration duration, List<String> serviceIds) throws IOException {
|
||||
if (CollectionUtils.isEmpty(serviceIds)) {
|
||||
throw new UnexpectedException("Service id is empty");
|
||||
}
|
||||
|
||||
List<QueryBuilder<MeasureQuery>> queryBuilderList = buildServiceRelationsQueries(serviceIds);
|
||||
|
||||
return queryServiceRelation(startTB, endTB, queryBuilderList, DetectPoint.CLIENT);
|
||||
return queryServiceRelation(duration, queryBuilderList, DetectPoint.CLIENT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Call.CallDetail> loadServiceRelationsDetectedAtServerSide(long startTB, long endTB) throws IOException {
|
||||
return queryServiceRelation(startTB, endTB, Collections.singletonList(emptyMeasureQuery()), DetectPoint.SERVER);
|
||||
public List<Call.CallDetail> loadServiceRelationsDetectedAtServerSide(Duration duration) throws IOException {
|
||||
return queryServiceRelation(duration, Collections.singletonList(emptyMeasureQuery()), DetectPoint.SERVER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Call.CallDetail> loadServiceRelationDetectedAtClientSide(long startTB, long endTB) throws IOException {
|
||||
return queryServiceRelation(startTB, endTB, Collections.singletonList(emptyMeasureQuery()), DetectPoint.CLIENT);
|
||||
public List<Call.CallDetail> loadServiceRelationDetectedAtClientSide(Duration duration) throws IOException {
|
||||
return queryServiceRelation(duration, Collections.singletonList(emptyMeasureQuery()), DetectPoint.CLIENT);
|
||||
}
|
||||
|
||||
private List<QueryBuilder<MeasureQuery>> buildServiceRelationsQueries(List<String> serviceIds) {
|
||||
|
|
@ -105,7 +108,13 @@ public class BanyanDBTopologyQueryDAO extends AbstractBanyanDBDAO implements ITo
|
|||
return queryBuilderList;
|
||||
}
|
||||
|
||||
List<Call.CallDetail> queryServiceRelation(long startTB, long endTB, List<QueryBuilder<MeasureQuery>> queryBuilderList, DetectPoint detectPoint) throws IOException {
|
||||
List<Call.CallDetail> queryServiceRelation(Duration duration, List<QueryBuilder<MeasureQuery>> queryBuilderList, DetectPoint detectPoint) throws IOException {
|
||||
long startTB = 0;
|
||||
long endTB = 0;
|
||||
if (nonNull(duration)) {
|
||||
startTB = duration.getStartTimeBucketInSec();
|
||||
endTB = duration.getEndTimeBucketInSec();
|
||||
}
|
||||
TimestampRange timestampRange = null;
|
||||
if (startTB > 0 && endTB > 0) {
|
||||
timestampRange = new TimestampRange(TimeBucket.getTimestamp(startTB), TimeBucket.getTimestamp(endTB));
|
||||
|
|
@ -133,15 +142,15 @@ public class BanyanDBTopologyQueryDAO extends AbstractBanyanDBDAO implements ITo
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<Call.CallDetail> loadInstanceRelationDetectedAtServerSide(String clientServiceId, String serverServiceId, long startTB, long endTB) throws IOException {
|
||||
public List<Call.CallDetail> loadInstanceRelationDetectedAtServerSide(String clientServiceId, String serverServiceId, Duration duration) throws IOException {
|
||||
List<QueryBuilder<MeasureQuery>> queryBuilderList = buildInstanceRelationsQueries(clientServiceId, serverServiceId);
|
||||
return queryInstanceRelation(startTB, endTB, queryBuilderList, DetectPoint.SERVER);
|
||||
return queryInstanceRelation(duration, queryBuilderList, DetectPoint.SERVER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Call.CallDetail> loadInstanceRelationDetectedAtClientSide(String clientServiceId, String serverServiceId, long startTB, long endTB) throws IOException {
|
||||
public List<Call.CallDetail> loadInstanceRelationDetectedAtClientSide(String clientServiceId, String serverServiceId, Duration duration) throws IOException {
|
||||
List<QueryBuilder<MeasureQuery>> queryBuilderList = buildInstanceRelationsQueries(clientServiceId, serverServiceId);
|
||||
return queryInstanceRelation(startTB, endTB, queryBuilderList, DetectPoint.CLIENT);
|
||||
return queryInstanceRelation(duration, queryBuilderList, DetectPoint.CLIENT);
|
||||
}
|
||||
|
||||
private List<QueryBuilder<MeasureQuery>> buildInstanceRelationsQueries(String clientServiceId, String serverServiceId) {
|
||||
|
|
@ -164,7 +173,13 @@ public class BanyanDBTopologyQueryDAO extends AbstractBanyanDBDAO implements ITo
|
|||
return queryBuilderList;
|
||||
}
|
||||
|
||||
List<Call.CallDetail> queryInstanceRelation(long startTB, long endTB, List<QueryBuilder<MeasureQuery>> queryBuilderList, DetectPoint detectPoint) throws IOException {
|
||||
List<Call.CallDetail> queryInstanceRelation(Duration duration, List<QueryBuilder<MeasureQuery>> queryBuilderList, DetectPoint detectPoint) throws IOException {
|
||||
long startTB = 0;
|
||||
long endTB = 0;
|
||||
if (nonNull(duration)) {
|
||||
startTB = duration.getStartTimeBucketInSec();
|
||||
endTB = duration.getEndTimeBucketInSec();
|
||||
}
|
||||
TimestampRange timestampRange = null;
|
||||
if (startTB > 0 && endTB > 0) {
|
||||
timestampRange = new TimestampRange(TimeBucket.getTimestamp(startTB), TimeBucket.getTimestamp(endTB));
|
||||
|
|
@ -192,19 +207,19 @@ public class BanyanDBTopologyQueryDAO extends AbstractBanyanDBDAO implements ITo
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<Call.CallDetail> loadEndpointRelation(long startTB, long endTB, String destEndpointId) throws IOException {
|
||||
public List<Call.CallDetail> loadEndpointRelation(Duration duration, String destEndpointId) throws IOException {
|
||||
List<QueryBuilder<MeasureQuery>> queryBuilderList = buildEndpointRelationsQueries(destEndpointId);
|
||||
return queryEndpointRelation(startTB, endTB, queryBuilderList, DetectPoint.SERVER);
|
||||
return queryEndpointRelation(duration, queryBuilderList, DetectPoint.SERVER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Call.CallDetail> loadProcessRelationDetectedAtClientSide(String serviceInstanceId, long startTB, long endTB) throws IOException {
|
||||
return queryProcessRelation(startTB, endTB, serviceInstanceId, DetectPoint.CLIENT);
|
||||
public List<Call.CallDetail> loadProcessRelationDetectedAtClientSide(String serviceInstanceId, Duration duration) throws IOException {
|
||||
return queryProcessRelation(duration, serviceInstanceId, DetectPoint.CLIENT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Call.CallDetail> loadProcessRelationDetectedAtServerSide(String serviceInstanceId, long startTB, long endTB) throws IOException {
|
||||
return queryProcessRelation(startTB, endTB, serviceInstanceId, DetectPoint.SERVER);
|
||||
public List<Call.CallDetail> loadProcessRelationDetectedAtServerSide(String serviceInstanceId, Duration duration) throws IOException {
|
||||
return queryProcessRelation(duration, serviceInstanceId, DetectPoint.SERVER);
|
||||
}
|
||||
|
||||
private List<QueryBuilder<MeasureQuery>> buildEndpointRelationsQueries(String destEndpointId) {
|
||||
|
|
@ -225,7 +240,13 @@ public class BanyanDBTopologyQueryDAO extends AbstractBanyanDBDAO implements ITo
|
|||
return queryBuilderList;
|
||||
}
|
||||
|
||||
List<Call.CallDetail> queryEndpointRelation(long startTB, long endTB, List<QueryBuilder<MeasureQuery>> queryBuilderList, DetectPoint detectPoint) throws IOException {
|
||||
List<Call.CallDetail> queryEndpointRelation(Duration duration, List<QueryBuilder<MeasureQuery>> queryBuilderList, DetectPoint detectPoint) throws IOException {
|
||||
long startTB = 0;
|
||||
long endTB = 0;
|
||||
if (nonNull(duration)) {
|
||||
startTB = duration.getStartTimeBucketInSec();
|
||||
endTB = duration.getEndTimeBucketInSec();
|
||||
}
|
||||
TimestampRange timestampRange = null;
|
||||
if (startTB > 0 && endTB > 0) {
|
||||
timestampRange = new TimestampRange(TimeBucket.getTimestamp(startTB), TimeBucket.getTimestamp(endTB));
|
||||
|
|
@ -248,7 +269,13 @@ public class BanyanDBTopologyQueryDAO extends AbstractBanyanDBDAO implements ITo
|
|||
return new ArrayList<>(callMap.values());
|
||||
}
|
||||
|
||||
List<Call.CallDetail> queryProcessRelation(long startTB, long endTB, String serviceInstanceId, DetectPoint detectPoint) throws IOException {
|
||||
List<Call.CallDetail> queryProcessRelation(Duration duration, String serviceInstanceId, DetectPoint detectPoint) throws IOException {
|
||||
long startTB = 0;
|
||||
long endTB = 0;
|
||||
if (nonNull(duration)) {
|
||||
startTB = duration.getStartTimeBucketInSec();
|
||||
endTB = duration.getEndTimeBucketInSec();
|
||||
}
|
||||
TimestampRange timestampRange = null;
|
||||
if (startTB > 0 && endTB > 0) {
|
||||
timestampRange = new TimestampRange(TimeBucket.getTimestamp(startTB), TimeBucket.getTimestamp(endTB));
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import org.apache.skywalking.oap.server.core.alarm.AlarmRecord;
|
|||
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.Tag;
|
||||
import org.apache.skywalking.oap.server.core.query.enumeration.Scope;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.query.type.AlarmMessage;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Alarms;
|
||||
import org.apache.skywalking.oap.server.core.storage.query.IAlarmQueryDAO;
|
||||
|
|
@ -54,7 +55,9 @@ public class BanyanDBAlarmQueryDAO extends AbstractBanyanDBDAO implements IAlarm
|
|||
}
|
||||
|
||||
@Override
|
||||
public Alarms getAlarm(Integer scopeId, String keyword, int limit, int from, long startTB, long endTB, List<Tag> tags) throws IOException {
|
||||
public Alarms getAlarm(Integer scopeId, String keyword, int limit, int from, Duration duration, List<Tag> tags) throws IOException {
|
||||
long startTB = duration.getStartTimeBucketInSec();
|
||||
long endTB = duration.getEndTimeBucketInSec();
|
||||
TimestampRange tsRange = null;
|
||||
if (startTB > 0 && endTB > 0) {
|
||||
tsRange = new TimestampRange(TimeBucket.getTimestamp(startTB), TimeBucket.getTimestamp(endTB));
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import org.apache.skywalking.banyandb.v1.client.TimestampRange;
|
|||
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
|
||||
import org.apache.skywalking.oap.server.core.browser.manual.errorlog.BrowserErrorLogRecord;
|
||||
import org.apache.skywalking.oap.server.core.browser.source.BrowserErrorCategory;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.query.type.BrowserErrorLog;
|
||||
import org.apache.skywalking.oap.server.core.query.type.BrowserErrorLogs;
|
||||
import org.apache.skywalking.oap.server.core.query.type.ErrorCategory;
|
||||
|
|
@ -51,7 +52,11 @@ public class BanyanDBBrowserLogQueryDAO extends AbstractBanyanDBDAO implements I
|
|||
}
|
||||
|
||||
@Override
|
||||
public BrowserErrorLogs queryBrowserErrorLogs(String serviceId, String serviceVersionId, String pagePathId, BrowserErrorCategory category, long startSecondTB, long endSecondTB, int limit, int from) throws IOException {
|
||||
public BrowserErrorLogs queryBrowserErrorLogs(String serviceId, String serviceVersionId, String pagePathId,
|
||||
BrowserErrorCategory category, Duration duration,
|
||||
int limit, int from) throws IOException {
|
||||
long startSecondTB = duration.getStartTimeBucketInSec();
|
||||
long endSecondTB = duration.getEndTimeBucketInSec();
|
||||
TimestampRange tsRange = null;
|
||||
if (startSecondTB > 0 && endSecondTB > 0) {
|
||||
tsRange = new TimestampRange(TimeBucket.getTimestamp(startSecondTB), TimeBucket.getTimestamp(endSecondTB));
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import org.apache.skywalking.oap.server.core.analysis.manual.log.AbstractLogReco
|
|||
import org.apache.skywalking.oap.server.core.analysis.manual.log.LogRecord;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.Tag;
|
||||
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.TraceScopeCondition;
|
||||
import org.apache.skywalking.oap.server.core.query.type.ContentType;
|
||||
import org.apache.skywalking.oap.server.core.query.type.KeyValue;
|
||||
|
|
@ -47,6 +48,8 @@ import java.util.List;
|
|||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
import static java.util.Objects.nonNull;
|
||||
|
||||
/**
|
||||
* {@link org.apache.skywalking.oap.server.core.analysis.manual.log.LogRecord} is a stream
|
||||
*/
|
||||
|
|
@ -70,8 +73,14 @@ public class BanyanDBLogQueryDAO extends AbstractBanyanDBDAO implements ILogQuer
|
|||
@Override
|
||||
public Logs queryLogs(String serviceId, String serviceInstanceId, String endpointId,
|
||||
TraceScopeCondition relatedTrace, Order queryOrder, int from, int limit,
|
||||
long startTB, long endTB, List<Tag> tags, List<String> keywordsOfContent,
|
||||
Duration duration, List<Tag> tags, List<String> keywordsOfContent,
|
||||
List<String> excludingKeywordsOfContent) throws IOException {
|
||||
long startTB = 0;
|
||||
long endTB = 0;
|
||||
if (nonNull(duration)) {
|
||||
startTB = duration.getStartTimeBucketInSec();
|
||||
endTB = duration.getEndTimeBucketInSec();
|
||||
}
|
||||
final QueryBuilder<StreamQuery> query = new QueryBuilder<StreamQuery>() {
|
||||
@Override
|
||||
public void apply(StreamQuery query) {
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import org.apache.skywalking.oap.server.core.analysis.IDManager;
|
|||
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.Tag;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.segment.SegmentRecord;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.query.type.BasicTrace;
|
||||
import org.apache.skywalking.oap.server.core.query.type.QueryOrder;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Span;
|
||||
|
|
@ -46,6 +47,8 @@ import java.util.Collections;
|
|||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static java.util.Objects.nonNull;
|
||||
|
||||
public class BanyanDBTraceQueryDAO extends AbstractBanyanDBDAO implements ITraceQueryDAO {
|
||||
private static final Set<String> BASIC_TAGS = ImmutableSet.of(SegmentRecord.TRACE_ID,
|
||||
SegmentRecord.IS_ERROR,
|
||||
|
|
@ -72,7 +75,13 @@ public class BanyanDBTraceQueryDAO extends AbstractBanyanDBDAO implements ITrace
|
|||
}
|
||||
|
||||
@Override
|
||||
public TraceBrief queryBasicTraces(long startSecondTB, long endSecondTB, long minDuration, long maxDuration, String serviceId, String serviceInstanceId, String endpointId, String traceId, int limit, int from, TraceState traceState, QueryOrder queryOrder, List<Tag> tags) throws IOException {
|
||||
public TraceBrief queryBasicTraces(Duration duration, long minDuration, long maxDuration, String serviceId, String serviceInstanceId, String endpointId, String traceId, int limit, int from, TraceState traceState, QueryOrder queryOrder, List<Tag> tags) throws IOException {
|
||||
long startSecondTB = 0;
|
||||
long endSecondTB = 0;
|
||||
if (nonNull(duration)) {
|
||||
startSecondTB = duration.getStartTimeBucketInSec();
|
||||
endSecondTB = duration.getEndTimeBucketInSec();
|
||||
}
|
||||
final QueryBuilder<StreamQuery> q = new QueryBuilder<StreamQuery>() {
|
||||
@Override
|
||||
public void apply(StreamQuery query) {
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import java.io.IOException;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.storage.query.IZipkinQueryDAO;
|
||||
import org.apache.skywalking.oap.server.storage.plugin.banyandb.BanyanDBStorageClient;
|
||||
import zipkin2.Span;
|
||||
|
|
@ -55,7 +56,7 @@ public class BanyanDBZipkinQueryDAO extends AbstractBanyanDBDAO implements IZipk
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<List<Span>> getTraces(final QueryRequest request) throws IOException {
|
||||
public List<List<Span>> getTraces(final QueryRequest request, Duration duration) throws IOException {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ import org.apache.skywalking.library.elasticsearch.response.search.SearchRespons
|
|||
import org.apache.skywalking.oap.server.core.alarm.AlarmRecord;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.Tag;
|
||||
import org.apache.skywalking.oap.server.core.query.enumeration.Scope;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.query.type.AlarmMessage;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Alarms;
|
||||
import org.apache.skywalking.oap.server.core.storage.query.IAlarmQueryDAO;
|
||||
|
|
@ -51,8 +52,11 @@ public class AlarmQueryEsDAO extends EsDAO implements IAlarmQueryDAO {
|
|||
@Override
|
||||
public Alarms getAlarm(final Integer scopeId, final String keyword, final int limit,
|
||||
final int from,
|
||||
final long startTB, final long endTB, final List<Tag> tags)
|
||||
final Duration duration,
|
||||
final List<Tag> tags)
|
||||
throws IOException {
|
||||
long startTB = duration.getStartTimeBucketInSec();
|
||||
long endTB = duration.getEndTimeBucketInSec();
|
||||
final String index =
|
||||
IndexController.LogicIndicesRegister.getPhysicalTableName(AlarmRecord.INDEX_NAME);
|
||||
final BoolQueryBuilder query = Query.bool();
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
package org.apache.skywalking.oap.server.storage.plugin.elasticsearch.query;
|
||||
|
||||
import java.io.IOException;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.library.util.StringUtil;
|
||||
import org.apache.skywalking.library.elasticsearch.requests.search.BoolQueryBuilder;
|
||||
import org.apache.skywalking.library.elasticsearch.requests.search.Query;
|
||||
|
|
@ -47,10 +48,14 @@ public class BrowserLogQueryEsDAO extends EsDAO implements IBrowserLogQueryDAO {
|
|||
final String serviceVersionId,
|
||||
final String pagePathId,
|
||||
final BrowserErrorCategory category,
|
||||
final long startSecondTB,
|
||||
final long endSecondTB,
|
||||
final Duration duration,
|
||||
final int limit,
|
||||
final int from) throws IOException {
|
||||
long startSecondTB = 0, endSecondTB = 0;
|
||||
if (nonNull(duration)) {
|
||||
startSecondTB = duration.getStartTimeBucketInSec();
|
||||
endSecondTB = duration.getEndTimeBucketInSec();
|
||||
}
|
||||
final BoolQueryBuilder boolQueryBuilder = Query.bool();
|
||||
if (IndexController.LogicIndicesRegister.isPhysicalTable(BrowserErrorLogRecord.INDEX_NAME)) {
|
||||
boolQueryBuilder.must(Query.term(IndexController.LogicIndicesRegister.RECORD_TABLE_NAME, BrowserErrorLogRecord.INDEX_NAME));
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ import org.apache.skywalking.oap.server.core.analysis.manual.log.LogRecord;
|
|||
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.Tag;
|
||||
import org.apache.skywalking.oap.server.core.analysis.record.Record;
|
||||
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.TraceScopeCondition;
|
||||
import org.apache.skywalking.oap.server.core.query.type.ContentType;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Log;
|
||||
|
|
@ -67,11 +68,16 @@ public class LogQueryEsDAO extends EsDAO implements ILogQueryDAO {
|
|||
final Order queryOrder,
|
||||
final int from,
|
||||
final int limit,
|
||||
final long startSecondTB,
|
||||
final long endSecondTB,
|
||||
final Duration duration,
|
||||
final List<Tag> tags,
|
||||
final List<String> keywordsOfContent,
|
||||
final List<String> excludingKeywordsOfContent) throws IOException {
|
||||
long startSecondTB = 0;
|
||||
long endSecondTB = 0;
|
||||
if (nonNull(duration)) {
|
||||
startSecondTB = duration.getStartTimeBucketInSec();
|
||||
endSecondTB = duration.getEndTimeBucketInSec();
|
||||
}
|
||||
final BoolQueryBuilder query = Query.bool();
|
||||
if (IndexController.LogicIndicesRegister.isPhysicalTable(LogRecord.INDEX_NAME)) {
|
||||
query.must(Query.term(IndexController.LogicIndicesRegister.RECORD_TABLE_NAME, LogRecord.INDEX_NAME));
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ import org.apache.skywalking.oap.server.core.analysis.manual.process.ProcessTraf
|
|||
import org.apache.skywalking.oap.server.core.analysis.manual.service.ServiceTraffic;
|
||||
import org.apache.skywalking.oap.server.core.query.enumeration.Language;
|
||||
import org.apache.skywalking.oap.server.core.query.enumeration.ProfilingSupportStatus;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Attribute;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Endpoint;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Process;
|
||||
|
|
@ -145,12 +146,12 @@ public class MetadataQueryEsDAO extends EsDAO implements IMetadataQueryDAO {
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<ServiceInstance> listInstances(long startTimestamp, long endTimestamp,
|
||||
public List<ServiceInstance> listInstances(Duration duration,
|
||||
String serviceId) throws IOException {
|
||||
final String index =
|
||||
IndexController.LogicIndicesRegister.getPhysicalTableName(InstanceTraffic.INDEX_NAME);
|
||||
|
||||
final long minuteTimeBucket = TimeBucket.getMinuteTimeBucket(startTimestamp);
|
||||
final long minuteTimeBucket = TimeBucket.getMinuteTimeBucket(duration.getStartTimestamp());
|
||||
final BoolQueryBuilder query =
|
||||
Query.bool()
|
||||
.must(Query.range(InstanceTraffic.LAST_PING_TIME_BUCKET).gte(minuteTimeBucket))
|
||||
|
|
@ -252,7 +253,9 @@ public class MetadataQueryEsDAO extends EsDAO implements IMetadataQueryDAO {
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<Process> listProcesses(String serviceInstanceId, long lastPingStartTimeBucket, long lastPingEndTimeBucket, boolean includeVirtual) throws IOException {
|
||||
public List<Process> listProcesses(String serviceInstanceId, Duration duration, boolean includeVirtual) throws IOException {
|
||||
long lastPingStartTimeBucket = duration.getStartTimeBucket();
|
||||
long lastPingEndTimeBucket = duration.getEndTimeBucket();
|
||||
final String index =
|
||||
IndexController.LogicIndicesRegister.getPhysicalTableName(ProcessTraffic.INDEX_NAME);
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ import org.apache.skywalking.library.elasticsearch.response.search.SearchHit;
|
|||
import org.apache.skywalking.library.elasticsearch.response.search.SearchResponse;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.TagAutocompleteData;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.TagType;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.storage.query.ITagAutoCompleteQueryDAO;
|
||||
import org.apache.skywalking.oap.server.library.client.elasticsearch.ElasticSearchClient;
|
||||
import org.apache.skywalking.oap.server.library.util.StringUtil;
|
||||
|
|
@ -40,6 +41,8 @@ import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.base.EsDAO;
|
|||
import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.base.IndexController;
|
||||
import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.base.TimeRangeIndexNameGenerator;
|
||||
|
||||
import static java.util.Objects.nonNull;
|
||||
|
||||
public class TagAutoCompleteQueryDAO extends EsDAO implements ITagAutoCompleteQueryDAO {
|
||||
public TagAutoCompleteQueryDAO(ElasticSearchClient client) {
|
||||
super(client);
|
||||
|
|
@ -48,8 +51,15 @@ public class TagAutoCompleteQueryDAO extends EsDAO implements ITagAutoCompleteQu
|
|||
@Override
|
||||
public Set<String> queryTagAutocompleteKeys(final TagType tagType,
|
||||
final int limit,
|
||||
final long startSecondTB,
|
||||
final long endSecondTB) throws IOException {
|
||||
final Duration duration) throws IOException {
|
||||
// Tags combine records by day and es rolling index by day, need search the whole day
|
||||
// just use the time to locate the physical indexes and ignore time conditions.
|
||||
long startSecondTB = 0;
|
||||
long endSecondTB = 0;
|
||||
if (nonNull(duration)) {
|
||||
startSecondTB = duration.getStartTimeBucketInSec();
|
||||
endSecondTB = duration.getEndTimeBucketInSec();
|
||||
}
|
||||
BoolQueryBuilder query = Query.bool();
|
||||
query.must(Query.term(TagAutocompleteData.TAG_TYPE, tagType.name()));
|
||||
if (IndexController.LogicIndicesRegister.isPhysicalTable(TagAutocompleteData.INDEX_NAME)) {
|
||||
|
|
@ -84,8 +94,13 @@ public class TagAutoCompleteQueryDAO extends EsDAO implements ITagAutoCompleteQu
|
|||
@Override
|
||||
public Set<String> queryTagAutocompleteValues(final TagType tagType, final String tagKey,
|
||||
final int limit,
|
||||
final long startSecondTB,
|
||||
final long endSecondTB) throws IOException {
|
||||
final Duration duration) throws IOException {
|
||||
long startSecondTB = 0;
|
||||
long endSecondTB = 0;
|
||||
if (nonNull(duration)) {
|
||||
startSecondTB = duration.getStartTimeBucketInSec();
|
||||
endSecondTB = duration.getEndTimeBucketInSec();
|
||||
}
|
||||
BoolQueryBuilder query = Query.bool().must(Query.term(TagAutocompleteData.TAG_KEY, tagKey));
|
||||
query.must(Query.term(TagAutocompleteData.TAG_TYPE, tagType.name()));
|
||||
if (IndexController.LogicIndicesRegister.isPhysicalTable(TagAutocompleteData.INDEX_NAME)) {
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ import org.apache.skywalking.oap.server.core.analysis.manual.relation.process.Pr
|
|||
import org.apache.skywalking.oap.server.core.analysis.manual.relation.service.ServiceRelationClientSideMetrics;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.relation.service.ServiceRelationServerSideMetrics;
|
||||
import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Call;
|
||||
import org.apache.skywalking.oap.server.core.source.DetectPoint;
|
||||
import org.apache.skywalking.oap.server.core.storage.query.ITopologyQueryDAO;
|
||||
|
|
@ -53,42 +54,39 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO {
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<Call.CallDetail> loadServiceRelationsDetectedAtServerSide(
|
||||
long startTB, long endTB, List<String> serviceIds) {
|
||||
public List<Call.CallDetail> loadServiceRelationsDetectedAtServerSide(Duration duration, List<String> serviceIds) {
|
||||
if (CollectionUtils.isEmpty(serviceIds)) {
|
||||
throw new UnexpectedException("Service id is empty");
|
||||
}
|
||||
|
||||
final SearchBuilder sourceBuilder = Search.builder().size(0);
|
||||
setQueryCondition(sourceBuilder, startTB, endTB, serviceIds, ServiceRelationServerSideMetrics.INDEX_NAME);
|
||||
setQueryCondition(sourceBuilder, duration, serviceIds, ServiceRelationServerSideMetrics.INDEX_NAME);
|
||||
|
||||
return buildServiceRelation(
|
||||
sourceBuilder, ServiceRelationServerSideMetrics.INDEX_NAME, DetectPoint.SERVER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Call.CallDetail> loadServiceRelationDetectedAtClientSide(long startTB,
|
||||
long endTB,
|
||||
public List<Call.CallDetail> loadServiceRelationDetectedAtClientSide(Duration duration,
|
||||
List<String> serviceIds) {
|
||||
if (CollectionUtils.isEmpty(serviceIds)) {
|
||||
throw new UnexpectedException("Service id is empty");
|
||||
}
|
||||
|
||||
final SearchBuilder sourceBuilder = Search.builder().size(0);
|
||||
setQueryCondition(sourceBuilder, startTB, endTB, serviceIds, ServiceRelationClientSideMetrics.INDEX_NAME);
|
||||
setQueryCondition(sourceBuilder, duration, serviceIds, ServiceRelationClientSideMetrics.INDEX_NAME);
|
||||
|
||||
return buildServiceRelation(
|
||||
sourceBuilder, ServiceRelationClientSideMetrics.INDEX_NAME, DetectPoint.CLIENT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Call.CallDetail> loadServiceRelationsDetectedAtServerSide(long startTB,
|
||||
long endTB) {
|
||||
public List<Call.CallDetail> loadServiceRelationsDetectedAtServerSide(Duration duration) {
|
||||
SearchBuilder sourceBuilder = Search.builder();
|
||||
final BoolQueryBuilder query = Query.bool()
|
||||
.must(Query.range(ServiceRelationServerSideMetrics.TIME_BUCKET)
|
||||
.gte(startTB)
|
||||
.lte(endTB));
|
||||
.gte(duration.getStartTimeBucket())
|
||||
.lte(duration.getEndTimeBucket()));
|
||||
if (IndexController.LogicIndicesRegister.isPhysicalTable(ServiceRelationServerSideMetrics.INDEX_NAME)) {
|
||||
query.must(Query.term(IndexController.LogicIndicesRegister.METRIC_TABLE_NAME, ServiceRelationServerSideMetrics.INDEX_NAME));
|
||||
}
|
||||
|
|
@ -99,13 +97,12 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO {
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<Call.CallDetail> loadServiceRelationDetectedAtClientSide(long startTB,
|
||||
long endTB) {
|
||||
public List<Call.CallDetail> loadServiceRelationDetectedAtClientSide(Duration duration) {
|
||||
SearchBuilder sourceBuilder = Search.builder();
|
||||
final BoolQueryBuilder query = Query.bool()
|
||||
.must(Query.range(ServiceRelationClientSideMetrics.TIME_BUCKET)
|
||||
.gte(startTB)
|
||||
.lte(endTB));
|
||||
.gte(duration.getStartTimeBucket())
|
||||
.lte(duration.getEndTimeBucket()));
|
||||
if (IndexController.LogicIndicesRegister.isPhysicalTable(ServiceRelationClientSideMetrics.INDEX_NAME)) {
|
||||
query.must(Query.term(IndexController.LogicIndicesRegister.METRIC_TABLE_NAME, ServiceRelationClientSideMetrics.INDEX_NAME));
|
||||
}
|
||||
|
|
@ -118,10 +115,9 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO {
|
|||
@Override
|
||||
public List<Call.CallDetail> loadInstanceRelationDetectedAtServerSide(String clientServiceId,
|
||||
String serverServiceId,
|
||||
long startTB,
|
||||
long endTB) {
|
||||
Duration duration) {
|
||||
final SearchBuilder search = Search.builder().size(0);
|
||||
setInstanceQueryCondition(search, startTB, endTB, clientServiceId, serverServiceId, ServiceInstanceRelationServerSideMetrics.INDEX_NAME);
|
||||
setInstanceQueryCondition(search, duration, clientServiceId, serverServiceId, ServiceInstanceRelationServerSideMetrics.INDEX_NAME);
|
||||
|
||||
return buildInstanceRelation(
|
||||
search, ServiceInstanceRelationServerSideMetrics.INDEX_NAME, DetectPoint.SERVER);
|
||||
|
|
@ -130,16 +126,15 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO {
|
|||
@Override
|
||||
public List<Call.CallDetail> loadInstanceRelationDetectedAtClientSide(String clientServiceId,
|
||||
String serverServiceId,
|
||||
long startTB,
|
||||
long endTB) {
|
||||
Duration duration) {
|
||||
final SearchBuilder search = Search.builder().size(0);
|
||||
setInstanceQueryCondition(search, startTB, endTB, clientServiceId, serverServiceId, ServiceInstanceRelationClientSideMetrics.INDEX_NAME);
|
||||
setInstanceQueryCondition(search, duration, clientServiceId, serverServiceId, ServiceInstanceRelationClientSideMetrics.INDEX_NAME);
|
||||
|
||||
return buildInstanceRelation(
|
||||
search, ServiceInstanceRelationClientSideMetrics.INDEX_NAME, DetectPoint.CLIENT);
|
||||
}
|
||||
|
||||
private void setInstanceQueryCondition(SearchBuilder search, long startTB, long endTB,
|
||||
private void setInstanceQueryCondition(SearchBuilder search, Duration duration,
|
||||
String clientServiceId, String serverServiceId, String indexName) {
|
||||
final BoolQueryBuilder serverRelationBoolQuery =
|
||||
Query.bool()
|
||||
|
|
@ -175,8 +170,8 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO {
|
|||
final BoolQueryBuilder boolQuery =
|
||||
Query.bool()
|
||||
.must(Query.range(EndpointRelationServerSideMetrics.TIME_BUCKET)
|
||||
.gte(startTB)
|
||||
.lte(endTB))
|
||||
.gte(duration.getStartTimeBucket())
|
||||
.lte(duration.getEndTimeBucket()))
|
||||
.must(serviceIdBoolQuery);
|
||||
if (IndexController.LogicIndicesRegister.isPhysicalTable(indexName)) {
|
||||
boolQuery.must(Query.term(IndexController.LogicIndicesRegister.METRIC_TABLE_NAME, indexName));
|
||||
|
|
@ -185,15 +180,14 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO {
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<Call.CallDetail> loadEndpointRelation(long startTB, long endTB,
|
||||
String destEndpointId) {
|
||||
public List<Call.CallDetail> loadEndpointRelation(Duration duration, String destEndpointId) {
|
||||
SearchBuilder sourceBuilder = Search.builder();
|
||||
sourceBuilder.size(0);
|
||||
|
||||
BoolQueryBuilder boolQuery = Query.bool();
|
||||
boolQuery.must(
|
||||
Query.range(EndpointRelationServerSideMetrics.TIME_BUCKET)
|
||||
.gte(startTB).lte(endTB));
|
||||
.gte(duration.getStartTimeBucket()).lte(duration.getEndTimeBucket()));
|
||||
|
||||
BoolQueryBuilder serviceIdBoolQuery = Query.bool();
|
||||
boolQuery.must(serviceIdBoolQuery);
|
||||
|
|
@ -215,22 +209,22 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO {
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<Call.CallDetail> loadProcessRelationDetectedAtClientSide(String serviceInstanceId, long startTB, long endTB) throws IOException {
|
||||
return buildProcessRelation(serviceInstanceId, startTB, endTB, DetectPoint.CLIENT);
|
||||
public List<Call.CallDetail> loadProcessRelationDetectedAtClientSide(String serviceInstanceId, Duration duration) throws IOException {
|
||||
return buildProcessRelation(serviceInstanceId, duration, DetectPoint.CLIENT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Call.CallDetail> loadProcessRelationDetectedAtServerSide(String serviceInstanceId, long startTB, long endTB) throws IOException {
|
||||
return buildProcessRelation(serviceInstanceId, startTB, endTB, DetectPoint.SERVER);
|
||||
public List<Call.CallDetail> loadProcessRelationDetectedAtServerSide(String serviceInstanceId, Duration duration) throws IOException {
|
||||
return buildProcessRelation(serviceInstanceId, duration, DetectPoint.SERVER);
|
||||
}
|
||||
|
||||
private List<Call.CallDetail> buildProcessRelation(String serviceInstanceId, long startTB, long endTB, DetectPoint detectPoint) throws IOException {
|
||||
private List<Call.CallDetail> buildProcessRelation(String serviceInstanceId, Duration duration, DetectPoint detectPoint) throws IOException {
|
||||
final SearchBuilder sourceBuilder = Search.builder().size(0);
|
||||
final BoolQueryBuilder query = Query.bool()
|
||||
.must(Query.term(ProcessRelationServerSideMetrics.SERVICE_INSTANCE_ID, serviceInstanceId))
|
||||
.must(Query.range(EndpointRelationServerSideMetrics.TIME_BUCKET)
|
||||
.gte(startTB)
|
||||
.lte(endTB));
|
||||
.gte(duration.getStartTimeBucket())
|
||||
.lte(duration.getEndTimeBucket()));
|
||||
sourceBuilder.query(query);
|
||||
sourceBuilder.aggregation(
|
||||
Aggregation
|
||||
|
|
@ -380,13 +374,13 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO {
|
|||
return calls;
|
||||
}
|
||||
|
||||
private void setQueryCondition(SearchBuilder search, long startTB, long endTB,
|
||||
private void setQueryCondition(SearchBuilder search, Duration duration,
|
||||
List<String> serviceIds, String indexName) {
|
||||
final BoolQueryBuilder query =
|
||||
Query.bool()
|
||||
.must(Query.range(ServiceRelationServerSideMetrics.TIME_BUCKET)
|
||||
.gte(startTB)
|
||||
.lte(endTB));
|
||||
.gte(duration.getStartTimeBucket())
|
||||
.lte(duration.getEndTimeBucket()));
|
||||
|
||||
final BoolQueryBuilder serviceIdBoolQuery = Query.bool();
|
||||
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ import org.apache.skywalking.library.elasticsearch.response.search.SearchRespons
|
|||
import org.apache.skywalking.oap.server.core.analysis.IDManager;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.Tag;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.segment.SegmentRecord;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.query.type.BasicTrace;
|
||||
import org.apache.skywalking.oap.server.core.query.type.QueryOrder;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Span;
|
||||
|
|
@ -49,6 +50,8 @@ import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.base.EsDAO;
|
|||
import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.base.IndexController;
|
||||
import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.base.TimeRangeIndexNameGenerator;
|
||||
|
||||
import static java.util.Objects.nonNull;
|
||||
|
||||
public class TraceQueryEsDAO extends EsDAO implements ITraceQueryDAO {
|
||||
|
||||
private final int segmentQueryMaxSize;
|
||||
|
|
@ -59,8 +62,7 @@ public class TraceQueryEsDAO extends EsDAO implements ITraceQueryDAO {
|
|||
}
|
||||
|
||||
@Override
|
||||
public TraceBrief queryBasicTraces(long startSecondTB,
|
||||
long endSecondTB,
|
||||
public TraceBrief queryBasicTraces(Duration duration,
|
||||
long minDuration,
|
||||
long maxDuration,
|
||||
String serviceId,
|
||||
|
|
@ -72,6 +74,12 @@ public class TraceQueryEsDAO extends EsDAO implements ITraceQueryDAO {
|
|||
TraceState traceState,
|
||||
QueryOrder queryOrder,
|
||||
final List<Tag> tags) throws IOException {
|
||||
long startSecondTB = 0;
|
||||
long endSecondTB = 0;
|
||||
if (nonNull(duration)) {
|
||||
startSecondTB = duration.getStartTimeBucketInSec();
|
||||
endSecondTB = duration.getEndTimeBucketInSec();
|
||||
}
|
||||
final BoolQueryBuilder query = Query.bool();
|
||||
if (IndexController.LogicIndicesRegister.isPhysicalTable(SegmentRecord.INDEX_NAME)) {
|
||||
query.must(Query.term(IndexController.LogicIndicesRegister.RECORD_TABLE_NAME, SegmentRecord.INDEX_NAME));
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ import org.apache.skywalking.library.elasticsearch.requests.search.aggregation.T
|
|||
import org.apache.skywalking.library.elasticsearch.response.search.SearchHit;
|
||||
import org.apache.skywalking.library.elasticsearch.response.search.SearchResponse;
|
||||
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.storage.query.IZipkinQueryDAO;
|
||||
import org.apache.skywalking.oap.server.core.zipkin.ZipkinServiceRelationTraffic;
|
||||
import org.apache.skywalking.oap.server.core.zipkin.ZipkinServiceSpanTraffic;
|
||||
|
|
@ -166,9 +167,9 @@ public class ZipkinQueryEsDAO extends EsDAO implements IZipkinQueryDAO {
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<List<Span>> getTraces(final QueryRequest request) {
|
||||
final long startTimeMillis = request.endTs() - request.lookback();
|
||||
final long endTimeMillis = request.endTs();
|
||||
public List<List<Span>> getTraces(final QueryRequest request, Duration duration) {
|
||||
final long startTimeMillis = duration.getStartTimestamp();
|
||||
final long endTimeMillis = duration.getEndTimestamp();
|
||||
BoolQueryBuilder query = Query.bool();
|
||||
if (startTimeMillis > 0 && endTimeMillis > 0) {
|
||||
query.must(Query.range(ZipkinSpanRecord.TIMESTAMP_MILLIS)
|
||||
|
|
|
|||
|
|
@ -33,12 +33,15 @@ import org.apache.skywalking.oap.server.core.alarm.AlarmRecord;
|
|||
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.Tag;
|
||||
import org.apache.skywalking.oap.server.core.config.ConfigService;
|
||||
import org.apache.skywalking.oap.server.core.query.enumeration.Scope;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.query.type.AlarmMessage;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Alarms;
|
||||
import org.apache.skywalking.oap.server.core.storage.query.IAlarmQueryDAO;
|
||||
import org.apache.skywalking.oap.server.library.client.jdbc.hikaricp.JDBCHikariCPClient;
|
||||
import org.apache.skywalking.oap.server.library.module.ModuleManager;
|
||||
import org.apache.skywalking.oap.server.library.util.CollectionUtils;
|
||||
|
||||
import static java.util.Objects.nonNull;
|
||||
import static org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao.H2TableInstaller.ID_COLUMN;
|
||||
|
||||
public class H2AlarmQueryDAO implements IAlarmQueryDAO {
|
||||
|
|
@ -56,8 +59,14 @@ public class H2AlarmQueryDAO implements IAlarmQueryDAO {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Alarms getAlarm(Integer scopeId, String keyword, int limit, int from, long startTB,
|
||||
long endTB, final List<Tag> tags) throws IOException {
|
||||
public Alarms getAlarm(Integer scopeId, String keyword, int limit, int from,
|
||||
Duration duration, final List<Tag> tags) throws IOException {
|
||||
long startTB = 0;
|
||||
long endTB = 0;
|
||||
if (nonNull(duration)) {
|
||||
startTB = duration.getStartTimeBucketInSec();
|
||||
endTB = duration.getEndTimeBucketInSec();
|
||||
}
|
||||
if (searchableTagKeys == null) {
|
||||
final ConfigService configService = manager.find(CoreModule.NAME)
|
||||
.provider()
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import java.sql.SQLException;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.library.util.StringUtil;
|
||||
import org.apache.skywalking.oap.server.core.browser.manual.errorlog.BrowserErrorLogRecord;
|
||||
import org.apache.skywalking.oap.server.core.browser.source.BrowserErrorCategory;
|
||||
|
|
@ -43,10 +44,14 @@ public class H2BrowserLogQueryDAO implements IBrowserLogQueryDAO {
|
|||
String serviceVersionId,
|
||||
String pagePathId,
|
||||
BrowserErrorCategory category,
|
||||
long startSecondTB,
|
||||
long endSecondTB,
|
||||
Duration duration,
|
||||
int limit,
|
||||
int from) throws IOException {
|
||||
long startSecondTB = 0, endSecondTB = 0;
|
||||
if (nonNull(duration)) {
|
||||
startSecondTB = duration.getStartTimeBucketInSec();
|
||||
endSecondTB = duration.getEndTimeBucketInSec();
|
||||
}
|
||||
StringBuilder sql = new StringBuilder();
|
||||
|
||||
List<Object> parameters = new ArrayList<>(9);
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import java.sql.SQLException;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.library.util.StringUtil;
|
||||
import org.apache.skywalking.oap.server.core.Const;
|
||||
import org.apache.skywalking.oap.server.core.CoreModule;
|
||||
|
|
@ -75,11 +76,16 @@ public class H2LogQueryDAO implements ILogQueryDAO {
|
|||
Order queryOrder,
|
||||
int from,
|
||||
int limit,
|
||||
final long startSecondTB,
|
||||
final long endSecondTB,
|
||||
final Duration duration,
|
||||
final List<Tag> tags,
|
||||
final List<String> keywordsOfContent,
|
||||
final List<String> excludingKeywordsOfContent) throws IOException {
|
||||
long startSecondTB = 0;
|
||||
long endSecondTB = 0;
|
||||
if (nonNull(duration)) {
|
||||
startSecondTB = duration.getStartTimeBucketInSec();
|
||||
endSecondTB = duration.getEndTimeBucketInSec();
|
||||
}
|
||||
if (searchableTagKeys == null) {
|
||||
final ConfigService configService = manager.find(CoreModule.NAME)
|
||||
.provider()
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ import org.apache.skywalking.oap.server.core.analysis.manual.process.ProcessTraf
|
|||
import org.apache.skywalking.oap.server.core.analysis.manual.service.ServiceTraffic;
|
||||
import org.apache.skywalking.oap.server.core.query.enumeration.Language;
|
||||
import org.apache.skywalking.oap.server.core.query.enumeration.ProfilingSupportStatus;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Attribute;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Endpoint;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Process;
|
||||
|
|
@ -112,9 +113,9 @@ public class H2MetadataQueryDAO implements IMetadataQueryDAO {
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<ServiceInstance> listInstances(long startTimestamp, long endTimestamp,
|
||||
public List<ServiceInstance> listInstances(Duration duration,
|
||||
String serviceId) throws IOException {
|
||||
final long minuteTimeBucket = TimeBucket.getMinuteTimeBucket(startTimestamp);
|
||||
final long minuteTimeBucket = TimeBucket.getMinuteTimeBucket(duration.getStartTimestamp());
|
||||
|
||||
StringBuilder sql = new StringBuilder();
|
||||
List<Object> condition = new ArrayList<>(5);
|
||||
|
|
@ -204,7 +205,9 @@ public class H2MetadataQueryDAO implements IMetadataQueryDAO {
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<Process> listProcesses(String serviceInstanceId, long lastPingStartTimeBucket, long lastPingEndTimeBucket, boolean includeVirtual) throws IOException {
|
||||
public List<Process> listProcesses(String serviceInstanceId, Duration duration, boolean includeVirtual) throws IOException {
|
||||
long lastPingStartTimeBucket = duration.getStartTimeBucket();
|
||||
long lastPingEndTimeBucket = duration.getEndTimeBucket();
|
||||
StringBuilder sql = new StringBuilder();
|
||||
List<Object> condition = new ArrayList<>();
|
||||
sql.append("select * from ").append(ProcessTraffic.INDEX_NAME);
|
||||
|
|
|
|||
|
|
@ -29,9 +29,12 @@ import java.util.Set;
|
|||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.TagAutocompleteData;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.TagType;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.storage.query.ITagAutoCompleteQueryDAO;
|
||||
import org.apache.skywalking.oap.server.library.client.jdbc.hikaricp.JDBCHikariCPClient;
|
||||
|
||||
import static java.util.Objects.nonNull;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class H2TagAutoCompleteQueryDAO implements ITagAutoCompleteQueryDAO {
|
||||
private final JDBCHikariCPClient h2Client;
|
||||
|
|
@ -39,15 +42,14 @@ public class H2TagAutoCompleteQueryDAO implements ITagAutoCompleteQueryDAO {
|
|||
@Override
|
||||
public Set<String> queryTagAutocompleteKeys(final TagType tagType,
|
||||
final int limit,
|
||||
final long startSecondTB,
|
||||
final long endSecondTB) throws IOException {
|
||||
final Duration duration) throws IOException {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
List<Object> condition = new ArrayList<>(2);
|
||||
|
||||
sql.append("select distinct ").append(TagAutocompleteData.TAG_KEY).append(" from ")
|
||||
.append(TagAutocompleteData.INDEX_NAME).append(" where ");
|
||||
sql.append(" 1=1 ");
|
||||
appendTagAutocompleteCondition(tagType, startSecondTB, endSecondTB, sql, condition);
|
||||
appendTagAutocompleteCondition(tagType, duration, sql, condition);
|
||||
sql.append(" limit ").append(limit);
|
||||
try (Connection connection = h2Client.getConnection()) {
|
||||
ResultSet resultSet = h2Client.executeQuery(connection, sql.toString(), condition.toArray(new Object[0]));
|
||||
|
|
@ -65,14 +67,13 @@ public class H2TagAutoCompleteQueryDAO implements ITagAutoCompleteQueryDAO {
|
|||
public Set<String> queryTagAutocompleteValues(final TagType tagType,
|
||||
final String tagKey,
|
||||
final int limit,
|
||||
final long startSecondTB,
|
||||
final long endSecondTB) throws IOException {
|
||||
final Duration duration) throws IOException {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
List<Object> condition = new ArrayList<>(3);
|
||||
sql.append("select * from ").append(TagAutocompleteData.INDEX_NAME).append(" where ");
|
||||
sql.append(TagAutocompleteData.TAG_KEY).append(" = ?");
|
||||
condition.add(tagKey);
|
||||
appendTagAutocompleteCondition(tagType, startSecondTB, endSecondTB, sql, condition);
|
||||
appendTagAutocompleteCondition(tagType, duration, sql, condition);
|
||||
sql.append(" limit ").append(limit);
|
||||
|
||||
try (Connection connection = h2Client.getConnection()) {
|
||||
|
|
@ -88,16 +89,23 @@ public class H2TagAutoCompleteQueryDAO implements ITagAutoCompleteQueryDAO {
|
|||
}
|
||||
|
||||
private void appendTagAutocompleteCondition(final TagType tagType,
|
||||
final long startSecondTB,
|
||||
final long endSecondTB,
|
||||
final Duration duration,
|
||||
final StringBuilder sql,
|
||||
final List<Object> condition) {
|
||||
long startSecondTB = 0;
|
||||
long endSecondTB = 0;
|
||||
if (nonNull(duration)) {
|
||||
startSecondTB = duration.getStartTimeBucketInSec();
|
||||
endSecondTB = duration.getEndTimeBucketInSec();
|
||||
}
|
||||
|
||||
long startTB = startSecondTB / 1000000 * 10000;
|
||||
long endTB = endSecondTB / 1000000 * 10000 + 2359;
|
||||
|
||||
sql.append(" and ");
|
||||
sql.append(TagAutocompleteData.TAG_TYPE).append(" = ?");
|
||||
condition.add(tagType.name());
|
||||
|
||||
long startTB = startSecondTB / 1000000 * 10000;
|
||||
long endTB = endSecondTB / 1000000 * 10000 + 9999;
|
||||
if (startTB > 0) {
|
||||
sql.append(" and ");
|
||||
sql.append(TagAutocompleteData.TIME_BUCKET).append(">=?");
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ import org.apache.skywalking.oap.server.core.analysis.manual.relation.process.Pr
|
|||
import org.apache.skywalking.oap.server.core.analysis.manual.relation.service.ServiceRelationClientSideMetrics;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.relation.service.ServiceRelationServerSideMetrics;
|
||||
import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Call;
|
||||
import org.apache.skywalking.oap.server.core.source.DetectPoint;
|
||||
import org.apache.skywalking.oap.server.core.storage.query.ITopologyQueryDAO;
|
||||
|
|
@ -45,42 +46,38 @@ public class H2TopologyQueryDAO implements ITopologyQueryDAO {
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<Call.CallDetail> loadServiceRelationsDetectedAtServerSide(long startTB,
|
||||
long endTB,
|
||||
public List<Call.CallDetail> loadServiceRelationsDetectedAtServerSide(Duration duration,
|
||||
List<String> serviceIds) throws IOException {
|
||||
return loadServiceCalls(
|
||||
ServiceRelationServerSideMetrics.INDEX_NAME, startTB, endTB,
|
||||
ServiceRelationServerSideMetrics.INDEX_NAME, duration,
|
||||
ServiceRelationServerSideMetrics.SOURCE_SERVICE_ID,
|
||||
ServiceRelationServerSideMetrics.DEST_SERVICE_ID, serviceIds, DetectPoint.SERVER
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Call.CallDetail> loadServiceRelationDetectedAtClientSide(long startTB,
|
||||
long endTB,
|
||||
public List<Call.CallDetail> loadServiceRelationDetectedAtClientSide(Duration duration,
|
||||
List<String> serviceIds) throws IOException {
|
||||
return loadServiceCalls(
|
||||
ServiceRelationClientSideMetrics.INDEX_NAME, startTB, endTB,
|
||||
ServiceRelationClientSideMetrics.INDEX_NAME, duration,
|
||||
ServiceRelationClientSideMetrics.SOURCE_SERVICE_ID,
|
||||
ServiceRelationClientSideMetrics.DEST_SERVICE_ID, serviceIds, DetectPoint.CLIENT
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Call.CallDetail> loadServiceRelationsDetectedAtServerSide(long startTB,
|
||||
long endTB) throws IOException {
|
||||
public List<Call.CallDetail> loadServiceRelationsDetectedAtServerSide(Duration duration) throws IOException {
|
||||
return loadServiceCalls(
|
||||
ServiceRelationServerSideMetrics.INDEX_NAME, startTB, endTB,
|
||||
ServiceRelationServerSideMetrics.INDEX_NAME, duration,
|
||||
ServiceRelationServerSideMetrics.SOURCE_SERVICE_ID,
|
||||
ServiceRelationServerSideMetrics.DEST_SERVICE_ID, new ArrayList<>(0), DetectPoint.SERVER
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Call.CallDetail> loadServiceRelationDetectedAtClientSide(long startTB,
|
||||
long endTB) throws IOException {
|
||||
public List<Call.CallDetail> loadServiceRelationDetectedAtClientSide(Duration duration) throws IOException {
|
||||
return loadServiceCalls(
|
||||
ServiceRelationClientSideMetrics.INDEX_NAME, startTB, endTB,
|
||||
ServiceRelationClientSideMetrics.INDEX_NAME, duration,
|
||||
ServiceRelationClientSideMetrics.SOURCE_SERVICE_ID,
|
||||
ServiceRelationClientSideMetrics.DEST_SERVICE_ID, new ArrayList<>(0), DetectPoint.CLIENT
|
||||
);
|
||||
|
|
@ -89,10 +86,9 @@ public class H2TopologyQueryDAO implements ITopologyQueryDAO {
|
|||
@Override
|
||||
public List<Call.CallDetail> loadInstanceRelationDetectedAtServerSide(String clientServiceId,
|
||||
String serverServiceId,
|
||||
long startTB,
|
||||
long endTB) throws IOException {
|
||||
Duration duration) throws IOException {
|
||||
return loadServiceInstanceCalls(
|
||||
ServiceInstanceRelationServerSideMetrics.INDEX_NAME, startTB, endTB,
|
||||
ServiceInstanceRelationServerSideMetrics.INDEX_NAME, duration,
|
||||
ServiceInstanceRelationServerSideMetrics.SOURCE_SERVICE_ID,
|
||||
ServiceInstanceRelationServerSideMetrics.DEST_SERVICE_ID, clientServiceId, serverServiceId,
|
||||
DetectPoint.SERVER
|
||||
|
|
@ -102,10 +98,9 @@ public class H2TopologyQueryDAO implements ITopologyQueryDAO {
|
|||
@Override
|
||||
public List<Call.CallDetail> loadInstanceRelationDetectedAtClientSide(String clientServiceId,
|
||||
String serverServiceId,
|
||||
long startTB,
|
||||
long endTB) throws IOException {
|
||||
Duration duration) throws IOException {
|
||||
return loadServiceInstanceCalls(
|
||||
ServiceInstanceRelationClientSideMetrics.INDEX_NAME, startTB, endTB,
|
||||
ServiceInstanceRelationClientSideMetrics.INDEX_NAME, duration,
|
||||
ServiceInstanceRelationClientSideMetrics.SOURCE_SERVICE_ID,
|
||||
ServiceInstanceRelationClientSideMetrics.DEST_SERVICE_ID, clientServiceId, serverServiceId,
|
||||
DetectPoint.CLIENT
|
||||
|
|
@ -113,16 +108,15 @@ public class H2TopologyQueryDAO implements ITopologyQueryDAO {
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<Call.CallDetail> loadEndpointRelation(long startTB,
|
||||
long endTB,
|
||||
public List<Call.CallDetail> loadEndpointRelation(Duration duration,
|
||||
String destEndpointId) throws IOException {
|
||||
List<Call.CallDetail> calls = loadEndpointFromSide(
|
||||
EndpointRelationServerSideMetrics.INDEX_NAME, startTB, endTB,
|
||||
EndpointRelationServerSideMetrics.INDEX_NAME, duration,
|
||||
EndpointRelationServerSideMetrics.SOURCE_ENDPOINT,
|
||||
EndpointRelationServerSideMetrics.DEST_ENDPOINT, destEndpointId, false
|
||||
);
|
||||
calls.addAll(
|
||||
loadEndpointFromSide(EndpointRelationServerSideMetrics.INDEX_NAME, startTB, endTB,
|
||||
loadEndpointFromSide(EndpointRelationServerSideMetrics.INDEX_NAME, duration,
|
||||
EndpointRelationServerSideMetrics.SOURCE_ENDPOINT,
|
||||
EndpointRelationServerSideMetrics.DEST_ENDPOINT, destEndpointId, true
|
||||
));
|
||||
|
|
@ -130,25 +124,24 @@ public class H2TopologyQueryDAO implements ITopologyQueryDAO {
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<Call.CallDetail> loadProcessRelationDetectedAtClientSide(String serviceInstanceId, long startTB, long endTB) throws IOException {
|
||||
return loadProcessFromSide(startTB, endTB, serviceInstanceId, DetectPoint.CLIENT);
|
||||
public List<Call.CallDetail> loadProcessRelationDetectedAtClientSide(String serviceInstanceId, Duration duration) throws IOException {
|
||||
return loadProcessFromSide(duration, serviceInstanceId, DetectPoint.CLIENT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Call.CallDetail> loadProcessRelationDetectedAtServerSide(String serviceInstanceId, long startTB, long endTB) throws IOException {
|
||||
return loadProcessFromSide(startTB, endTB, serviceInstanceId, DetectPoint.SERVER);
|
||||
public List<Call.CallDetail> loadProcessRelationDetectedAtServerSide(String serviceInstanceId, Duration duration) throws IOException {
|
||||
return loadProcessFromSide(duration, serviceInstanceId, DetectPoint.SERVER);
|
||||
}
|
||||
|
||||
private List<Call.CallDetail> loadServiceCalls(String tableName,
|
||||
long startTB,
|
||||
long endTB,
|
||||
Duration duration,
|
||||
String sourceCName,
|
||||
String destCName,
|
||||
List<String> serviceIds,
|
||||
DetectPoint detectPoint) throws IOException {
|
||||
Object[] conditions = new Object[serviceIds.size() * 2 + 2];
|
||||
conditions[0] = startTB;
|
||||
conditions[1] = endTB;
|
||||
conditions[0] = duration.getStartTimeBucket();
|
||||
conditions[1] = duration.getEndTimeBucket();
|
||||
StringBuilder serviceIdMatchSql = new StringBuilder();
|
||||
if (serviceIds.size() > 0) {
|
||||
serviceIdMatchSql.append("and (");
|
||||
|
|
@ -181,16 +174,15 @@ public class H2TopologyQueryDAO implements ITopologyQueryDAO {
|
|||
}
|
||||
|
||||
private List<Call.CallDetail> loadServiceInstanceCalls(String tableName,
|
||||
long startTB,
|
||||
long endTB,
|
||||
Duration duration,
|
||||
String sourceCName,
|
||||
String descCName,
|
||||
String sourceServiceId,
|
||||
String destServiceId,
|
||||
DetectPoint detectPoint) throws IOException {
|
||||
Object[] conditions = new Object[] {
|
||||
startTB,
|
||||
endTB,
|
||||
duration.getStartTimeBucket(),
|
||||
duration.getEndTimeBucket(),
|
||||
sourceServiceId,
|
||||
destServiceId,
|
||||
destServiceId,
|
||||
|
|
@ -224,15 +216,14 @@ public class H2TopologyQueryDAO implements ITopologyQueryDAO {
|
|||
}
|
||||
|
||||
private List<Call.CallDetail> loadEndpointFromSide(String tableName,
|
||||
long startTB,
|
||||
long endTB,
|
||||
Duration duration,
|
||||
String sourceCName,
|
||||
String destCName,
|
||||
String id,
|
||||
boolean isSourceId) throws IOException {
|
||||
Object[] conditions = new Object[3];
|
||||
conditions[0] = startTB;
|
||||
conditions[1] = endTB;
|
||||
conditions[0] = duration.getStartTimeBucket();
|
||||
conditions[1] = duration.getEndTimeBucket();
|
||||
conditions[2] = id;
|
||||
List<Call.CallDetail> calls = new ArrayList<>();
|
||||
try (Connection connection = h2Client.getConnection()) {
|
||||
|
|
@ -252,13 +243,12 @@ public class H2TopologyQueryDAO implements ITopologyQueryDAO {
|
|||
return calls;
|
||||
}
|
||||
|
||||
private List<Call.CallDetail> loadProcessFromSide(long startTB,
|
||||
long endTB,
|
||||
private List<Call.CallDetail> loadProcessFromSide(Duration duration,
|
||||
String instanceId,
|
||||
DetectPoint detectPoint) throws IOException {
|
||||
Object[] conditions = new Object[3];
|
||||
conditions[0] = startTB;
|
||||
conditions[1] = endTB;
|
||||
conditions[0] = duration.getStartTimeBucket();
|
||||
conditions[1] = duration.getEndTimeBucket();
|
||||
conditions[2] = instanceId;
|
||||
List<Call.CallDetail> calls = new ArrayList<>();
|
||||
try (Connection connection = h2Client.getConnection()) {
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import java.util.List;
|
|||
import org.apache.skywalking.oap.server.core.Const;
|
||||
import org.apache.skywalking.oap.server.core.CoreModule;
|
||||
import org.apache.skywalking.oap.server.core.config.ConfigService;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.library.util.StringUtil;
|
||||
import org.apache.skywalking.oap.server.core.analysis.IDManager;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.Tag;
|
||||
|
|
@ -45,6 +46,8 @@ import org.apache.skywalking.oap.server.library.client.jdbc.hikaricp.JDBCHikariC
|
|||
import org.apache.skywalking.oap.server.library.module.ModuleManager;
|
||||
import org.apache.skywalking.oap.server.library.util.BooleanUtils;
|
||||
import org.apache.skywalking.oap.server.library.util.CollectionUtils;
|
||||
|
||||
import static java.util.Objects.nonNull;
|
||||
import static org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao.H2TableInstaller.ID_COLUMN;
|
||||
|
||||
public class H2TraceQueryDAO implements ITraceQueryDAO {
|
||||
|
|
@ -59,8 +62,7 @@ public class H2TraceQueryDAO implements ITraceQueryDAO {
|
|||
}
|
||||
|
||||
@Override
|
||||
public TraceBrief queryBasicTraces(long startSecondTB,
|
||||
long endSecondTB,
|
||||
public TraceBrief queryBasicTraces(Duration duration,
|
||||
long minDuration,
|
||||
long maxDuration,
|
||||
String serviceId,
|
||||
|
|
@ -72,6 +74,12 @@ public class H2TraceQueryDAO implements ITraceQueryDAO {
|
|||
TraceState traceState,
|
||||
QueryOrder queryOrder,
|
||||
final List<Tag> tags) throws IOException {
|
||||
long startSecondTB = 0;
|
||||
long endSecondTB = 0;
|
||||
if (nonNull(duration)) {
|
||||
startSecondTB = duration.getStartTimeBucketInSec();
|
||||
endSecondTB = duration.getEndTimeBucketInSec();
|
||||
}
|
||||
if (searchableTagKeys == null) {
|
||||
final ConfigService configService = manager.find(CoreModule.NAME)
|
||||
.provider()
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import java.util.LinkedHashMap;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.storage.query.IZipkinQueryDAO;
|
||||
import org.apache.skywalking.oap.server.core.zipkin.ZipkinServiceRelationTraffic;
|
||||
import org.apache.skywalking.oap.server.core.zipkin.ZipkinServiceSpanTraffic;
|
||||
|
|
@ -137,9 +138,9 @@ public class H2ZipkinQueryDAO implements IZipkinQueryDAO {
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<List<Span>> getTraces(final QueryRequest request) throws IOException {
|
||||
final long startTimeMillis = request.endTs() - request.lookback();
|
||||
final long endTimeMillis = request.endTs();
|
||||
public List<List<Span>> getTraces(final QueryRequest request, Duration duration) throws IOException {
|
||||
final long startTimeMillis = duration.getStartTimestamp();
|
||||
final long endTimeMillis = duration.getEndTimestamp();
|
||||
StringBuilder sql = new StringBuilder();
|
||||
List<Object> condition = new ArrayList<>(5);
|
||||
List<Map.Entry<String, String>> annotations = new ArrayList<>(request.annotationQuery().entrySet());
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import org.apache.skywalking.apm.network.language.agent.v3.SegmentObject;
|
|||
import org.apache.skywalking.apm.network.language.agent.v3.SpanObject;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.searchtag.Tag;
|
||||
import org.apache.skywalking.oap.server.core.analysis.manual.segment.SegmentRecord;
|
||||
import org.apache.skywalking.oap.server.core.query.input.Duration;
|
||||
import org.apache.skywalking.oap.server.core.query.type.QueryOrder;
|
||||
import org.apache.skywalking.oap.server.core.query.type.Span;
|
||||
import org.apache.skywalking.oap.server.core.query.type.TraceBrief;
|
||||
|
|
@ -39,8 +40,7 @@ public class ProfileTraceDAO implements ITraceQueryDAO {
|
|||
}
|
||||
|
||||
@Override
|
||||
public TraceBrief queryBasicTraces(long startSecondTB,
|
||||
long endSecondTB,
|
||||
public TraceBrief queryBasicTraces(Duration duration,
|
||||
long minDuration,
|
||||
long maxDuration,
|
||||
String serviceId,
|
||||
|
|
|
|||
Loading…
Reference in New Issue