Projet

Général

Profil

Paste
Télécharger au format
Statistiques
| Branche: | Révision:

root / plugins / mysql / mysql_report @ c6f88968

Historique | Voir | Annoter | Télécharger (4,59 ko)

1 ce0d15ac M?ller Zsolt
#!/bin/sh
2
#
3
# Plugin to graph numeric result of the specified MySQL queries.
4
#
5
# Parameters:
6
#
7
#       config   (required)
8
#       autoconf (optional - used by lrrd-config)
9
#
10
# Configuration example
11
#
12
# [mysql_report]
13
# env.names query1 query2
14
# env.hostname www.example.com
15
# env.database mysql
16
# env.username report
17
# env.password secret
18
# env.errorvalue 60
19
# env.max 120
20
#
21
# env.label_query1 Example query#1 (number of users)
22
# env.hostname_query1 www1.example.com
23 23f17f67 Oded Ben Ozer
# env.draw_query1 AREA
24
# env.colour_query1 FF0000
25 ce0d15ac M?ller Zsolt
# env.database_query1 mysql
26
# env.username_query1 user1
27
# env.password_query1 secret1
28
# env.query_query1 select count(*) from `exampledb`.`users`
29
# env.warning_query1 5
30
# env.critical_query1 8
31
#
32
# env.label_query2 Example query#2 (number of successful logins)
33
# env.query_query2 select count(*) from `exampledb`.`login_log`
34
# env.type_query2 DERIVE
35 23f17f67 Oded Ben Ozer
# env.draw_query2 LINE2
36
# env.colour_query2 000080
37 ce0d15ac M?ller Zsolt
# env.mysqlopts_query2 --defaults-extra-file=/etc/mysql/debian.cnf --port=4507
38
#
39 23f17f67 Oded Ben Ozer
# env.cdefnames cdef1
40
# env.cdef_cdef1 result1,result2,+
41
# env.cdeflbl_cdef1 Users and successful logins sum
42
43
#
44 ce0d15ac M?ller Zsolt
# $Log$
45
#
46
# Revision 1.0  2010/04/19 14:18:32 muzso@muzso.hu
47
# Initial version
48
#
49 23f17f67 Oded Ben Ozer
# Revision 1.01 2010/7/14 oded@pageonce.com
50 ce0d15ac M?ller Zsolt
#%# family=auto
51
#%# capabilities=autoconf
52
53
mysqlbin=$(which mysql)
54
55
default_errorvalue=30
56
default_title="Results from MySQL queries"
57
default_vlabel="value / sec"
58
default_info="This graph shows results of one or more SQL queries."
59
default_args="--base 1000 -l 0"
60
default_scale="no"
61
62
if [ "${1}" = "autoconf" ]; then
63
  if [ -z "${mysqlbin}" ]; then
64 2ec4e4c1 Lars Kruse
    echo "no (missing mysql executable)"
65 ce0d15ac M?ller Zsolt
  else
66
    echo "yes"
67
  fi
68 2ec4e4c1 Lars Kruse
  exit 0
69 ce0d15ac M?ller Zsolt
fi
70
71
if [ -z "${names}" ]; then
72
  echo "Configuration required"
73
  exit 1
74
fi
75
76
[ -n "${errorvalue}" ] || errorvalue=${default_errorvalue}
77
[ -n "${title}" ] || title="${default_title}"
78
[ -n "${vlabel}" ] || vlabel="${default_vlabel}"
79
[ -n "${info}" ] || info="${default_info}"
80
[ -n "${args}" ] || args="${default_args}"
81
[ -n "${scale}" ] || scale="${default_scale}"
82
83
if [ "${1}" = "config" ]; then
84
  cat << EOH1
85
graph_title ${title}
86
graph_args ${args}
87
graph_scale ${scale}
88
graph_vlabel ${vlabel}
89 8af93fce dipohl
graph_category db
90 ce0d15ac M?ller Zsolt
graph_info ${info}
91
EOH1
92 96f2bc00 Stig Sandbeck Mathisen
  [ -n "${period}" ] && echo "graph_period ${period}"
93 ce0d15ac M?ller Zsolt
  I=1
94
  for name in ${names}; do
95
    eval iquery='${query_'${name}'}'
96
    if [ -n "${iquery}" ]; then
97
      eval ilabel='${label_'${name}':-host${I}}'
98
      eval iwarning='${warning_'${name}':-${warning}}'
99
      eval icritical='${critical_'${name}':-${critical}}'
100
      eval imax='${max_'${name}':-${max}}'
101
      eval itype='${type_'${name}':-${type}}'
102 5df115fa Oded Ben Ozer
      eval idraw='${draw_'${name}':-${draw}}'
103
      eval icolour='${colour_'${name}':-${colour}}'
104 ce0d15ac M?ller Zsolt
      iquery=$(echo "${iquery}" | tr '\n\r' '  ')
105
      cat << EOH2
106
result${I}.label ${ilabel}
107
result${I}.info Result of the query: ${iquery}
108
result${I}.min 0
109
EOH2
110
      [ -n "${imax}" ] && echo "result${I}.max ${imax}"
111
      [ -n "${itype}" ] && echo "result${I}.type ${itype}"
112 5df115fa Oded Ben Ozer
      [ -n "${idraw}" ] && echo "result${I}.draw ${idraw}"
113
      [ -n "${icolour}" ] && echo "result${I}.colour ${icolour}"
114 ce0d15ac M?ller Zsolt
      [ -n "${iwarning}" ] && echo "result${I}.warning ${iwarning}"
115
      [ -n "${icritical}" ] && echo "result${I}.critical ${icritical}"
116
      I=$((I+1))
117
    fi
118
  done
119 5df115fa Oded Ben Ozer
  for cdefname in ${cdefnames} ;do
120
    eval icdef='${cdef_'${cdefname}'}'
121
    if [ -n "${icdef}" ]; then
122
      eval icdeflbl='${cdeflbl_'${cdefname}':-${cdeflbl}}'
123
      cat << EOH4
124
${cdefname}.cdef ${icdef}
125
${cdefname}.label ${icdeflbl}
126
EOH4
127
    fi
128
  done
129 ce0d15ac M?ller Zsolt
  exit 0
130
fi
131
132
I=1
133
for name in ${names}; do
134
  eval iquery='${query_'${name}'}'
135
  if [ -n "${iquery}" ]; then
136
		eval ihostname='${hostname_'${name}':-${hostname}}'
137
		[ -n "${ihostname}" ] && opts="${opts} --host=${ihostname}"
138
		eval idatabase='${database_'${name}':-${database}}'
139
		eval iusername='${username_'${name}':-${username}}'
140
		[ -n "${iusername}" ] && opts="${opts} --user=${iusername}"
141
    eval ipassword='${password_'${name}':-${password}}'
142
    [ -n "${ipassword}" ] && opts="${opts} --password=${ipassword}"
143
    eval ierrorvalue='${errorvalue_'${name}':-${errorvalue}}'
144
    eval imysqlopts='${mysqlopts_'${name}':-${mysqlopts}}'
145
    iquery=$(echo "${iquery}" | tr '\n\r' '  ')
146
    #echo "The command to be executed: echo \"${iquery}\" | ${mysqlbin} ${imysqlopts} --batch --skip-column-names ${opts} ${idatabase} 2>&1"
147
    output=$(echo "${iquery}" | ${mysqlbin} ${imysqlopts} --batch --skip-column-names ${opts} ${idatabase} 2>&1)
148
    if [ $? -ne 0 -a ${ierrorvalue} -ne 0 ]; then
149
      result=${ierrorvalue}
150
    else
151
      result=$(echo "${output}" | head -n 1 | sed 's/^\([0-9]\+\).*/\1/')
152
    fi
153
    echo "result${I}.value ${result}"
154
    I=$((I+1))
155
  fi
156
done
157