storazzo 0.3.7 → 0.4.2

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.
@@ -16,8 +16,13 @@ module Storazzo
16
16
 
17
17
  # in order of finding, so the first will be the one we actually READ and use. I could looknat the date but cmon...
18
18
  # These are the files I do accept.
19
- ConfigFiles = %W{ ricdisk.yaml .ricdisk }
20
- RicdiskVersion = '2.0'
19
+ ConfigFiles = %W{ ricdisk.yaml .ricdisk storazzo.yaml }
20
+ DefaultConfigFile = "storazzo.yaml" # .ricdisk }
21
+ RicdiskVersion = '2.1'
22
+ RicdiskHistory = [
23
+ '2022-07-29 2.1 Added timestamp',
24
+ '2022-07-28 2.0 Added tags, siz, unique_hash, computation_hostname, wr, ...',
25
+ ]
21
26
  DefaultGemfileTestDiskFolder = Storazzo.root + "/var/test/disks/" # was: @@default_gemfile_test_disks_folder
22
27
  # Immutable
23
28
  DefaultMediaFolders = %w{
@@ -26,7 +31,7 @@ module Storazzo
26
31
  }.append(DefaultGemfileTestDiskFolder ).append("/media/#{ENV["USER"]}/" )
27
32
 
28
33
  # # todo substitute with protobuf..
29
- attr_accessor :name, :description, :ricdisk_file,:ricdisk_file_full, :local_mountpoint, :wr, :path,
34
+ attr_accessor :name, :description, :ricdisk_file, :ricdisk_file_full, :local_mountpoint, :wr, :path,
30
35
  :ricdisk_file_empty, :size, :active_dirs, :ricdisk_version,
31
36
  :unique_hash # new 202207
32
37
 
@@ -38,7 +43,6 @@ module Storazzo
38
43
 
39
44
  def initialize(path, opts={})
40
45
  deb "RicDisk initialize.. path=#{path}"
41
- # @local_mountpoint = path
42
46
  @local_mountpoint = File.expand_path(path)
43
47
  @description = "This is an automated RicDisk description from v.#{RicdiskVersion}. Created on #{Time.now}'"
44
48
  @ricdisk_version = RicdiskVersion
@@ -52,6 +56,7 @@ module Storazzo
52
56
  @size = `du -s '#{path}'`.split(/\s/)[0] # self.size
53
57
  @unique_hash = "MD5::" + Digest::MD5.hexdigest(File.expand_path(path)) # hash = Digest::MD5.hexdigest(File.expand_path(get_local_mountpoint))
54
58
  @computation_hostname = Socket.gethostname
59
+ @created_at = Time.now
55
60
 
56
61
  @ricdisk_file_empty = ricdisk_file_empty?
57
62
 
@@ -97,8 +102,10 @@ module Storazzo
97
102
  def writeable?()
98
103
  return @wr unless @wr.nil?
99
104
  # Otherwise I can do an EXPENSIVE calculation
100
- puts "TODO(ricc): Do expensive calculation if this FS is writeable: #{path}"
101
- @wr = File.writable?(File.expand_path(@ricdisk_file)) # rescue false
105
+ puts yellow("TODO(ricc): Do expensive calculation if this FS is writeable: #{path}")
106
+ #@wr = File.writable?(File.expand_path(@ricdisk_file)) # rescue false
107
+ raise "for some reason an important info (ricdisk_file='#{absolute_path}') is missing!" if ricdisk_file.nil?
108
+ @wr = File.writable?(absolute_path) # rescue false
102
109
  return @wr
103
110
  #:boh_todo_fix_me_and_compute
104
111
  #false
@@ -123,9 +130,9 @@ module Storazzo
123
130
  end
124
131
 
125
132
  def absolute_path
126
- @local_mountpoint + "/" + @ricdisk_file
133
+ #@local_mountpoint + "/" + @ricdisk_file
134
+ "#{local_mountpoint}/#{ricdisk_file}"
127
135
  end
128
-
129
136
 
130
137
  def self.find_active_dirs(base_dirs=nil, also_mountpoints=true)
131
138
  if base_dirs.nil?
@@ -166,15 +173,32 @@ module Storazzo
166
173
  deb "[CACHE HIT] ricdisk_file (didnt have to recompute it - yay!)"
