Skip to content

Commit b7965a5

Browse files
authoredJul 26, 2022
[ROX-11912] Add support for clusters and cluster count for cluster vulnerabilities (stackrox#2523)
* Add support for clusters and cluster count for cluster vulnerabilities
1 parent 658d31a commit b7965a5

File tree

4 files changed

+78
-1
lines changed

4 files changed

+78
-1
lines changed
 

‎central/graphql/resolvers/cluster_vulnerabilities.go

+31-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ func init() {
2222
// NOTE: This list is and should remain alphabetically ordered
2323
schema.AddType("ClusterVulnerability",
2424
append(commonVulnerabilitySubResolvers,
25+
"clusterCount(query: String): Int!",
26+
"clusters(query: String, pagination: Pagination): [Cluster!]!",
2527
"vulnerabilityType: String!",
2628
"vulnerabilityTypes: [String!]!",
2729
)),
@@ -45,6 +47,8 @@ func init() {
4547
type ClusterVulnerabilityResolver interface {
4648
CommonVulnerabilityResolver
4749

50+
ClusterCount(ctx context.Context, args RawQuery) (int32, error)
51+
Clusters(ctx context.Context, args PaginatedQuery) ([]*clusterResolver, error)
4852
VulnerabilityType() string
4953
VulnerabilityTypes() []string
5054
}
@@ -311,9 +315,15 @@ func withOpenShiftTypeFiltering(q string) string {
311315
}
312316

313317
func (resolver *clusterCVEResolver) withClusterVulnerabilityScope(ctx context.Context) context.Context {
318+
if features.PostgresDatastore.Enabled() {
319+
return scoped.Context(ctx, scoped.Scope{
320+
ID: resolver.data.GetId(),
321+
Level: v1.SearchCategory_CLUSTER_VULNERABILITIES,
322+
})
323+
}
314324
return scoped.Context(ctx, scoped.Scope{
315325
ID: resolver.data.GetId(),
316-
Level: v1.SearchCategory_CLUSTER_VULNERABILITIES,
326+
Level: v1.SearchCategory_VULNERABILITIES,
317327
})
318328
}
319329

@@ -333,6 +343,26 @@ func (resolver *clusterCVEResolver) getClusterCVEQuery() *v1.Query {
333343
Sub Resolver Functions
334344
*/
335345

346+
// Clusters returns resolvers for clusters affected by cluster vulnerability.
347+
func (resolver *clusterCVEResolver) Clusters(ctx context.Context, args PaginatedQuery) ([]*clusterResolver, error) {
348+
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.ClusterCVEs, "Clusters")
349+
350+
if err := readClusters(ctx); err != nil {
351+
return nil, err
352+
}
353+
return resolver.root.Clusters(resolver.withClusterVulnerabilityScope(ctx), args)
354+
}
355+
356+
// ClusterCount returns a number of clusters affected by cluster vulnerability.
357+
func (resolver *clusterCVEResolver) ClusterCount(ctx context.Context, args RawQuery) (int32, error) {
358+
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.ClusterCVEs, "ClusterCount")
359+
360+
if err := readClusters(ctx); err != nil {
361+
return 0, err
362+
}
363+
return resolver.root.ClusterCount(resolver.withClusterVulnerabilityScope(ctx), args)
364+
}
365+
336366
func (resolver *clusterCVEResolver) VulnerabilityType() string {
337367
return resolver.data.GetType().String()
338368
}

‎central/graphql/resolvers/vulnerabilities.go

+3
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,9 @@ type VulnerabilityResolver interface {
105105
Nodes(ctx context.Context, args PaginatedQuery) ([]*nodeResolver, error)
106106
NodeCount(ctx context.Context, args RawQuery) (int32, error)
107107

108+
ClusterCount(ctx context.Context, args RawQuery) (int32, error)
109+
Clusters(ctx context.Context, args PaginatedQuery) ([]*clusterResolver, error)
110+
108111
UnusedVarSink(ctx context.Context, args RawQuery) *int32
109112

110113
Suppressed(ctx context.Context) bool

‎central/graphql/resolvers/vulnerabilities_v1.go

+22
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,28 @@ func (evr *EmbeddedVulnerabilityResolver) NodeCount(ctx context.Context, args Ra
275275
return nodeLoader.CountFromQuery(ctx, query)
276276
}
277277

278+
// Clusters returns resolvers for clusters affected by cluster vulnerability.
279+
func (evr *EmbeddedVulnerabilityResolver) Clusters(ctx context.Context, args PaginatedQuery) ([]*clusterResolver, error) {
280+
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.ClusterCVEs, "Clusters")
281+
282+
if err := readClusters(ctx); err != nil {
283+
return nil, err
284+
}
285+
query := search.AddRawQueriesAsConjunction(args.String(), evr.vulnRawQuery())
286+
return evr.root.Clusters(ctx, PaginatedQuery{Query: &query, Pagination: args.Pagination})
287+
}
288+
289+
// ClusterCount returns a number of clusters affected by cluster vulnerability.
290+
func (evr *EmbeddedVulnerabilityResolver) ClusterCount(ctx context.Context, args RawQuery) (int32, error) {
291+
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.ClusterCVEs, "ClusterCount")
292+
293+
if err := readClusters(ctx); err != nil {
294+
return 0, err
295+
}
296+
query := search.AddRawQueriesAsConjunction(args.String(), evr.vulnRawQuery())
297+
return evr.root.ClusterCount(ctx, RawQuery{Query: &query})
298+
}
299+
278300
func (resolver *Resolver) getComponentsForAffectedCluster(ctx context.Context, cve *schema.NVDCVEFeedJSON10DefCVEItem, ct utils.CVEType) (int, int, error) {
279301
clusters, err := resolver.ClusterDataStore.GetClusters(ctx)
280302
if err != nil {

‎central/graphql/resolvers/vulnerabilities_v2.go

+22
Original file line numberDiff line numberDiff line change
@@ -866,6 +866,28 @@ func (resolver *cVEResolver) NodeCount(ctx context.Context, args RawQuery) (int3
866866
return nodeLoader.CountFromQuery(resolver.addScopeContext(query))
867867
}
868868

869+
// Clusters returns resolvers for clusters affected by cluster vulnerability.
870+
func (resolver *cVEResolver) Clusters(ctx context.Context, args PaginatedQuery) ([]*clusterResolver, error) {
871+
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.ClusterCVEs, "Clusters")
872+
873+
if err := readClusters(ctx); err != nil {
874+
return nil, err
875+
}
876+
query := search.AddRawQueriesAsConjunction(args.String(), resolver.getCVERawQuery())
877+
return resolver.root.Clusters(ctx, PaginatedQuery{Query: &query, Pagination: args.Pagination})
878+
}
879+
880+
// ClusterCount returns a number of clusters affected by cluster vulnerability.
881+
func (resolver *cVEResolver) ClusterCount(ctx context.Context, args RawQuery) (int32, error) {
882+
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.ClusterCVEs, "ClusterCount")
883+
884+
if err := readClusters(ctx); err != nil {
885+
return 0, err
886+
}
887+
query := search.AddRawQueriesAsConjunction(args.String(), resolver.getCVERawQuery())
888+
return resolver.root.ClusterCount(ctx, RawQuery{Query: &query})
889+
}
890+
869891
// These return dummy values, as they should not be accessed from the top level vuln resolver, but the embedded
870892
// version instead.
871893

0 commit comments

Comments
 (0)
Please sign in to comment.