master
go 52 lines 866 Bytes
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package mysql
4
5 import (
6 "database/sql"
7 "errors"
8
9 "github.com/netdata/netdata/go/plugins/plugin/go.d/collector/mysql/mysqlfunc"
10 )
11
12 type funcDepsAdapter struct {
13 collector *Collector
14 }
15
16 func (a funcDepsAdapter) DB() (mysqlfunc.Queryer, error) {
17 return a.collector.currentDB()
18 }
19
20 func (c *Collector) dbReady() bool {
21 c.dbMu.RLock()
22 ready := c.db != nil
23 c.dbMu.RUnlock()
24 return ready
25 }
26
27 func (c *Collector) currentDB() (*sql.DB, error) {
28 c.dbMu.RLock()
29 db := c.db
30 c.dbMu.RUnlock()
31 if db == nil {
32 return nil, errors.New("collector database is not ready")
33 }
34 return db, nil
35 }
36
37 func (c *Collector) setDB(db *sql.DB) {
38 c.dbMu.Lock()
39 c.db = db
40 c.dbMu.Unlock()
41 }
42
43 func (c *Collector) closeDB() error {
44 c.dbMu.Lock()
45 db := c.db
46 c.db = nil
47 c.dbMu.Unlock()
48 if db == nil {
49 return nil
50 }
51 return db.Close()
52 }