Skip to content

Commit

Permalink
feat: analyzer ifacing
Browse files Browse the repository at this point in the history
Signed-off-by: AlexsJones <alexsimonjones@gmail.com>
  • Loading branch information
AlexsJones committed Apr 2, 2023
1 parent bbbbd85 commit 426f562
Show file tree
Hide file tree
Showing 9 changed files with 49 additions and 25 deletions.
32 changes: 14 additions & 18 deletions pkg/analyzer/analyzer.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,17 @@ import (
"github.com/spf13/viper"
)

var coreAnalyzerMap = map[string]func(ctx context.Context, config *AnalysisConfiguration,
client *kubernetes.Client, aiClient ai.IAI, analysisResults *[]Analysis) error{
"Pod": AnalyzePod,
"ReplicaSet": AnalyzeReplicaSet,
"PersistentVolumeClaim": AnalyzePersistentVolumeClaim,
"Service": AnalyzeEndpoints,
"Ingress": AnalyzeIngress,
var coreAnalyzerMap = map[string]IAnalyzer{
"Pod": PodAnalyzer{},
"ReplicaSet": ReplicaSetAnalyzer{},
"PersistentVolumeClaim": PvcAnalyzer{},
"Service": ServiceAnalyzer{},
"Ingress": IngressAnalyzer{},
}

var additionalAnalyzerMap = map[string]func(ctx context.Context, config *AnalysisConfiguration,
client *kubernetes.Client, aiClient ai.IAI, analysisResults *[]Analysis) error{
"HorizontalPodAutoScaler": AnalyzeHpa,
"PodDisruptionBudget": AnalyzePdb,
var additionalAnalyzerMap = map[string]IAnalyzer{
"HorizontalPodAutoScaler": HpaAnalyzer{},
"PodDisruptionBudget": PdbAnalyzer{},
}

func RunAnalysis(ctx context.Context, filters []string, config *AnalysisConfiguration,
Expand All @@ -37,7 +35,7 @@ func RunAnalysis(ctx context.Context, filters []string, config *AnalysisConfigur
// if there are no filters selected and no active_filters then run all of them
if len(filters) == 0 && len(activeFilters) == 0 {
for _, analyzer := range analyzerMap {
if err := analyzer(ctx, config, client, aiClient, analysisResults); err != nil {
if err := analyzer.RunAnalysis(ctx, config, client, aiClient, analysisResults); err != nil {
return err
}
}
Expand All @@ -48,7 +46,7 @@ func RunAnalysis(ctx context.Context, filters []string, config *AnalysisConfigur
if len(filters) != 0 {
for _, filter := range filters {
if analyzer, ok := analyzerMap[filter]; ok {
if err := analyzer(ctx, config, client, aiClient, analysisResults); err != nil {
if err := analyzer.RunAnalysis(ctx, config, client, aiClient, analysisResults); err != nil {
return err
}
}
Expand All @@ -59,7 +57,7 @@ func RunAnalysis(ctx context.Context, filters []string, config *AnalysisConfigur
// use active_filters
for _, filter := range activeFilters {
if analyzer, ok := analyzerMap[filter]; ok {
if err := analyzer(ctx, config, client, aiClient, analysisResults); err != nil {
if err := analyzer.RunAnalysis(ctx, config, client, aiClient, analysisResults); err != nil {
return err
}
}
Expand Down Expand Up @@ -118,11 +116,9 @@ func ListFilters() ([]string, []string) {
return coreKeys, additionalKeys
}

func getAnalyzerMap() map[string]func(ctx context.Context, config *AnalysisConfiguration,
client *kubernetes.Client, aiClient ai.IAI, analysisResults *[]Analysis) error {
func getAnalyzerMap() map[string]IAnalyzer {

mergedMap := make(map[string]func(ctx context.Context, config *AnalysisConfiguration,
client *kubernetes.Client, aiClient ai.IAI, analysisResults *[]Analysis) error)
mergedMap := make(map[string]IAnalyzer)

// add core analyzer
for key, value := range coreAnalyzerMap {
Expand Down
4 changes: 3 additions & 1 deletion pkg/analyzer/hpaAnalyzer.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func AnalyzeHpa(ctx context.Context, config *AnalysisConfiguration, client *kubernetes.Client, aiClient ai.IAI,
type HpaAnalyzer struct{}

func (HpaAnalyzer) RunAnalysis(ctx context.Context, config *AnalysisConfiguration, client *kubernetes.Client, aiClient ai.IAI,
analysisResults *[]Analysis) error {

list, err := client.GetClient().AutoscalingV1().HorizontalPodAutoscalers(config.Namespace).List(ctx, metav1.ListOptions{})
Expand Down
13 changes: 13 additions & 0 deletions pkg/analyzer/ianalyzer.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package analyzer

import (
"context"

"github.com/k8sgpt-ai/k8sgpt/pkg/ai"
"github.com/k8sgpt-ai/k8sgpt/pkg/kubernetes"
)

type IAnalyzer interface {
RunAnalysis(ctx context.Context, config *AnalysisConfiguration, client *kubernetes.Client, aiClient ai.IAI,
analysisResults *[]Analysis) error
}
4 changes: 3 additions & 1 deletion pkg/analyzer/ingressAnalyzer.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func AnalyzeIngress(ctx context.Context, config *AnalysisConfiguration, client *kubernetes.Client, aiClient ai.IAI,
type IngressAnalyzer struct{}

func (IngressAnalyzer) RunAnalysis(ctx context.Context, config *AnalysisConfiguration, client *kubernetes.Client, aiClient ai.IAI,
analysisResults *[]Analysis) error {

list, err := client.GetClient().NetworkingV1().Ingresses(config.Namespace).List(ctx, metav1.ListOptions{})
Expand Down
5 changes: 4 additions & 1 deletion pkg/analyzer/pdbAnalyzer.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,16 @@ package analyzer
import (
"context"
"fmt"

"github.com/k8sgpt-ai/k8sgpt/pkg/ai"
"github.com/k8sgpt-ai/k8sgpt/pkg/kubernetes"
"github.com/k8sgpt-ai/k8sgpt/pkg/util"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func AnalyzePdb(ctx context.Context, config *AnalysisConfiguration, client *kubernetes.Client, aiClient ai.IAI,
type PdbAnalyzer struct{}

func (PdbAnalyzer) RunAnalysis(ctx context.Context, config *AnalysisConfiguration, client *kubernetes.Client, aiClient ai.IAI,
analysisResults *[]Analysis) error {

list, err := client.GetClient().PolicyV1().PodDisruptionBudgets(config.Namespace).List(ctx, metav1.ListOptions{})
Expand Down
4 changes: 3 additions & 1 deletion pkg/analyzer/podAnalyzer.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func AnalyzePod(ctx context.Context, config *AnalysisConfiguration,
type PodAnalyzer struct{}

func (PodAnalyzer) RunAnalysis(ctx context.Context, config *AnalysisConfiguration,
client *kubernetes.Client, aiClient ai.IAI, analysisResults *[]Analysis) error {

// search all namespaces for pods that are not running
Expand Down
4 changes: 3 additions & 1 deletion pkg/analyzer/pvcAnalyzer.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func AnalyzePersistentVolumeClaim(ctx context.Context, config *AnalysisConfiguration, client *kubernetes.Client, aiClient ai.IAI, analysisResults *[]Analysis) error {
type PvcAnalyzer struct{}

func (PvcAnalyzer) RunAnalysis(ctx context.Context, config *AnalysisConfiguration, client *kubernetes.Client, aiClient ai.IAI, analysisResults *[]Analysis) error {

// search all namespaces for pods that are not running
list, err := client.GetClient().CoreV1().PersistentVolumeClaims(config.Namespace).List(ctx, metav1.ListOptions{})
Expand Down
4 changes: 3 additions & 1 deletion pkg/analyzer/rsAnalyzer.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func AnalyzeReplicaSet(ctx context.Context, config *AnalysisConfiguration,
type ReplicaSetAnalyzer struct{}

func (ReplicaSetAnalyzer) RunAnalysis(ctx context.Context, config *AnalysisConfiguration,
client *kubernetes.Client, aiClient ai.IAI, analysisResults *[]Analysis) error {

// search all namespaces for pods that are not running
Expand Down
4 changes: 3 additions & 1 deletion pkg/analyzer/serviceAnalyzer.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func AnalyzeEndpoints(ctx context.Context, config *AnalysisConfiguration, client *kubernetes.Client, aiClient ai.IAI,
type ServiceAnalyzer struct{}

func (ServiceAnalyzer) RunAnalysis(ctx context.Context, config *AnalysisConfiguration, client *kubernetes.Client, aiClient ai.IAI,
analysisResults *[]Analysis) error {

// search all namespaces for pods that are not running
Expand Down

0 comments on commit 426f562

Please sign in to comment.