gitlab-janitor 0.0.3 → 1.0.2.92939

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,114 +0,0 @@
1
- module GitlabJanitor
2
- class ContainerCleaner < BaseCleaner
3
-
4
- class Model < BaseCleaner::Model
5
- def initialize(v)
6
- super(v)
7
-
8
- info['_Age'] = (Time.now - Time.at(created_at)).round(0)
9
- end
10
-
11
- def created_at
12
- info['Created']
13
- end
14
-
15
- def name
16
- @anme ||= info['Names'].first.sub(/^\//, '')
17
- end
18
-
19
- def age
20
- info['_Age']
21
- end
22
- end
23
-
24
- attr_reader :excludes, :includes
25
-
26
- def initialize includes: [''], excludes: [''], **args
27
- super(**args)
28
- @includes = includes
29
- @excludes = excludes
30
- @deadline = deadline
31
- end
32
-
33
- def do_clean(remove: false)
34
- to_remove, keep = prepare(Docker::Container.all(all: true).map{|m| Model.new(m)})
35
-
36
- if !to_remove.empty?
37
- keep.each do |c|
38
- logger.debug(" KEEP #{c.name}")
39
- end
40
-
41
- if remove
42
- logger.info "Removing containers..."
43
- to_remove.each do |c|
44
- logger.tagged(c.name) do
45
- logger.debug " Removing..."
46
- log_exception("Stop") {c.stop}
47
- log_exception("Wait") {c.wait(15)}
48
- log_exception("Remove") {c.remove}
49
- logger.debug " Removing COMPLETED"
50
- end
51
- end
52
- else
53
- logger.info "Skip removal due to dry run"
54
- end
55
- end
56
- end
57
-
58
-
59
- def prepare containers
60
- @logger.debug("Selecting containers by includes #{@includes}...")
61
- to_remove = select_by_name(containers)
62
- if to_remove.empty?
63
- @logger.info("Noting to remove.")
64
- return [], containers
65
- end
66
- @logger.info("Selected containers: \n#{to_remove.map{|c| " + #{format_item(c)}"}.join("\n")}")
67
-
68
- @logger.debug("Filtering containers by excludes #{@excludes}...")
69
- to_remove = reject_by_name(to_remove)
70
- if to_remove.empty?
71
- @logger.info("Noting to remove.")
72
- return [], containers
73
- end
74
- @logger.info("Filtered containers: \n#{to_remove.map{|c| " + #{format_item(c)}"}.join("\n")}")
75
-
76
- @logger.debug("Filtering containers by deadline: older than #{Fugit::Duration.parse(@deadline).deflate.to_plain_s}...")
77
- to_remove = select_by_deadline(to_remove)
78
- if to_remove.empty?
79
- @logger.info("Noting to remove.")
80
- return [], containers
81
- end
82
- @logger.info("Filtered containers: \n#{to_remove.map{|c| " + #{format_item(c)}"}.join("\n")}")
83
-
84
- [to_remove, containers - to_remove]
85
- end
86
-
87
- def format_item c
88
- "#{Time.at(c.created_at)} Age:#{Fugit::Duration.parse(c.age).deflate.to_plain_s.ljust(10)} #{c.name.first(60).ljust(60)}"
89
- end
90
-
91
- def select_by_name containers
92
- containers.select do |c|
93
- @includes.any? do |pattern|
94
- File.fnmatch(pattern, c.name)
95
- end
96
- end
97
- end
98
-
99
- def reject_by_name containers
100
- containers.reject do |c|
101
- @excludes.any? do |pattern|
102
- File.fnmatch(pattern, c.name)
103
- end
104
- end
105
- end
106
-
107
- def select_by_deadline containers
108
- containers.select do |c|
109
- c.age > deadline
110
- end
111
- end
112
-
113
- end
114
- end
@@ -1,5 +0,0 @@
1
- module GitlabJanitor
2
-
3
- VERSION = '0.0.3'.freeze
4
-
5
- end
@@ -1,90 +0,0 @@
1
- module GitlabJanitor
2
- class VolumeCleaner < BaseCleaner
3
-
4
- class Model < BaseCleaner::Model
5
- def initialize(v)
6
- super(v)
7
-
8
- info['_Age'] = (Time.now - Time.parse(created_at)).round(0)
9
- end
10
-
11
- def created_at
12
- info['CreatedAt']
13
- end
14
-
15
- def name
16
- info['Name']
17
- end
18
-
19
- def age
20
- info['_Age']
21
- end
22
-
23
- def mountpoint
24
- info['Mountpoint']
25
- end
26
- end
27
-
28
- def do_clean(remove: false)
29
- to_remove, keep = prepare(Docker::Volume.all.map{|m| Model.new(m)})
30
-
31
- if !to_remove.empty?
32
- keep.each do |c|
33
- logger.debug(" KEEP #{c.name}")
34
- end
35
- if remove
36
- logger.info "Removing volumes..."
37
- to_remove.each do |c|
38
- logger.tagged(c.name.first(10)) do
39
- logger.debug " Removing..."
40
- log_exception("Remove") {c.remove}
41
- logger.debug " Removing COMPLETED"
42
- end
43
- end
44
- else
45
- logger.info "Skip removal due to dry run"
46
- end
47
- end
48
- end
49
-
50
-
51
- def prepare volumes
52
- @logger.debug("Selecting unnamed volumes...")
53
- to_remove = select_unnamed(volumes)
54
- if to_remove.empty?
55
- @logger.info("Noting to remove.")
56
- return [], volumes
57
- end
58
- @logger.info("Selected volumes: \n#{to_remove.map{|c| " + #{format_item(c)}"}.join("\n")}")
59
-
60
- @logger.debug("Filtering volumes by deadline: older than #{@deadline} seconds...")
61
- to_remove = select_by_deadline(to_remove)
62
- if to_remove.empty?
63
- @logger.info("Noting to remove.")
64
- return [], volumes
65
- end
66
- @logger.info("Filtered volumes: \n#{to_remove.map{|c| " !! #{format_item(c)}"}.join("\n")}")
67
-
68
- return to_remove, (volumes - to_remove)
69
- end
70
-
71
- def format_item c
72
- "#{Time.parse(c.created_at)} Age:#{Fugit::Duration.parse(c.age).deflate.to_plain_s.ljust(13)} #{c.name.first(10).ljust(10)} #{c.mountpoint}"
73
- end
74
-
75
- SHA_RX = /^[a-zA-Z0-9]{64}$/
76
-
77
- def select_unnamed volumes
78
- volumes.select do |c|
79
- SHA_RX.match(c.name)
80
- end
81
- end
82
-
83
- def select_by_deadline containers
84
- containers.select do |c|
85
- c.age > deadline
86
- end
87
- end
88
-
89
- end
90
- end