summaryrefslogtreecommitdiff
path: root/bin/custodian-dequeue
blob: 8896b14a48ff263ffd852cd82de38d104ac6f390 (plain)
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/usr/bin/ruby -rubygems
#
# Usage information at the end of the script.
#

require 'getoptlong'
require 'custodian/settings'
require 'custodian/queue'
require 'custodian/worker'


if RUBY_VERSION =~ /1.9/
  Encoding.default_external = Encoding::UTF_8
  Encoding.default_internal = Encoding::UTF_8
end

#
#  Entry-point to our code.
#
if __FILE__ == $PROGRAM_NAME

  help    = false
  manual  = false

  #
  #  The settings object contains a lot of configuration-data.
  #
  settings = Custodian::Settings.instance

  begin
    opts = GetoptLong.new(
      ['--help',    '-h', GetoptLong::NO_ARGUMENT],
      ['--manual',  '-m', GetoptLong::NO_ARGUMENT],
      ['--fail',    '-f', GetoptLong::NO_ARGUMENT],
      ['--single',  '-s', GetoptLong::NO_ARGUMENT],
      ['--verbose', '-v', GetoptLong::NO_ARGUMENT]
                          )
    opts.each do |opt, _arg|
      case opt
      when '--verbose' then
        ENV['VERBOSE'] = '1'
      when '--single' then
        ENV['SINGLE'] = '1'
      when '--fail' then
        ENV['FAIL'] = '1'
      when '--help' then
        help = true
      when '--manual' then
        manual = true
      end
    end
  rescue StandardError => ex
    puts "Option parsing failed: #{ex}"
    exit
  end

  #
  # Show the help information.
  #
  if manual || help
    DATA.read.split("\n").each do |line|
      puts Regexp.last_match(1).dup if line =~ /^# ?(.*)/
    end
    exit 0
  end

  #
  #  Create the worker, passing it the settings object so it can
  # sort out its own logfile, etc.
  #
  worker = Custodian::Worker.new(settings)

  #
  #  Single step?
  #
  if  ENV['SINGLE']
    worker.process_single_job
    exit(0)
  end

  #
  #  Run until we see a failure?
  #
  if  ENV['FAIL']
    worker.process_until_fail
    exit(0)
  end

  #
  #  Otherwise loop indefinitely
  #
  worker.run!

end


__END__
#
# NAME
#  custodian-dequeue - Execute network tests from the central queue.
#
# SYNOPSIS
#  custodian-dequeue  [ -h | --help ]
#                     [ -m | --manual]
#                     [ -f | --fail ]
#                     [ -s | --single ]
#                     [ -v | --verbose ]
#
# OPTIONS
#
#  -h, --help          Show a help message, and exit.
#
#  -m, --manual        Show this manual, and exit.
#
#  -s, --single        Run a single test and exit.
#
#  -f, --fail          Stop running once a single test fails.
#
#  -v, --verbose       Be noisy.
#
#
# ABOUT
#
# This tool is designed to pull network/protocol-tests from the central queue
# and execute them one by one.
#
# The results of the testing will be sent to a notifier, where they can later
# be acted upon.
#
#
# AUTHOR
#
#  Steve Kemp  <steve@bytemark.co.uk>
#