@@ -26,23 +26,25 @@ class Connections(Plugin):
26
26
]
27
27
Max_connections = None
28
28
29
- query_agent = "select count(*) from pg_catalog.pg_stat_activity where state = '{0}';"
30
- query_agent_total = "select count(*) from pg_catalog.pg_stat_activity where state is not null ;"
31
- query_agent_waiting_new_v = "select count(*) from pg_catalog.pg_stat_activity where state is not null and " \
29
+ query_agent = "select count(*) from pg_catalog.pg_stat_activity where state = '{0}' {1} ;"
30
+ query_agent_total = "select count(*) from pg_catalog.pg_stat_activity where {0} ;"
31
+ query_agent_waiting_new_v = "select count(*) from pg_catalog.pg_stat_activity where {0} and " \
32
32
" wait_event_type is not null"
33
- query_agent_waiting_old_v = "select count(*) from pg_catalog.pg_stat_activity where waiting and state is not null "
33
+ query_agent_waiting_old_v = "select count(*) from pg_catalog.pg_stat_activity where waiting and {0} "
34
34
query_agent_max_conn = "select setting::INT from pg_settings where name = 'max_connections' "
35
35
key = 'pgsql.connections{0}'
36
36
37
37
def run (self , zbx ):
38
38
if Pooler .is_bootstraped () and Pooler .bootstrap_version_greater ('2.3.4' ):
39
39
result = Pooler .query (
40
40
'select state, count(*) '
41
- 'from mamonsu.get_connections_states() where state is not null group by state' )
41
+ 'from mamonsu.get_connections_states() group by state' )
42
42
else :
43
43
result = Pooler .query (
44
44
'select state, count(*) '
45
- 'from pg_catalog.pg_stat_activity where state is not null group by state' )
45
+ 'from pg_catalog.pg_stat_activity where {0} group by state' .format (
46
+ "backend_type = 'client backend'" if Pooler .server_version_greater (
47
+ '10.0' ) else "state IS NOT NULL" ))
46
48
47
49
for item in self .Items :
48
50
state , key , val = item [0 ], item [1 ], 0
@@ -61,15 +63,17 @@ def run(self, zbx):
61
63
result = Pooler .query (
62
64
'select count(*) '
63
65
'from mamonsu.get_connections_states() '
64
- 'where waiting and state is not null' )
66
+ 'where waiting is not null' )
65
67
else :
66
68
if Pooler .server_version_less ('9.5.0' ):
67
69
result = Pooler .query (
68
70
'select count(*) '
69
71
'from pg_catalog.pg_stat_activity where waiting and state is not null' )
70
72
else :
71
- result = Pooler .query ('select count(*) from pg_catalog.pg_stat_activity where state is not null and '
72
- 'wait_event_type is not null' )
73
+ result = Pooler .query ('select count(*) from pg_catalog.pg_stat_activity where {0} and '
74
+ 'wait_event_type is not null' .format (
75
+ "backend_type = 'client backend'" if Pooler .server_version_greater (
76
+ '10.0' ) else "state IS NOT NULL" ))
73
77
zbx .send ('pgsql.connections[waiting]' , int (result [0 ][0 ]))
74
78
if self .Max_connections is None :
75
79
result = Pooler .query ("select setting from pg_settings where name = 'max_connections'" )
@@ -144,12 +148,26 @@ def triggers(self, template, dashboard=False):
144
148
def keys_and_queries (self , template_zabbix ):
145
149
result = []
146
150
for item in self .Items :
147
- result .append (
148
- '{0}[*],$2 $1 -c "{1}"' .format (self .key .format ("." + item [1 ]), self .query_agent .format (item [1 ])))
149
- result .append ('{0}[*],$2 $1 -c "{1}"' .format (self .key .format ('.total' ), self .query_agent_total ))
151
+ result .append ('{0}[*],$2 $1 -c "{1}"' .format (self .key .format ("." + item [1 ]),
152
+ self .query_agent .format (item [1 ],
153
+ "AND backend_type = 'client backend'" if LooseVersion (
154
+ self .VersionPG ) >= LooseVersion (
155
+ '10' ) else "" )))
156
+ result .append ('{0}[*],$2 $1 -c "{1}"' .format (self .key .format ('.total' ), self .query_agent_total .format (
157
+ "backend_type = 'client backend'" if LooseVersion (
158
+ self .VersionPG ) >= LooseVersion (
159
+ '10' ) else "state IS NOT NULL" )))
150
160
if LooseVersion (self .VersionPG ) < LooseVersion ('9.6' ):
151
- result .append ('{0}[*],$2 $1 -c "{1}"' .format (self .key .format ('.waiting' ), self .query_agent_waiting_old_v ))
161
+ result .append (
162
+ '{0}[*],$2 $1 -c "{1}"' .format (self .key .format ('.waiting' ), self .query_agent_waiting_old_v .format (
163
+ "backend_type = 'client backend'" if LooseVersion (
164
+ self .VersionPG ) >= LooseVersion (
165
+ '10' ) else "state IS NOT NULL" )))
152
166
else :
153
- result .append ('{0}[*],$2 $1 -c "{1}"' .format (self .key .format ('.waiting' ), self .query_agent_waiting_new_v ))
167
+ result .append (
168
+ '{0}[*],$2 $1 -c "{1}"' .format (self .key .format ('.waiting' ), self .query_agent_waiting_new_v .format (
169
+ "backend_type = 'client backend'" if LooseVersion (
170
+ self .VersionPG ) >= LooseVersion (
171
+ '10' ) else "state IS NOT NULL" )))
154
172
result .append ('{0}[*],$2 $1 -c "{1}"' .format (self .key .format ('.max_connections' ), self .query_agent_max_conn ))
155
173
return template_zabbix .key_and_query (result )
0 commit comments