@@ -7,42 +7,39 @@ class ArchiveCommand(Plugin):
7
7
AgentPluginType = 'pg'
8
8
DEFAULT_CONFIG = {'max_count_files' : str (2 )}
9
9
Interval = 60
10
+
11
+ # if streaming replication is on, archive queue length and size will always be 0 for replicas
10
12
query_agent_count_files = """
11
- WITH segment_parts_count AS
12
- (SELECT 4096/(setting::bigint/1024/1024) AS value FROM pg_settings
13
- WHERE name = 'wal_segment_size'),
14
- last_wal_div AS
15
- (SELECT ('x' || substring(last_archived_wal from 9 for 8))::bit(32)::int AS value
16
- FROM pg_stat_archiver),
17
- last_wal_mod AS
18
- (SELECT ('x' || substring(last_archived_wal from 17 for 8))::bit(32)::int AS value
19
- FROM pg_stat_archiver),
20
- current_wal_div AS
21
- (SELECT ('x' || substring(pg_walfile_name(pg_current_wal_lsn()) from 9 for 8))::bit(32)::int AS value),
22
- current_wal_mod AS
23
- (SELECT ('x' || substring(pg_walfile_name(pg_current_wal_lsn()) from 17 for 8))::bit(32)::int AS value)
24
- SELECT greatest(coalesce((segment_parts_count.value - last_wal_mod.value) + ((current_wal_div.value - last_wal_div.value - 1) * segment_parts_count.value) + current_wal_mod.value - 1, 0), 0)
25
- FROM segment_parts_count, last_wal_div, last_wal_mod, current_wal_div, current_wal_mod;
13
+ WITH values AS (
14
+ SELECT
15
+ 4096/(pg_settings.setting::bigint/1024/1024) AS segment_parts_count,
16
+ setting::bigint AS segment_size,
17
+ ('x' || substring(pg_stat_archiver.last_archived_wal from 9 for 8))::bit(32)::int AS last_wal_div,
18
+ ('x' || substring(pg_stat_archiver.last_archived_wal from 17 for 8))::bit(32)::int AS last_wal_mod,
19
+ CASE WHEN pg_is_in_recovery() THEN NULL ELSE
20
+ ('x' || substring(pg_walfile_name(pg_current_wal_lsn()) from 9 for 8))::bit(32)::int END AS current_wal_div,
21
+ CASE WHEN pg_is_in_recovery() THEN NULL ELSE
22
+ ('x' || substring(pg_walfile_name(pg_current_wal_lsn()) from 17 for 8))::bit(32)::int END AS current_wal_mod
23
+ FROM pg_settings, pg_stat_archiver
24
+ WHERE pg_settings.name = 'wal_segment_size')
25
+ SELECT greatest(coalesce((segment_parts_count - last_wal_mod) + ((current_wal_div - last_wal_div - 1) * segment_parts_count) + current_wal_mod - 1, 0), 0) AS count_files
26
+ FROM values;
26
27
"""
27
28
query_agent_size_files = """
28
- WITH segment_parts_count AS
29
- (SELECT 4096/(setting::bigint/1024/1024) AS value FROM pg_settings
30
- WHERE name = 'wal_segment_size'),
31
- segment_size AS
32
- (SELECT setting::bigint AS value FROM pg_settings
33
- WHERE name = 'wal_segment_size'),
34
- last_wal_div AS
35
- (SELECT ('x' || substring(last_archived_wal from 9 for 8))::bit(32)::int AS value
36
- FROM pg_stat_archiver),
37
- last_wal_mod AS
38
- (SELECT ('x' || substring(last_archived_wal from 17 for 8))::bit(32)::int AS value
39
- FROM pg_stat_archiver),
40
- current_wal_div AS
41
- (SELECT ('x' || substring(pg_walfile_name(pg_current_wal_lsn()) from 9 for 8))::bit(32)::int AS value),
42
- current_wal_mod AS
43
- (SELECT ('x' || substring(pg_walfile_name(pg_current_wal_lsn()) from 17 for 8))::bit(32)::int AS value)
44
- SELECT greatest(coalesce(((segment_parts_count.value - last_wal_mod.value) + ((current_wal_div.value - last_wal_div.value - 1) * segment_parts_count.value) + current_wal_mod.value - 1) * segment_size.value, 0), 0)
45
- FROM segment_parts_count, segment_size, last_wal_div, last_wal_mod, current_wal_div, current_wal_mod;
29
+ WITH values AS (
30
+ SELECT
31
+ 4096/(pg_settings.setting::bigint/1024/1024) AS segment_parts_count,
32
+ setting::bigint AS segment_size,
33
+ ('x' || substring(pg_stat_archiver.last_archived_wal from 9 for 8))::bit(32)::int AS last_wal_div,
34
+ ('x' || substring(pg_stat_archiver.last_archived_wal from 17 for 8))::bit(32)::int AS last_wal_mod,
35
+ CASE WHEN pg_is_in_recovery() THEN NULL ELSE
36
+ ('x' || substring(pg_walfile_name(pg_current_wal_lsn()) from 9 for 8))::bit(32)::int END AS current_wal_div,
37
+ CASE WHEN pg_is_in_recovery() THEN NULL ELSE
38
+ ('x' || substring(pg_walfile_name(pg_current_wal_lsn()) from 17 for 8))::bit(32)::int END AS current_wal_mod
39
+ FROM pg_settings, pg_stat_archiver
40
+ WHERE pg_settings.name = 'wal_segment_size')
41
+ SELECT greatest(coalesce(((segment_parts_count - last_wal_mod) + ((current_wal_div - last_wal_div - 1) * segment_parts_count) + current_wal_mod - 1) * segment_size, 0), 0) AS size_files
42
+ FROM values;
46
43
"""
47
44
48
45
query_agent_archived_count = "SELECT archived_count from pg_stat_archiver;"
@@ -52,9 +49,9 @@ class ArchiveCommand(Plugin):
52
49
Items = [
53
50
# key, desc, color, side, graph
54
51
('count_files_to_archive' , 'count files in archive_status need to archive' , 'FFD700' , 0 , 1 ),
55
- ('size_files_to_archive' , 'size of files need to archive' , '00FF00' , 1 , 0 ),
52
+ ('size_files_to_archive' , 'size of files need to archive' , '00FF00' , 0 , 0 ),
56
53
('archived_files' , 'count archived files' , '00F000' , 0 , 1 ),
57
- ('failed_trying_to_archive' , 'count attempts to archive files' , 'FF0000' , 1 , 1 ),
54
+ ('failed_trying_to_archive' , 'count attempts to archive files' , 'FF0000' , 0 , 1 ),
58
55
]
59
56
old_archived_count = None
60
57
old_failed_count = None
@@ -66,25 +63,21 @@ def run(self, zbx):
66
63
result1 = Pooler .query ("""select * from mamonsu.archive_command_files()""" )
67
64
else :
68
65
result1 = Pooler .query ("""
69
- WITH segment_parts_count AS
70
- (SELECT 4096/(setting::bigint/1024/1024) AS value FROM pg_settings
71
- WHERE name = 'wal_segment_size'),
72
- segment_size AS
73
- (SELECT setting::bigint AS value FROM pg_settings
74
- WHERE name = 'wal_segment_size'),
75
- last_wal_div AS
76
- (SELECT ('x' || substring(last_archived_wal from 9 for 8))::bit(32)::int AS value
77
- FROM pg_stat_archiver),
78
- last_wal_mod AS
79
- (SELECT ('x' || substring(last_archived_wal from 17 for 8))::bit(32)::int AS value
80
- FROM pg_stat_archiver),
81
- current_wal_div AS
82
- (SELECT ('x' || substring(pg_walfile_name(pg_current_wal_lsn()) from 9 for 8))::bit(32)::int AS value),
83
- current_wal_mod AS
84
- (SELECT ('x' || substring(pg_walfile_name(pg_current_wal_lsn()) from 17 for 8))::bit(32)::int AS value)
85
- SELECT greatest(coalesce((segment_parts_count.value - last_wal_mod.value) + ((current_wal_div.value - last_wal_div.value - 1) * segment_parts_count.value) + current_wal_mod.value - 1, 0), 0) AS count_files,
86
- greatest(coalesce(((segment_parts_count.value - last_wal_mod.value) + ((current_wal_div.value - last_wal_div.value - 1) * segment_parts_count.value) + current_wal_mod.value - 1) * segment_size.value, 0), 0) AS size_files
87
- FROM segment_parts_count, segment_size, last_wal_div, last_wal_mod, current_wal_div, current_wal_mod;
66
+ WITH values AS (
67
+ SELECT
68
+ 4096/(pg_settings.setting::bigint/1024/1024) AS segment_parts_count,
69
+ setting::bigint AS segment_size,
70
+ ('x' || substring(pg_stat_archiver.last_archived_wal from 9 for 8))::bit(32)::int AS last_wal_div,
71
+ ('x' || substring(pg_stat_archiver.last_archived_wal from 17 for 8))::bit(32)::int AS last_wal_mod,
72
+ CASE WHEN pg_is_in_recovery() THEN NULL ELSE
73
+ ('x' || substring(pg_walfile_name(pg_current_wal_lsn()) from 9 for 8))::bit(32)::int END AS current_wal_div,
74
+ CASE WHEN pg_is_in_recovery() THEN NULL ELSE
75
+ ('x' || substring(pg_walfile_name(pg_current_wal_lsn()) from 17 for 8))::bit(32)::int END AS current_wal_mod
76
+ FROM pg_settings, pg_stat_archiver
77
+ WHERE pg_settings.name = 'wal_segment_size')
78
+ SELECT greatest(coalesce((segment_parts_count - last_wal_mod) + ((current_wal_div - last_wal_div - 1) * segment_parts_count) + current_wal_mod - 1, 0), 0) AS count_files,
79
+ greatest(coalesce(((segment_parts_count - last_wal_mod) + ((current_wal_div - last_wal_div - 1) * segment_parts_count) + current_wal_mod - 1) * segment_size, 0), 0) AS size_files
80
+ FROM values;
88
81
""" )
89
82
result2 = Pooler .query ("""SELECT archived_count, failed_count from pg_stat_archiver;""" )
90
83
0 commit comments