fluent-plugin-mixpanel 0.0.6 → 0.0.7

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,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6815b604a35a38d95672504bf46dae46899827b8
4
- data.tar.gz: 653a7be3759ed89216cd98280313271f7ccdd2ea
3
+ metadata.gz: ce61d35f6244b42e741d6d7f3c783ab3ca163673
4
+ data.tar.gz: c63f6f73b9cd17f02a1463d8bf8eccf490b4a29a
5
5
  SHA512:
6
- metadata.gz: a1e5d36ce6c9ec2bd08bf5ad73380d49da7be09caf6bfba38bc464ff03362c8d6a307efc8e2923767fd58a06f8c9df736ec275ad253fb2c7322578a524f6fc4a
7
- data.tar.gz: 5e862b4b0bc31b9f705b1c43a63737608b2200f51ef41c1039feb0f069836e963e8ca7960cf16a8a80a16b1a84e862eb21e8f330a9142d8d73d95b3471613717
6
+ metadata.gz: 13c356b9919ce45d9d0a9659193088f76c795bda5dc09228e8979d97954ea1b539bb9178f52c6af59850b5cd7302e3cd47d7000d0182ab2f93bcdbbb09fecca4
7
+ data.tar.gz: 395b697c73e01b9d39a5dea0607fa4e9f75dbd11462e1b8032944d27f35b003699e5a3f33bc57454fe20c2f60e43b96eaee93aa6ffbd68623eb9cac248d03904
data/README.md CHANGED
@@ -60,14 +60,23 @@ tracker.track("123", "event1", { key1: "value1", key2: "value2" })
60
60
 
61
61
  #### Use distinct_id_key and event_map_tag
62
62
 
63
- You can use tag name as event name like this.
63
+ You can use tag name as event name like this. (see additional tag manipulations options below)
64
+
65
+ ##PLEASE NOTE (breaking api change in a future release)
66
+
67
+ The api for remove_tag_prefix will be changing in a future release. There is currently a boolean option,
68
+ use_legacy_prefix_behavior, which will ensure legacy behavior is maintained until that time. Eventually this option will go away
69
+ as well and the new behavior will be the only way. The difference is pretty simple, the '.' in the prefix needs to be specified.
70
+ This change allows this plugin to use Fluet's mixin and unifies syntax across plugins. Currently, use_legacy_prefix_behavior
71
+ defaults to true, which will work either way, but eventually you will need to specify the '.' in your prefix. Again, use_legacy_prefix_behavior simply removes any '.' along with the specified prefix and will behave properly even after you change your configs
72
+ to be current as seen below. You do not need to set this option.
64
73
 
65
74
  ```
66
75
  <match output.mixpanel.*>
67
76
  type mixpanel
68
77
  project_token YOUR_PROJECT_TOKEN
69
78
  distinct_id_key user_id
70
- remove_tag_prefix output.mixpanel
79
+ remove_tag_prefix output.mixpanel.
71
80
  event_map_tag true
72
81
  </match>
73
82
  ```
@@ -94,7 +103,7 @@ You can use tag name as event name like this.
94
103
  type mixpanel
95
104
  project_token YOUR_PROJECT_TOKEN
96
105
  distinct_id_key user_id
97
- remove_tag_prefix output.mixpanel
106
+ remove_tag_prefix output.mixpanel.
98
107
  event_map_tag true
99
108
  use_import true
100
109
  api_key YOUR_API_KEY
@@ -114,6 +123,17 @@ tracker = Mixpanel::Tracker.new(YOUR_PROJECT_TOKEN)
114
123
  tracker.import(api_key, "123", "event1", { key1: "value1", key2: "value2" })
