From bfe5d9826115d4f57ac5a5f96a945ab9f736dec9 Mon Sep 17 00:00:00 2001 From: ezhikov Date: Sat, 7 Apr 2012 13:14:55 +0700 Subject: [PATCH] booking here --- Gemfile | 3 +- bin/get | 4 +- event_chopper.gemspec | 5 +- lib/event_chopper.rb | 6 ++- lib/event_chopper/base.rb | 12 +++-- lib/event_chopper/logger.rb | 1 - lib/event_chopper/reports/scb.rb | 46 ++++++++++++++++++ lib/event_chopper/server.rb | 4 +- lib/event_chopper/server/scb.html | 80 +++++++++++++++++++++++++++++++ 9 files changed, 145 insertions(+), 16 deletions(-) create mode 100644 lib/event_chopper/reports/scb.rb create mode 100644 lib/event_chopper/server/scb.html diff --git a/Gemfile b/Gemfile index 6ecd523..278188e 100644 --- a/Gemfile +++ b/Gemfile @@ -1,8 +1,9 @@ source "http://rubygems.org" -gem 'waffle' +gem 'sinatra' gem 'waffle' gem 'tokyotyrant' +gem 'riak' gem 'mongo' gem 'bson_ext' diff --git a/bin/get b/bin/get index a361485..fd7691d 100755 --- a/bin/get +++ b/bin/get @@ -4,7 +4,7 @@ $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__) require 'event_chopper' if ARGV.length > 2 - puts Object.const_get('EventChopper').const_get(ARGV[0]).new.get EventChopper::TimeKey.new(ARGV[1]), ARGV[2] + puts Object.const_get('EventChopper').const_get(ARGV[0]).new.fetch EventChopper::TimeKey.new(ARGV[1]), ARGV[2] else - puts Object.const_get('EventChopper').const_get(ARGV[0]).new.get EventChopper::TimeKey.new(ARGV[1]) + puts Object.const_get('EventChopper').const_get(ARGV[0]).new.fetch EventChopper::TimeKey.new(ARGV[1]) end diff --git a/event_chopper.gemspec b/event_chopper.gemspec index 284744f..526dd3b 100644 --- a/event_chopper.gemspec +++ b/event_chopper.gemspec @@ -20,9 +20,8 @@ Gem::Specification.new do |s| # specify any dependencies here; for example: # s.add_development_dependency "rspec" -# s.add_runtime_dependency "tokyotyrant" - s.add_runtime_dependency "comm" - s.add_runtime_dependency "bunny" + s.add_runtime_dependency "tokyotyrant" + s.add_runtime_dependency "waffle" s.add_runtime_dependency "yajl-ruby" s.add_runtime_dependency "mongo" s.add_runtime_dependency "sinatra" diff --git a/lib/event_chopper.rb b/lib/event_chopper.rb index 05c6230..1c2a3d1 100644 --- a/lib/event_chopper.rb +++ b/lib/event_chopper.rb @@ -8,6 +8,7 @@ #require "event_chopper/gate_slowness" #require "event_chopper/search_click_directions" require "event_chopper/reports/test" +require "event_chopper/reports/scb" require "event_chopper/store/ttstore" require "event_chopper/store/riak_store" require "event_chopper/store/eleminating_store" @@ -27,8 +28,9 @@ def logger end def store name - ReductionStore.new(EliminatingStore.new TTStore.new(name)) - #ReductionStore.new EliminatingStore.new RiakStore.new(name) + #ReductionStore.new(EliminatingStore.new TTStore.new(name)) + #EliminatingStore.new TTStore.new(name) + ReductionStore.new EliminatingStore.new RiakStore.new(name) #EliminatingStore.new RiakStore.new(name) end diff --git a/lib/event_chopper/base.rb b/lib/event_chopper/base.rb index e90f14e..60bde7e 100644 --- a/lib/event_chopper/base.rb +++ b/lib/event_chopper/base.rb @@ -27,6 +27,10 @@ def map topic, record, stamp = nil emit record, stamp, NOID end + def finalize record + record + end + def get stamp, id = NOID tor = @store.get stamp, id if tor.nil? @@ -43,11 +47,9 @@ def get stamp, id = NOID tor end -# def run -# Comm::Consumer.new(event_types).subscribe do |topic, message| -# map topic, message, TimeKey.now -# end -# end + def fetch stamp, id = NOID + finalize get(stamp, id) + end def run transport = Waffle::Base.new eval("Waffle::Transports::#{Waffle::Config.transport.capitalize}").new diff --git a/lib/event_chopper/logger.rb b/lib/event_chopper/logger.rb index e443fab..e9aafe8 100644 --- a/lib/event_chopper/logger.rb +++ b/lib/event_chopper/logger.rb @@ -1,4 +1,3 @@ -require 'comm' require 'mongo' module EventChopper diff --git a/lib/event_chopper/reports/scb.rb b/lib/event_chopper/reports/scb.rb new file mode 100644 index 0000000..063cb8b --- /dev/null +++ b/lib/event_chopper/reports/scb.rb @@ -0,0 +1,46 @@ +module EventChopper + +class Scb < Base + def event_types + ['search', 'click', 'booking'] + end + + def map topic, record, stamp + if topic == 'booking' + dt = DateTime.strptime record['booked_at'], '%Y-%m-%dT%H:%M:%SZ' + stamp = DateTime.strptime(record['occured_at'], '%Y-%m-%dT%H:%M:%S+04:00').to_time.to_i + tk = TimeKey.from_date dt + emit({topic => {record['order_number'] => {'state' => record['state'], 'stamp' => stamp}}}, tk) + else + emit({topic => 1}) + end + end + + def reduce data + t = data.inject({}) do |acc, entry| + acc.merge(entry) do |k, v1, v2| + if k.start_with? 'booking' + v1.merge(v2) do |k, b1, b2| + b1['stamp'] >= b2['stamp'] ? b1 : b2 + end + else + v1 + v2 + end + end + end + puts "REDUCE" + t.to_s + t + end + + def finalize record + if ! record.nil? and record.has_key? 'booking' + record['paid_booking'] = record['booking'].inject(0) do |acc, k| + acc + (k[1]['state'] == 'paid' ? 1 : 0) + end + record['booking'] = record['booking'].length + end + record + end +end + +end diff --git a/lib/event_chopper/server.rb b/lib/event_chopper/server.rb index 0d6791c..38196ba 100644 --- a/lib/event_chopper/server.rb +++ b/lib/event_chopper/server.rb @@ -35,12 +35,12 @@ def period end def single - reporter.get(from) + reporter.fetch(from) end def range from.till(to, period).inject({}) do |acc, key| - acc[key] = reporter.get key + acc[key] = reporter.fetch key acc end end diff --git a/lib/event_chopper/server/scb.html b/lib/event_chopper/server/scb.html new file mode 100644 index 0000000..d9f0706 --- /dev/null +++ b/lib/event_chopper/server/scb.html @@ -0,0 +1,80 @@ + + + + +
+Start date:
+Stop date:
+Group by:
+ +
+
+ +