@@ -27,7 +27,7 @@ class Statements(Plugin):
27
27
28
28
query_info = """
29
29
SELECT {metrics}
30
- FROM {extension_schema}.pg_stat_statements_info ;
30
+ FROM {extension_schema}.{info_view_name} ;
31
31
"""
32
32
key = "pgsql."
33
33
# zbx_key, sql, desc, unit, delta, (Graph, color, side)
@@ -88,6 +88,32 @@ class Statements(Plugin):
88
88
("PostgreSQL Statements Info: Last Statistics Reset Time" , "9C8A4E" , 0 ))
89
89
]
90
90
91
+ Items_pgpro_stats_1_8 = [
92
+ ("stat[read_bytes]" ,
93
+ "(sum(shared_blks_read+local_blks_read+temp_blks_read)*8*1024)::bigint" ,
94
+ "Read bytes/s" , Plugin .UNITS .bytes_per_second , Plugin .DELTA .speed_per_second ,
95
+ ("PostgreSQL Statements: Bytes" , "87C2B9" , 0 )),
96
+ ("stat[write_bytes]" ,
97
+ "(sum(shared_blks_written+local_blks_written+temp_blks_written)*8*1024)::bigint" ,
98
+ "Write bytes/s" , Plugin .UNITS .bytes_per_second , Plugin .DELTA .speed_per_second ,
99
+ ("PostgreSQL Statements: Bytes" , "793F5D" , 0 )),
100
+ ("stat[dirty_bytes]" ,
101
+ "(sum(shared_blks_dirtied+local_blks_dirtied)*8*1024)::bigint" ,
102
+ "Dirty bytes/s" , Plugin .UNITS .bytes_per_second , Plugin .DELTA .speed_per_second ,
103
+ ("PostgreSQL Statements: Bytes" , "9C8A4E" , 0 )),
104
+ ("stat[read_time]" ,
105
+ "(sum(shared_blk_read_time+local_blk_read_time+temp_blk_read_time)/float4(100))::bigint" ,
106
+ "Read IO Time" , Plugin .UNITS .s , Plugin .DELTA .speed_per_second ,
107
+ ("PostgreSQL Statements: Spent Time" , "87C2B9" , 0 )),
108
+ ("stat[write_time]" ,
109
+ "(sum(shared_blk_write_time+local_blk_write_time+temp_blk_write_time)/float4(100))::bigint" ,
110
+ "Write IO Time" , Plugin .UNITS .s , Plugin .DELTA .speed_per_second ,
111
+ ("PostgreSQL Statements: Spent Time" , "793F5D" , 0 )),
112
+ ["stat[other_time]" ,
113
+ "(sum(total_exec_time+total_plan_time-shared_blk_read_time-local_blk_read_time-temp_blk_read_time-shared_blk_write_time-local_blk_write_time-temp_blk_write_time)/float4(100))::bigint" ,
114
+ "Other (mostly CPU) Time" , Plugin .UNITS .s , Plugin .DELTA .speed_per_second ,
115
+ ("PostgreSQL Statements: Spent Time" , "9C8A4E" , 0 )]]
116
+
91
117
all_graphs = [
92
118
("PostgreSQL Statements: Bytes" , None ),
93
119
("PostgreSQL Statements: Spent Time" , 1 ),
@@ -115,21 +141,45 @@ def run(self, zbx):
115
141
116
142
# TODO: add 13 and 14 items when pgpro_stats added new WAL metrics
117
143
all_items = self .Items .copy ()
118
- if Pooler .server_version_greater ("14" ):
144
+
145
+ if Pooler .extension_version_greater ("pgpro_stats" , "1.8" ):
146
+ info_view = 'pg_stat_statements_info'
147
+ if self .extension == "pgpro_stats" :
148
+ info_view = 'pgpro_stats_info'
149
+
150
+ info_items = self .Items_pg_14
151
+ info_params = [x [1 ] for x in info_items ]
152
+ info_result = Pooler .query (
153
+ self .query_info .format (metrics = (", " .join (info_params )), extension_schema = extension_schema , info_view_name = info_view ))
154
+ for key , value in enumerate (info_result [0 ]):
155
+ zbx_key , value = "pgsql.{0}" .format (
156
+ info_items [key ][0 ]), int (value )
157
+ zbx .send (zbx_key , value , info_items [key ][4 ])
158
+
159
+ all_items = self .Items_pgpro_stats_1_8 .copy ()
160
+ all_items += self .Items_pg_13
161
+
162
+ elif Pooler .server_version_greater ("14" ):
119
163
self .Items [5 ][1 ] = self .Items [5 ][1 ].format ("total_exec_time+total_plan_time" )
120
164
all_items += self .Items_pg_13
165
+ info_view = 'pgpro_stats_info'
121
166
if self .extension == "pg_stat_statements" :
122
- info_items = self .Items_pg_14
123
- info_params = [x [1 ] for x in info_items ]
124
- info_result = Pooler .query (
125
- self .query_info .format (metrics = (", " .join (info_params )), extension_schema = extension_schema ))
126
- for key , value in enumerate (info_result [0 ]):
127
- zbx_key , value = "pgsql.{0}" .format (
128
- info_items [key ][0 ]), int (value )
129
- zbx .send (zbx_key , value , info_items [key ][4 ])
167
+ info_view = 'pg_stat_statements_info'
168
+ info_items = self .Items_pg_14
169
+ info_params = [x [1 ] for x in info_items ]
170
+ info_result = Pooler .query (
171
+ self .query_info .format (metrics = (", " .join (info_params )),
172
+ extension_schema = extension_schema ,
173
+ info_view_name = info_view ))
174
+ for key , value in enumerate (info_result [0 ]):
175
+ zbx_key , value = "pgsql.{0}" .format (
176
+ info_items [key ][0 ]), int (value )
177
+ zbx .send (zbx_key , value , info_items [key ][4 ])
178
+
130
179
elif Pooler .server_version_greater ("13" ):
131
180
self .Items [5 ][1 ] = self .Items [5 ][1 ].format ("total_exec_time+total_plan_time" )
132
181
all_items += self .Items_pg_13
182
+
133
183
else :
134
184
self .Items [5 ][1 ] = self .Items [5 ][1 ].format ("total_time" )
135
185
columns = [x [1 ] for x in all_items ]
0 commit comments