Class: SnapEbs

Inherits:
Object
  • Object
show all
Includes:
Options, Snapshotter
Defined in:
lib/snap_ebs.rb,
lib/snap_ebs/options.rb

Defined Under Namespace

Modules: Options, Snapshotter Classes: Plugin

Constant Summary collapse

@@logger =
nil

Constants included from Snapshotter

Snapshotter::AWS_INSTANCE_ID_URL

Instance Attribute Summary

Attributes included from Snapshotter

#compute

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Snapshotter

#take_snapshots

Methods included from Options

#option_parser

Class Method Details

.logger(logfile) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
# File 'lib/snap_ebs.rb', line 13

def self.logger logfile
  unless @@logger
    @@logger = Logger.new(logfile || STDOUT)
    @@logger.level = Logger::DEBUG
    @@logger.formatter = proc do |severity, datetime, progname, msg|
      "[#{severity}] #{datetime.strftime("%Y-%m-%d %H:%M:%S")} #{msg}\n"
    end
  end

  @@logger
end

.logger=(logger_) ⇒ Object



25
26
27
# File 'lib/snap_ebs.rb', line 25

def self.logger= logger_
  @@logger = logger_
end

Instance Method Details

#executeObject

Entry point for the snap-ebs binary



65
66
67
68
69
# File 'lib/snap_ebs.rb', line 65

def execute
  option_parser.parse!
  logger.debug "Debug logging enabled"
  run
end

#loggerObject

Get the global logger instance ‘logger.debug ’reticulating splines’‘



73
74
75
76
# File 'lib/snap_ebs.rb', line 73

def logger
  # HACK -- the logfile argument only gets used on the first invocation
  SnapEbs.logger options.logfile
end

#optionsObject

Get the root options object, and instance of OpenStruct



55
56
57
# File 'lib/snap_ebs/options.rb', line 55

def options
  @options ||= OpenStruct.new
end

#pluginsObject



29
30
31
# File 'lib/snap_ebs.rb', line 29

def plugins
  @plugins ||= registered_plugins.collect { |klass| klass.new }
end

#registered_pluginsObject



33
34
35
# File 'lib/snap_ebs.rb', line 33

def registered_plugins
  SnapEbs::Plugin.registered_plugins
end

#runObject

Executes plugin before hooks, takes the snapshot, then runs the after hooks. Plugin hooks are called within rescue blocks to isolate errors from affecting other plugins or the snapshot plugins. Note that non- standard exceptions (i.e. out of memory or keyboard interrupt) will still cause a execution to abort.



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/snap_ebs.rb', line 42

def run
  plugins.each do |plugin|
    begin
      plugin.before if plugin.options.enable
    rescue => e
      logger.error "Encountered error while running the #{plugin.name} plugin's before hook"
      logger.error e
    end
  end

  take_snapshots

  plugins.each do |plugin|
    begin
      plugin.after if plugin.options.enable
    rescue => e
      logger.error "Encountered error while running the #{plugin.name} plugin's after hook"
      logger.error e
    end
  end
end