Created
December 6, 2010 21:37
-
-
Save knowuh/731003 to your computer and use it in GitHub Desktop.
sample of how to use google-spreadsheet-ruby
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
############################################## | |
## 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