Class: Process::Naf::MachineUpgrader

Inherits:
Application
  • Object
show all
Defined in:
app/models/process/naf/machine_upgrader.rb

Constant Summary collapse

PRESERVABLES =
[
 ::Naf::ApplicationType,
 ::Naf::Application,
 ::Naf::ApplicationRunGroupRestriction,
 ::Naf::ApplicationSchedule,
 ::Naf::ApplicationSchedulePrerequisite,
 ::Naf::AffinityClassification,
 ::Naf::Affinity,
 ::Naf::ApplicationScheduleAffinityTab,
 ::Naf::LoggerLevel,
 ::Naf::LoggerName,
 ::Naf::LoggerStyle,
 ::Naf::LoggerStyleName,
 ::Naf::Machine,
 ::Naf::MachineAffinitySlot,
 ::Naf::JanitorialAssignment
]
CLEAN_SYSTEM_MODELS =
[
 ::Naf::Machine,
 ::Naf::VERSION == '0.9.10' ? ::Naf::Job : ::Naf::HistoricalJob
]

Instance Method Summary collapse

Instance Method Details

#check_for_clean_systemObject



105
106
107
108
109
# File 'app/models/process/naf/machine_upgrader.rb', line 105

def check_for_clean_system
  CLEAN_SYSTEM_MODELS.each do |model|
    raise "the system is unclean" if model.count > 0
  end
end

#workObject



43
44
45
# File 'app/models/process/naf/machine_upgrader.rb', line 43

def work
  self.send("work_#{@upgrade_option}")
end

#work_dumpObject



47
48
49
50
51
52
53
54
55
# File 'app/models/process/naf/machine_upgrader.rb', line 47

def work_dump
  pickler = ::Logical::Naf::Pickler.new(::Naf::VERSION, PRESERVABLES)
  pickler.preserve
  if @pretty
    puts JSON.pretty_generate(pickler.pickle_jar)
  else
    puts JSON.generate(pickler.pickle_jar)
  end
end

#work_restoreObject



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'app/models/process/naf/machine_upgrader.rb', line 57

def work_restore
  begin
    pickle_jar = JSON.parse(STDIN.read)
  rescue StandardError => e
    logger.fatal "this doesn't look like a naf upgrade stream to me, it is not json parserable!"
    exit 1
  end

  unless pickle_jar.is_a?(Hash)
    logger.fatal "this doesn't look like a naf upgrade stream to me, it is of type: #{pickle_jar.class.name}"
    exit 1
  end

  pickle_jar_version = pickle_jar['version']
  if pickle_jar_version.blank?
    logger.fatal "this doesn't look like a naf upgrade stream to me, it has no version!"
    exit 1
  end

  preserves = pickle_jar['preserves']
  if preserves.nil?
    logger.fatal "this doesn't look like a naf upgrade stream to me, there are no preserves!"
    exit 1
  end

  unless preserves.is_a?(Hash)
    logger.fatal "this doesn't look like a naf upgrade stream to me, the preserves are type: #{preserves.class.name}"
    exit 1
  end

  check_for_clean_system unless @force

  preserved_at_text = pickle_jar['preserved_at']
  preserved_at = Time.parse(preserved_at_text) rescue "unknown"

  logger.info "restoring:"
  logger.info " preserved_at: #{preserved_at}"
  logger.info " version: #{pickle_jar_version}"
  logger.info " models: #{preserves.length}"

  unpickler = ::Logical::Naf::Unpickler.new(preserves, PRESERVABLES, pickle_jar_version)
  ::Naf::NafBase.transaction do
    unpickler.reconstitute
    raise ActiveRecord::Rollback if @no_updates
  end
  logger.info "restoration complete! thank you!"
end