T
Tony De
Hi all,
I'm trying my hand at scripting cgi in ruby. At the same time I'm
looking at Rails. So far I love ruby. Still reserving comments on
Rails. I have a question though. When coding a cgi script, is it
possible to have methods as I would say in a n my_app.rb or rails app?
Below is a script I'm working on to provide a web interface to our
syslog servers logs for our tech support dept. I would like to DRY this
up a bit. I'm repeating entirely too much code. I would welcome not
only a response to my question, but any other suggestions/criticism to
aid me in my learning process. Thank you very much.
tonyd
#!/usr/local/bin/ruby -w
#
# Filename: syssearch.cgi
#
# Description:
# Open log(s) file and do our searching before we begin to send
# data back to the browser. This way we don't cause the browser to time
out
# (in theory...)
#
# Inputs: none
require 'cgi'
cgi = CGI.new
# Our search params passed
search_string = cgi['searchit']
slogtype = cgi['logtype']
smethod = cgi['method']
# Do we have something to search on?
if search_string.empty?
puts "Content-type: text/plain\r\n\r\n<HTML>\n<HEAD>\n<TITLE>CommSpeed
Log Search</TITLE>\n</HEAD>\n<BODY>\n"
puts "<h1>Please enter a search criteria</h1>"
puts "</BODY>\n</HTML>\n"
exit
end
# A hash of possible logs
logs = {'smtp' => 'smtp', 'mail' => 'maillog', 'mx' => 'mx', 'spam' =>
'spam', 'Dial Up' => 'radius', 'DHCP' => 'dhcp' }
if smethod == "CAT"
# Array to hold our search result matches
results = Array.new
# Open file and look for our search string
File.open("/var/log/"+logs[slogtype],
'r').grep(/#{search_string}/).each do |line|
results.push(line) # append it to our results array
end # file is automatically closed
if results.empty?
# No matches found
puts "Content-type:
text/plain\r\n\r\n<HTML>\n<HEAD>\n<TITLE>CommSpeed Log
Search</TITLE>\n</HEAD>\n<BODY>\n"
puts "<h1>No DHCP Log Results Found!</h1>"
puts "</BODY>\n</HTML>\n"
exit
else
# Now send results back to browser
puts "Content-type:
text/plain\r\n\r\n<HTML>\n<HEAD>\n<TITLE>CommSpeed Log
Search</TITLE>\n</HEAD>\n<BODY>\n"
puts "<h1>DHCP Log Results...</h1>"
# Print the results
results.each do |line|
puts line+"<br>"
end
# Close HTML
puts "</BODY>\n</HTML>\n"
exit
end
end
if smethod == "TAIL"
#TODO
#Need to figure out how to tail a file with our search scope in place
and feed it to the browser window.
end
I'm trying my hand at scripting cgi in ruby. At the same time I'm
looking at Rails. So far I love ruby. Still reserving comments on
Rails. I have a question though. When coding a cgi script, is it
possible to have methods as I would say in a n my_app.rb or rails app?
Below is a script I'm working on to provide a web interface to our
syslog servers logs for our tech support dept. I would like to DRY this
up a bit. I'm repeating entirely too much code. I would welcome not
only a response to my question, but any other suggestions/criticism to
aid me in my learning process. Thank you very much.
tonyd
#!/usr/local/bin/ruby -w
#
# Filename: syssearch.cgi
#
# Description:
# Open log(s) file and do our searching before we begin to send
# data back to the browser. This way we don't cause the browser to time
out
# (in theory...)
#
# Inputs: none
require 'cgi'
cgi = CGI.new
# Our search params passed
search_string = cgi['searchit']
slogtype = cgi['logtype']
smethod = cgi['method']
# Do we have something to search on?
if search_string.empty?
puts "Content-type: text/plain\r\n\r\n<HTML>\n<HEAD>\n<TITLE>CommSpeed
Log Search</TITLE>\n</HEAD>\n<BODY>\n"
puts "<h1>Please enter a search criteria</h1>"
puts "</BODY>\n</HTML>\n"
exit
end
# A hash of possible logs
logs = {'smtp' => 'smtp', 'mail' => 'maillog', 'mx' => 'mx', 'spam' =>
'spam', 'Dial Up' => 'radius', 'DHCP' => 'dhcp' }
if smethod == "CAT"
# Array to hold our search result matches
results = Array.new
# Open file and look for our search string
File.open("/var/log/"+logs[slogtype],
'r').grep(/#{search_string}/).each do |line|
results.push(line) # append it to our results array
end # file is automatically closed
if results.empty?
# No matches found
puts "Content-type:
text/plain\r\n\r\n<HTML>\n<HEAD>\n<TITLE>CommSpeed Log
Search</TITLE>\n</HEAD>\n<BODY>\n"
puts "<h1>No DHCP Log Results Found!</h1>"
puts "</BODY>\n</HTML>\n"
exit
else
# Now send results back to browser
puts "Content-type:
text/plain\r\n\r\n<HTML>\n<HEAD>\n<TITLE>CommSpeed Log
Search</TITLE>\n</HEAD>\n<BODY>\n"
puts "<h1>DHCP Log Results...</h1>"
# Print the results
results.each do |line|
puts line+"<br>"
end
# Close HTML
puts "</BODY>\n</HTML>\n"
exit
end
end
if smethod == "TAIL"
#TODO
#Need to figure out how to tail a file with our search scope in place
and feed it to the browser window.
end