trackablaze 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -11,14 +11,18 @@ module Trackablaze
11
11
  Trackablaze::Tracker.load_trackers
12
12
  config = YAML::load( File.open( file ) )
13
13
 
14
- results = Trackablaze::Tracker.run_trackers(config)
14
+ tracker_items = []
15
+ config.each do |c|
16
+ tracker_items << Trackablaze::TrackerItem.new(c)
17
+ end
18
+
19
+ results = Trackablaze::TrackerItem.run(tracker_items)
15
20
 
16
- (0..config.length-1).each do |n|
17
- c = config[n]
18
- tracker_name = c.keys.first
19
- puts "[ #{Trackablaze::Tracker.trackers[tracker_name].title} ]".center(75,'-')
20
- puts "params: #{c[tracker_name]['params']}"
21
- puts "results: #{results[n]}"
21
+ tracker_items.each do |tracker_item|
22
+ puts "[ #{tracker_item.title} ]".center(75,'-')
23
+ puts "Key: #{tracker_item.key}"
24
+ puts "params: #{tracker_item.params}"
25
+ puts "results: #{results[tracker_item.key]}"
22
26
  end
23
27
  end
24
28
  end
@@ -1,6 +1,19 @@
1
1
  module Trackablaze
2
2
  class Tracker
3
3
 
4
+ # A string that uniquely identifies this instance of the tracker
5
+ # This is to optimize multiple instances that are exactly the same
6
+ # e.g. if 100 people want to track amolk's twitter account, the tracker can
7
+ # be run only once, optimizing calls to Twitter API.
8
+ def self.key(config)
9
+ # By default we use all params and metrics
10
+ sb = []
11
+ sb.push(self.handle)
12
+ sb.push(config['params'].flatten) if config['params']
13
+ sb.push((config['metrics'] || default_metrics).flatten)
14
+ sb.flatten.join('_')
15
+ end
16
+
4
17
  class << self
5
18
  attr_accessor :trackers
6
19
 
@@ -9,36 +22,7 @@ module Trackablaze
9
22
  Trackablaze::Tracker.subclasses.each do |t|
10
23
  @trackers[t.handle] = t
11
24
  end
12
- end
13
-
14
- # This function takes config object, similar in structure to a loaded yml config file
15
- def run_trackers(config)
16
- results = []
17
- trackers = {}
18
- index = 0
19
- config.each do |tracker_node|
20
- tracker_name = tracker_node.keys.first
21
- trackers[tracker_name] ||= []
22
- tracker_config = tracker_node.values.first
23
- tracker_config['index'] = index
24
- trackers[tracker_name] << tracker_config
25
- index += 1
26
- end
27
-
28
- trackers.each do |tracker_name, tracker_configs|
29
- tracker = Trackablaze::Tracker.trackers[tracker_name].new
30
-
31
- tracker_config_index = 0
32
- tracker.get_metrics(tracker_configs).each do |tracker_result|
33
- index = tracker_configs[tracker_config_index]['index']
34
- results[index] = tracker_result
35
- tracker_config_index += 1
36
- end
37
- end
38
-
39
- return results
40
- end
41
-
25
+ end
42
26
  end
43
27
 
44
28
  def self.handle
@@ -62,11 +46,8 @@ module Trackablaze
62
46
  end
63
47
 
64
48
  def add_error(metrics, error, field = nil)
65
- puts "ADDING ERROR #{error} on #{field}"
66
49
  metrics['errors'] ||= []
67
50
  metrics['errors'].push({:error => error, :field => field})
68
-
69
- puts "ADDED ERROR #{metrics.inspect}"
70
51
  end
71
52
 
72
53
  end
@@ -0,0 +1,54 @@
1
+ module Trackablaze
2
+ class TrackerItem
3
+ attr_accessor :name, :config, :params, :metrics, :tracker_class
4
+ def initialize(config)
5
+ @name = config.keys[0]
6
+ @tracker_class = Trackablaze::Tracker.trackers[self.name]
7
+ @config = config[self.name]
8
+ @params = self.config['params']
9
+ @metrics = self.config['metrics'] || @tracker_class.default_metrics
10
+ end
11
+
12
+ def key()
13
+ @key ||= tracker_class.key(config)
14
+ end
15
+
16
+ def title
17
+ @tracker_class.title
18
+ end
19
+
20
+ # This function takes config object, similar in structure to a loaded yml config file
21
+ def self.run(tracker_items)
22
+ Trackablaze::Tracker.load_trackers
23
+
24
+ results = {}
25
+
26
+ # Dedup tracker items using unique key
27
+ unique_tracker_items = tracker_items.uniq {|ti| ti.key}
28
+
29
+ # Gather up all unique tracker_items for a given tracker
30
+ tracker_items_by_tracker = {}
31
+ unique_tracker_items.each do |tracker_item|
32
+ tracker_name = tracker_item.name
33
+
34
+ tracker_items_by_tracker[tracker_name] ||= []
35
+ tracker_items_by_tracker[tracker_name] << tracker_item
36
+ end
37
+
38
+ # Run one tracker at a time
39
+ tracker_items_by_tracker.each do |tracker_name, items|
40
+ tracker = items.first.tracker_class.new
41
+ tracker_results = tracker.get_metrics(items)
42
+
43
+ # Store results by tracker item key
44
+ (0..items.length-1).each do |index|
45
+ item = items[index]
46
+ results[item.key] = tracker_results[index]
47
+ end
48
+ end
49
+
50
+ # All keys should have results now, return results
51
+ return results
52
+ end
53
+ end
54
+ end
data/lib/trackablaze.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'trackablaze/utils'
2
2
  require 'trackablaze/command'
