From 72891347573434eac6f5c8342e4af8b0563bea95 Mon Sep 17 00:00:00 2001 From: Edgar Ochoa Date: Wed, 4 May 2022 12:42:37 -0500 Subject: [PATCH] Add Mysql variables to collector (#562) * Add Mysql variables to collector * Cleanup row scanning and a few updates based on feedback * Close db connection * Move defer db.close * Updates based on feedback * Use vars in loop instead of struct * Only pull parameters specified in collector config Co-authored-by: Ethan Mosbaugh --- .../troubleshoot/v1beta2/collector_shared.go | 3 +- pkg/collect/database_shared.go | 7 ++-- pkg/collect/mysql.go | 34 +++++++++++++++++++ 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/pkg/apis/troubleshoot/v1beta2/collector_shared.go b/pkg/apis/troubleshoot/v1beta2/collector_shared.go index abb25842..c0443f85 100644 --- a/pkg/apis/troubleshoot/v1beta2/collector_shared.go +++ b/pkg/apis/troubleshoot/v1beta2/collector_shared.go @@ -156,7 +156,8 @@ type Put struct { type Database struct { CollectorMeta `json:",inline" yaml:",inline"` - URI string `json:"uri" yaml:"uri"` + URI string `json:"uri" yaml:"uri"` + Parameters []string `json:"parameters,omitempty"` } type Collectd struct { diff --git a/pkg/collect/database_shared.go b/pkg/collect/database_shared.go index 89a94cc3..5a4d0ea4 100644 --- a/pkg/collect/database_shared.go +++ b/pkg/collect/database_shared.go @@ -1,7 +1,8 @@ package collect type DatabaseConnection struct { - IsConnected bool `json:"isConnected"` - Error string `json:"error,omitempty"` - Version string `json:"version,omitempty"` + IsConnected bool `json:"isConnected"` + Error string `json:"error,omitempty"` + Version string `json:"version,omitempty"` + Variables map[string]string `json:"variables,omitempty"` } diff --git a/pkg/collect/mysql.go b/pkg/collect/mysql.go index efd4ae1e..b5febfc6 100644 --- a/pkg/collect/mysql.go +++ b/pkg/collect/mysql.go @@ -18,8 +18,10 @@ func Mysql(c *Collector, databaseCollector *troubleshootv1beta2.Database) (Colle if err != nil { databaseConnection.Error = err.Error() } else { + defer db.Close() query := `select version()` row := db.QueryRow(query) + version := "" if err := row.Scan(&version); err != nil { databaseConnection.Error = err.Error() @@ -27,6 +29,38 @@ func Mysql(c *Collector, databaseCollector *troubleshootv1beta2.Database) (Colle databaseConnection.IsConnected = true databaseConnection.Version = version } + + requestedParameters := databaseCollector.Parameters + if len(requestedParameters) > 0 { + rows, err := db.Query("SHOW VARIABLES") + + if err != nil { + databaseConnection.Error = err.Error() + } else { + defer rows.Close() + + variables := map[string]string{} + for rows.Next() { + var key, value string + err = rows.Scan(&key, &value) + if err != nil { + databaseConnection.Error = err.Error() + break + } + variables[key] = value + } + filteredVariables := map[string]string{} + + for _, key := range requestedParameters { + if value, ok := variables[key]; ok { + filteredVariables[key] = value + } + + } + databaseConnection.Variables = filteredVariables + } + } + } b, err := json.Marshal(databaseConnection)