Class: Freyr::Service

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/freyr/service.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(s) ⇒ Service

Returns a new instance of Service.



12
13
14
15
# File 'lib/freyr/service.rb', line 12

def initialize(s)
  @service_info = s
  @command = Command.new(self)
end

Instance Attribute Details

#commandObject (readonly)

Returns the value of attribute command.



10
11
12
# File 'lib/freyr/service.rb', line 10

def command
  @command
end

#service_infoObject (readonly)

Returns the value of attribute service_info.



10
11
12
# File 'lib/freyr/service.rb', line 10

def service_info
  @service_info
end

Class Method Details

.[](name) ⇒ Object



140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# File 'lib/freyr/service.rb', line 140

def [](name)
  group = ServiceGroup.new
  
  if ser = s.find {|sr| sr.matches?(name)}
    group << ser
  else
    s.each do |sr|
      if sr.is_group?(name)
        group << sr
      end
    end
  end
  
  group.empty? ? nil : group
end

.add_file(f) ⇒ Object



118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/freyr/service.rb', line 118

def add_file f
  s
  
  Freyr.logger.debug('adding file') {f}
  
  services = ServiceInfo.from_file(f).collect do |ser|
    raise 'Cannot have two things of the same name' if selectors.include?(ser.name)
    names |= [ser.name]
    @all_groups |= ser.groups
    Freyr.logger.debug('adding service') {ser.name.inspect}
    new(ser)
  end
  
  @all_services += services
end

.add_service_method(*methods) ⇒ Object



5
6
7
# File 'lib/freyr/service.rb', line 5

def add_service_method *methods
  def_delegators :@service_info, *methods
end

.alive?(name) ⇒ Boolean

Returns:

  • (Boolean)


134
135
136
137
138
# File 'lib/freyr/service.rb', line 134

def alive?(name)
  !!self[name].find do |ser|
    ser.alive?
  end
end

.groupsObject



110
111
112
# File 'lib/freyr/service.rb', line 110

def groups
  @all_groups ||= []
end

.namesObject



106
107
108
# File 'lib/freyr/service.rb', line 106

def names
  @all_names ||= []
end

.sObject



102
103
104
# File 'lib/freyr/service.rb', line 102

def s
  @all_services ||= []
end

.selectorsObject



114
115
116
# File 'lib/freyr/service.rb', line 114

def selectors
  names+groups
end

Instance Method Details

#alive?Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/freyr/service.rb', line 53

def alive?
  command.alive?
end

#describeObject



85
86
87
# File 'lib/freyr/service.rb', line 85

def describe
  %Q{#{name}(#{groups.join(',')}) - #{start_command}}
end

#envObject



21
22
23
# File 'lib/freyr/service.rb', line 21

def env
  service_info.env || {}
end

#error(*args, &blk) ⇒ Object



80
81
82
83
# File 'lib/freyr/service.rb', line 80

def error *args, &blk
  Freyr.logger.error(*args,&blk)
  Freyr.logger.debug("service info for service #{self}") {@service_info.inspect}
end

#inspectObject



96
97
98
# File 'lib/freyr/service.rb', line 96

def inspect
  %Q{#<Freyr::Service #{name} #{start_command.inspect}>}
end

#is_group?(name) ⇒ Boolean

Returns:

  • (Boolean)


49
50
51
# File 'lib/freyr/service.rb', line 49

def is_group?(name)
  groups.find {|g| g.to_s == name.to_s}
end

#logObject



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

def log
  @service_info.read_log || @service_info.log || File.join(command.file_dir,"#{name}.log")
end

#matches?(n) ⇒ Boolean

Returns:

  • (Boolean)


89
90
91
92
93
94
# File 'lib/freyr/service.rb', line 89

def matches?(n)
  n = n.to_s
  return true if name.to_s == n
  
  also.find {|a| a.to_s == n}
end

#ping!Object



57
58
59
60
61
62
63
# File 'lib/freyr/service.rb', line 57

def ping!
  if ping
    pinger = Pinger.new(self)
    pinger.ping
    pinger
  end
end

#read_logObject



65
66
67
# File 'lib/freyr/service.rb', line 65

def read_log
  @service_info.log || @service_info.read_log
end

#restart!Object



45
46
47
# File 'lib/freyr/service.rb', line 45

def restart!
  command.restart!
end

#start!Object



33
34
35
36
37
38
39
# File 'lib/freyr/service.rb', line 33

def start!
  if start_command
    command.run! unless alive?
  else
    error("no start_command")
  end
end

#start_commandObject



17
18
19
# File 'lib/freyr/service.rb', line 17

def start_command
  @service_info.start
end

#stop!Object



41
42
43
# File 'lib/freyr/service.rb', line 41

def stop!
  command.kill! if start_command
end

#tail!(size = 600, follow = true) ⇒ Object



69
70
71
72
73
74
75
76
77
78
# File 'lib/freyr/service.rb', line 69

def tail!(size = 600, follow = true)
  f = follow ? 'f' : ''
  if read_log
    cmd = "tail -#{size}#{f} #{File.join(dir||'/',read_log)}"
    Freyr.logger.debug("tailing cmd") {cmd.inspect}
    exec(cmd)
  else
    error("no logfile found")
  end
end

#write_log?Boolean

Returns:

  • (Boolean)


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

def write_log?
  @service_info.log && !@service_info.read_log
end