Remove time.Ticker and adjust polling mechanism
[pstop.git] / lib / global_variables.go
1 package lib
2
3 import (
4         "database/sql"
5         "log"
6         "strings"
7 )
8
9 /*
10 ** mysql> select VARIABLE_VALUE from information_schema.global_variables where variable_name = 'hostname';
11 * +----------------+
12 * | VARIABLE_VALUE |
13 * +----------------+
14 * | myhostname     |
15 * +----------------+
16 * 1 row in set (0.00 sec)
17 **/
18 func SelectGlobalVariableByVariableName(dbh *sql.DB, variable_name string) (error, string) {
19         sql_select := "SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME = ?"
20
21         var variable_value string
22         err := dbh.QueryRow(sql_select, variable_name).Scan(&variable_value)
23         switch {
24         case err == sql.ErrNoRows:
25                 log.Println("No setting with that variable_name", variable_name)
26         case err != nil:
27                 log.Fatal(err)
28         default:
29                 // fmt.Println("variable_value for", variable_name, "is", variable_value)
30         }
31
32         return err, variable_value
33 }
34
35 // Provide a slice of string and get back a hash of variable_name to value.
36 // - note the query is case insensitive for variable names.
37 // - they key values are lower-cased.
38 func SelectGlobalVariablesByVariableName(dbh *sql.DB, wanted []string) (error, map[string]string) {
39         hashref := make(map[string]string)
40
41         // create an IN list to make up the query
42         quoted := make([]string, 0, len(wanted))
43         sql_select := "SELECT VARIABLE_NAME, VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME IN ("
44
45         if len(wanted) == 0 {
46                 log.Fatal("SelectGlobalVariablesByVariableName() needs at least one entry")
47         }
48
49         for i := range wanted {
50                 quoted = append(quoted, "'"+wanted[i]+"'")
51
52         }
53         sql_select += strings.Join(quoted, ",")
54         sql_select += ")"
55
56         rows, err := dbh.Query(sql_select)
57         defer rows.Close()
58
59         for rows.Next() {
60                 var variable, value string
61                 if err := rows.Scan(&variable, &value); err != nil {
62                         log.Fatal(err)
63                 }
64                 hashref[strings.ToLower(variable)] = value
65         }
66         if err := rows.Err(); err != nil {
67                 log.Fatal(err)
68         }
69
70         return err, hashref
71 }
72
73 // Return all global variables as a hashref
74 func SelectAllGlobalVariablesByVariableName(dbh *sql.DB) (error, map[string]string) {
75         hashref := make(map[string]string)
76
77         sql_select := "SELECT VARIABLE_NAME, VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES"
78
79         rows, err := dbh.Query(sql_select)
80         defer rows.Close()
81
82         for rows.Next() {
83                 var variable, value string
84                 if err := rows.Scan(&variable, &value); err != nil {
85                         log.Fatal(err)
86                 }
87                 hashref[strings.ToLower(variable)] = value
88         }
89         if err := rows.Err(); err != nil {
90                 log.Fatal(err)
91         }
92
93         return err, hashref
94 }