Added support for Kinesis Firehose
Andrew Kane
committed Jan 04, 2016
commit 375a28c8713b1c2d99efd456edbd9eea71f659be
Showing 5
changed files with
94 additions
and 0 deletions
README.md
+17
-0
| @@ | @@ -36,6 +36,7 @@ Ahoy supports a number of data stores out of the box. You can start with one of |
| - [SQLite](#mysql-or-sqlite) | |
| - [MongoDB](#mongodb) | |
| - [Fluentd](#fluentd) | |
| + | - [Kinesis Firehose](#kinesis-firehose-master) [master] |
| - [Logs](#logs) | |
| - [Custom](#custom) | |
| @@ | @@ -101,6 +102,22 @@ rails generate ahoy:stores:fluentd |
| Use `ENV["FLUENTD_HOST"]` and `ENV["FLUENTD_PORT"]` to configure. | |
| + | ### Kinesis Firehose [master] |
| + | |
| + | Add [aws-sdk](https://github.com/aws/aws-sdk-ruby) to your Gemfile. |
| + | |
| + | ```ruby |
| + | gem 'aws-sdk', '>= 2.0.0' |
| + | ``` |
| + | |
| + | And run: |
| + | |
| + | ```sh |
| + | rails generate ahoy:stores:kinesis_firehose |
| + | ``` |
| + | |
| + | Configure delivery streams and credentials in the initializer. |
| + | |
| ### Logs | |
| ```sh | |
ahoy.rb b/lib/ahoy.rb
+1
-0
| @@ | @@ -25,6 +25,7 @@ require "ahoy/stores/active_record_token_store" |
| require "ahoy/stores/log_store" | |
| require "ahoy/stores/fluentd_store" | |
| require "ahoy/stores/mongoid_store" | |
| + | require "ahoy/stores/kinesis_firehose_store" |
| require "ahoy/engine" | |
| require "ahoy/warden" if defined?(Warden) | |
ahoy/stores/kinesis_firehose_store.rb b/lib/ahoy/stores/kinesis_firehose_store.rb
+44
-0
| @@ | @@ -0,0 +1,44 @@ |
| + | module Ahoy |
| + | module Stores |
| + | class KinesisFirehoseStore < LogStore |
| + | def log_visit(data) |
| + | post(visits_stream, data) |
| + | end |
| + | |
| + | def log_event(data) |
| + | post(events_stream, data) |
| + | end |
| + | |
| + | def client |
| + | @client ||= Aws::Firehose::Client.new(credentials) |
| + | end |
| + | |
| + | def post(stream, data) |
| + | client.put_record_batch( |
| + | delivery_stream_name: stream, |
| + | records: [ |
| + | { |
| + | data: "#{data.to_json}\n" |
| + | } |
| + | ] |
| + | ) |
| + | end |
| + | |
| + | def credentials |
| + | { |
| + | access_key_id: ENV["AWS_ACCESS_KEY_ID"], |
| + | secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"], |
| + | region: "us-east-1" |
| + | } |
| + | end |
| + | |
| + | def visits_stream |
| + | "ahoy_visits" |
| + | end |
| + | |
| + | def events_stream |
| + | "ahoy_events" |
| + | end |
| + | end |
| + | end |
| + | end |
generators/ahoy/stores/kinesis_firehose_generator.rb b/lib/generators/ahoy/stores/kinesis_firehose_generator.rb
+15
-0
| @@ | @@ -0,0 +1,15 @@ |
| + | require "rails/generators" |
| + | |
| + | module Ahoy |
| + | module Stores |
| + | module Generators |
| + | class KinesisFirehoseGenerator < Rails::Generators::Base |
| + | source_root File.expand_path("../templates", __FILE__) |
| + | |
| + | def create_initializer |
| + | template "kinesis_firehose_initializer.rb", "config/initializers/ahoy.rb" |
| + | end |
| + | end |
| + | end |
| + | end |
| + | end |
generators/ahoy/stores/templates/kinesis_firehose_initializer.rb b/lib/generators/ahoy/stores/templates/kinesis_firehose_initializer.rb
+17
-0
| @@ | @@ -0,0 +1,17 @@ |
| + | class Ahoy::Store < Ahoy::Stores::KinesisFirehoseStore |
| + | def credentials |
| + | { |
| + | access_key_id: ENV["AWS_ACCESS_KEY_ID"], |
| + | secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"], |
| + | region: "us-east-1" |
| + | } |
| + | end |
| + | |
| + | def visits_stream |
| + | "ahoy_visits" |
| + | end |
| + | |
| + | def events_stream |
| + | "ahoy_events" |
| + | end |
| + | end |