3
+ require 'trackablaze/tracker_item'
3
4
  require 'trackablaze/tracker'
4
5
 
5
6
  Dir[File.dirname(__FILE__) + '/../trackers/*.rb'].each do |path|
@@ -2,21 +2,20 @@ require 'mini_fb'
2
2
 
3
3
  module Trackablaze
4
4
  class FacebookPage < Tracker
5
- def get_metrics(configs)
6
- configs.collect {|c| get_metrics_single(c)}
5
+ def get_metrics(tracker_items)
6
+ tracker_items.collect {|tracker_item| get_metrics_single(tracker_item)}
7
7
  end
8
8
 
9
- def get_metrics_single(config)
10
- params, metrics_keys = config['params'], config['metrics']
9
+ def get_metrics_single(tracker_item)
11
10
  metrics = {}
12
11
 
13
- if (params["page_id"].nil?)
12
+ if (tracker_item.params["page_id"].nil?)
14
13
  add_error(metrics, "No Facebook page ID supplied", "page_id")
15
14
  return metrics
16
15
  end
17
16
 
18
17
  begin
19
- page_info = MiniFB.get(nil, params["page_id"])
18
+ page_info = MiniFB.get(nil, tracker_item.params["page_id"])
20
19
  rescue
21
20
  page_info = {}
22
21
  end
@@ -25,11 +24,9 @@ module Trackablaze
25
24
  add_error(metrics, "Invalid Facebook page ID supplied", "page_id")
26
25
  return metrics
27
26
  end
28
-
29
- metrics_keys ||= FacebookPage.default_metrics
30
27
 
31
- metrics_keys.each do |metrics_key|
32
- metrics[metrics_key] = page_info[metrics_key]
28
+ tracker_item.metrics.each do |metric|
29
+ metrics[metric] = page_info[metric]
33
30
  end
34
31
 
35
32
  metrics
data/trackers/twitter.rb CHANGED
@@ -2,22 +2,21 @@ require 'twitter'
2
2
 
3
3
  module Trackablaze
4
4
  class Twitter < Tracker
5
- def get_metrics(configs)
6
- configs.collect {|c| get_metrics_single(c)}
5
+ def get_metrics(tracker_items)
6
+ tracker_items.collect {|tracker_item| get_metrics_single(tracker_item)}
7
7
  end
8
8
 
9
- def get_metrics_single(config)
10
- params, metrics_keys = config['params'], config['metrics']
9
+ def get_metrics_single(tracker_item)
11
10
  metrics = {}
12
11
 
13
- if (params["handle"].nil? || params["handle"].empty?)
12
+ if (tracker_item.params["handle"].nil? || tracker_item.params["handle"].empty?)
14
13
  add_error(metrics, "No handle supplied", "handle")
15
14
  return metrics
16
15
  end
17
16
 
18
17
  user = nil
19
18
  begin
20
- user = ::Twitter.user(params["handle"])
19
+ user = ::Twitter.user(tracker_item.params["handle"])
21
20
  rescue
22
21
  end
23
22
 
@@ -25,12 +24,9 @@ module Trackablaze
25
24
  add_error(metrics, "Invalid handle supplied", "handle")
26
25
  return metrics
27
26
  end
28
-
29
- metrics_keys ||= Twitter.default_metrics
30
27
 
31
- metrics_keys.each do |metrics_key|
32
- value = user[metrics_key]
33
- metrics[metrics_key] = value
28
+ tracker_item.metrics.each do |metric|
29
+ metrics[metric] = user[metric]
34
30
  end
35
31
 
36
32
  metrics
data/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Trackablaze
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: trackablaze
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.0
5
+ version: 0.1.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - Amol Kelkar
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-06-12 00:00:00 -07:00
13
+ date: 2011-06-15 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -113,6 +113,7 @@ extra_rdoc_files: []
113
113
  files:
114
114
  - lib/trackablaze/command.rb
115
115
  - lib/trackablaze/tracker.rb
116
+ - lib/trackablaze/tracker_item.rb
116
117
  - lib/trackablaze/utils.rb
117
118
  - lib/trackablaze.rb
118
119
  - trackers/facebook_page.rb