techinform 1.1.5 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/backup/backup.rb +50 -20
- data/lib/techinform/version.rb +1 -1
- data/lib/techinform.rb +5 -0
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a5feb947d3f7cfd7fc1684ffedde7cdd0e8f11bf98cb7d8fdeb9a8acd9e6ab09
|
4
|
+
data.tar.gz: '0548eaae7d279ed149c67eccc7bbf1f862fbe2c0e800512d8ca7317f543070fa'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c35eb62de6a8c4501558102b88a75f745402b3d0cdc420733e1666183b119ddbd7811750048edd7ffbc8c28eb2c5f77f54b95029fce6f403d5672a1e26018a5b
|
7
|
+
data.tar.gz: 25df7864b78286c8800b31f811ad46799a3d56b33386fa939291cbd78bd52ea5bff1da9b4d187b8df8e76d2545d749b7d28d91c29b31c4e2b3090b522e423bdd
|
data/lib/backup/backup.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'date'
|
2
2
|
require_relative '../techinform/defaults'
|
3
|
+
require 'highline'
|
3
4
|
|
4
5
|
class Backup
|
5
6
|
DATE_FORMAT = '%Y-%m-%d-%H-%M'
|
@@ -73,7 +74,8 @@ class Backup
|
|
73
74
|
end
|
74
75
|
|
75
76
|
def get_datetime_from_filename filename
|
76
|
-
|
77
|
+
puts 'Filename: ' + filename.split('.').first.split('-')[2..6].join('-')
|
78
|
+
DateTime.strptime(filename.split('.').first.split('-')[2..6].join('-'), DATE_FORMAT)
|
77
79
|
end
|
78
80
|
|
79
81
|
def print_info
|
@@ -88,34 +90,62 @@ class Backup
|
|
88
90
|
puts output unless output.empty?
|
89
91
|
end
|
90
92
|
|
93
|
+
# Change it in child class
|
94
|
+
def minimum_backup_size
|
95
|
+
50
|
96
|
+
end
|
97
|
+
|
98
|
+
# It worth to redefine that method to better check backup integrity
|
99
|
+
# Return true if everything ok
|
100
|
+
def verify_backup
|
101
|
+
File.size(filepath) > minimum_backup_size
|
102
|
+
end
|
91
103
|
|
92
|
-
def clean_files
|
104
|
+
def clean_files(prefix = 'local', dry_run = true)
|
105
|
+
puts(dry_run ? 'Performing dry run' : '!!!! Cleaning backups !!!!')
|
93
106
|
result = {} # true - delete file, false - do not delete
|
94
107
|
months_taken = []
|
95
108
|
days_taken = []
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
109
|
+
# Process each backup type
|
110
|
+
Dir["#{Techinform::BACKUPS_PREFIX}/#{prefix}/*"].each do |type|
|
111
|
+
puts "Type: #{type}"
|
112
|
+
# Get all backup name
|
113
|
+
Dir["#{type}/*"].each do |name|
|
114
|
+
puts "Name: #{name}"
|
115
|
+
# Get all files
|
116
|
+
Dir["#{name}/*"].sort.each do |file|
|
117
|
+
datetime = get_datetime_from_filename(file)
|
118
|
+
day_id = datetime.strftime('%Y-%m-%d')
|
119
|
+
month_id = datetime.strftime('%Y-%m')
|
120
|
+
if datetime < (DateTime.now << 2) # 2 month ago
|
121
|
+
if datetime.day == 1 && !(months_taken.include? month_id)
|
122
|
+
result[file] = false
|
123
|
+
months_taken << month_id
|
124
|
+
else
|
125
|
+
result[file] = true
|
126
|
+
end
|
127
|
+
elsif datetime < DateTime.now - 14 # 2 weeks ago
|
128
|
+
if [1, 7, 14, 21].include?(datetime.day) && !(days_taken.include?(day_id))
|
129
|
+
result[file] = false
|
130
|
+
days_taken << day_id
|
131
|
+
else
|
132
|
+
result[file] = true
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
result.each do |file, delete|
|
137
|
+
puts "#{file} #{"*" if delete}"
|
107
138
|
end
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
139
|
+
unless dry_run
|
140
|
+
return unless HighLine.new.agree "Delete #{result.select{|file, delete| delete}.keys.size} files - Are you sure? (yes/no)"
|
141
|
+
# Actually delete files
|
142
|
+
result.select{|file, delete| delete}.keys.each do |file|
|
143
|
+
puts `rm #{file}`
|
144
|
+
end
|
114
145
|
end
|
115
146
|
end
|
116
147
|
end
|
117
148
|
|
118
|
-
puts "Candidates to removal: #{result.select{|file, delete| delete }.keys.inspect}"
|
119
149
|
end
|
120
150
|
end
|
121
151
|
|
data/lib/techinform/version.rb
CHANGED
data/lib/techinform.rb
CHANGED
@@ -40,6 +40,11 @@ module Techinform
|
|
40
40
|
subcommand :projects, Techinform::Projects
|
41
41
|
desc 'backup', 'Backup'
|
42
42
|
subcommand :backup, Techinform::BackupCommand
|
43
|
+
desc "clean [prefix]", 'Clean old backup files (default prefix: local)'
|
44
|
+
option :delete, type: :boolean, desc: 'Actually delete files'
|
45
|
+
def clean(prefix = 'local')
|
46
|
+
puts Backup.new.clean_files(prefix, !options[:delete])
|
47
|
+
end
|
43
48
|
end
|
44
49
|
end
|
45
50
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: techinform
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexey Chernikov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-05-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -130,8 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: '0'
|
132
132
|
requirements: []
|
133
|
-
|
134
|
-
rubygems_version: 2.7.9
|
133
|
+
rubygems_version: 3.0.3
|
135
134
|
signing_key:
|
136
135
|
specification_version: 4
|
137
136
|
summary: Console tools, useful at Techinform
|