167
174
  return @ricdisk_file
168
175
  end
169
- warn "RICC_WARNING This requires cmputation I wanna do it almost once"
176
+ deb "[compute_ricdisk_file] RICC_WARNING This requires cmputation I wanna do it almost once"
170
177
  ConfigFiles.each do |papable_config_filename|
171
178
  #return ".ricdisk.yaml" if File.exist?("#{path}/.ricdisk.yaml") #and File.empty?( "#{path}/.ricdisk.yaml")
172
179
  #return ".ricdisk" if File.exist?("#{path}/.ricdisk") # and File.empty?( "#{path}/.ricdisk")
173
180
  return papable_config_filename if File.exist?("#{path}/#{papable_config_filename}") # and File.empty?( "#{path}/.ricdisk")
174
181
  end
175
- return nil
182
+ deb "File not found! Neither #{ConfigFiles} exist.."
183
+ # return nil
184
+ return DefaultConfigFile
176
185
  end
177
186
 
187
+
188
+ # def self.compute_ricdisk_file_by_path_once(path)
189
+ # # unless @ricdisk_file.nil?
190
+ # # deb "[CACHE HIT] ricdisk_file (didnt have to recompute it - yay!)"
191
+ # # return @ricdisk_file
192
+ # # end
193
+ # warn "RICC_WARNING This requires cmputation I wanna do it almost once"
194
+ # ConfigFiles.each do |papable_config_filename|
195
+ # #return ".ricdisk.yaml" if File.exist?("#{path}/.ricdisk.yaml") #and File.empty?( "#{path}/.ricdisk.yaml")
196
+ # #return ".ricdisk" if File.exist?("#{path}/.ricdisk") # and File.empty?( "#{path}/.ricdisk")
197
+ # return papable_config_filename if File.exist?("#{path}/#{papable_config_filename}") # and File.empty?( "#{path}/.ricdisk")
198
+ # end
199
+ # return nil
200
+ # end
201
+
178
202
 
179
203
  # # new
180
204
  # def self.get_ricdisk_file_obsolete(path)
@@ -198,13 +222,13 @@ module Storazzo
198
222
  end
199
223
 
200
224
  # maybe move to a RiccFile class? Maybe even INHERIT from FILE?
201
- def self.obsolescence_seconds file_path
225
+ def obsolescence_seconds(file_path)
202
226
  creation_time = File.stat(file_path).ctime
203
227
  deb("[obsolescence_seconds] File #{file_path}: #{creation_time} - #{(Time.now - creation_time)} seconds ago")
204
228
  (Time.now - creation_time).to_i
205
229
  end
206
230
  # maybe move to a RiccFile class? Maybe even INHERIT from FILE?
207
- def self.obsolescence_days(file_path)
231
+ def obsolescence_days(file_path)
208
232
  return obsolescence_seconds(file_path) / 86400
209
233
  end
210
234
 
@@ -234,11 +258,16 @@ module Storazzo
234
258
  # puts(yellow disk_info.to_yaml)
235
259
  # end
236
260
  if disk_info.is_a?(RicDisk)
237
- deb("disk_info.class: #{disk_info.class}")
238
- if File.empty?(disk_info.absolute_path) and (disk_info.wr)
261
+ puts yellow("DEB disk_info.class: #{disk_info.class}")
262
+ if File.empty?(disk_info.absolute_path) # and (disk_info.wr)
239
263
  puts(green("yay, we can now write the file '#{disk_info.absolute_path}' (which is R/W, I just checked!) with proper YAML content.."))
240
- ret = File.write(disk_info.absolute_path, disk_info.to_yaml)
241
- puts("Written file! ret=#{ret}")
264
+ if disk_info.wr
265
+ ret = File.write(disk_info.absolute_path, disk_info.obj_to_yaml)
266
+ puts green("Written file! ret=#{ret}")
267
+ else
268
+ raise "TODO_IMPLEMENT: write in proper place in config dir"
269
+ puts red("TODO implement me")
270
+ end
242
271
  else
243
272
  puts(red("Something not right here: either file is NOT empty or disk is NOT writeable.. #{File.empty?(disk_info.absolute_path)}"))
