xmlblog (owner)

Revisions

gist: 123097 Download_button fork
public
Public Clone URL: git://gist.github.com/123097.git
report.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# Report has event loop, knows type of input log it's looking for
class Report
  cattr_reader :header, :combined_log
  attr_reader :input_log, :output_log
  
  class << self
    def publish(server, out)
      new(server).process(out)
    end
  end
  
  def initialize(server)
    @server = server
    @input_log = nil
    @output_log = nil
  end
  
  def process(combined)
    with_open_file(input_log, 'r') do |in|
      with_open_file(output_log, 'w') do |out|
        in.readlines do |line|
          combined << out << grep_my_ass_off(line)
        end
      end
    end
  end
  
  private
    
  def with_open_file(path, mode)
    if FILE.exists?(path)
      open(path, mode) do |file|
        yield file
      end if block_given?
    else
      STDERR.puts("oh shit")
      ""
    end
  end
end
 
 
report_runner.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# Entry point
class ReportRunner
  Reports = [SubmitTerminationReport]
    
  class << self
    def run(*servers)
        Reports.each do |report|
          open(report.combined_log, 'w') do |out|
            out.puts report.header
            servers.each do |server|
              report.publish(server, out)
            end
          end
        end
      end
    end
    
    def run_all
      run Server.new("10.0.0.1"), Server.new("10.0.0.2")
    end
  end
end
 
if __FILE__ == $0
  if ARGV.empty?
    ReportRunner.run_all
  else
    ReportRunner.run *ARGV.collect {|ip| Server.new(ip)}
  end
end
server.rb
1
2
3
4
5
6
7
8
# you might not need this class anymore....
class Server
  attr_reader :host
    
  def initialize(host)
    @host = host
  end
end
termination_report.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
class TerminationReport < Report
  @@header = "foo|bar|baz"
  @@combined_log = "termination_combined.log"
  
  def initialize(server)
    super(server)
    @input_log = "server.log"
    @output_log = "termination.log"
    @regexp = /\b/
  end
end