@@ -17,9 +17,17 @@ class Oldest(Plugin):
17
17
"""
18
18
19
19
OldestQuerySql = """
20
- select
21
- extract(epoch from max(now() - xact_start))
22
- from pg_catalog.pg_stat_activity;
20
+ SELECT
21
+ CASE WHEN extract(epoch from max(now() - xact_start)) IS NOT null
22
+ AND extract(epoch from max(now() - xact_start))>0
23
+ THEN extract(epoch from max(now() - xact_start))
24
+ ELSE 0
25
+ END
26
+ FROM pg_catalog.pg_stat_activity
27
+ WHERE
28
+ pid NOT IN(select pid from pg_stat_replication) AND
29
+ pid <> pg_backend_pid() AND
30
+ query NOT ilike '%%VACUUM%%';
23
31
"""
24
32
25
33
OldestQuerySql_bootstrap = """
@@ -28,7 +36,7 @@ class Oldest(Plugin):
28
36
29
37
DEFAULT_CONFIG = {
30
38
'max_xid_age' : str (5000 * 60 * 60 ),
31
- 'max_query_time ' : str (5 * 60 * 60 )
39
+ 'max_transaction_time ' : str (5 * 60 * 60 )
32
40
}
33
41
34
42
def run (self , zbx ):
@@ -40,13 +48,13 @@ def run(self, zbx):
40
48
query = Pooler .query (self .OldestQuerySql )[0 ][0 ]
41
49
42
50
zbx .send ('pgsql.oldest[xid_age]' , xid )
43
- zbx .send ('pgsql.oldest[query_time ]' , query )
51
+ zbx .send ('pgsql.oldest[transaction_time ]' , query )
44
52
45
53
def graphs (self , template ):
46
54
result = template .graph ({
47
- 'name' : 'PostgreSQL oldest query running time' ,
55
+ 'name' : 'PostgreSQL oldest transaction running time' ,
48
56
'items' : [{
49
- 'key' : 'pgsql.oldest[query_time ]' ,
57
+ 'key' : 'pgsql.oldest[transaction_time ]' ,
50
58
'color' : '00CC00'
51
59
}]
52
60
})
@@ -65,8 +73,8 @@ def items(self, template):
65
73
'name' : 'PostgreSQL: age of oldest xid' ,
66
74
'value_type' : Plugin .VALUE_TYPE .numeric_unsigned
67
75
}) + template .item ({
68
- 'key' : 'pgsql.oldest[query_time ]' ,
69
- 'name' : 'PostgreSQL: oldest query running time in sec' ,
76
+ 'key' : 'pgsql.oldest[transaction_time ]' ,
77
+ 'name' : 'PostgreSQL: oldest transaction running time in sec' ,
70
78
'units' : Plugin .UNITS .s
71
79
})
72
80
@@ -76,7 +84,7 @@ def triggers(self, template):
76
84
'expression' : '{#TEMPLATE:pgsql.oldest[xid_age]'
77
85
'.last()}>' + self .plugin_config ('max_xid_age' )
78
86
}) + template .trigger ({
79
- 'name' : 'PostgreSQL query running is too old on {HOSTNAME}' ,
80
- 'expression' : '{#TEMPLATE:pgsql.oldest[query_time ]'
81
- '.last()}>' + self .plugin_config ('max_query_time ' )
87
+ 'name' : 'PostgreSQL transaction running is too old on {HOSTNAME}' ,
88
+ 'expression' : '{#TEMPLATE:pgsql.oldest[transaction_time ]'
89
+ '.last()}>' + self .plugin_config ('max_transaction_time ' )
82
90
})
0 commit comments