knasan

Linux and more

Restrukturierung von Sysnapshot

Obwohl sysnapshot mein erstes Ruby-Projekt ist, empfand ich diesen Code schon nach einigen Tagen nicht mehr so toll wie am Tag der Veröffentlichung. Schnell hab ich nur noch BugFixes gemacht und an diesem Code nicht mehr viel geändert, geschweige neue Funktionen Implementiert.

Abhilfe schaffte hier nur eine Restrukturierung von sysnapshot die ich heute begonnen habe, genau genommen habe ich sysnapshot von Grund auf neu geschrieben. Neben der Funktion wie viele Backups Maximal auf der Festplatte sein dürfen (älteste Backup wir gelöscht) kam nun eine Funktion wie viel freier Speicher die Festplatte haben muss, damit ein Backup geschrieben wird.

Die Funktion cleaner löscht solange alte Backups bis die Festplatte wieder den gewählten Freien Speicher hat.

Ich denke auch über eine Funktion nach, die überprüft ob mehr als ein Backup möglich ist bzw. ob überhaupt ein Backup geschrieben werden kann.

Der derzeitige veröffentlichte Code hat nur eine Methode und besteht aus mehreren IF ELSE END Konstrukte, was nicht gerade schön ist. Im neuen Code kann ich zwar nicht komplett darauf verzichten, aber dort wo es mir möglich war setze ich nun HASHES.

Einige Tests habe ich heute mit ARRAY und HASHES gemacht um evtl. von den Linux Befehlen weg zu kommen, somit wäre es möglich sysnapshot nicht nur unter Linux zum laufen zu bekommen, Aber die Performance leitet darunter sehr, deswegen wird sich erst mal daran nichts ändern.

Und hier ein paar Codeschnippel

  # -- create cfg hash ---------------------------------------------------------------------
  cfg = {}

  # for simple notation
  destination = "#{config['mountpoint']}/#{config['destination'].gsub('/', '')}/#{hostname}"

  key = :destination
  cfg.key?(key) ? cfg[key] << key.to_s : cfg[key] = [destination]

  key = :source
  cfg.key?(key) ? cfg[key] << key.to_s : cfg[key] = [config['source']]

  .....

  # -- check_device ------------------------------------------------------------------------
  check_device(cfg)

.....

 def cleaner(cfg, ifdevice, tobefree)
  begin
    avail_space = `/bin/df -B 1048576 | /bin/grep #{ifdevice} | /usr/bin/awk '{print $4}'`.chomp.to_i
    avail = avail_space / 1024
    Dir.chdir(cfg[:destination].to_s)
    puts "Cleaning ..."
    while avail < tobefree do
      path = Dir["????-??-??_*"].sort.reverse.first
      puts "delete backup: #{path}"
      system("/bin/rm -rf #{path}")
      avail_space = `/bin/df -B 1048576 | /bin/grep #{ifdevice} | /usr/bin/awk '{print $4}'`.chomp.to_i
      avail = avail_space / 1024
      puts "Device #{ifdevice} : available hard disk space #{avail} GB"
    end
  rescue
    puts "Error: Cleaning Fail"
    exit
  end

Advertisements

Einzelbeitrag-Navigation

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: