staccato-rack 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/staccato/rack.rb +56 -17
- data/lib/staccato/rack/version.rb +1 -1
- data/staccato-rack.gemspec +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
OTgwMzI4NDk3OWE0OWE1NDY2MzFjNTU2NzI1YTRkNDljOTUzNjg2Mw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YzA3ZGRkNzI5MTc0NTcwMjA3ZDgyNDhjYmY4MWNmNjNiNjI1NTUwYw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
Y2VlOTI0MDNmYzEyYzQyY2JlODEyNGU1NGYyMjU2OGJlYWExMWQ4ZDQzMzRh
|
10
|
+
NjBhMmZiY2VjMjY1ZDFkMmJmODEwODJiY2I2ODk0NTRiMWU0OWYyOGRiMDJl
|
11
|
+
OTk4ZGIwMTkzYTI3OWQzZGQwZDFkZWIyZDI5MDQyZTNiZTY1ZmQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MDJjZjBkNGFjYWI3Y2I2YWRhNmQzMzk3Y2JiNWU0YzQyYzlkNzMyNDc0Yzky
|
14
|
+
MjYzYjAwZTYyN2NmYTJhOWY1Y2ViNDQwNjZlYjBlMjM1ZjVhZjk4OTQwMGYy
|
15
|
+
YzUzZWNjMDQzZWVkMDQ2ZmMzODYyMDkwNDM3NTdjNjMxZWJhODE=
|
data/lib/staccato/rack.rb
CHANGED
@@ -1,42 +1,81 @@
|
|
1
1
|
require 'staccato/rack/version'
|
2
2
|
require 'staccato'
|
3
3
|
require 'rack/request'
|
4
|
+
require 'ostruct'
|
4
5
|
|
5
6
|
module Staccato
|
6
7
|
module Rack
|
7
8
|
# middleware
|
8
9
|
class Middleware
|
10
|
+
# page view wrapper
|
11
|
+
class PageView < OpenStruct
|
12
|
+
def initialize
|
13
|
+
super
|
14
|
+
@custom_metrics = []
|
15
|
+
@custom_dimensions = []
|
16
|
+
end
|
17
|
+
|
18
|
+
def add_custom_metric(position, value)
|
19
|
+
@custom_metrics << [position, value]
|
20
|
+
end
|
21
|
+
|
22
|
+
def add_custom_dimension(position, value)
|
23
|
+
@custom_dimensions << [position, value]
|
24
|
+
end
|
25
|
+
|
26
|
+
def track!(default_tracker, tracking_id, request)
|
27
|
+
page_view_params = marshal_dump
|
28
|
+
if page_view_params[:client_id]
|
29
|
+
tracker = Staccato.tracker(tracking_id, page_view_params[:client_id])
|
30
|
+
else
|
31
|
+
tracker = default_tracker
|
32
|
+
end
|
33
|
+
track_hit(tracker, page_view_params, request)
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def track_hit(tracker, page_view_params, request)
|
39
|
+
hit = Staccato::Pageview.new(tracker, page_view_params.merge(path: request.fullpath,
|
40
|
+
hostname: request.host,
|
41
|
+
user_agent: request.env['HTTP_USER_AGENT'],
|
42
|
+
user_ip: request.ip))
|
43
|
+
add_custom_to_hit(hit)
|
44
|
+
hit.track!
|
45
|
+
hit
|
46
|
+
end
|
47
|
+
|
48
|
+
def add_custom_to_hit(hit)
|
49
|
+
@custom_metrics.each do |p, v|
|
50
|
+
hit.add_custom_metric(p, v)
|
51
|
+
end
|
52
|
+
@custom_dimensions.each do |p, v|
|
53
|
+
hit.add_custom_dimension(p, v)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
9
58
|
attr_accessor :last_hit
|
10
59
|
|
11
60
|
def initialize(app, tracking_id)
|
12
61
|
@app = app
|
13
|
-
@
|
62
|
+
@tracking_id = tracking_id
|
63
|
+
@default_tracker = Staccato.tracker(tracking_id)
|
14
64
|
end
|
15
65
|
|
16
66
|
def call(env)
|
17
|
-
|
18
|
-
load_staccato_into_env(env)
|
67
|
+
env['staccato.pageview'] = PageView.new
|
19
68
|
|
20
|
-
|
69
|
+
@last_hit = nil
|
21
70
|
status, headers, body = @app.call(env)
|
22
71
|
|
23
|
-
|
72
|
+
if (200..299).include?(status.to_i)
|
73
|
+
@last_hit = env['staccato.pageview'].track!(@default_tracker, @tracking_id, ::Rack::Request.new(env))
|
74
|
+
end
|
24
75
|
|
25
76
|
# return result
|
26
77
|
[status, headers, body]
|
27
78
|
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
def load_staccato_into_env(env)
|
32
|
-
request = ::Rack::Request.new(env)
|
33
|
-
env['staccato.tracker'] = @tracker
|
34
|
-
env['staccato.pageview'] = Staccato::Pageview.new(@tracker,
|
35
|
-
path: request.fullpath,
|
36
|
-
hostname: request.host,
|
37
|
-
user_agent: request.env['HTTP_USER_AGENT'],
|
38
|
-
user_ip: request.ip)
|
39
|
-
end
|
40
79
|
end
|
41
80
|
end
|
42
81
|
end
|
data/staccato-rack.gemspec
CHANGED
@@ -26,6 +26,6 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_development_dependency 'minitest', '>= 0.8.0'
|
27
27
|
spec.add_development_dependency 'minitest-reporters'
|
28
28
|
spec.add_development_dependency 'rack-test'
|
29
|
-
spec.add_development_dependency 'bundler', '~> 1.
|
29
|
+
spec.add_development_dependency 'bundler', '~> 1.6'
|
30
30
|
spec.add_development_dependency 'rake', '~> 10.0'
|
31
31
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: staccato-rack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Grant Speelman
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -100,14 +100,14 @@ dependencies:
|
|
100
100
|
requirements:
|
101
101
|
- - ~>
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '1.
|
103
|
+
version: '1.6'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - ~>
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '1.
|
110
|
+
version: '1.6'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: rake
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|