11# -*- coding: utf-8 -*-
2+ import logging
23
34from mamonsu .plugins .pgsql .plugin import PgsqlPlugin as Plugin
45from distutils .version import LooseVersion
@@ -16,7 +17,7 @@ class Statements(Plugin):
1617 "pgpro_stats" :
1718 """
1819 SELECT {metrics}
19- FROM {extension_schema}.pgpro_stats_totals
20+ FROM {extension_schema}.pgpro_stats_totals()
2021 WHERE object_type = 'cluster';
2122 """ ,
2223 "pgpro_stats_bootstrap" :
@@ -94,31 +95,32 @@ class Statements(Plugin):
9495 ("PostgreSQL Statements: Spent Time" , 1 ),
9596 ("PostgreSQL Statements: WAL Statistics" , None )]
9697
98+ extension = ""
99+
97100 # pgpro_stats работает только для PGPRO 12+ в режиме bootstrap и/или если в конфиге указан суперпользователь mamonsu
98101 def run (self , zbx ):
99- extension = ""
100102 if (Pooler .is_pgpro () or Pooler .is_pgpro_ee ()) and Pooler .server_version_greater ("12" ):
101103 if Pooler .extension_installed ("pgpro_stats" ):
102104 if not Pooler .is_bootstraped ():
103105 self .disable_and_exit_if_not_superuser ()
104- extension = "pgpro_stats"
106+ self . extension = "pgpro_stats"
105107 elif Pooler .extension_installed ("pg_stat_statements" ):
106- extension = "pg_stat_statements"
108+ self . extension = "pg_stat_statements"
107109 else :
108110 self .disable_and_exit_if_extension_is_not_installed (ext = "pgpro_stats" )
109111 else :
110112 if not Pooler .extension_installed ("pg_stat_statements" ):
111113 self .disable_and_exit_if_extension_is_not_installed (ext = "pg_stat_statements" )
112- extension = "pg_stat_statements"
114+ self . extension = "pg_stat_statements"
113115
114- extension_schema = self .extension_schema (extension = extension )
116+ extension_schema = self .extension_schema (extension = self . extension )
115117
116118 # TODO: add 13 and 14 items when pgpro_stats added new WAL metrics
117119 all_items = self .Items .copy ()
118120 if Pooler .server_version_greater ("14" ):
119121 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" :
122124 info_items = self .Items_pg_14
123125 info_params = [x [1 ] for x in info_items ]
124126 info_result = Pooler .query (
@@ -127,18 +129,16 @@ def run(self, zbx):
127129 zbx_key , value = "pgsql.{0}" .format (
128130 info_items [key ][0 ]), int (value )
129131 zbx .send (zbx_key , value , info_items [key ][4 ])
130- columns = [x [1 ] for x in all_items ]
131132 elif Pooler .server_version_greater ("13" ):
132133 self .Items [5 ][1 ] = self .Items [5 ][1 ].format ("total_exec_time+total_plan_time" )
133134 all_items += self .Items_pg_13
134- columns = [x [1 ] for x in all_items ]
135135 else :
136136 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 (
139139 columns = ", " .join ([x [0 ][x [0 ].find ("[" ) + 1 :x [0 ].find ("]" )] for x in all_items ]),
140140 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 ))
142142 for key , value in enumerate (result [0 ]):
143143 zbx_key , value = "pgsql.{0}" .format (all_items [key ][0 ]), int (value )
144144 zbx .send (zbx_key , value , all_items [key ][4 ])
@@ -191,16 +191,16 @@ def graphs(self, template, dashboard=False):
191191 def keys_and_queries (self , template_zabbix ):
192192 if (Pooler .is_pgpro () or Pooler .is_pgpro_ee ()) and Pooler .server_version_greater ("12" ):
193193 if Pooler .extension_installed ("pgpro_stats" ):
194- extension = "pgpro_stats"
194+ self . extension = "pgpro_stats"
195195 elif Pooler .extension_installed ("pg_stat_statements" ):
196- extension = "pg_stat_statements"
196+ self . extension = "pg_stat_statements"
197197 else :
198198 if Pooler .extension_installed ("pg_stat_statements" ):
199- extension = "pg_stat_statements"
199+ self . extension = "pg_stat_statements"
200200
201201 if Pooler .extension_installed ("pgpro_stats" ) or Pooler .extension_installed ("pg_stat_statements" ):
202202
203- extension_schema = self .extension_schema (extension = extension )
203+ extension_schema = self .extension_schema (extension = self . extension )
204204
205205 result = []
206206 all_items = self .Items .copy ()
@@ -216,13 +216,13 @@ def keys_and_queries(self, template_zabbix):
216216 for i , item in enumerate (all_items ):
217217 keys = item [0 ].split ("[" )
218218 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 (
220220 columns = ", " .join (
221221 [x [0 ][x [0 ].find ("[" ) + 1 :x [0 ].find ("]" )] for x
222222 in
223223 all_items ]), metrics = (", " .join (columns )),
224224 extension_schema = extension_schema ) if Pooler .is_bootstraped () else
225- self .query [extension ].format (
225+ self .query [self . extension ].format (
226226 metrics = (", " .join (columns )),
227227 extension_schema = extension_schema )))
228228
0 commit comments