maxaf-fluke 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/History.txt CHANGED
@@ -1,3 +1,17 @@
1
+ === 0.0.3 2009-09-08
2
+
3
+ * Added Watcher#url_strftime to simplify time-based URL generation.
4
+ * Even though httpclient aims to be similar to Perl's LWP, it's
5
+ missing support for file:// URLs. Implemented this locally.
6
+
7
+ === 0.0.2 2009-09-08
8
+
9
+ * Added rudimentary result diffing.
10
+ * Replaced net/http with httpclient.
11
+ * Figured out synergy between watchers in the DB and their "code"
12
+ parts stored on the file system.
13
+ * Implemented generated URLs.
14
+
1
15
  === 0.0.1 2009-09-05
2
16
 
3
17
  * Initial release: implemented minimum set of core features.
data/Manifest.txt CHANGED
@@ -1,6 +1,12 @@
1
1
  bin/fluke
2
2
  db/migrate/0001_create_watchers.rb
3
3
  db/migrate/0002_create_results.rb
4
+ db/migrate/0003_add_meth_to_watchers.rb
5
+ db/migrate/0004_add_url_to_results.rb
6
+ examples/dot-fluke.yml
7
+ examples/gen_url.rb
8
+ examples/strftime_url.rb
9
+ fluke.gemspec
4
10
  History.txt
5
11
  lib/fluke/cli.rb
6
12
  lib/fluke/monkey_patch.rb
data/Rakefile CHANGED
@@ -13,6 +13,7 @@ $hoe = Hoe.spec 'fluke' do
13
13
  ['activerecord', '>=2.3'],
14
14
  ['aws-s3', '>=0.6.2'],
15
15
  ['httpclient', '>=2.1.5.2'],
16
+ ['pvande-differ', '>=0.1.1'],
16
17
  ]
17
18
  end
18
19
 
data/lib/fluke/cli.rb CHANGED
@@ -16,8 +16,9 @@ module Fluke
16
16
 
17
17
  -OR-
18
18
 
19
- #{File.basename($0)} [options] watcher1..watcherN
20
- # run particular watchers
19
+ #{File.basename($0)} [options] arg1..argN
20
+ # args are either files, in which case watcher info is
21
+ # inferred based on file content, or watcher names
21
22
  Options are:
22
23
  BANNER
23
24
  opts.separator ""
@@ -36,7 +37,12 @@ module Fluke
36
37
 
37
38
  if arguments.size > 0 then
38
39
  arguments.uniq.each do |name|
39
- Fluke.watch name
40
+ if File.exists?(name) and !File.directory?(name) then
41
+ path = File.expand_path(name)
42
+ Fluke.class_eval(File.read(path), path)
43
+ else
44
+ Fluke.watch name
45
+ end
40
46
  end
41
47
  else
42
48
  Watcher.find(:all).each do |watcher|
@@ -1,19 +1,27 @@
1
1
  module Fluke
2
2
  module Delays
3
3
  def seconds
4
- return self*1000
4
+ self*1000
5
5
  end
6
6
 
7
7
  def minutes
8
- return self.seconds*60
8
+ self.seconds*60
9
9
  end
10
10
 
11
11
  def hours
12
- return self.minutes*60
12
+ self.minutes*60
13
13
  end
14
14
 
15
15
  def days
16
- return self.hours*24
16
+ self.hours*24
17
+ end
18
+
19
+ def weeks
20
+ self.days*7
21
+ end
22
+
23
+ def months
24
+ self.weeks*4
17
25
  end
18
26
  end
19
27
  end
data/lib/fluke/result.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'digest/sha1'
2
2
  require 'aws/s3'
3
+ require 'differ'
3
4
 
4
5
  module Fluke
5
6
  class Result < ActiveRecord::Base
@@ -24,10 +25,13 @@ module Fluke
24
25
  Body.exists? self.body_key
25
26
  end
26
27
 
27
- def self.from_response(watcher, content)
28
+ def self.from_response(watcher, content, generated_url = nil)
28
29
  checksum = Digest::SHA1.hexdigest(content)
29
30
  result = Result.new :checksum => checksum
30
31
  result.watcher = watcher
32
+ if generated_url and generated_url != watcher.url
33
+ result.url = generated_url
34
+ end
31
35
  result.save
32
36
 
33
37
  Thread.new do
