summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Kemp <steve@steve.org.uk>2012-11-13 20:35:07 +0000
committerSteve Kemp <steve@steve.org.uk>2012-11-13 20:35:07 +0000
commit21967ea467b4487606ad4e35a4bbc71c0d73792a (patch)
treec98c4fb79ddbad79f39871f9f05172f83e546b93
parent7d4b203b5af0b5458c725678844be983f562e3b0 (diff)
HTTP-fetching of macros works.
-rwxr-xr-xbin/custodian-enqueue68
1 files changed, 66 insertions, 2 deletions
diff --git a/bin/custodian-enqueue b/bin/custodian-enqueue
index a462b0a..6e5627a 100755
--- a/bin/custodian-enqueue
+++ b/bin/custodian-enqueue
@@ -11,6 +11,9 @@
require 'beanstalk-client'
require 'getoptlong'
require 'json'
+require 'net/http'
+require 'net/https'
+require 'uri'
@@ -72,6 +75,61 @@ class MonitorConfig
+
+ #
+ # Retrieve a HTTP page from the web - this is used for macro-expansion
+ #
+ # NOTE: This came from sentinel.
+ #
+ def getURL (uri_str)
+ begin
+ uri_str = 'http://' + uri_str unless uri_str.match(/^http/)
+ url = URI.parse(uri_str)
+ http = Net::HTTP.new(url.host, url.port)
+ http.open_timeout = 3
+ http.read_timeout = 3
+
+ if (url.scheme == "https")
+ http.use_ssl = true
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
+ end
+
+ response = nil
+
+ if nil == url.query
+ response = http.start { http.get(url.path) }
+ else
+ response = http.start { http.get("#{url.path}?#{url.query}") }
+ end
+
+
+ if ( response.code.to_i != 200 )
+ puts "Status code of #{uri_str} was #{response.code}"
+ puts "ABORTING"
+ exit( 0 )
+ end
+
+ case response
+ when Net::HTTPRedirection
+ then
+ newURL = response['location'].match(/^http/)?
+ response['Location']:uri_str+response['Location']
+ return( getURL(newURL) )
+ else
+ return response.body
+ end
+
+ rescue Errno::EHOSTUNREACH => ex
+ raise ex, "no route to host"
+ rescue Timeout::Error => ex
+ raise ex, "timeout"
+ rescue Errno::ECONNREFUSED => ex
+ raise ex, "connection refused"
+ end
+ end
+
+
+
#
# Define a macro, from the configuration file.
#
@@ -93,8 +151,12 @@ class MonitorConfig
#
# HTTP-fetch
#
- val.push( "steve")
- val.push("kemp")
+ uri = $1.dup.chomp(".")
+
+ text = getURL(uri)
+ text.split( /[\r\n]/ ).each do |line|
+ val.push( line ) if ( line.length() > 0)
+ end
elsif ( line =~ /\s(is|are)\s+(.*)\.+$/ )
@@ -408,3 +470,5 @@ if __FILE__ == $0 then
mon = MonitorConfig.new( ENV['FILE'] )
mon.parse_file();
end
+
+