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 out search scope in place
and feed it to the browser window.
end
-- 
Posted via http://www.ruby-forum.com/.