@@ -41,5 +45,9 @@ module Fluke
41
45
 
42
46
  result
43
47
  end
48
+
49
+ def diff_against(right)
50
+ differ = Differ.diff_by_line(self.body.value, right.body.value)
51
+ end
44
52
  end
45
53
  end
data/lib/fluke/watcher.rb CHANGED
@@ -9,14 +9,48 @@ module Fluke
9
9
  attr_accessor :thread
10
10
 
11
11
  def run
12
+ generated_url = self.generate_url
13
+ Fluke::log { "#{self}: generated URL: #{generated_url}" }
14
+
15
+ if generated_url =~ /^file\:\/\/(.+)$/
16
+ run_file File.expand_path($1)
17
+ else
18
+ run_http generated_url
19
+ end
20
+ end
21
+
22
+ def run_file(path)
23
+ result = Result.from_response(self, File.read(path), "file://#{path}")
24
+ end
25
+
26
+ def run_http(generated_url)
12
27
  hc = HTTPClient.new
13
28
  http_method = self.meth.downcase.to_sym
14
29
  unless hc.respond_to?(http_method)
15
30
  Fluke::log { "#{self}: invalid method '#{http_method}', converting to :get" }
16
31
  http_method = :get
17
32
  end
18
- res = hc.send(http_method, self.url)
19
- result = Result.from_response(self, res.body.dump.dup)
33
+ res = hc.send(http_method, generated_url, { 'Cache-Control' => 'no-cache', 'Pragma' => 'no-cache' })
34
+ result = Result.from_response(self, res.body.dump.dup, generated_url)
35
+ end
36
+
37
+ def url_generator(&block)
38
+ @generate_url = true
39
+ @url_generator = block
40
+ end
41
+
42
+ def url_strftime(offset = 0)
43
+ self.url_generator do |raw|
44
+ (Time.now + offset/1000.000).strftime(raw)
45
+ end
46
+ end
47
+
48
+ def generate_url
49
+ if @generate_url
50
+ return @url_generator.call(self.url)
51
+ else
52
+ return self.url
53
+ end
20
54
  end
21
55
 
22
56
  def wait
@@ -26,5 +60,10 @@ module Fluke
26
60
  def to_s
27
61
  "Watcher<#{name}>"
28
62
  end
63
+
64
+ def last_result(checksum = nil)
65
+ cond = [ "checksum = ?", checksum ] if checksum
66
+ results.find(:first, :conditions => cond, :order => "created_at desc")
67
+ end
29
68
  end
30
69
  end
data/lib/fluke.rb CHANGED
@@ -9,7 +9,7 @@ require 'activerecord'
9
9
  require 'aws/s3'
10
10
 
11
11
  module Fluke
12
- VERSION = '0.0.1'
12
+ VERSION = '0.0.3'
13
13
  ROOT = Dir.new(File.expand_path(File.dirname(__FILE__) + "/../"))
14
14
  DEFAULT_CONF_PATH = "~/.fluke.yml"
15
15
  @@verbose = false
@@ -61,7 +61,7 @@ module Fluke
61
61
  ActiveRecord::Base.logger = Logger.new(@@log_here) if verbose?
62
62
  ActiveRecord::Base.establish_connection(@@conf[:db])
63
63
  AWS::S3::Base.establish_connection!(@@conf[:s3][:auth])
64
- Result::Body.set_current_bucket_to @@conf[:s3][:bucket]
64
+ Result::Body.set_current_bucket_to @@conf[:s3][:bucket][:result]
65
65
  rescue => e
66
66
  STDERR.puts e.inspect
67
67
  return false
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maxaf-fluke
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Max Afonov
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-09-06 00:00:00 -07:00
12
+ date: 2009-09-08 00:00:00 -07:00
13
13
  default_executable: fluke
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -94,6 +94,7 @@ files:
94
94
  - test/test_helper.rb
95
95
  has_rdoc: false
96
96
  homepage: http://github.com/maxaf/fluke
97
+ licenses:
97
98
  post_install_message:
98
99
  rdoc_options:
99
100
  - --main
@@ -115,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
116
  requirements: []
116
117
 
117
118
  rubyforge_project: fluke
118
- rubygems_version: 1.2.0
119
+ rubygems_version: 1.3.5
119
120
  signing_key:
120
121
  specification_version: 3
121
122
  summary: A simple resource observer designed to detect change over time.