Explorar o código

Add filters for diagnostics summary (#3266)

Ishaan Mittal hai 9 meses
pai
achega
20eec7efb9

+ 12 - 3
core/pkg/filter/diagnostics/fields.go

@@ -4,12 +4,21 @@ import (
 	"github.com/opencost/opencost/core/pkg/filter/fieldstrings"
 )
 
-// DiagnosticsField is an enum that represents Diagnostics-specific fields that can be
-// filtered on (cluster)
+// DiagnosticsField and DiagnosticsSummaryField are enums that represent Diagnostics-specific fields that can be
+// filtered on (cluster for diagnostics	, cluster, provider, region, agent version for summary)
 type DiagnosticsField string
+type DiagnosticsSummaryField string
 
 // If you add a DiagnosticsField, make sure to update field maps to return the correct
 // Diagnostic value does not enforce exhaustive pattern matching on "enum" types.
 const (
-	FieldClusterID  DiagnosticsField = DiagnosticsField(fieldstrings.FieldClusterID)
+	FieldClusterID DiagnosticsField = DiagnosticsField(fieldstrings.FieldClusterID)
+)
+
+// Field used for Diagnostics Summary filtering
+const (
+	FieldSummaryClusterID DiagnosticsSummaryField = DiagnosticsSummaryField(fieldstrings.FieldClusterID)
+	FieldSummaryProvider  DiagnosticsSummaryField = DiagnosticsSummaryField(fieldstrings.FieldProvider)
+	FieldSummaryRegion    DiagnosticsSummaryField = DiagnosticsSummaryField(fieldstrings.FieldRegion)
+	FieldSummaryVersion   DiagnosticsSummaryField = DiagnosticsSummaryField(fieldstrings.FieldVersion)
 )

+ 39 - 2
core/pkg/filter/diagnostics/parser.go

@@ -1,6 +1,9 @@
 package diagnostics
 
-import "github.com/opencost/opencost/core/pkg/filter/ast"
+import (
+	"github.com/opencost/opencost/core/pkg/filter/ast"
+	"github.com/opencost/opencost/core/pkg/filter/ops"
+)
 
 // a slice of all the diagnostics field instances the lexer should recognize as
 // valid left-hand comparators
@@ -8,8 +11,18 @@ var diagnosticsFilterFields []*ast.Field = []*ast.Field{
 	ast.NewField(FieldClusterID),
 }
 
+// a slice of all the diagnostics summary field instances the lexer should recognize as
+// valid left-hand comparators
+var diagnosticsSummaryFilterFields []*ast.Field = []*ast.Field{
+	ast.NewField(FieldSummaryClusterID),
+	ast.NewField(FieldSummaryProvider),
+	ast.NewField(FieldSummaryRegion),
+	ast.NewField(FieldSummaryVersion),
+}
+
 // fieldMap is a lazily loaded mapping from DiagnosticsField to ast.Field
 var fieldMap map[DiagnosticsField]*ast.Field
+var diagnosticsSummaryFieldMap map[DiagnosticsSummaryField]*ast.Field
 
 func init() {
 	fieldMap = make(map[DiagnosticsField]*ast.Field, len(diagnosticsFilterFields))
@@ -17,6 +30,11 @@ func init() {
 		ff := *f
 		fieldMap[DiagnosticsField(ff.Name)] = &ff
 	}
+	diagnosticsSummaryFieldMap = make(map[DiagnosticsSummaryField]*ast.Field, len(diagnosticsSummaryFilterFields))
+	for _, f := range diagnosticsSummaryFilterFields {
+		ff := *f
+		diagnosticsSummaryFieldMap[DiagnosticsSummaryField(ff.Name)] = &ff
+	}
 }
 
 // DefaultFieldByName returns only default diagnostics filter fields by name.
@@ -29,8 +47,27 @@ func DefaultFieldByName(field DiagnosticsField) *ast.Field {
 	return nil
 }
 
+func DefaultSummaryFieldByName(field DiagnosticsSummaryField) *ast.Field {
+	if af, ok := diagnosticsSummaryFieldMap[field]; ok {
+		afcopy := *af
+		return &afcopy
+	}
+	return nil
+}
+
 // NewDiagnosticFilterParser creates a new `ast.FilterParser` implementation
 // which uses diagnostics specific fields
 func NewDiagnosticsFilterParser() ast.FilterParser {
 	return ast.NewFilterParser(diagnosticsFilterFields)
-}
+}
+
+func NewDiagnosticsSummaryFilterParser() ast.FilterParser {
+	return ast.NewFilterParser(diagnosticsSummaryFilterFields)
+}
+
+// use initialization function to assign field types to the ops package helper for programatically
+// building v2.1 filters
+func init() {
+	ops.RegisterDefaultFieldLookup(DefaultFieldByName)
+	ops.RegisterDefaultFieldLookup(DefaultSummaryFieldByName)
+}

+ 3 - 0
core/pkg/filter/fieldstrings/fieldstrings.go

@@ -34,6 +34,9 @@ const (
 	FieldRegionID          string = "regionID"
 	FieldAvailabilityZone  string = "availabilityZone"
 
+	FieldVersion string = "version"
+	FieldRegion  string = "region"
+
 	AliasDepartment  string = "department"
 	AliasEnvironment string = "environment"
 	AliasOwner       string = "owner"