Module: Inprovise::Infrastructure

Defined in:
lib/inprovise/infra.rb

Defined Under Namespace

Classes: Group, Node, Target

Class Method Summary collapse

Class Method Details

.deregister(tgt) ⇒ Object



47
48
49
50
51
52
# File 'lib/inprovise/infra.rb', line 47

def deregister(tgt)
  targets.synchronize do
    raise ArgumentError, "Invalid infrastructure target [#{tgt.to_s}]" unless targets.delete(Target === tgt ? tgt.name : tgt.to_s)
    targets.each_value {|t| t.remove_target(tgt) }
  end
end

.find(name) ⇒ Object



21
22
23
24
25
26
# File 'lib/inprovise/infra.rb', line 21

def find(name)
  return name if name.is_a?(Target)
  targets.synchronize do
    return targets[name]
  end
end

.init(path) ⇒ Object



62
63
64
# File 'lib/inprovise/infra.rb', line 62

def init(path)
  File.open(path, 'w') {|f| f << JSON.pretty_generate([]) }
end

.list(type = Target) ⇒ Object



34
35
36
37
38
# File 'lib/inprovise/infra.rb', line 34

def list(type=Target)
  targets.synchronize do
    targets.values.select {|t| type === t}
  end
end

.loadObject



66
67
68
69
70
# File 'lib/inprovise/infra.rb', line 66

def load
  targets.synchronize do
    JSON.load(IO.read(Inprovise.infra)) if File.readable?(Inprovise.infra)
  end
end

.namesObject



28
29
30
31
32
# File 'lib/inprovise/infra.rb', line 28

def names
  targets.synchronize do
    targets.keys.sort
  end
end

.register(tgt) ⇒ Object



40
41
42
43
44
45
# File 'lib/inprovise/infra.rb', line 40

def register(tgt)
  targets.synchronize do
    raise ArgumentError, "Existing [#{targets[tgt.name].to_s}] found" if targets.has_key?(tgt.name)
    targets[tgt.name] = tgt
  end
end

.saveObject



54
55
56
57
58
59
60
# File 'lib/inprovise/infra.rb', line 54

def save
  targets.synchronize do
    data = []
    targets.each_value {|t| t.is_a?(Node) ? data.insert(0,t) : data.push(t) }
    File.open(Inprovise.infra, 'w') {|f| f << JSON.pretty_generate(data) }
  end
end

.targetsObject



16
17
18
# File 'lib/inprovise/infra.rb', line 16

def targets
  @targets ||= Hash.new.extend(MonitorMixin)
end