logstash-filter-mixpanel 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZWM4MmFhYmZjMGE4NDFkZGI2YWQ0MDg0ODI1NDMwMzY1ZGQ2NzkyMQ==
4
+ ZDA1YzRhYzRiMTJhYzRlZDliOTQ1NjI3NmJhM2I0NjQ5ZjJmN2Y2Ng==
5
5
  data.tar.gz: !binary |-
6
- MDYyOGFlYTZkZGQ0MDNmZDdiYmRkOThjMTNjNzYzMWQ5N2Q1M2MyNw==
6
+ Nzg2ZDMxYzYzNzdlY2Q3NzY2YTgzZDJkZjEwZjg4NWFlM2YyMDg1OA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- Nzk5MzZhYTcyYTRjNTlkMGUzNThiMTUzZmM5OGFmMGEzMGZiNGE5YjMzZmUz
10
- MTE3NDk3OWZkNjhmZjc0NDQzNzMxMTYxZWExYmJhMjI4YjhiMzEwMjJlMDdj
11
- NmQyNzFjMjk1MzRhMDFiMDU4YjdiNTcxYmVjMTNiNWE3NjE4OTA=
9
+ MGQ3M2VjMjRmMzk3NWVjYTJmOTNlMjJkOTlhYjcwM2RjNGE4YzVjZTJjODFm
10
+ ZWFkMzFhMjUwNzU1N2ZhNjY4NjQ4YzY5YjdjNjc1NmQwZTBiZWNkNmFiZmE3
11
+ ZTJjOTY4NjBhYzhmMjUxMmQ5N2RiYTg2NGM2ZGE1YzBmNDY5NGY=
12
12
  data.tar.gz: !binary |-
13
- ZjFlNDUwOWJkM2M4ODgyZmU4MTEwNmNjNDA3YWZjNzcyNTAyMmE3ODk1MzNm
14
- MGQxZmQ3MzRmYzNlYTkxMzEzYjM2NzAyYzI5OTFjODdkNzBmNmRlOTA5ZWU0
15
- ZTdjNGYyOTY2YmM1YWRhZjJmODczOWE0MDhlOTBhOGNlYWJkMTg=
13
+ ZTY3MjBmMjdiYWIzYjM2M2MyZGVhYjJhMzU1ZDZlNmI4MGU4MDY2YjQxNDdk
14
+ NWY1OTg4Nzg1ZjM4OTE2NWFkMTcwN2I5ZDk3YmUzN2MyN2U0YzE4MTU4N2Zh
15
+ YTgyOGRjNjlkNWRhMDZlMWZhYTYyZmI0ZTRkYjBiOWU1NmQ1YTA=
data/Gemfile CHANGED
@@ -1,3 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
  gemspec
3
- gem 'coveralls', require: false
3
+ gem 'mixpanel_client', '~> 4.1.2'
4
+ gem 'coveralls', require: false
5
+ # gem "ffaker", "~> 2.0"
6
+ # gem "mixpanel-ruby", "< 2.0"
data/README.md CHANGED
@@ -6,7 +6,7 @@ It is fully free and fully open source. The license is Apache 2.0, meaning you a
6
6
 
7
7
  # Status
8
8
  - [![Gem Version](https://badge.fury.io/rb/logstash-filter-mixpanel.svg)](http://badge.fury.io/rb/logstash-filter-mixpanel)
9
- - [![Build Status](https://travis-ci.org/torstenfeld/logstash-filter-mixpanel.svg?branch=master)](https://travis-ci.org/torstenfeld/logstash-filter-mixpanel) (master)
9
+ - [![Build Status](https://travis-ci.org/torstenfeld/logstash-filter-mixpanel.svg?branch=master)](https://travis-ci.org/torstenfeld/logstash-filter-mixpanel)
10
10
  - [![Coverage Status](https://coveralls.io/repos/torstenfeld/logstash-filter-mixpanel/badge.svg?branch=master)](https://coveralls.io/r/torstenfeld/logstash-filter-mixpanel?branch=master)
11
11
  - [![Code Climate](https://codeclimate.com/github/torstenfeld/logstash-filter-mixpanel/badges/gpa.svg)](https://codeclimate.com/github/torstenfeld/logstash-filter-mixpanel)
12
12
  - [![Dependency Status](https://gemnasium.com/torstenfeld/logstash-filter-mixpanel.svg)](https://gemnasium.com/torstenfeld/logstash-filter-mixpanel)
@@ -15,8 +15,7 @@ It is fully free and fully open source. The license is Apache 2.0, meaning you a
15
15
 
16
16
  - Edit Logstash `Gemfile` and add needed requirements:
17
17
  ```ruby
18
- gem "whatlanguage"
19
- gem "logstash-filter-mixpanel", ">= 0.2.0", :git => "https://github.com/torstenfeld/logstash-filter-mixpanel.git"
18
+ gem "logstash-filter-mixpanel", ">= 0.1.0", :git => "https://github.com/torstenfeld/logstash-filter-mixpanel.git"
20
19
  ```
21
20
 
22
21
 
@@ -24,3 +23,6 @@ gem "logstash-filter-mixpanel", ">= 0.2.0", :git => "https://github.com/torstenf
24
23
  ```sh
25
24
  bundle install
26
25
  ```
26
+
27
+ # Using
28
+ [![Mixpanel Logo](https://cdn.mxpnl.com/site_media/images/partner/badge_blue.png)](https://mixpanel.com/f/partner)
@@ -1,12 +1,13 @@
1
1
  # encoding: utf-8
2
2
  require "logstash/filters/base"
3
3
  require "logstash/namespace"
4
+ require 'mixpanel_client'
4
5
 
5
6
  # This example filter will replace the contents of the default
6
7
  # message field with whatever you specify in the configuration.
7
8
  #
8
9
  # It is only intended to be used as an example.
9
- class LogStash::Filters::Example < LogStash::Filters::Base
10
+ class LogStash::Filters::Mixpanel < LogStash::Filters::Base
10
11
 
11
12
  # Setting the config_name here is required. This is how you
12
13
  # configure this filter from your Logstash config.
@@ -17,27 +18,41 @@ class LogStash::Filters::Example < LogStash::Filters::Base
17
18
  # }
18
19
  # }
19
20
  #
20
- config_name "example"
21
+ config_name "mixpanel"
21
22
 
22
23
  # Replace the message with this value.
23
- config :message, :validate => :string, :default => "Hello World!"
24
-
24
+ config :api_key, :validate => :string, :required => true
25
+ config :api_secret, :validate => :string, :required => true
26
+ config :where, :validate => :string, :required => true
27
+ config :source, :validate => :string, :default => 'message'
28
+ config :target, :validate => :string, :default => 'mixpanel'
29
+
25
30
 
26
31
  public
27
32
  def register
28
- # Add instance variables
33
+ @mp = Mixpanel::Client.new(
34
+ api_key: @api_key,
35
+ api_secret: @api_secret
36
+ )
29
37
  end # def register
30
38
 
31
39
  public
32
40
  def filter(event)
33
41
 
34
- if @message
35
- # Replace the event message with our message as configured in the
36
- # config file.
37
- event["message"] = @message
38
- end
42
+ result = fetch_data
43
+ # TODO: remove puts result
44
+ puts result
45
+ event[@target] = result
39
46
 
40
47
  # filter_matched should go in the last line of our successful code
41
48
  filter_matched(event)
42
49
  end # def filter
50
+
51
+ private
52
+ def fetch_data
53
+ options = {}
54
+ # options['where'] = @where if @where
55
+ result = @mp.request('engage', options)
56
+ result
57
+ end
43
58
  end # class LogStash::Filters::Example
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-filter-mixpanel'
3
- s.version = '0.1.0'
3
+ s.version = '0.1.1'
4
4
  s.version = "#{s.version}.pre.#{ENV['TRAVIS_BUILD_NUMBER']}" if ENV['TRAVIS'] and ENV['TRAVIS_BRANCH'] != 'master'
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "This filter checks mixpanel for additional people data and adds it to the event data"
@@ -20,6 +20,9 @@ Gem::Specification.new do |s|
20
20
 
21
21
  # Gem dependencies
22
22
  s.add_runtime_dependency "logstash-core", '>= 1.4.0', '< 2.0.0'
23
+ s.add_runtime_dependency "mixpanel_client", '~> 4.1'
23
24
  s.add_development_dependency 'logstash-devutils'
24
- s.add_development_dependency 'coveralls', '~> 0.8.1'
25
+ s.add_development_dependency 'coveralls', '~> 0.8'
26
+ s.add_development_dependency 'ffaker', '~> 2.0'
27
+ s.add_development_dependency 'mixpanel-ruby', '< 2.0'
25
28
  end
data/mixpanel_test.rb ADDED
@@ -0,0 +1,43 @@
1
+ # require File.absolute_path(File.join(File.dirname(__FILE__), 'lib/logstash/filters/mixpanel'))
2
+ # require 'lib/logstash/filters/mixpanel'
3
+
4
+
5
+ class MixpanelTest
6
+ def initialize
7
+ require 'rubygems'
8
+ require 'mixpanel_client'
9
+ @mp = Mixpanel::Client.new(
10
+ api_key: ENV['MP_PROJECT_KEY'],
11
+ api_secret: ENV['MP_PROJECT_SECRET']
12
+ )
13
+ end
14
+
15
+ def run
16
+ result = fetch_data
17
+ result
18
+ end
19
+
20
+ private
21
+ def fetch_data
22
+ result = @mp.request('engage', {})
23
+ result
24
+ end
25
+ end
26
+
27
+ # mpt = MixpanelTest.new
28
+ # mpt.config
29
+ # res = mpt.run
30
+ # puts res.inspect
31
+
32
+ test_hash = {
33
+ 'filter' {
34
+ 'languagedetect' => {
35
+ 'api_key' => ENV['MP_PROJECT_KEY'],
36
+ 'api_secret' => ENV['MP_PROJECT_SECRET'],
37
+ 'where' => '123'
38
+ }
39
+ }
40
+ }
41
+
42
+ test_string = test_hash.to_s
43
+ puts test_string
@@ -1,20 +1,113 @@
1
1
  require File.absolute_path(File.join(File.dirname(__FILE__), '../../spec/spec_helper'))
2
2
  require File.absolute_path(File.join(File.dirname(__FILE__), '../../lib/logstash/filters/mixpanel'))
3
+ require 'mixpanel_client'
4
+ require 'mixpanel-ruby'
5
+ require 'ffaker'
6
+ require 'base64'
3
7
 
4
- describe LogStash::Filters::Example do
5
- describe "Set to Hello World" do
8
+
9
+ describe LogStash::Filters::Mixpanel do
10
+ before(:all) do
11
+ @mp = Mixpanel::Tracker.new(ENV['MP_PROJECT_TOKEN'])
12
+
13
+ @user_id = FFaker::Guid.guid
14
+ @user_ip = FFaker::Internet.ip_v4_address
15
+ @user_data = {
16
+ :$first_name => FFaker::NameDE.first_name,
17
+ :$last_name => FFaker::NameDE.last_name,
18
+ :$email => FFaker::Internet.safe_email
19
+ }
20
+ @mp.people.set(@user_id, @user_data, ip=@user_ip)
21
+ @mp.track(@user_id, 'user created')
22
+ end
23
+
24
+ context 'raise error' do
25
+ context 'on wrong api key config' do
26
+ subject {
27
+ config = {
28
+ 'api_key' => 123
29
+ }
30
+ filter = LogStash::Filters::Mixpanel.new config
31
+ }
32
+
33
+ it 'should raise error on invalid api key config' do
34
+ insist { subject.register }.raises(LogStash::ConfigurationError)
35
+ end
36
+ end
37
+
38
+ context 'on wrong api secret config' do
39
+ subject {
40
+ config = {
41
+ 'api_secret' => 123
42
+ }
43
+ filter = LogStash::Filters::Mixpanel.new config
44
+ }
45
+
46
+ it 'should raise error on invalid api secret config' do
47
+ insist { subject.register }.raises(LogStash::ConfigurationError)
48
+ end
49
+ end
50
+
51
+ context 'on invalid api key' do
52
+ subject {
53
+ config = {
54
+ 'api_key' => '123',
55
+ 'api_secret' => '123',
56
+ 'where' => '123'
57
+ }
58
+ filter = LogStash::Filters::Mixpanel.new config
59
+ filter.register
60
+ filter.filter LogStash::Event.new
61
+ }
62
+
63
+ it 'should raise error on invalid api key' do
64
+ insist { subject.filter.flush }.raises(Mixpanel::HTTPError)
65
+ end
66
+ end
67
+
68
+ context 'on invalid api secret' do
69
+ subject {
70
+ config = {
71
+ 'api_key' => ENV['MP_PROJECT_KEY'],
72
+ 'api_secret' => '123',
73
+ 'where' => '123'
74
+ }
75
+ filter = LogStash::Filters::Mixpanel.new config
76
+ filter.register
77
+ filter.filter LogStash::Event.new
78
+ # filter.filter LogStash::Event.new({'message' => 'test'})
79
+ }
80
+
81
+ it 'should raise error on invalid api secret' do
82
+ insist { subject.filter.flush }.raises(Mixpanel::HTTPError)
83
+ end
84
+ end
85
+ end
86
+
87
+ context 'fetch created user' do
6
88
  let(:config) do <<-CONFIG
7
89
  filter {
8
- example {
9
- message => "Hello World"
90
+ mixpanel {
91
+ api_key => '#{ENV['MP_PROJECT_KEY']}'
92
+ api_secret => '#{ENV['MP_PROJECT_SECRET']}'
93
+ where => '123'
10
94
  }
11
95
  }
12
96
  CONFIG
13
97
  end
14
98
 
15
- sample("message" => "some text") do
16
- expect(subject).to include("message")
17
- expect(subject['message']).to eq('Hello World')
99
+ # sample("message" => "123") do
100
+ # expect(subject).to include('mixpanel')
101
+ # end
102
+
103
+ context 'by distinct id' do
104
+ sample("message" => "123") do
105
+ expect(subject).to include('mixpanel')
106
+ end
18
107
  end
19
108
  end
109
+
110
+ after(:all) do
111
+ @mp.people.delete_user(@user_id)
112
+ end
20
113
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-filter-mixpanel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Torsten Feld
@@ -30,6 +30,20 @@ dependencies:
30
30
  - - <
31
31
  - !ruby/object:Gem::Version
32
32
  version: 2.0.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: mixpanel_client
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ~>
38
+ - !ruby/object:Gem::Version
39
+ version: '4.1'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: '4.1'
33
47
  - !ruby/object:Gem::Dependency
34
48
  name: logstash-devutils
35
49
  requirement: !ruby/object:Gem::Requirement
@@ -50,14 +64,42 @@ dependencies:
50
64
  requirements:
51
65
  - - ~>
52
66
  - !ruby/object:Gem::Version
53
- version: 0.8.1
67
+ version: '0.8'
54
68
  type: :development
55
69
  prerelease: false
56
70
  version_requirements: !ruby/object:Gem::Requirement
57
71
  requirements:
58
72
  - - ~>
59
73
  - !ruby/object:Gem::Version
60
- version: 0.8.1
74
+ version: '0.8'
75
+ - !ruby/object:Gem::Dependency
76
+ name: ffaker
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ~>
80
+ - !ruby/object:Gem::Version
81
+ version: '2.0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ~>
87
+ - !ruby/object:Gem::Version
88
+ version: '2.0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: mixpanel-ruby
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - <
94
+ - !ruby/object:Gem::Version
95
+ version: '2.0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - <
101
+ - !ruby/object:Gem::Version
102
+ version: '2.0'
61
103
  description: This gem is a logstash plugin required to be installed on top of the
62
104
  Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not
63
105
  a stand-alone program
@@ -77,6 +119,7 @@ files:
77
119
  - Rakefile
78
120
  - lib/logstash/filters/mixpanel.rb
79
121
  - logstash-filter-mixpanel.gemspec
122
+ - mixpanel_test.rb
80
123
  - spec/filters/mixpanel_spec.rb
81
124
  - spec/spec_helper.rb
82
125
  homepage: https://github.com/torstenfeld/logstash-filter-mixpanel