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