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 <ethan@replicated.com>
This commit is contained in:
Edgar Ochoa
2022-05-04 12:42:37 -05:00
committed by GitHub
parent 63362d32ee
commit 7289134757
3 changed files with 40 additions and 4 deletions

View File

@@ -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 {

View File

@@ -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"`
}

View File

@@ -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)