summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/modules/mysql/collect_version.go
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-05 11:19:16 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-07-24 09:53:24 +0000
commitb5f8ee61a7f7e9bd291dd26b0585d03eb686c941 (patch)
treed4d31289c39fc00da064a825df13a0b98ce95b10 /src/go/collectors/go.d.plugin/modules/mysql/collect_version.go
parentAdding upstream version 1.44.3. (diff)
downloadnetdata-b5f8ee61a7f7e9bd291dd26b0585d03eb686c941.tar.xz
netdata-b5f8ee61a7f7e9bd291dd26b0585d03eb686c941.zip
Adding upstream version 1.46.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--src/go/collectors/go.d.plugin/modules/mysql/collect_version.go62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/go/collectors/go.d.plugin/modules/mysql/collect_version.go b/src/go/collectors/go.d.plugin/modules/mysql/collect_version.go
new file mode 100644
index 000000000..b85922e2c
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/mysql/collect_version.go
@@ -0,0 +1,62 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package mysql
+
+import (
+ "fmt"
+ "regexp"
+ "strings"
+
+ "github.com/blang/semver/v4"
+)
+
+const queryShowVersion = `
+SHOW GLOBAL VARIABLES
+WHERE
+ Variable_name LIKE 'version'
+ OR Variable_name LIKE 'version_comment';`
+
+var reVersionCore = regexp.MustCompile(`^\d+\.\d+\.\d+`)
+
+func (m *MySQL) collectVersion() error {
+ // https://mariadb.com/kb/en/version/
+ q := queryShowVersion
+ m.Debugf("executing query: '%s'", queryShowVersion)
+
+ var name, version, versionComment string
+ _, err := m.collectQuery(q, func(column, value string, _ bool) {
+ switch column {
+ case "Variable_name":
+ name = value
+ case "Value":
+ switch name {
+ case "version":
+ version = value
+ case "version_comment":
+ versionComment = value
+ }
+ }
+ })
+ if err != nil {
+ return err
+ }
+
+ m.Infof("application version: '%s', version_comment: '%s'", version, versionComment)
+
+ // version string is not always valid semver (ex.: 8.0.22-0ubuntu0.20.04.2)
+ s := reVersionCore.FindString(version)
+ if s == "" {
+ return fmt.Errorf("couldn't parse version string '%s'", version)
+ }
+
+ ver, err := semver.New(s)
+ if err != nil {
+ return fmt.Errorf("couldn't parse version string '%s': %v", s, err)
+ }
+
+ m.version = ver
+ m.isMariaDB = strings.Contains(version, "MariaDB") || strings.Contains(versionComment, "mariadb")
+ m.isPercona = strings.Contains(versionComment, "Percona")
+
+ return nil
+}