@@ -26,23 +26,25 @@ class Connections(Plugin):
2626 ]
2727 Max_connections = None
2828
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 " \
3232 " 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} "
3434 query_agent_max_conn = "select setting::INT from pg_settings where name = 'max_connections' "
3535 key = 'pgsql.connections{0}'
3636
3737 def run (self , zbx ):
3838 if Pooler .is_bootstraped () and Pooler .bootstrap_version_greater ('2.3.4' ):
3939 result = Pooler .query (
4040 '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' )
4242 else :
4343 result = Pooler .query (
4444 '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" ))
4648
4749 for item in self .Items :
4850 state , key , val = item [0 ], item [1 ], 0
@@ -61,15 +63,17 @@ def run(self, zbx):
6163 result = Pooler .query (
6264 'select count(*) '
6365 'from mamonsu.get_connections_states() '
64- 'where waiting and state is not null' )
66+ 'where waiting is not null' )
6567 else :
6668 if Pooler .server_version_less ('9.5.0' ):
6769 result = Pooler .query (
6870 'select count(*) '
6971 'from pg_catalog.pg_stat_activity where waiting and state is not null' )
7072 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" ))
7377 zbx .send ('pgsql.connections[waiting]' , int (result [0 ][0 ]))
7478 if self .Max_connections is None :
7579 result = Pooler .query ("select setting from pg_settings where name = 'max_connections'" )
@@ -144,12 +148,26 @@ def triggers(self, template, dashboard=False):
144148 def keys_and_queries (self , template_zabbix ):
145149 result = []
146150 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" )))
150160 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" )))
152166 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" )))
154172 result .append ('{0}[*],$2 $1 -c "{1}"' .format (self .key .format ('.max_connections' ), self .query_agent_max_conn ))
155173 return template_zabbix .key_and_query (result )
0 commit comments