244
273
  puts("File size: #{File.size(disk_info.absolute_path)}")
@@ -246,30 +275,63 @@ module Storazzo
246
275
  puts(disk_info.obj_to_hash)
247
276
  puts(disk_info.obj_to_yaml)
248
277
  end
249
- else
278
+ else # not a RicDisk..
250
279
  puts "[write_config_yaml_to_disk] No DiskInfo found across #{ConfigFiles}. I leave this function empty-handed."
251
280
  end
252
- if File.exists?( "#{subdir}/.ricdisk") and ! File.empty?( "#{subdir}/.ricdisk")
253
- puts("Config File found with old-style name: '#{subdir}/.ricdisk' ! Please move it to .ricdisk.yaml!")
254
- puts(white `cat "#{subdir}/.ricdisk"`)
255
- else
256
- puts "WRITING NOW. disk_info.obj_to_yaml .. to #{compute_ricdisk_file}"
257
- File.open(ricdisk_file_full, 'w').write(disk_info.obj_to_yaml)
258
- end
281
+
282
+ #disk_info.absolute_path
283
+ #if File.exists?( "#{subdir}/.ricdisk") and ! File.empty?( "#{subdir}/.ricdisk")
284
+ # if File.exists?(disk_info.absolute_path) and ! File.empty?(disk_info.absolute_path)
285
+ # puts("Config File found with old-style name: '#{subdir}/.ricdisk' ! Please move it to .ricdisk.yaml!")
286
+ # puts(white `cat "#{disk_info.absolute_path}"`)
287
+ # else
288
+ # puts "WRITING NOW. [I BELIEVE THIS IS DUPE CODE - see a few lines above!] disk_info.obj_to_yaml .. to #{compute_ricdisk_file}"
289
+ # File.open(ricdisk_file_full, 'w').write(disk_info.obj_to_yaml)
290
+ # end
259
291
  end
260
292
 
261
293
  # TODO obsolete this as i should NOT be calling it from clas, but from method.
262
294
  def self.ok_dir?(subdir)
263
295
  File.exists?( "#{subdir}/.ricdisk") or File.exists?( "#{subdir}/.ricdisk.yaml")
264
296
  end
