Skip to content

Instantly share code, notes, and snippets.

@knowuh
Created December 6, 2010 21:37
Show Gist options
  • Save knowuh/731003 to your computer and use it in GitHub Desktop.
Save knowuh/731003 to your computer and use it in GitHub Desktop.
sample of how to use google-spreadsheet-ruby
##############################################
## File sheet_reporter.rb
##############################################
require 'rubygems'
# gem install highline
require 'highline/import'
# gem install google-spreadsheet-ruby
require 'google_spreadsheet'
class SheetReporter
attr_accessor :email,
:password,
:session
def initialize
self.email = ask("Google account email: ") { |q| q.default = "[email protected]" }
self.password = ask("Google account password: ") { |q| q.default = "password"; q.echo = "*"}
self.session = GoogleSpreadsheet.login(self.email,self.password)
end
def sheet=(name)
if defined? name
@sheet = self.session.spreadsheets.find { |s| s.title == name }
end
return @sheet
end
def sheet
return @sheet
end
def page=(name)
if defined? name
@page = self.sheet.worksheets.find { |w| w.title == name }
end
return @page
end
def page
return @page
end
def write_data(data,options = {})
if options[:sheet]
self.sheet = options[:sheet]
end
if options[:page]
self.page = options[:page]
end
row_offset = options[:row_offset] || 0
column_offset = options[:column_offset] || 0
data.each_with_index do |values,i|
values.each_with_index { |v,j| self.page[i + row_offset + 1, j + column_offset + 1] = v }
end
self.page.save
end
# like a ruby excel macro:
# pass in a block to evalutate input_data, and send back output_data
def update_rows(input_column,output_columns,start_row = 1)
first = start_row
last = self.page.num_rows
first.upto(last) do |row|
input_data = self.page[row,input_column]
output_data = output_columns.map { |c| self.page[row,c] }
yield input_data, output_data
# write the data back out again
output_data.each_with_index { |c,i| self.page[row,output_columns[i]] = c }
end
self.page.save
end
end
##############################################
## File: web_reporter.rb
##############################################
require 'net/http'
require 'benchmark'
# require 'sheet_reporter'
class WebReporter < SheetReporter
attr_accessor :page_name, :output_rows, :input_row
def initialize
super
self.sheet = ask("Sheet name: ") { |q| q.default = "Seymour Audit" }
self.page = ask("Page name: ") { |q| q.default = "Production Web Apps" }
self.input_row = 2
self.output_rows = [5,6,7]
end
def check_host(url_string)
begin
url = URI.parse(url_string)
req = Net::HTTP::Get.new(url.path)
response = ''
time = Benchmark.realtime do
response = Net::HTTP.start(url.host, url.port) { |http| http.request(req) }
end
result = 'no'
if response.code =~/^2/
result = 'yes'
elsif response.code =~/^3/
result = 'redirect'
end
return [result,time]
rescue StandardError => e
puts "#{e} thrown for url #{url_string}"
return ["no", 100]
end
end
def check_hosts
self.update_rows(self.input_row,self.output_rows) do |input,outputs|
if ( input =~ /\.org/ )
input = "http://#{input}" unless (input =~ /http/)
input = "#{input}/" unless (input =~ /\/$/)
results,time = check_host(input)
outputs[0] = results
outputs[1] = time
outputs[2] = Time.now.strftime("%D - %I:%M:%S %p")
end
end
end
def deamonize(interval=120)
while (true)
self.check_hosts
sleep(interval)
end
end
end
r = WebReporter.new
r.deamonize
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment