keen-cli 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -96,8 +96,10 @@ keen-cli has a variety of commands, and most are namespaced for clarity.
96
96
 
97
97
  Parameters:
98
98
 
99
- + `--collection` (alias `-c`): The collection to add the event to. Alternately you can set `KEEN_COLLECTION_NAME` on the environment if you're working with the same collection frequently.
100
- + `--data` (alias `-d`). The properties of the event. The value can be JSON or key=value pairs delimited by & (just like a query string). Data can also be piped in via STDIN.
99
+ + `--collection`, `-c`: The collection to add the event to. Alternately you can set `KEEN_COLLECTION_NAME` on the environment if you're working with the same collection frequently.
100
+ + `--data`, `-d`: The properties of the event. The value can be JSON or `key=value` pairs delimited by `&` (just like a query string). Data can also be piped in via STDIN.
101
+ + `--file`, `-f`: The name of a file that contains newline delimited JSON
102
+ + `--csv`: Specify that the file is in CSV format
101
103
 
102
104
  Various examples:
103
105
 
@@ -124,6 +126,12 @@ $ echo "{ \"username\" : \"dzello\", \"zsh\": 1 }" | keen events:add -c cli-test
124
126
  # pipe in events in querystring format
125
127
  $ echo "username=dzello&zsh=1" | keen events:add -c cli-test
126
128
 
129
+ # specify a file that contains newline delimited json
130
+ $ keen events:add --file events.json
131
+
132
+ # specify a file in CSV format
133
+ $ keen events:add --csv --file events.csv
134
+
127
135
  # pipe in events from a file of newline delimited json
128
136
  # { "username" : "dzello", "zsh" : 1 }
129
137
  # { "username" : "dkador", "zsh" : 1 }
@@ -137,20 +145,20 @@ $ cat events.json | keen events:add -c cli-test
137
145
 
138
146
  Parameters:
139
147
 
140
- + `--collection` (alias -c) – The collection name to query against. Can also be set on the environment via `KEEN_COLLECTION_NAME`
141
- + `--analysis-type` (alias -a)
142
- + `--group-by` (alias -g)
143
- + `--target-property` (alias -y)
144
- + `--timeframe` (alias -t) - A relative timeframe, e.g. `last_60_minutes`
145
- + `--start` (alias -s) - The start time of an absolute timeframe
146
- + `--end` (alias -e) - The end time of an absolute timeframe
147
- + `--interval` (alias -i)
148
- + `--filters` (alias -f)
149
- + `--percentile`
150
- + `--property-names` - A comma-separated list of property names. Extractions only.
151
- + `--latest` - Number of latest events to retrieve. Extractions only.
152
- + `--email` - Send extraction results via email, asynchronously. Extractions only.
153
- + `--data` (alias -d) - Specify query parameters as JSON instead of query params. Data can also be piped in via STDIN.
148
+ + `--collection`, `-c`: – The collection to query against. Can also be set on the environment via `KEEN_COLLECTION_NAME`.
149
+ + `--analysis-type`, `-a`: The analysis type for the query. Only needed when not using a query command alias.
150
+ + `--group-by`, `-g`: A group by for the query.
151
+ + `--target-property`, `-y`: A target property for the query.
152
+ + `--timeframe`, `-t`: A relative timeframe, e.g. `last_60_minutes`.
153
+ + `--start`, `-s`: The start time of an absolute timeframe.
154
+ + `--end`, `-e`: The end time of an absolute timeframe.
155
+ + `--interval`, `-i`: The interval for a series query.
156
+ + `--filters`, `-f`: A set of filters for the query, passed as JSON.
157
+ + `--percentile`: The percentile value (e.g. 99) for a percentile query.
158
+ + `--property-names`: A comma-separated list of property names. Extractions only.
159
+ + `--latest`: Number of latest events to retrieve. Extractions only.
160
+ + `--email`: Send extraction results via email, asynchronously. Extractions only.
161
+ + `--data`, `-d`: Specify query parameters as JSON instead of query params. Data can also be piped in via STDIN.
154
162
 
155
163
  Some examples:
156
164
 
@@ -224,6 +232,7 @@ Run `keen` with no arguments to see the full list of aliases.
224
232
 
225
233
  ### Changelog
226
234
 
235
+ + 0.1.5 – Support adding events from files with `--file`. Optionally add from CSV with `--csv`.
227
236
  + 0.1.4 – Support absolute timeframes via `--start` and `--end` flags
228
237
  + 0.1.3 – Add querying via JSON. Add query aliases. Add support for extraction fields.
229
238
  + 0.1.2 – Change `project:show` to `project:describe`
data/lib/keen-cli/cli.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'thor'
2
2
  require 'keen'
3
3
  require 'json'
4
+ require 'csv'
4
5
 
5
6
  require 'keen-cli/utils'
6
7
 
@@ -19,6 +20,11 @@ module KeenCli
19
20
  option :data, :aliases => ['-d']
20
21
  end
21
22
 
23
+ def self.file_options
24
+ option :file, :aliases => ['-f']
25
+ option :csv
26
+ end
27
+
22
28
  def self.collection_options
23
29
  option :collection, :aliases => ['-c']
