ahoy_matey 1.4.0 → 1.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +33 -0
- data/ahoy_matey.gemspec +1 -1
- data/config/routes.rb +1 -1
- data/lib/ahoy.rb +6 -1
- data/lib/ahoy/properties.rb +24 -0
- data/lib/ahoy/stores/active_record_store.rb +1 -1
- data/lib/ahoy/stores/active_record_token_store.rb +1 -1
- data/lib/ahoy/stores/kafka_store.rb +40 -0
- data/lib/ahoy/stores/mongoid_store.rb +1 -1
- data/lib/ahoy/tracker.rb +1 -1
- data/lib/ahoy/version.rb +1 -1
- data/lib/generators/ahoy/stores/kafka_generator.rb +15 -0
- data/lib/generators/ahoy/stores/templates/active_record_event_model.rb +2 -0
- data/lib/generators/ahoy/stores/templates/kafka_initializer.rb +9 -0
- metadata +9 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3f3a81162866c03a621491abb0194ebe878a7f48
|
4
|
+
data.tar.gz: 050571dcc31a26851ee56da2b373503507d3547c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7259821c2286af301fcc08ca16fa6b9ef284668740d5d4e7c136adc27c250521458da9a97a859c0ecf724ab2e469a78ff4670459333e08c594af658abb6b4707
|
7
|
+
data.tar.gz: 918d05e4515f41a79991324a93bb240965bb60d685279fcb53893228a87a6954c1dfd1ae4dbe162e5366d8d270fd5625546d2656795f4d51f0f839af0c6d8c85
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -27,6 +27,7 @@ Ahoy supports a number of data stores out of the box. You can start with one of
|
|
27
27
|
|
28
28
|
- [PostgreSQL, MySQL, or SQLite](#postgresql-mysql-or-sqlite)
|
29
29
|
- [MongoDB](#mongodb)
|
30
|
+
- [Kafka](#kafka-master) [master]
|
30
31
|
- [Fluentd](#fluentd)
|
31
32
|
- [RabbitMQ](#rabbitmq)
|
32
33
|
- [Amazon Kinesis Firehose](#amazon-kinesis-firehose)
|
@@ -48,6 +49,22 @@ rake db:migrate
|
|
48
49
|
rails generate ahoy:stores:mongoid
|
49
50
|
```
|
50
51
|
|
52
|
+
### Kafka [master]
|
53
|
+
|
54
|
+
Add [ruby-kafka](https://github.com/zendesk/ruby-kafka) to your Gemfile.
|
55
|
+
|
56
|
+
```ruby
|
57
|
+
gem 'ruby-kafka'
|
58
|
+
```
|
59
|
+
|
60
|
+
And run:
|
61
|
+
|
62
|
+
```sh
|
63
|
+
rails generate ahoy:stores:kafka
|
64
|
+
```
|
65
|
+
|
66
|
+
Use `ENV["KAFKA_URL"]` to configure.
|
67
|
+
|
51
68
|
### Fluentd
|
52
69
|
|
53
70
|
Add [fluent-logger](https://github.com/fluent/fluent-logger-ruby) to your Gemfile.
|
@@ -470,6 +487,14 @@ viewed_checkout_ids = Ahoy::Event.where(user_id: added_item_ids, name: "Viewed c
|
|
470
487
|
|
471
488
|
The same approach also works with visitor tokens.
|
472
489
|
|
490
|
+
### Querying Properties
|
491
|
+
|
492
|
+
```ruby
|
493
|
+
Ahoy::Event.where_properties(store_id: 1).count
|
494
|
+
```
|
495
|
+
|
496
|
+
**Note:** If you get a `NoMethodError`, upgrade Ahoy and add to your model `include Ahoy::Properties`.
|
497
|
+
|
473
498
|
## Native Apps
|
474
499
|
|
475
500
|
### Visits
|
@@ -501,6 +526,14 @@ Send a `POST` request as `Content-Type: application/json` to `/ahoy/events` with
|
|
501
526
|
|
502
527
|
Use an array to pass multiple events at once.
|
503
528
|
|
529
|
+
## Reference
|
530
|
+
|
531
|
+
By default, Ahoy create endpoints at `/ahoy/visits` and `/ahoy/events`. To disable, use:
|
532
|
+
|
533
|
+
```ruby
|
534
|
+
Ahoy.mount = false
|
535
|
+
```
|
536
|
+
|
504
537
|
## Upgrading
|
505
538
|
|
506
539
|
### 1.4.0
|
data/ahoy_matey.gemspec
CHANGED
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_dependency "user_agent_parser"
|
27
27
|
spec.add_dependency "request_store"
|
28
28
|
spec.add_dependency "uuidtools"
|
29
|
-
spec.add_dependency "safely_block"
|
29
|
+
spec.add_dependency "safely_block", ">= 0.1.1"
|
30
30
|
spec.add_dependency "rack-attack"
|
31
31
|
|
32
32
|
spec.add_development_dependency "bundler", "~> 1.5"
|
data/config/routes.rb
CHANGED
data/lib/ahoy.rb
CHANGED
@@ -6,13 +6,14 @@ require "referer-parser"
|
|
6
6
|
require "user_agent_parser"
|
7
7
|
require "request_store"
|
8
8
|
require "uuidtools"
|
9
|
-
require "
|
9
|
+
require "safely/core"
|
10
10
|
|
11
11
|
require "ahoy/version"
|
12
12
|
require "ahoy/tracker"
|
13
13
|
require "ahoy/controller"
|
14
14
|
require "ahoy/model"
|
15
15
|
require "ahoy/visit_properties"
|
16
|
+
require "ahoy/properties"
|
16
17
|
require "ahoy/deckhands/location_deckhand"
|
17
18
|
require "ahoy/deckhands/request_deckhand"
|
18
19
|
require "ahoy/deckhands/technology_deckhand"
|
@@ -24,6 +25,7 @@ require "ahoy/stores/active_record_token_store"
|
|
24
25
|
require "ahoy/stores/log_store"
|
25
26
|
require "ahoy/stores/fluentd_store"
|
26
27
|
require "ahoy/stores/mongoid_store"
|
28
|
+
require "ahoy/stores/kafka_store"
|
27
29
|
require "ahoy/stores/kinesis_firehose_store"
|
28
30
|
require "ahoy/stores/bunny_store"
|
29
31
|
require "ahoy/engine"
|
@@ -66,6 +68,9 @@ module Ahoy
|
|
66
68
|
mattr_accessor :max_events_per_request
|
67
69
|
self.max_events_per_request = 10
|
68
70
|
|
71
|
+
mattr_accessor :mount
|
72
|
+
self.mount = true
|
73
|
+
|
69
74
|
mattr_accessor :throttle
|
70
75
|
self.throttle = true
|
71
76
|
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Ahoy
|
2
|
+
module Properties
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
module ClassMethods
|
6
|
+
def where_properties(properties)
|
7
|
+
relation = self
|
8
|
+
column_type = columns_hash["properties"].type
|
9
|
+
case column_type
|
10
|
+
when :jsonb, :json
|
11
|
+
properties.each do |k, v|
|
12
|
+
relation = relation.where("properties ->> ? = ?", k, v)
|
13
|
+
end
|
14
|
+
else
|
15
|
+
properties.each do |k, v|
|
16
|
+
# not 100%, but will do
|
17
|
+
relation = relation.where("properties LIKE ?", "%#{{k => v}.to_json.sub(/\A\{/, "").sub(/\}\z/, "")}%")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
relation
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Ahoy
|
2
|
+
module Stores
|
3
|
+
class KafkaStore < LogStore
|
4
|
+
def log_visit(data)
|
5
|
+
post(visits_topic, data)
|
6
|
+
end
|
7
|
+
|
8
|
+
def log_event(data)
|
9
|
+
post(events_topic, data)
|
10
|
+
end
|
11
|
+
|
12
|
+
def client
|
13
|
+
@client ||= begin
|
14
|
+
client = Kafka.new(
|
15
|
+
seed_brokers: ENV["KAFKA_URL"],
|
16
|
+
logger: Rails.logger
|
17
|
+
)
|
18
|
+
at_exit { client.shutdown }
|
19
|
+
client
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def producer
|
24
|
+
@producer ||= client.async_producer(delivery_interval: 3)
|
25
|
+
end
|
26
|
+
|
27
|
+
def post(topic, data)
|
28
|
+
producer.produce(data.to_json, topic: topic)
|
29
|
+
end
|
30
|
+
|
31
|
+
def visits_topic
|
32
|
+
"ahoy_visits"
|
33
|
+
end
|
34
|
+
|
35
|
+
def events_topic
|
36
|
+
"ahoy_events"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/ahoy/tracker.rb
CHANGED
@@ -127,7 +127,7 @@ module Ahoy
|
|
127
127
|
# odd pattern for backwards compatibility
|
128
128
|
# TODO remove this method in next major release
|
129
129
|
def report_exception(e)
|
130
|
-
safely do
|
130
|
+
Safely.safely do
|
131
131
|
@store.report_exception(e)
|
132
132
|
if Rails.env.development? || Rails.env.test?
|
133
133
|
raise e
|
data/lib/ahoy/version.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
require "rails/generators"
|
2
|
+
|
3
|
+
module Ahoy
|
4
|
+
module Stores
|
5
|
+
module Generators
|
6
|
+
class KafkaGenerator < Rails::Generators::Base
|
7
|
+
source_root File.expand_path("../templates", __FILE__)
|
8
|
+
|
9
|
+
def create_initializer
|
10
|
+
template "kafka_initializer.rb", "config/initializers/ahoy.rb"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ahoy_matey
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -128,14 +128,14 @@ dependencies:
|
|
128
128
|
requirements:
|
129
129
|
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
131
|
+
version: 0.1.1
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
138
|
+
version: 0.1.1
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: rack-attack
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -221,11 +221,13 @@ files:
|
|
221
221
|
- lib/ahoy/geocode_job.rb
|
222
222
|
- lib/ahoy/logger_silencer.rb
|
223
223
|
- lib/ahoy/model.rb
|
224
|
+
- lib/ahoy/properties.rb
|
224
225
|
- lib/ahoy/stores/active_record_store.rb
|
225
226
|
- lib/ahoy/stores/active_record_token_store.rb
|
226
227
|
- lib/ahoy/stores/base_store.rb
|
227
228
|
- lib/ahoy/stores/bunny_store.rb
|
228
229
|
- lib/ahoy/stores/fluentd_store.rb
|
230
|
+
- lib/ahoy/stores/kafka_store.rb
|
229
231
|
- lib/ahoy/stores/kinesis_firehose_store.rb
|
230
232
|
- lib/ahoy/stores/log_store.rb
|
231
233
|
- lib/ahoy/stores/mongoid_store.rb
|
@@ -242,6 +244,7 @@ files:
|
|
242
244
|
- lib/generators/ahoy/stores/bunny_generator.rb
|
243
245
|
- lib/generators/ahoy/stores/custom_generator.rb
|
244
246
|
- lib/generators/ahoy/stores/fluentd_generator.rb
|
247
|
+
- lib/generators/ahoy/stores/kafka_generator.rb
|
245
248
|
- lib/generators/ahoy/stores/kinesis_firehose_generator.rb
|
246
249
|
- lib/generators/ahoy/stores/log_generator.rb
|
247
250
|
- lib/generators/ahoy/stores/mongoid_events_generator.rb
|
@@ -255,6 +258,7 @@ files:
|
|
255
258
|
- lib/generators/ahoy/stores/templates/bunny_initializer.rb
|
256
259
|
- lib/generators/ahoy/stores/templates/custom_initializer.rb
|
257
260
|
- lib/generators/ahoy/stores/templates/fluentd_initializer.rb
|
261
|
+
- lib/generators/ahoy/stores/templates/kafka_initializer.rb
|
258
262
|
- lib/generators/ahoy/stores/templates/kinesis_firehose_initializer.rb
|
259
263
|
- lib/generators/ahoy/stores/templates/log_initializer.rb
|
260
264
|
- lib/generators/ahoy/stores/templates/mongoid_event_model.rb
|
@@ -283,11 +287,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
283
287
|
version: '0'
|
284
288
|
requirements: []
|
285
289
|
rubyforge_project:
|
286
|
-
rubygems_version: 2.
|
290
|
+
rubygems_version: 2.4.5.1
|
287
291
|
signing_key:
|
288
292
|
specification_version: 4
|
289
293
|
summary: Simple, powerful visit tracking for Rails
|
290
294
|
test_files:
|
291
295
|
- test/test_helper.rb
|
292
296
|
- test/visit_properties_test.rb
|
293
|
-
has_rdoc:
|