297
+
298
+ def compute_stats_files(opts={})
299
+ puts azure("[compute_stats_files] TODO implement natively. Now I'm being lazy")
300
+ #Storazzo::RicDisk.calculate_stats_files(path, opts)
301
+ opts_upload_to_gcs = opts.fetch :upload_to_gcs, true
302
+ dir = path
303
+
304
+ full_file_path = "#{dir}/#{$stats_file}"
305
+ #return "This refactor is for another day"
306
+
307
+ puts("compute_stats_files(#{white dir}): #{white full_file_path}")
308
+ puts "TEST1 DIR EXISTS: #{dir} -> #{File.directory? dir}"
309
+ Dir.chdir(dir)
310
+ if File.exists?(full_file_path) and ($opts[:force] == false)
311
+ puts "File '#{$stats_file}' exists already." # - now should see if its too old, like more than 1 week old"
312
+ # TODO check for file time...
313
+ print "Lines found: #{yellow `wc -l "#{full_file_path}" `.chomp }. File obsolescence (days): #{yellow obsolescence_days(full_file_path)}."
314
+ if obsolescence_days(full_file_path) > 7
315
+ puts("*** ACHTUNG *** FIle is pretty old. You might consider rotating: #{yellow "mv #{full_file_path} #{full_file_path}_old"}. Or invoke with --force")
316
+ end
317
+ upload_to_gcs(full_file_path) if opts_upload_to_gcs
318
+ else
319
+ puts "Crunching data stats from '#{dir}' into '#{$stats_file}' ... please bear with me.. [maybe file didnt exist, maybe $opts[:force] is true]"
320
+ command = "find . -print0 | xargs -0 stats-with-md5 --no-color | tee '#{full_file_path}'"
321
+ puts("[#{`pwd`.chomp}] Executing: #{azure command}")
322
+ ret = backquote_execute(command)
323
+ puts "Done. #{ret.split("\n").count} files processed."
324
+ end
325
+ end
265
326
 
266
327
 
267
328
 
268
329
  # Create RDS file.
269
330
  def self.calculate_stats_files(dir, opts={})
270
- opts_upload_to_gcs = opts.fetch :upload_to_gcs, true
331
+ opts_upload_to_gcs = opts.fetch :upload_to_gcs, true
332
+
271
333
  full_file_path = "#{dir}/#{$stats_file}"
272
- return "This refacgtor is for another day"
334
+ return "This refactor is for another day"
273
335
 
274
336
  puts("calculate_stats_files(#{white dir}): #{white full_file_path}")
275
337
  puts "TEST1 DIR EXISTS: #{dir} -> #{File.directory? dir}"
@@ -284,7 +346,7 @@ module Storazzo
284
346
  upload_to_gcs(full_file_path) if opts_upload_to_gcs
285
347
  else
286
348
  puts "Crunching data stats from '#{dir}' into '#{$stats_file}' ... please bear with me.. [maybe file didnt exist, maybe $opts[:force] is true]"
287
- command = "find . -print0 | xargs -0 stats-with-md5.rb --no-color | tee '#{full_file_path}'"
349
+ command = "find . -print0 | xargs -0 stats-with-md5 --no-color | tee '#{full_file_path}'"
288
350
  puts("[#{`pwd`.chomp}] Executing: #{azure command}")
289
351
  ret = backquote_execute command
290
352
  puts "Done. #{ret.split("\n").count} files processed."
@@ -394,25 +456,27 @@ end #/Module
394
456
 
395
457
 
396
458
 
397
- # def self.backquote_execute(cmd)
398
- # # executed a command wrapped by dryrun though
399
- # return "DRYRUN backquote_execute(#{cmd})" if $opts[:dryrun]
400
- # `#{cmd}`
401
- # end
459
+ def backquote_execute(cmd, opts={})
460
+ dryrun = opts.fetch :dryrun, false
461
+ # executed a command wrapped by dryrun though
462
+ return "DRYRUN backquote_execute(#{cmd})" if dryrun # $opts[:dryrun]
463
+ `#{cmd}`
464
+ end
402
465
 
403
- # def self.upload_to_gcs(file, opts={})
404
- # deb("upload_to_gcs(#{file}). TODO(ricc) after breafast upload to GCS : #{file}")
405
- # mount_name = file.split('/')[-2]
406
- # filename = "#{mount_name}-#{File.basename file}"
407
- # hostname = Socket.gethostname[/^[^.]+/]
408
- # command = "gsutil cp '#{file}' gs://#{$gcs_bucket}/backup/ricdisk-magic/#{ hostname }-#{filename}"
409
- # deb("Command: #{command}")
410
- # ret = backquote_execute(command)
411
- # # if $opts[:debug] do
412
- # # puts "+ Current list of files:"
413
- # # ret = backquote_execute("gsutil ls -al gs://#{$gcs_bucket}/backup/ricdisk-magic/")
414
- # # puts ret
415
- # # end
416
- # ret
417
- # end
466
+ def upload_to_gcs(file, opts={})
467
+ deb("upload_to_gcs(#{file}). TODO(ricc) after breafast upload to GCS : #{file}")
468
+ mount_name = file.split('/')[-2]
469
+ filename = "#{mount_name}-#{File.basename file}"
470
+ hostname = Socket.gethostname[/^[^.]+/]
471
+ command = "gsutil cp '#{file}' gs://#{$gcs_bucket}/backup/ricdisk-magic/#{ hostname }-#{filename}"
472
+ deb("Command: #{command}")
473
+ puts azure("GCS upload disabled until I know if it works :) command='#{command}'")
474
+ ret = backquote_execute(command, :dryrun => true)
475
+ # if $opts[:debug] do
476
+ # puts "+ Current list of files:"
477
+ # ret = backquote_execute("gsutil ls -al gs://#{$gcs_bucket}/backup/ricdisk-magic/")
478
+ # puts ret
479
+ # end
480
+ ret
481
+ end
418
482
 
@@ -41,7 +41,7 @@ public
41
41
  verbose = opts.fetch :verbose, false
42
42
 
43
43
  if already_loaded? # and not self.config.nil?
44
- puts "[#{self.class}] load: already loaded"
44
+ puts "[#{self.class}] VERBOSE load: already loaded" if verbose
45
45
  return self.config
46
46
  end
47
47
 
@@ -116,6 +116,18 @@ public
116
116
  "POLY_#{self.class}_(ver=#{config_ver}, file=#{config_file}), #{white(size)} bytes" # - config_default_folder=#{self.config_default_folder}"
117
117
  end
118
118
 
119
+ def to_verbose_s
120
+ h = {}
121
+ h[:description] = "This is a Verbose Hash describing a RicDiskConfig or its child RicDiskSampleConfig to understand why it keeps failing.."
122
+ h[:to_s] = self.to_s
123
+ h[:class] = self.class
124
+ h[:file] = __FILE__
125
+ h[:id] = self.object_id
126
+ h[:get_bucket_paths] = self.get_bucket_paths()
127
+ h[:get_local_folders] = self.get_local_folders()
128
+ return h
129
+ end
130
+
119
131
  def get_config(opts={})
120
132
  return load(opts) if @config.nil?
121
133
  @config
@@ -160,27 +172,26 @@ public
160
172
  # RicDisk.write_config_yaml_to_disk(dir)
161
173
  # RicDisk.calculate_stats_files(dir) # dir is inutile
162
174
  # } # TODO refactor in option sbrodola_afterwards=true. :)
163
- # else
164
- raise "Wrong input: #{files_list} " unless files_list.is_a?(Array)
165
-
166
- puts "iterate_through_file_list_for_disks(): I consider files_list as a list of directories to parse :)" if verbose
167
-
168
- #dirs = RicDisk.find_active_dirs()
169
- files_list.each do |dir|
170
- dir = File.expand_path(dir)
171
- if File.directory?(dir)
172
- #if dirs.include?(dir)
173
- puts "iterate_through_file_list_for_disks() Legit dir: #{green dir}" if verbose
174
- rd = RicDisk.new(dir)
175
- rd.write_config_yaml_to_disk(dir)
176
- #RicDisk.write_config_yaml_to_disk(dir)
177
- #RicDisk.calculate_stats_files (CLASS) => will become OBJECT compute_stats_files
178
- compute_stats_files(dir) # dir is inutile # TODO
179
- else
180
- deb red("Doesnt seem a legit dir to me: #{dir}")
181
- # deb "Figghiu ri buttana: doesnt exist #{red dir}"
182
- end
175
+ # else
176
+ raise "Wrong input, I need an array here: #{files_list} " unless files_list.is_a?(Array)
177
+ puts "iterate_through_file_list_for_disks(): I consider files_list as a list of directories to parse :)" if verbose
178
+
179
+ #dirs = RicDisk.find_active_dirs()
180
+ files_list.each do |dir|
181
+ dir = File.expand_path(dir)
182
+ if File.directory?(dir)
183
+ #if dirs.include?(dir)
184
+ puts "iterate_through_file_list_for_disks() Legit dir: #{green dir}" if verbose
185
+ rd = RicDisk.new(dir)
186
+ puts "RicDisk: #{rd}"
187
+ rd.write_config_yaml_to_disk(dir)
188
+ #RicDisk.write_config_yaml_to_disk(dir)
189
+ #RicDisk.calculate_stats_files (CLASS) => will become OBJECT compute_stats_files
190
+ rd.compute_stats_files() # dir is inutile # TODO
191
+ else
192
+ raise("Doesnt seem a dir to me, quitting: #{dir}")
183
193
  end
194
+ end
184
195
  #end
185
196
  end #/iterate_through_file_list_for_disks
186
197
 
@@ -21,7 +21,7 @@ module Storazzo
21
21
 
22
22
  public
23
23
  def load # _sample_version
24
- puts white("[RicDiskSampleConfig] Wheew 1! We're NOT destroying the world here. We're actually instancing a second Singleton which is a child of the mother, and this time doing things nicely and Rubily.")
24
+ deb("[RicDiskSampleConfig] Wheew 1! We're NOT destroying the world here. We're actually instancing a second Singleton which is a child of the mother, and this time doing things nicely and Rubily.")
25
25
  # super.load DefaultGemLocationForTests #super.load(DefaultGemLocationForTests, :verbose => true )
26
26
  super(DefaultGemLocationForTests, :verbose => false )
27
27
  end