summaryrefslogtreecommitdiff
path: root/bin/custodian-enqueue
blob: 602b52a63275def5d96de5b7e93c8cd02d8ad5d6 (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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#!/usr/bin/ruby -rubygems
#
# Usage information at the end of the script.
#

require 'getoptlong'
require 'custodian/parser'
require 'custodian/queue'
require 'custodian/settings'


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

  begin
    opts = GetoptLong.new(
      ['--dump', '-d', GetoptLong::NO_ARGUMENT],
      ['--test', GetoptLong::NO_ARGUMENT],
      ['--file', '-f', GetoptLong::REQUIRED_ARGUMENT],
      ['--help', '-h', GetoptLong::NO_ARGUMENT],
      ['--manual', '-m', GetoptLong::NO_ARGUMENT]
    )
    opts.each do |opt, arg|
      case opt
      when '--dump' then
        ENV['DUMP'] = '1'
      when '--test' then
        ENV['TEST'] = '1'
      when '--file' then
        ENV['FILE'] = arg
      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

  #
  # Connected to the queue.
  #
  queue = Custodian::RedisQueueType.new
  unless queue
    puts "Failed to connect to the #{settings.queue_type} queue"
    exit 1
  end

  #
  # Create the parser object.
  #
  mon = Custodian::Parser.new

  #
  # Parse our configuration file.  If there are errors then we'll
  # exit this script.
  #
  begin
    mon.parse_file(ENV['FILE'])
  rescue => e
    puts "Failure in parsing the configuration file : #{ENV['FILE']}"
    puts e.to_s
    exit(1)
  end

  #
  #  Did we fail to add any tests to the queue?
  #
  failed = false

  mon.jobs.each do |test|
    if ENV['TEST']
      # nop
    elsif ENV['DUMP']
      puts test
    else
      failed = true unless queue.add(test.to_s)
    end
  end

  if failed
    puts 'We failed to add at least one job to the queue.'
    exit(1)
  end
end


__END__
#
# NAME
#  custodian-enqueue - Parse tests from a file and enqueue them.
#
# SYNOPSIS
#  custodian-enqueue  [ -h | --help ]
#                     [ -m | --manual]
#                     [ -q | --queue NAME]
#                     [ -f | --file FILE]
#                     [ -d | --dump ]
#                     [    | --test ]
#
# OPTIONS
#
#  -h, --help          Show a help message, and exit.
#
#  -m, --manual        Show this manual, and exit.
#
#  -d, --dump          Dump the parsed tests to the console.
#                      (They are not inserted to the queue.)
#
#  --test              Test the parsing of the given file, alert on errors.
#
#  -f, --file FILE     Parse the given configuration file.
#
#
#
# ABOUT
#
# This tool reads a single configuration file and parses it into a
# series of network & protocol tests.   These tests are then stored in
# a queue from which workers can retrieve and execute them.
#
# The dequeing process may occur up numerous other hosts.
#
# CONFIGURATION FILE
#
# The configuration file is 99% compatible with that used in the tool
# custodian replaces.
#
#
# AUTHOR
#
#  Steve Kemp  <steve@bytemark.co.uk>
#