Skip to content

Commit

Permalink
feat(graphql): add top-level query for targetNodes
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewazores committed Feb 27, 2024
1 parent 77649fa commit fd5d1f5
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/main/java/io/cryostat/graphql/RootNode.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public DiscoveryNode getRootNode() {
"Get target nodes that are descendants of this node. That is, get the set of leaf nodes"
+ " from anywhere below this node's subtree.")
public List<DiscoveryNode> descendantTargets(
@Source DiscoveryNode discoveryNode, DescendantTargetsFilterInput filter) {
@Source DiscoveryNode discoveryNode, DiscoveryNodeFilterInput filter) {
// TODO do this filtering at the database query level as much as possible. As is, this will
// load the entire discovery tree out of the database, then perform the filtering at the
// application level.
Expand All @@ -64,7 +64,7 @@ private Set<DiscoveryNode> recurseChildren(
return result;
}

public static class DescendantTargetsFilterInput implements Predicate<DiscoveryNode> {
public static class DiscoveryNodeFilterInput implements Predicate<DiscoveryNode> {
public @Nullable Long id;
public @Nullable String name;
public @Nullable List<String> names;
Expand Down
42 changes: 42 additions & 0 deletions src/main/java/io/cryostat/graphql/TargetNodes.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/*
* Copyright The Cryostat Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.cryostat.graphql;

import java.util.List;

import io.cryostat.discovery.DiscoveryNode;
import io.cryostat.graphql.RootNode.DiscoveryNodeFilterInput;
import io.cryostat.targets.Target;

import org.eclipse.microprofile.graphql.Description;
import org.eclipse.microprofile.graphql.GraphQLApi;
import org.eclipse.microprofile.graphql.Query;

@GraphQLApi
public class TargetNodes {

@Query("targetNodes")
@Description("Get the Target discovery nodes, i.e. the leaf nodes of the discovery tree")
public List<DiscoveryNode> getTargetNodes(DiscoveryNodeFilterInput filter) {
// TODO do this filtering at the database query level as much as possible. As is, this will
// load the entire discovery tree out of the database, then perform the filtering at the
// application level.
return Target.<Target>findAll().stream()
.map(t -> t.discoveryNode)
.filter(n -> filter == null ? true : filter.test(n))
.toList();
}
}

0 comments on commit fd5d1f5

Please sign in to comment.