24
30
  end
@@ -182,34 +188,52 @@ module KeenCli
182
188
 
183
189
  shared_options
184
190
  data_options
191
+ file_options
185
192
  collection_options
186
193
 
187
194
  def events_add
188
195
 
189
196
  events = []
197
+ collection = Utils.get_collection_name(options)
198
+
199
+ if options[:csv]
200
+
201
+ data = File.read(options[:file])
202
+ csv = CSV.new(data, :headers => true, :header_converters => :symbol, :converters => :all)
203
+ events = csv.to_a.map {|row| row.to_hash }
190
204
 
191
- if $stdin.tty?
192
- events.push(options[:data] || {})
193
205
  else
194
- ARGV.clear
195
- ARGF.each_line do |line|
196
- events.push(line)
206
+
207
+ if $stdin.tty?
208
+ if data = options[:data]
209
+ events.push(data)
210
+ elsif file = options[:file]
211
+ File.readlines(file).each do |line|
212
+ events.push(line)
213
+ end
214
+ else
215
+ events.push({})
216
+ end
217
+ else
218
+ ARGV.clear
219
+ ARGF.each_line do |line|
220
+ events.push(line)
221
+ end
197
222
  end
198
- end
199
223
 
200
- events = events.map do |event|
201
- begin
202
- JSON.parse(event)
203
- rescue
224
+ events = events.map do |event|
204
225
  begin
205
- Utils.parse_data_as_querystring(event)
226
+ JSON.parse(event)
206
227
  rescue
207
- event
228
+ begin
229
+ Utils.parse_data_as_querystring(event)
230
+ rescue
231
+ event
232
+ end
208
233
  end
209
234
  end
210
- end
211
235
 
212
- collection = Utils.get_collection_name(options)
236
+ end
213
237
 
214
238
  if events.length > 1
215
239
 
@@ -1,3 +1,3 @@
1
1
  module KeenCli
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.5"
3
3
  end
@@ -0,0 +1,4 @@
1
+ foo
2
+ 1
3
+ 2
4
+ 3
@@ -0,0 +1,3 @@
1
+ { "foo" : 1 }
2
+ { "foo" : 2 }
3
+ { "foo" : 3 }
@@ -140,4 +140,33 @@ describe KeenCli::CLI do
140
140
  end
141
141
  end
142
142
  end
143
+
144
+ describe 'events:add' do
145
+ it 'should accept JSON events from a data param' do
146
+ url = "https://api.keen.io/3.0/projects/#{project_id}/events/minecraft-deaths"
147
+ stub_request(:post, url).
148
+ with(:body => { "foo" => 1 }).
149
+ to_return(:body => { :created => true }.to_json)
150
+ _, options = start 'events:add --collection minecraft-deaths --data {"foo":1}'
151
+ expect(_).to eq("created" => true)
152
+ end
153
+
154
+ it 'should accept JSON events from a file param' do
155
+ url = "https://api.keen.io/3.0/projects/#{project_id}/events/minecraft-deaths"
156
+ stub_request(:post, "https://api.keen.io/3.0/projects/AAAAAAA/events").
157
+ with(:body => "{\"minecraft-deaths\":[{\"foo\":1},{\"foo\":2},{\"foo\":3}]}").
158
+ to_return(:body => { :created => true }.to_json)
159
+ _, options = start "events:add --collection minecraft-deaths --file #{File.expand_path('../../fixtures/events.json', __FILE__)}"
160
+ expect(_).to eq("created" => true)
161
+ end
162
+
163
+ it 'should accept JSON events from a file param in CSV format' do
164
+ url = "https://api.keen.io/3.0/projects/#{project_id}/events/minecraft-deaths"
165
+ stub_request(:post, "https://api.keen.io/3.0/projects/AAAAAAA/events").
166
+ with(:body => "{\"minecraft-deaths\":[{\"foo\":1},{\"foo\":2},{\"foo\":3}]}").
167
+ to_return(:body => { :created => true }.to_json)
168
+ _, options = start "events:add --collection minecraft-deaths --csv --file #{File.expand_path('../../fixtures/events.csv', __FILE__)}"
169
+ expect(_).to eq("created" => true)
170
+ end
171
+ end
143
172
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: keen-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-07-20 00:00:00.000000000 Z
12
+ date: 2014-07-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: keen
@@ -142,6 +142,8 @@ files:
142
142
  - lib/keen-cli/cli.rb
143
143
  - lib/keen-cli/utils.rb
144
144
  - lib/keen-cli/version.rb
145
+ - spec/fixtures/events.csv
146
+ - spec/fixtures/events.json
145
147
  - spec/keen-cli/cli_spec.rb
146
148
  - spec/spec_helper.rb
147
149
  homepage: https://github.com/keenlabs/keen-cli
@@ -170,6 +172,8 @@ signing_key:
170
172
  specification_version: 3
171
173
  summary: Command line interface to Keen IO
172
174
  test_files:
175
+ - spec/fixtures/events.csv
176
+ - spec/fixtures/events.json
173
177
  - spec/keen-cli/cli_spec.rb
174
178
  - spec/spec_helper.rb
175
179
  has_rdoc: