1
1
# -*- coding: utf-8 -*-
2
+ import logging
2
3
3
4
from mamonsu .plugins .pgsql .plugin import PgsqlPlugin as Plugin
4
5
from distutils .version import LooseVersion
@@ -16,7 +17,7 @@ class Statements(Plugin):
16
17
"pgpro_stats" :
17
18
"""
18
19
SELECT {metrics}
19
- FROM {extension_schema}.pgpro_stats_totals
20
+ FROM {extension_schema}.pgpro_stats_totals()
20
21
WHERE object_type = 'cluster';
21
22
""" ,
22
23
"pgpro_stats_bootstrap" :
@@ -94,31 +95,32 @@ class Statements(Plugin):
94
95
("PostgreSQL Statements: Spent Time" , 1 ),
95
96
("PostgreSQL Statements: WAL Statistics" , None )]
96
97
98
+ extension = ""
99
+
97
100
# pgpro_stats работает только для PGPRO 12+ в режиме bootstrap и/или если в конфиге указан суперпользователь mamonsu
98
101
def run (self , zbx ):
99
- extension = ""
100
102
if (Pooler .is_pgpro () or Pooler .is_pgpro_ee ()) and Pooler .server_version_greater ("12" ):
101
103
if Pooler .extension_installed ("pgpro_stats" ):
102
104
if not Pooler .is_bootstraped ():
103
105
self .disable_and_exit_if_not_superuser ()
104
- extension = "pgpro_stats"
106
+ self . extension = "pgpro_stats"
105
107
elif Pooler .extension_installed ("pg_stat_statements" ):
106
- extension = "pg_stat_statements"
108
+ self . extension = "pg_stat_statements"
107
109
else :
108
110
self .disable_and_exit_if_extension_is_not_installed (ext = "pgpro_stats" )
109
111
else :
110
112
if not Pooler .extension_installed ("pg_stat_statements" ):
111
113
self .disable_and_exit_if_extension_is_not_installed (ext = "pg_stat_statements" )
112
- extension = "pg_stat_statements"
114
+ self . extension = "pg_stat_statements"
113
115
114
- extension_schema = self .extension_schema (extension = extension )
116
+ extension_schema = self .extension_schema (extension = self . extension )
115
117
116
118
# TODO: add 13 and 14 items when pgpro_stats added new WAL metrics
117
119
all_items = self .Items .copy ()
118
120
if Pooler .server_version_greater ("14" ):
119
121
self .Items [5 ][1 ] = self .Items [5 ][1 ].format ("total_exec_time+total_plan_time" )
120
- if not Pooler . is_pgpro () or not Pooler . is_pgpro_ee ():
121
- all_items += self . Items_pg_13
122
+ all_items += self . Items_pg_13
123
+ if self . extension == "pg_stat_statements" :
122
124
info_items = self .Items_pg_14
123
125
info_params = [x [1 ] for x in info_items ]
124
126
info_result = Pooler .query (
@@ -127,18 +129,16 @@ def run(self, zbx):
127
129
zbx_key , value = "pgsql.{0}" .format (
128
130
info_items [key ][0 ]), int (value )
129
131
zbx .send (zbx_key , value , info_items [key ][4 ])
130
- columns = [x [1 ] for x in all_items ]
131
132
elif Pooler .server_version_greater ("13" ):
132
133
self .Items [5 ][1 ] = self .Items [5 ][1 ].format ("total_exec_time+total_plan_time" )
133
134
all_items += self .Items_pg_13
134
- columns = [x [1 ] for x in all_items ]
135
135
else :
136
136
self .Items [5 ][1 ] = self .Items [5 ][1 ].format ("total_time" )
137
- columns = [x [1 ] for x in all_items ]
138
- result = Pooler .query (self .query [extension + "_bootstrap" ].format (
137
+ columns = [x [1 ] for x in all_items ]
138
+ result = Pooler .query (self .query [self . extension + "_bootstrap" ].format (
139
139
columns = ", " .join ([x [0 ][x [0 ].find ("[" ) + 1 :x [0 ].find ("]" )] for x in all_items ]),
140
140
metrics = (", " .join (columns )), extension_schema = extension_schema ) if Pooler .is_bootstraped () else self .query [
141
- extension ].format (metrics = (", " .join (columns )), extension_schema = extension_schema ))
141
+ self . extension ].format (metrics = (", " .join (columns )), extension_schema = extension_schema ))
142
142
for key , value in enumerate (result [0 ]):
143
143
zbx_key , value = "pgsql.{0}" .format (all_items [key ][0 ]), int (value )
144
144
zbx .send (zbx_key , value , all_items [key ][4 ])
@@ -191,16 +191,16 @@ def graphs(self, template, dashboard=False):
191
191
def keys_and_queries (self , template_zabbix ):
192
192
if (Pooler .is_pgpro () or Pooler .is_pgpro_ee ()) and Pooler .server_version_greater ("12" ):
193
193
if Pooler .extension_installed ("pgpro_stats" ):
194
- extension = "pgpro_stats"
194
+ self . extension = "pgpro_stats"
195
195
elif Pooler .extension_installed ("pg_stat_statements" ):
196
- extension = "pg_stat_statements"
196
+ self . extension = "pg_stat_statements"
197
197
else :
198
198
if Pooler .extension_installed ("pg_stat_statements" ):
199
- extension = "pg_stat_statements"
199
+ self . extension = "pg_stat_statements"
200
200
201
201
if Pooler .extension_installed ("pgpro_stats" ) or Pooler .extension_installed ("pg_stat_statements" ):
202
202
203
- extension_schema = self .extension_schema (extension = extension )
203
+ extension_schema = self .extension_schema (extension = self . extension )
204
204
205
205
result = []
206
206
all_items = self .Items .copy ()
@@ -216,13 +216,13 @@ def keys_and_queries(self, template_zabbix):
216
216
for i , item in enumerate (all_items ):
217
217
keys = item [0 ].split ("[" )
218
218
result .append ("{0}[*],$2 $1 -Aqtc \" {1}\" " .format ("{0}{1}.{2}" .format (self .key , keys [0 ], keys [1 ][:- 1 ]),
219
- self .query [extension + "_bootstrap" ].format (
219
+ self .query [self . extension + "_bootstrap" ].format (
220
220
columns = ", " .join (
221
221
[x [0 ][x [0 ].find ("[" ) + 1 :x [0 ].find ("]" )] for x
222
222
in
223
223
all_items ]), metrics = (", " .join (columns )),
224
224
extension_schema = extension_schema ) if Pooler .is_bootstraped () else
225
- self .query [extension ].format (
225
+ self .query [self . extension ].format (
226
226
metrics = (", " .join (columns )),
227
227
extension_schema = extension_schema )))
228
228
0 commit comments