mirror of
https://github.com/k8sgpt-ai/k8sgpt.git
synced 2025-09-19 01:12:46 +00:00
Merge pull request #196 from k8sgpt-ai/feat/analyzer-ifacing-example
feat: analyzer ifacing
This commit is contained in:
@@ -11,19 +11,17 @@ import (
|
|||||||
"github.com/spf13/viper"
|
"github.com/spf13/viper"
|
||||||
)
|
)
|
||||||
|
|
||||||
var coreAnalyzerMap = map[string]func(ctx context.Context, config *AnalysisConfiguration,
|
var coreAnalyzerMap = map[string]IAnalyzer{
|
||||||
client *kubernetes.Client, aiClient ai.IAI, analysisResults *[]Analysis) error{
|
"Pod": PodAnalyzer{},
|
||||||
"Pod": AnalyzePod,
|
"ReplicaSet": ReplicaSetAnalyzer{},
|
||||||
"ReplicaSet": AnalyzeReplicaSet,
|
"PersistentVolumeClaim": PvcAnalyzer{},
|
||||||
"PersistentVolumeClaim": AnalyzePersistentVolumeClaim,
|
"Service": ServiceAnalyzer{},
|
||||||
"Service": AnalyzeEndpoints,
|
"Ingress": IngressAnalyzer{},
|
||||||
"Ingress": AnalyzeIngress,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var additionalAnalyzerMap = map[string]func(ctx context.Context, config *AnalysisConfiguration,
|
var additionalAnalyzerMap = map[string]IAnalyzer{
|
||||||
client *kubernetes.Client, aiClient ai.IAI, analysisResults *[]Analysis) error{
|
"HorizontalPodAutoScaler": HpaAnalyzer{},
|
||||||
"HorizontalPodAutoScaler": AnalyzeHpa,
|
"PodDisruptionBudget": PdbAnalyzer{},
|
||||||
"PodDisruptionBudget": AnalyzePdb,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunAnalysis(ctx context.Context, filters []string, config *AnalysisConfiguration,
|
func RunAnalysis(ctx context.Context, filters []string, config *AnalysisConfiguration,
|
||||||
@@ -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 there are no filters selected and no active_filters then run all of them
|
||||||
if len(filters) == 0 && len(activeFilters) == 0 {
|
if len(filters) == 0 && len(activeFilters) == 0 {
|
||||||
for _, analyzer := range analyzerMap {
|
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
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -48,7 +46,7 @@ func RunAnalysis(ctx context.Context, filters []string, config *AnalysisConfigur
|
|||||||
if len(filters) != 0 {
|
if len(filters) != 0 {
|
||||||
for _, filter := range filters {
|
for _, filter := range filters {
|
||||||
if analyzer, ok := analyzerMap[filter]; ok {
|
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
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -59,7 +57,7 @@ func RunAnalysis(ctx context.Context, filters []string, config *AnalysisConfigur
|
|||||||
// use active_filters
|
// use active_filters
|
||||||
for _, filter := range activeFilters {
|
for _, filter := range activeFilters {
|
||||||
if analyzer, ok := analyzerMap[filter]; ok {
|
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
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -118,11 +116,9 @@ func ListFilters() ([]string, []string) {
|
|||||||
return coreKeys, additionalKeys
|
return coreKeys, additionalKeys
|
||||||
}
|
}
|
||||||
|
|
||||||
func getAnalyzerMap() map[string]func(ctx context.Context, config *AnalysisConfiguration,
|
func getAnalyzerMap() map[string]IAnalyzer {
|
||||||
client *kubernetes.Client, aiClient ai.IAI, analysisResults *[]Analysis) error {
|
|
||||||
|
|
||||||
mergedMap := make(map[string]func(ctx context.Context, config *AnalysisConfiguration,
|
mergedMap := make(map[string]IAnalyzer)
|
||||||
client *kubernetes.Client, aiClient ai.IAI, analysisResults *[]Analysis) error)
|
|
||||||
|
|
||||||
// add core analyzer
|
// add core analyzer
|
||||||
for key, value := range coreAnalyzerMap {
|
for key, value := range coreAnalyzerMap {
|
||||||
|
@@ -10,7 +10,9 @@ import (
|
|||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
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 {
|
analysisResults *[]Analysis) error {
|
||||||
|
|
||||||
list, err := client.GetClient().AutoscalingV1().HorizontalPodAutoscalers(config.Namespace).List(ctx, metav1.ListOptions{})
|
list, err := client.GetClient().AutoscalingV1().HorizontalPodAutoscalers(config.Namespace).List(ctx, metav1.ListOptions{})
|
||||||
|
13
pkg/analyzer/ianalyzer.go
Normal file
13
pkg/analyzer/ianalyzer.go
Normal file
@@ -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
|
||||||
|
}
|
@@ -10,7 +10,9 @@ import (
|
|||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
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 {
|
analysisResults *[]Analysis) error {
|
||||||
|
|
||||||
list, err := client.GetClient().NetworkingV1().Ingresses(config.Namespace).List(ctx, metav1.ListOptions{})
|
list, err := client.GetClient().NetworkingV1().Ingresses(config.Namespace).List(ctx, metav1.ListOptions{})
|
||||||
|
@@ -3,13 +3,16 @@ package analyzer
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/k8sgpt-ai/k8sgpt/pkg/ai"
|
"github.com/k8sgpt-ai/k8sgpt/pkg/ai"
|
||||||
"github.com/k8sgpt-ai/k8sgpt/pkg/kubernetes"
|
"github.com/k8sgpt-ai/k8sgpt/pkg/kubernetes"
|
||||||
"github.com/k8sgpt-ai/k8sgpt/pkg/util"
|
"github.com/k8sgpt-ai/k8sgpt/pkg/util"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
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 {
|
analysisResults *[]Analysis) error {
|
||||||
|
|
||||||
list, err := client.GetClient().PolicyV1().PodDisruptionBudgets(config.Namespace).List(ctx, metav1.ListOptions{})
|
list, err := client.GetClient().PolicyV1().PodDisruptionBudgets(config.Namespace).List(ctx, metav1.ListOptions{})
|
||||||
|
@@ -10,7 +10,9 @@ import (
|
|||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
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 {
|
client *kubernetes.Client, aiClient ai.IAI, analysisResults *[]Analysis) error {
|
||||||
|
|
||||||
// search all namespaces for pods that are not running
|
// search all namespaces for pods that are not running
|
||||||
|
@@ -10,7 +10,9 @@ import (
|
|||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
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
|
// search all namespaces for pods that are not running
|
||||||
list, err := client.GetClient().CoreV1().PersistentVolumeClaims(config.Namespace).List(ctx, metav1.ListOptions{})
|
list, err := client.GetClient().CoreV1().PersistentVolumeClaims(config.Namespace).List(ctx, metav1.ListOptions{})
|
||||||
|
@@ -10,7 +10,9 @@ import (
|
|||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
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 {
|
client *kubernetes.Client, aiClient ai.IAI, analysisResults *[]Analysis) error {
|
||||||
|
|
||||||
// search all namespaces for pods that are not running
|
// search all namespaces for pods that are not running
|
||||||
|
@@ -11,7 +11,9 @@ import (
|
|||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
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 {
|
analysisResults *[]Analysis) error {
|
||||||
|
|
||||||
// search all namespaces for pods that are not running
|
// search all namespaces for pods that are not running
|
||||||
|
Reference in New Issue
Block a user