techinform 1.1.5 → 1.2.1
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.
- 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
|