115
124
  ```
116
125
 
126
+ ---
127
+
128
+ fluentd-plugin-mixpanel also includes the HandleTagNameMixin mixin which allows the following additional options:
129
+
130
+ ```
131
+ remove_tag_prefix <tag_prefix_to_remove_including_the_dot>
132
+ remove_tag_suffix <tag_suffix_to_remove_including_the_dot>
133
+ add_tag_prefix <tag_prefix_to_add_including_the_dot>
134
+ add_tag_suffix <tag_suffix_to_add_including_the_dot>
135
+ ```
136
+
117
137
  ### HttpMixpanelInput
118
138
 
119
139
  HttpMixpanelInput has same configuration as [http Input Plugin](http://docs.fluentd.org/en/articles/in_http).
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "fluent-plugin-mixpanel"
7
- spec.version = "0.0.6"
7
+ spec.version = "0.0.7"
8
8
  spec.authors = ["Kazuyuki Honda"]
9
9
  spec.email = ["hakobera@gmail.com"]
10
10
  spec.summary = %q{Fluentd plugin to input/output event track data to mixpanel}
@@ -1,15 +1,18 @@
1
+
1
2
  class Fluent::MixpanelOutput < Fluent::BufferedOutput
2
3
  Fluent::Plugin.register_output('mixpanel', self)
3
4
 
5
+ include Fluent::HandleTagNameMixin
6
+
4
7
  config_param :project_token, :string
5
8
  config_param :api_key, :string, :default => ''
6
9
  config_param :use_import, :bool, :default => nil
7
10
  config_param :distinct_id_key, :string
8
11
  config_param :event_key, :string, :default => nil
9
12
  config_param :ip_key, :string, :default => nil
10
-
11
- config_param :remove_tag_prefix, :string, :default => nil
12
13
  config_param :event_map_tag, :bool, :default => false
14
+ #NOTE: This will be removed in a future release. Please specify the '.' on any prefix
15
+ config_param :use_legacy_prefix_behavior, :default => true
13
16
 
14
17
  class MixpanelError < StandardError
15
18
  end
@@ -25,10 +28,10 @@ class Fluent::MixpanelOutput < Fluent::BufferedOutput
25
28
  @distinct_id_key = conf['distinct_id_key']
26
29
  @event_key = conf['event_key']
27
30
  @ip_key = conf['ip_key']
28
- @remove_tag_prefix = conf['remove_tag_prefix']
29
31
  @event_map_tag = conf['event_map_tag']
30
32
  @api_key = conf['api_key']
31
33
  @use_import = conf['use_import']
34
+ @use_legacy_prefix_behavior = conf['use_legacy_prefix_behavior']
32
35
 
33
36
  if @event_key.nil? and !@event_map_tag
34
37
  raise Fluent::ConfigError, "'event_key' must be specifed when event_map_tag == false."
@@ -58,7 +61,8 @@ class Fluent::MixpanelOutput < Fluent::BufferedOutput
58
61
  prop.delete('token')
59
62
 
60
63
  if @event_map_tag
61
- data['event'] = tag.gsub(/^#{@remove_tag_prefix}(\.)?/, '')
64
+ tag.gsub!(/^\./, '') if @use_legacy_prefix_behavior
65
+ data['event'] = tag
62
66
  elsif record[@event_key]
63
67
  data['event'] = record[@event_key]
64
68
  prop.delete(@event_key)
@@ -15,6 +15,7 @@ class MixpanelOutputTest < Test::Unit::TestCase
15
15
 
16
16
  IMPORT_CONFIG = CONFIG + %[ api_key test_api_key
17
17
  use_import true
18
+ use_legacy_prefix_behavior false
18
19
  ]
19
20
 
20
21
  def create_driver(conf = CONFIG)
@@ -58,12 +59,11 @@ class MixpanelOutputTest < Test::Unit::TestCase
58
59
  end
59
60
 
60
61
  def test_configure_with_event_map_tag
61
- d = create_driver(CONFIG + "remove_tag_prefix mixpanel\n event_map_tag true")
62
+ d = create_driver(CONFIG + "event_map_tag true")
62
63
 
63
64
  assert_equal 'test_token', d.instance.project_token
64
65
  assert_equal 'user_id', d.instance.distinct_id_key
65
66
  assert_equal nil, d.instance.event_key
66
- assert_equal 'mixpanel', d.instance.remove_tag_prefix
67
67
  assert_equal true.to_s, d.instance.event_map_tag
68
68
  end
69
69
 
@@ -121,9 +121,23 @@ class MixpanelOutputTest < Test::Unit::TestCase
121
121
  assert_equal "value2", @out[0]['properties']['key2']
122
122
  end
123
123
 
124
- def test_write_with_event_map_tag
124
+ def test_write_with_no_tag_manipulation
125
+ stub_mixpanel
126
+ d = create_driver(CONFIG + "event_map_tag true")
127
+ time = Time.new('2014-01-01T01:23:45+00:00')
128
+ d.emit(sample_record, time)
129
+ d.run
130
+
131
+ assert_equal "123", @out[0]['properties']['distinct_id']
132
+ assert_equal "mixpanel.test", @out[0]['event']
133
+ assert_equal time.to_i, @out[0]['properties']['time']
134
+ assert_equal "value1", @out[0]['properties']['key1']
135
+ assert_equal "value2", @out[0]['properties']['key2']
136
+ end
137
+
138
+ def test_write_with_event_map_tag_removing_prefix
125
139
  stub_mixpanel
126
- d = create_driver(CONFIG + "remove_tag_prefix mixpanel\n event_map_tag true")
140
+ d = create_driver(CONFIG + "remove_tag_prefix mixpanel.\n event_map_tag true")
127
141
  time = Time.new('2014-01-01T01:23:45+00:00')
128
142
  d.emit(sample_record, time)
129
143
  d.run
@@ -135,20 +149,78 @@ class MixpanelOutputTest < Test::Unit::TestCase
135
149
  assert_equal "value2", @out[0]['properties']['key2']
136
150
  end
137
151
 
138
- def test_write_with_no_remove_tag_prefix
152
+ def test_write_with_event_map_tag_removing_prefix_LEGACY
139
153
  stub_mixpanel
140
- d = create_driver(CONFIG + "event_map_tag true")
154
+ d = create_driver(CONFIG + "remove_tag_prefix mixpanel\n event_map_tag true\n use_legacy_prefix_behavior true")
141
155
  time = Time.new('2014-01-01T01:23:45+00:00')
142
156
  d.emit(sample_record, time)
143
157
  d.run
144
158
 
145
- assert_equal "123", @out[0]['properties']['distinct_id']
146
- assert_equal "mixpanel.test", @out[0]['event']
147
- assert_equal time.to_i, @out[0]['properties']['time']
148
- assert_equal "value1", @out[0]['properties']['key1']
149
- assert_equal "value2", @out[0]['properties']['key2']
159
+ assert_equal "123", @out[0]['properties']['distinct_id']
160
+ assert_equal "test", @out[0]['event']
161
+ assert_equal time.to_i, @out[0]['properties']['time']
162
+ assert_equal "value1", @out[0]['properties']['key1']
163
+ assert_equal "value2", @out[0]['properties']['key2']
164
+ end
165
+
166
+ def test_write_with_event_map_tag_removing_prefix_LEGACY_with_dot
167
+ stub_mixpanel
168
+ d = create_driver(CONFIG + "remove_tag_prefix mixpanel.\n event_map_tag true\n use_legacy_prefix_behavior true")
169
+ time = Time.new('2014-01-01T01:23:45+00:00')
170
+ d.emit(sample_record, time)
171
+ d.run
172
+
173
+ assert_equal "123", @out[0]['properties']['distinct_id']
174
+ assert_equal "test", @out[0]['event']
175
+ assert_equal time.to_i, @out[0]['properties']['time']
176
+ assert_equal "value1", @out[0]['properties']['key1']
177
+ assert_equal "value2", @out[0]['properties']['key2']
178
+ end
179
+
180
+ def test_write_with_event_map_tag_removing_suffix
181
+ stub_mixpanel
182
+ d = create_driver(CONFIG + "remove_tag_suffix .test\n event_map_tag true")
183
+ time = Time.new('2014-01-01T01:23:45+00:00')
184
+ d.emit(sample_record, time)
185
+ d.run
186
+
187
+ assert_equal "123", @out[0]['properties']['distinct_id']
188
+ assert_equal "mixpanel", @out[0]['event']
189
+ assert_equal time.to_i, @out[0]['properties']['time']
190
+ assert_equal "value1", @out[0]['properties']['key1']
191
+ assert_equal "value2", @out[0]['properties']['key2']
192
+ end
193
+
194
+ def test_write_with_event_map_tag_adding_prefix
195
+ stub_mixpanel
196
+ d = create_driver(CONFIG + "add_tag_prefix foo.\n event_map_tag true")
197
+ time = Time.new('2014-01-01T01:23:45+00:00')
198
+ d.emit(sample_record, time)
199
+ d.run
200
+
201
+ assert_equal "123", @out[0]['properties']['distinct_id']
202
+ assert_equal "foo.mixpanel.test", @out[0]['event']
203
+ assert_equal time.to_i, @out[0]['properties']['time']
204
+ assert_equal "value1", @out[0]['properties']['key1']
205
+ assert_equal "value2", @out[0]['properties']['key2']
206
+ end
207
+
208
+ def test_write_with_event_map_tag_adding_suffix
209
+ stub_mixpanel
210
+ d = create_driver(CONFIG + "add_tag_suffix .foo\n event_map_tag true")
211
+ time = Time.new('2014-01-01T01:23:45+00:00')
212
+ d.emit(sample_record, time)
213
+ d.run
214
+
215
+ assert_equal "123", @out[0]['properties']['distinct_id']
216
+ assert_equal "mixpanel.test.foo", @out[0]['event']
217
+ assert_equal time.to_i, @out[0]['properties']['time']
218
+ assert_equal "value1", @out[0]['properties']['key1']
219
+ assert_equal "value2", @out[0]['properties']['key2']
150
220
  end
151
221
 
222
+
223
+
152
224
  def test_write_ignore_special_event
153
225
  stub_mixpanel
154
226
  d = create_driver(CONFIG + "event_key event")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-mixpanel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kazuyuki Honda
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-02 00:00:00.000000000 Z
11
+ date: 2015-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd