use of org.apache.skywalking.oap.query.graphql.type.OndemandLogQueryCondition in project incubator-skywalking by apache.
the class OndemandLogQuery method filter.
private List<Log> filter(final OndemandLogQueryCondition request, final List<InternalLog> logs) {
final Duration duration = new Duration();
duration.setStart(request.getDuration().getStart());
duration.setEnd(request.getDuration().getEnd());
duration.setStep(request.getDuration().getStep());
final long since = duration.getStartTimestamp() / 1000;
final long to = duration.getEndTimestamp() / 1000;
final List<String> inclusions = request.getKeywordsOfContent();
final Predicate<Log> inclusivePredicate = l -> inclusions.isEmpty() || inclusions.stream().anyMatch(k -> l.getContent().matches(k));
final List<String> exclusions = request.getExcludingKeywordsOfContent();
final Predicate<Log> exclusivePredicate = l -> exclusions.isEmpty() || exclusions.stream().noneMatch(k -> l.getContent().matches(k));
return logs.stream().map(LogAdapter::new).map(LogAdapter::adapt).filter(inclusivePredicate).filter(exclusivePredicate).filter(it -> it.getTimestamp() >= since).filter(it -> it.getTimestamp() <= to).sorted(comparing(Log::getTimestamp)).collect(Collectors.toList());
}
use of org.apache.skywalking.oap.query.graphql.type.OndemandLogQueryCondition in project skywalking by apache.
the class OndemandLogQuery method filter.
private List<Log> filter(final OndemandLogQueryCondition request, final List<InternalLog> logs) {
final Duration duration = new Duration();
duration.setStart(request.getDuration().getStart());
duration.setEnd(request.getDuration().getEnd());
duration.setStep(request.getDuration().getStep());
final long since = duration.getStartTimestamp() / 1000;
final long to = duration.getEndTimestamp() / 1000;
final List<String> inclusions = request.getKeywordsOfContent();
final Predicate<Log> inclusivePredicate = l -> inclusions.isEmpty() || inclusions.stream().anyMatch(k -> l.getContent().matches(k));
final List<String> exclusions = request.getExcludingKeywordsOfContent();
final Predicate<Log> exclusivePredicate = l -> exclusions.isEmpty() || exclusions.stream().noneMatch(k -> l.getContent().matches(k));
return logs.stream().map(LogAdapter::new).map(LogAdapter::adapt).filter(inclusivePredicate).filter(exclusivePredicate).filter(it -> it.getTimestamp() >= since).filter(it -> it.getTimestamp() <= to).sorted(comparing(Log::getTimestamp)).collect(Collectors.toList());
}
use of org.apache.skywalking.oap.query.graphql.type.OndemandLogQueryCondition in project skywalking by apache.
the class OndemandLogQuery method ondemandPodLogs.
public Logs ondemandPodLogs(final String namespace, final String podName, final OndemandLogQueryCondition condition) throws IOException {
if (Strings.isNullOrEmpty(namespace) || Strings.isNullOrEmpty(podName)) {
return new Logs().setErrorReason("namespace and podName can't be null or empty");
}
try {
final V1Pod pod = kApi().readNamespacedPod(podName, namespace, null);
final V1ObjectMeta podMetadata = pod.getMetadata();
if (isNull(podMetadata)) {
return new Logs().setErrorReason("No pod metadata can be found");
}
final V1PodSpec spec = pod.getSpec();
if (isNull(spec)) {
return new Logs().setErrorReason("No pod spec can be found");
}
final Duration duration = new Duration();
duration.setStart(condition.getDuration().getStart());
duration.setEnd(condition.getDuration().getEnd());
duration.setStep(condition.getDuration().getStep());
final long since = duration.getStartTimestamp() / 1000;
final String container = condition.getContainer();
final String podLog = kApi().readNamespacedPodLog(podMetadata.getName(), podMetadata.getNamespace(), container, false, null, null, null, null, (int) since, null, true);
final List<InternalLog> logs = Splitter.on("\n").omitEmptyStrings().splitToList(Strings.nullToEmpty(podLog)).stream().filter(StringUtil::isNotBlank).map(it -> InternalLog.builder().line(it).container(container).build()).collect(Collectors.toList());
final List<Log> filtered = filter(condition, logs);
final List<Log> limited = filtered.stream().limit(10000).collect(Collectors.toList());
final Logs result = new Logs();
result.getLogs().addAll(limited);
return result;
} catch (ApiException e) {
log.error("Failed to fetch logs from Kubernetes, {}", e.getResponseBody(), e);
if (!Strings.isNullOrEmpty(e.getResponseBody())) {
Map<String, Object> responseBody = gson.fromJson(e.getResponseBody(), responseType);
String message = responseBody.getOrDefault("message", e.getCode()).toString();
return new Logs().setErrorReason(message);
}
return new Logs().setErrorReason(e.getMessage() + ": " + e.getCode());
}
}
use of org.apache.skywalking.oap.query.graphql.type.OndemandLogQueryCondition in project incubator-skywalking by apache.
the class OndemandLogQuery method ondemandPodLogs.
public Logs ondemandPodLogs(final String namespace, final String podName, final OndemandLogQueryCondition condition) throws IOException {
try {
final V1Pod pod = kApi().readNamespacedPod(podName, namespace, null);
final V1ObjectMeta podMetadata = pod.getMetadata();
if (isNull(podMetadata)) {
return new Logs();
}
final V1PodSpec spec = pod.getSpec();
if (isNull(spec)) {
return new Logs();
}
final Duration duration = new Duration();
duration.setStart(condition.getDuration().getStart());
duration.setEnd(condition.getDuration().getEnd());
duration.setStep(condition.getDuration().getStep());
final long since = duration.getStartTimestamp() / 1000;
final String container = condition.getContainer();
final String podLog = kApi().readNamespacedPodLog(podMetadata.getName(), podMetadata.getNamespace(), container, false, null, null, null, null, (int) since, null, true);
final List<InternalLog> logs = Splitter.on("\n").omitEmptyStrings().splitToList(Strings.nullToEmpty(podLog)).stream().filter(StringUtil::isNotBlank).map(it -> InternalLog.builder().line(it).container(container).build()).collect(Collectors.toList());
final List<Log> filtered = filter(condition, logs);
final List<Log> limited = filtered.stream().limit(10000).collect(Collectors.toList());
final Logs result = new Logs();
result.getLogs().addAll(limited);
return result;
} catch (ApiException e) {
log.error("Failed to fetch logs from Kubernetes, {}", e.getResponseBody(), e);
Map<String, Object> responseBody = gson.fromJson(e.getResponseBody(), responseType);
String message = responseBody.getOrDefault("message", e.getCode()).toString();
throw new RuntimeException(message);
}
}
Aggregations