dscli 0.0.1 → 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,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: be97fdf910c4c1f9dba126aeff2867551efaeee1
4
- data.tar.gz: c8390e2ca3fce6db88e4761cf51311b0043b86de
3
+ metadata.gz: 9742d9c0950b2e48c61b676a8373d27fa5b13c6c
4
+ data.tar.gz: c6cd518e48efd480348a3ecadaa14815151e2ea5
5
5
  SHA512:
6
- metadata.gz: 9c74ffe5247d7dde77d097851ff4e1531a70c2632e27506b339507003c5ed4e0c4d4708e7112ae9fee737eab03936c3048bb8a609e3e0964fa1a741cf6d23a6a
7
- data.tar.gz: a542e3cc952a3335ff4d1c222b90229ecc624854746e0be9250c1fe910ee803f855d6fe7f6859685fb752e02612b4a727b604968ea376e0e55db0ea66d011cc8
6
+ metadata.gz: cf49bbb677cc4a28debf4c23af619ccd2d40e66b80cfbaebd8d4157e1e8d40b5236af1046195c4bbc80ec210e09e976c2dfae3158c246a4ac7e61bad1bf4543a
7
+ data.tar.gz: 21f94e1c8156ddb1a87b920f049765075738403c48c997cd45b40436ba79c9fbe6db3bcbd48d3c7f45b6fd29b4a33a75502e7317a68ae1bd3c8b6af8ad5661b0
data/README.md CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  DSCLI is a command line wrapper around the DataSift API Client Library for Ruby.
4
4
  It was built by the DataSift Support Team to help speed up tasks we found ourselves frequently repeating.
5
- Version 0.0.1 offers support for only some of the core API functions. Support for the Push and Historics APIs is on it's way.
6
5
 
7
6
  ## Installation
8
7
 
@@ -12,15 +11,25 @@ This tool was intended for use as a CLI tool only:
12
11
 
13
12
  ## Usage
14
13
 
15
- First, call ``` dscli config ``` to enter your DataSift API credentials. This will store your username and API key in a new file called ~/.datasiftcli
14
+ First, call ``` dscli config ``` to enter your DataSift API credentials. This will store your username and API key in a new file called ~/.datasiftcli.
16
15
  You should then be free to use any of following commands:
17
16
 
18
- dscli compile (csdl) # Compile CSDL
19
- dscli config # Configure your DataSift API credentials
20
- dscli dpu (hash) # Find the DPU cost of a given stream hash
21
- dscli help [COMMAND] # Describe available commands or one specific command
22
- dscli stream (hash) # Stream interactions from a DataSift stream to the command line
23
- dscli usage [period] # Find your stream and license fee usage
17
+ dscli balance # Gets your current plan and balance
18
+ dscli compile (csdl) # Compile CSDL
19
+ dscli config # Configure your DataSift API credentials
20
+ dscli dpu (hash) # Find the DPU cost of a given stream hash
21
+ dscli help [COMMAND] # Describe available commands or one specific command
22
+ dscli historics <command> # Run commands relating to historics
23
+ dscli push <command> # Run commands relating to push subscriptions
24
+ dscli source <command> # Run commands relating to managed sources
25
+ dscli stream (hash) # Stream interactions from a DataSift stream to the command line
26
+ dscli usage [period] # Find your stream and license fee usage
27
+
28
+
29
+ ## Example Usage
30
+
31
+ $ dscli compile 'interaction.content contains "coffee"'
32
+ => ce9d18e45a53dfa2dfde7747f8c5d98b
24
33
 
25
34
  ## Contributing
26
35
 
data/bin/dscli CHANGED
@@ -1,5 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ require 'thor'
3
4
  require 'dscli'
5
+ require 'yaml'
6
+
7
+ CLI.start
4
8
 
5
- Dscli::Commands.start(ARGV)
data/lib/dscli/api.rb CHANGED
@@ -8,7 +8,7 @@ module Dscli
8
8
  def initialize
9
9
  storage = Dscli::Storage.new
10
10
  config = storage.get_auth
11
- @config = {:username => config[:auth][:username], :api_key => config[:auth][:api_key], :enable_ssl => false}
11
+ @config = {:username => config[:auth][:username], :api_key => config[:auth][:api_key], :enable_ssl => true}
12
12
  @datasift = DataSift::Client.new(@config)
13
13
  end
14
14
 
@@ -32,12 +32,17 @@ module Dscli
32
32
  dpu = response[:data]
33
33
  end
34
34
 
35
+ def balance
36
+ response = @datasift.balance
37
+ return response[:data]
38
+ end
39
+
35
40
  def stream(hash)
36
41
  on_delete = lambda { |stream, m| puts m }
37
42
  on_error = lambda { |stream, e| puts 'A serious error has occurred: ' + e.message.to_s }
38
43
  on_message = lambda { |message, stream, hash| puts Yajl::Encoder.encode(message) }
39
44
  on_connect = lambda { |stream| stream.subscribe(hash, on_message) }
40
- on_close = lambda { |stream| puts 'closed' }
45
+ on_close = lambda { |stream, message| puts "Closed #{stream}: #{message}" }
41
46
 
42
47
  on_datasift_message = lambda do |stream, message, hash|
43
48
  puts "DataSift Message #{hash} ==> #{message}"
@@ -57,16 +62,92 @@ module Dscli
57
62
  end
58
63
  end
59
64
 
60
- #
61
- # Push API endpoints
62
- #
63
- #
65
+ #######################################################
66
+ # PUSH
67
+ #######################################################
68
+
69
+ def push_list(page)
70
+ response = @datasift.push.get(page)
71
+ response[:data]
72
+ end
73
+
74
+ def push_get(id)
75
+ response = @datasift.push.get_by_subscription(id)
76
+ return response
77
+ end
78
+
79
+ def push_stop(id)
80
+ response = @datasift.push.stop(id)
81
+ puts response
82
+ end
83
+
84
+ def push_delete(id)
85
+ response = @datasift.push.delete(id)
86
+ return response
87
+ end
88
+
89
+ def push_log(id)
90
+
91
+ if id.nil?
92
+ response = @datasift.push.log
93
+ else
94
+ response = @datasift.push.log_for(id)
95
+ end
96
+
97
+ return response[:data]
98
+
99
+ end
100
+
101
+ #######################################################
102
+ # HISTORICS
103
+ #######################################################
64
104
 
65
- #def pushcreate(name)
66
- # storage = Dscli::Storage.new
67
- # endpoint = storage.get_push_endpoint(name)
68
- # puts endpoint
69
- #end
105
+ def historics_list(page)
106
+ response = @datasift.historics.get(20,page)
107
+ response[:data]
108
+ end
109
+
110
+ def historics_get(id)
111
+ return @datasift.historics.get_by_id(id)
112
+ end
113
+
114
+ def historics_stop(id)
115
+ return @datasift.historics.stop(id)
116
+ end
117
+
118
+ def historics_delete(id)
119
+ return @datasift.historics.delete(id)
120
+ end
121
+
122
+ #######################################################
123
+ # MANAGED SOURCES
124
+ #######################################################
125
+
126
+ def source_list(page)
127
+ response = @datasift.managed_source.get(nil,nil,page,20)
128
+ response[:data]
129
+ end
130
+
131
+ def source_get(id)
132
+ return @datasift.managed_source.get(id)
133
+ end
134
+
135
+ def source_start(id)
136
+ return @datasift.managed_source.start(id)
137
+ end
138
+
139
+ def source_stop(id)
140
+ return @datasift.managed_source.stop(id)
141
+ end
142
+
143
+ def source_delete(id)
144
+ return @datasift.managed_source.delete(id)
145
+ end
146
+
147
+ def source_log(id)
148
+ response = @datasift.managed_source.log(id,1,20)
149
+ response[:data]
150
+ end
70
151
 
71
152
  end
72
153
 
data/lib/dscli/cli.rb ADDED
@@ -0,0 +1,53 @@
1
+ class CLI < Thor
2
+
3
+ #######################################################
4
+ # Top-level commands
5
+ #######################################################
6
+ desc 'config', 'Configure your DataSift API credentials'
7
+ def config
8
+ input = Dscli::Parameters.new.user_config(options)
9
+ puts input.to_yaml
10
+ open(ENV['HOME'] + '/.datasiftcli', 'w') do |f|
11
+ f.write input.to_yaml
12
+ end
13
+ end
14
+
15
+ desc 'compile (csdl)', 'Compile CSDL'
16
+ def compile(csdl)
17
+ api = Dscli::API.new
18
+ definition = api.compile(csdl)
19
+ puts definition
20
+ end
21
+
22
+ desc 'usage [period]', 'Find your stream and license fee usage'
23
+ def usage(period = 'day')
24
+ api = Dscli::API.new
25
+ puts Yajl::Encoder.encode(api.usage(period), :pretty => true)
26
+ end
27
+
28
+ desc 'dpu (hash)', 'Find the DPU cost of a given stream hash'
29
+ def dpu(hash)
30
+ api = Dscli::API.new
31
+ puts Yajl::Encoder.encode(api.dpu(hash), :pretty => true)
32
+ end
33
+
34
+ desc 'stream (hash)', 'Stream interactions from a DataSift stream to the command line'
35
+ def stream(hash)
36
+ api = Dscli::API.new
37
+ api.stream(hash)
38
+ end
39
+
40
+ desc 'balance', 'Gets your current plan and balance'
41
+ def balance
42
+ api = Dscli::API.new
43
+ puts api.balance
44
+ end
45
+
46
+ #######################################################
47
+ # Second-level commands
48
+ #######################################################
49
+ register(Push, 'push', 'push <command>', 'Run commands relating to push subscriptions')
50
+ register(Historics, 'historics', 'historics <command>', 'Run commands relating to historics')
51
+ register(Source, 'source', 'source <command>', 'Run commands relating to managed sources')
52
+
53
+ end
@@ -0,0 +1,97 @@
1
+ module Dscli
2
+ class Connectors
3
+
4
+ CONNECTORS = [["HTTP", "http"],
5
+ ["CouchDB", "couchdb"],
6
+ ["DynamoDB", "dynamodb"],
7
+ ["ElasticSearch", "elasticsearch"],
8
+ ["FTP", "ftp"],
9
+ ["Google BigQuery", "bigquery"],
10
+ ["MongoDB", "mongodb"],
11
+ ["MySQL", "mysql"],
12
+ ["Pull", "pull"],
13
+ ["Redis", "redis"],
14
+ ["S3", "s3"],
15
+ ["SFTP", "sftp"],
16
+ ["Splunk Storm REST", "splunkstormrest"],
17
+ ["Splunk Enterprise", "splunkenterprise"],
18
+ ["Zoomdata", "zoomdata"]]
19
+
20
+ def list
21
+ conenctors = CONNECTORS.map { |c| c[1] }
22
+ end
23
+
24
+ def setOutputParams(connector)
25
+ @op = Dscli::OutputParams.new
26
+ @push = {}
27
+ @push[:auth] = {}
28
+ @push[:server_level_auth] = {}
29
+ self.send(connector)
30
+ end
31
+
32
+
33
+ #
34
+ # Method to create each Push Destination
35
+ #
36
+
37
+ def http
38
+ end
39
+
40
+ def couchdb
41
+ end
42
+
43
+ def dynamodb
44
+ end
45
+
46
+ def elasticsearch
47
+ end
48
+
49
+ def ftp
50
+ end
51
+
52
+ def bigquery
53
+ end
54
+
55
+ def mongodb
56
+ end
57
+
58
+ def mysql
59
+ end
60
+
61
+ def pull
62
+ @push[:format] = @op.format
63
+ return @push
64
+ end
65
+
66
+ def redis
67
+ end
68
+
69
+ def s3
70
+ @push[:auth][:access_key] = @op.auth_access_key
71
+ @push[:auth][:secret_key] = @op.auth_secret_key
72
+ @push[:bucket] = @op.bucket
73
+ @push[:directory] = @op.directory
74
+ @push[:acl] = @op.acl
75
+ @push[:file_prefix] = @op.file_prefix
76
+ @push[:max_size] = @op.max_size
77
+ return @push
78
+ end
79
+
80
+ def sftp
81
+ end
82
+
83
+ def splunkstormrest
84
+ end
85
+
86
+ def splunkenterprise
87
+ end
88
+
89
+ def zoomdata
90
+ end
91
+
92
+
93
+
94
+
95
+ end
96
+ end
97
+
data/lib/dscli/core.rb ADDED
@@ -0,0 +1,7 @@
1
+ require 'thor'
2
+ require 'yaml'
3
+
4
+ class Core < Thor
5
+
6
+
7
+ end
@@ -0,0 +1,68 @@
1
+ class Historics < Thor
2
+
3
+ desc 'list [page]', 'Lists all historic queries'
4
+ def list(page = 1)
5
+ api = Dscli::API.new
6
+ results = api.historics_list(page)
7
+
8
+ puts "\nTotal Historic Queries: #{results.count}\n\n"
9
+ puts 'ID | Name | Created | Definition Hash | Status '
10
+ puts '---------------------------------------------------------------------------------------------------------------------------'
11
+
12
+ results[:data].each { |s| puts "#{s[:id]} | #{ '%-20.20s' % s[:name] } | #{Time.at(s[:created_at])} | #{ s[:definition_id] } | #{s[:status]}" }
13
+ puts "\n"
14
+
15
+ end
16
+
17
+ desc 'get (id)', 'Gets details of a historic query'
18
+ def get(id)
19
+
20
+ begin
21
+ api = Dscli::API.new
22
+ response = api.historics_get(id)
23
+ puts response[:data].to_yaml
24
+ rescue ApiResourceNotFoundError => e
25
+ puts "Specified historic query '#{id}' was not found. It may have already been deleted."
26
+ end
27
+
28
+ end
29
+
30
+ desc 'stop (id)', 'Stops a historic query'
31
+ def stop(id)
32
+ api = Dscli::API.new
33
+
34
+ begin
35
+ response = api.historics_stop(id)
36
+
37
+ if response[:http][:status] == 204
38
+ puts "Historic query '#{id}' stopped successfully"
39
+ else
40
+ # TODO: How do we handle a different code?
41
+ response
42
+ end
43
+ rescue ApiResourceNotFoundError => e
44
+ puts "Specified historic query '#{id}' not found. It may have been deleted."
45
+ end
46
+
47
+ end
48
+
49
+ desc 'delete (id)', 'Deletes a historic query'
50
+ def delete(id)
51
+ api = Dscli::API.new
52
+
53
+ begin
54
+
55
+ response = api.historics_delete(id)
56
+
57
+ if response[:http][:status] == 204
58
+ puts "Historic query '#{id}' deleted successfully"
59
+ else
60
+ response
61
+ end
62
+ rescue ApiResourceNotFoundError => e
63
+ puts "Specified historic query '#{id}' not found. It may have already been deleted."
64
+ end
65
+
66
+ end
67
+
68
+ end
@@ -0,0 +1,159 @@
1
+ require 'interact'
2
+
3
+ module Dscli
4
+ class OutputParams
5
+ include Interactive
6
+
7
+ FORMATS = ["json_new_line", "json_meta", "json_array"]
8
+ S3_ACL = ["private", "public-read", "public-read-write", "authenticated-read", "bucket-owner-read", "bucket-owner-full-control"]
9
+ HTTP_AUTH_TYPE = ["none", "basic"]
10
+ DELIVERY_FREQUENCY = [0, 10, 30, 60, 300]
11
+ MAX_SIZE = ["100KB", "250KB", "500KB", "1MB", "2MB", "5MB", "10MB", "20MB"]
12
+ HTTP_METHOD = ["POST", "PUT"]
13
+ BOOL = ["true", "false"]
14
+
15
+ def acl
16
+ ask "ACL", choices: S3_ACL.each, indexed: true, default: S3_ACL.first
17
+ end
18
+
19
+ def api_hostname
20
+ ask "Splunk Storm REST API host"
21
+ end
22
+
23
+ def auth_access_key
24
+ ask "AWS access key"
25
+ end
26
+
27
+ def auth_access_token
28
+ ask "Splunk Storm REST access token"
29
+ end
30
+
31
+ def auth_password
32
+ ask "Authentication password"
33
+ end
34
+
35
+ def auth_secret_key
36
+ ask "AWS secret key"
37
+ end
38
+
39
+ def auth_username
40
+ ask "Authentication username"
41
+ end
42
+
43
+ def auth_type
44
+ ask "Auth type", choices: HTTP_AUTH_TYPE.each, indexed: true, default: HTTP_AUTH_TYPE.first
45
+ end
46
+
47
+ def bucket
48
+ ask "Bucket name"
49
+ end
50
+
51
+ def collection_name
52
+ ask "MongoDB Collection name"
53
+ end
54
+
55
+ def database
56
+ ask "Numeric ID of your existing Redis database"
57
+ end
58
+
59
+ def db_name
60
+ ask "Database name"
61
+ end
62
+
63
+ def delivery_frequency
64
+ ask "Delivery frequency (seconds)", choices: DELIVERY_FREQUENCY.each, indexed: true, default: DELIVERY_FREQUENCY.first
65
+ end
66
+
67
+ def directory
68
+ ask "Directory"
69
+ end
70
+
71
+ def file_prefix
72
+ ask "Optional filename prefix", default: "DataSift"
73
+ end
74
+
75
+ def format
76
+ ask "Output format", choices: FORMATS.each, indexed: true
77
+ end
78
+
79
+ def host
80
+ ask "The host to connect to"
81
+ end
82
+
83
+ def list
84
+ ask "Name of a Redis list to stores interactions"
85
+ end
86
+
87
+ def max_size
88
+ max_size = ask "Max delivery size", choices: MAX_SIZE.each, indexed: true, default: MAX_SIZE.last
89
+ human_size_to_number(max_size)
90
+ end
91
+
92
+ def method
93
+ ask "HTTP request type", choices: HTTP_METHOD.each, indexed: true, default: HTTP_METHOD.first
94
+ end
95
+
96
+ def port
97
+ ask "Port on the remote machine"
98
+ end
99
+
100
+ def project_id
101
+ ask "ID of your Splunk Storm REST project"
102
+ end
103
+
104
+ def region
105
+ ask "AWS region the destination table is set up in"
106
+ end
107
+
108
+ def server_level_auth_password
109
+ ask "Server-level authentication password"
110
+ end
111
+
112
+ def server_level_auth_username
113
+ ask "Server-level authentication username"
114
+ end
115
+
116
+ def source
117
+ ask "Label used to mark data delivered to Zoomdata"
118
+ end
119
+
120
+ def table
121
+ ask "Name of the table to use"
122
+ end
123
+
124
+ def type
125
+ ask "The type that you want to use for the index"
126
+ end
127
+
128
+ def url
129
+ ask "The URL to post data to"
130
+ end
131
+
132
+ def use_gzip
133
+ ask "Use GZip?", choices: BOOL.each, indexed: true, default: BOOL.last
134
+ end
135
+
136
+ def use_ssl
137
+ ask "Use SSL?", choices: BOOL.each, indexed: true, default: BOOL.last
138
+ end
139
+
140
+ def verify_ssl
141
+ ask "Verify SSL certificate?", choices: BOOL.each, indexed: true, default: BOOL.last
142
+ end
143
+
144
+ ###############
145
+
146
+ #TODO properly add back in the namespacing. i.e. op_params.auth.passw
147
+
148
+ private
149
+
150
+ def human_size_to_number(size)
151
+ value = size.scan(/[A-Z]+\d*|\d+/)
152
+ bytes = value[0].to_i * 1024 if value[1] == "KB"
153
+ bytes = value[0].to_i * 1024 * 1024 if value[1] == "MB"
154
+ return bytes.to_s
155
+ end
156
+
157
+ end
158
+ end
159
+
data/lib/dscli/push.rb ADDED
@@ -0,0 +1,80 @@
1
+ class Push < Thor
2
+
3
+ desc 'list [page]', 'Lists all current subscriptions'
4
+ def list(page = 1)
5
+ api = Dscli::API.new
6
+ results = api.push_list(page)
7
+
8
+ puts "\nTotal Subscriptions: #{results[:subscriptions].count}\n\n"
9
+ if results[:subscriptions].count > 0
10
+ puts 'ID | Name | Output Type | Created | Status '
11
+ puts '--------------------------------------------------------------------------------------------------------------'
12
+
13
+ results[:subscriptions].each { |s| puts "#{s[:id]} | #{ '%-20.20s' % s[:name] } | #{ '%-11.11s' % s[:output_type] } | #{Time.at(s[:created_at])} | #{s[:status]}" }
14
+ puts "\n"
15
+ end
16
+ end
17
+
18
+ desc 'get (id)', 'Gets details of a push subscription'
19
+ def get(id)
20
+ begin
21
+ api = Dscli::API.new
22
+ response = api.push_get(id)
23
+ puts response[:data].to_yaml
24
+ rescue ApiResourceNotFoundError => e
25
+ puts "Specified push subscription '#{id}' not found. It may have already been deleted."
26
+ end
27
+ end
28
+
29
+ desc 'stop (id)', 'Stops a push subscription'
30
+ def stop(id)
31
+ begin
32
+ api = Dscli::API.new
33
+ api.push_stop(id)
34
+ rescue ApiResourceNotFoundError => e
35
+ puts "Specified push subscription '#{id}' not found. It may have been deleted."
36
+ rescue BadRequestError => e
37
+ puts "Specified push subscription '#{id}' could not be stopped. It may have already been stopped."
38
+ end
39
+ end
40
+
41
+ desc 'delete (id)', 'Deletes a push subscription'
42
+ def delete(id)
43
+ api = Dscli::API.new
44
+
45
+ begin
46
+ response = api.push_delete(id)
47
+
48
+ if response[:http][:status] == 204
49
+ puts "Push subscription #{id} deleted successfully"
50
+ else
51
+ # TODO: How do we handle a different code?
52
+ response
53
+ end
54
+ rescue ApiResourceNotFoundError => e
55
+ puts "Specified push subscription '#{id}' not found. It may have already been deleted."
56
+ end
57
+ end
58
+
59
+ desc 'log [id]', 'Retrieves logs for all subscriptions (or for the subscription ID supplied)'
60
+ def log(id = nil)
61
+ api = Dscli::API.new
62
+
63
+ begin
64
+ results = api.push_log(id)
65
+
66
+ puts "\nMessage count: #{results[:count]}\n\n"
67
+
68
+ if results[:count] > 0
69
+ puts ' Time | Subscription ID | Message '
70
+ puts '-----------------------------------------------------------------------------------------------------------------'
71
+
72
+ results[:log_entries].each { |s| puts "#{Time.at(s[:request_time]) } | #{s[:subscription_id]} | #{ '%-50.50s' % s[:message] }" }
73
+ puts "\n"
74
+ end
75
+ rescue ApiResourceNotFoundError => e
76
+ puts "Specified push subscription '#{id}' not found. It may have been deleted."
77
+ end
78
+ end
79
+
80
+ end
@@ -0,0 +1,110 @@
1
+ class Source < Thor
2
+
3
+ desc 'list [page]', 'Lists all managed sources'
4
+ def list(page = 1)
5
+ api = Dscli::API.new
6
+ results = api.source_list(page)
7
+
8
+ puts "\nTotal Managed Sources: #{results.count}\n\n"
9
+ puts 'ID | Name | Type | Status'
10
+ puts '-----------------------------------------------------------------------------------------------------'
11
+
12
+ results[:sources].each { |s| puts "#{s[:id]} | #{ '%-20.20s' % s[:name] } | #{ '%-20.20s' % s[:source_type] } | #{s[:status]}" }
13
+ puts "\n"
14
+
15
+ end
16
+
17
+ desc 'get (id)', 'Gets details of a managed source'
18
+ def get(id)
19
+
20
+ begin
21
+ api = Dscli::API.new
22
+ response = api.source_get(id)
23
+ puts response[:data].to_yaml
24
+ rescue ApiResourceNotFoundError => e
25
+ puts "Specified managed source '#{id}' was not found. It may have been deleted."
26
+ end
27
+
28
+ end
29
+
30
+ desc 'start (id)', 'Starts the specified source'
31
+ def start(id)
32
+
33
+ api = Dscli::API.new
34
+
35
+ begin
36
+ response = api.source_start(id)
37
+
38
+ if response[:http][:status] == 200
39
+ puts "Managed source '#{id}' started successfully"
40
+ else
41
+ # TODO: How do we handle a different code?
42
+ response
43
+ end
44
+ rescue ApiResourceNotFoundError => e
45
+ puts "Specified source '#{id}' not found. It may have been deleted."
46
+ end
47
+
48
+ end
49
+
50
+ desc 'stop (id)', 'Stops the specified source'
51
+ def stop(id)
52
+
53
+ api = Dscli::API.new
54
+
55
+ begin
56
+ response = api.source_stop(id)
57
+
58
+ if response[:http][:status] == 200
59
+ puts "Managed source '#{id}' stopped successfully"
60
+ else
61
+ # TODO: How do we handle a different code?
62
+ response
63
+ end
64
+ rescue ApiResourceNotFoundError => e
65
+ puts "Specified source '#{id}' not found. It may have been deleted."
66
+ end
67
+
68
+ end
69
+
70
+ desc 'delete (id)', 'Deletes a managed source'
71
+ def delete(id)
72
+ api = Dscli::API.new
73
+
74
+ begin
75
+
76
+ response = api.source_delete(id)
77
+
78
+ if response[:http][:status] == 204
79
+ puts "Source '#{id}' deleted successfully"
80
+ else
81
+ response
82
+ end
83
+ rescue ApiResourceNotFoundError => e
84
+ puts "Source '#{id}' not found. It may have been deleted."
85
+ end
86
+
87
+ end
88
+
89
+ desc 'logs (id)', 'Retrieves the log for a managed source'
90
+ def logs(id = nil)
91
+ api = Dscli::API.new
92
+
93
+ begin
94
+
95
+ results = api.source_log(id)
96
+
97
+ puts "\nMessage count: #{results[:count]}\n\n"
98
+ puts ' Time | Message '
99
+ puts '-----------------------------------------------------------------------------------------------------------------'
100
+
101
+ results[:log_entries].each { |s| puts "#{Time.at(s[:event_time]) } | #{ '%-50.50s' % s[:message] }" }
102
+ puts "\n"
103
+
104
+ rescue ApiResourceNotFoundError => e
105
+ puts "Specified source '#{id}' not found. It may have been deleted."
106
+ end
107
+
108
+ end
109
+
110
+ end
data/lib/dscli/storage.rb CHANGED
@@ -19,34 +19,11 @@ module Dscli
19
19
  f.write(Yajl::Encoder.encode(auth) + "\n")
20
20
  }
21
21
  end
22
- #TODO Set 'else' to write over config if it already exists
23
22
  end
24
23
 
25
24
  def get_auth
26
25
  config = YAML.load(File.read(@configfile))
27
26
  end
28
27
 
29
- # def add_push_endpoint(config)
30
- # File.open(@configfile, 'a') { |f|
31
- # f.puts Yajl::Encoder.encode(config) + "\n"
32
- # }
33
- # end
34
-
35
- # def get_push_endpoint(name)
36
- # parser = Yajl::Parser
37
- # File.open(@configfile, 'r').each_line do |line|
38
- # json = parser.parse(line)
39
- # if json['name'] && json['name'] == name
40
- # return json
41
- # end
42
- # end
43
- # return ''
44
- # end
45
-
46
- # def list_push_endpoints
47
- #
48
- # end
49
- #
50
- #
51
28
  end
52
29
  end
data/lib/dscli/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Dscli
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.1"
3
3
  end
data/lib/dscli.rb CHANGED
@@ -1,6 +1,10 @@
1
1
  dir = File.dirname(__FILE__)
2
+ require dir + '/Dscli/push'
3
+ require dir + '/Dscli/historics'
4
+ require dir + '/Dscli/source'
5
+ require dir + '/Dscli/core'
6
+ require dir + '/Dscli/cli'
2
7
  require dir + '/Dscli/version'
3
- require dir + '/Dscli/commands'
4
8
  require dir + '/Dscli/api'
5
9
  require dir + '/Dscli/storage'
6
10
  require dir + '/Dscli/parameters'
metadata CHANGED
@@ -1,97 +1,111 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dscli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Dugdale
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-31 00:00:00.000000000 Z
11
+ date: 2014-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: thor
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: yajl-ruby
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: datasift
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: 3.0.0.beta2
75
+ version: '0'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: 3.0.0.beta2
82
+ version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: interact
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '>='
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: multi_json
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
97
111
  description: DS CLI is a CLI wrapper for the DataSift Ruby client library, allowing
@@ -103,15 +117,21 @@ executables:
103
117
  extensions: []
104
118
  extra_rdoc_files: []
105
119
  files:
120
+ - LICENSE.txt
121
+ - README.md
106
122
  - bin/dscli
123
+ - lib/dscli.rb
107
124
  - lib/dscli/api.rb
108
- - lib/dscli/commands.rb
125
+ - lib/dscli/cli.rb
126
+ - lib/dscli/connectors.rb
127
+ - lib/dscli/core.rb
128
+ - lib/dscli/historics.rb
129
+ - lib/dscli/outputParams.rb
109
130
  - lib/dscli/parameters.rb
131
+ - lib/dscli/push.rb
132
+ - lib/dscli/source.rb
110
133
  - lib/dscli/storage.rb
111
134
  - lib/dscli/version.rb
112
- - lib/dscli.rb
113
- - LICENSE.txt
114
- - README.md
115
135
  homepage: https://github.com/dugjason/dscli
116
136
  licenses:
117
137
  - BSD
@@ -122,17 +142,17 @@ require_paths:
122
142
  - lib
123
143
  required_ruby_version: !ruby/object:Gem::Requirement
124
144
  requirements:
125
- - - '>='
145
+ - - ">="
126
146
  - !ruby/object:Gem::Version
127
147
  version: '0'
128
148
  required_rubygems_version: !ruby/object:Gem::Requirement
129
149
  requirements:
130
- - - '>='
150
+ - - ">="
131
151
  - !ruby/object:Gem::Version
132
152
  version: '0'
133
153
  requirements: []
134
154
  rubyforge_project:
135
- rubygems_version: 2.0.14
155
+ rubygems_version: 2.3.0
136
156
  signing_key:
137
157
  specification_version: 4
138
158
  summary: Simple CLI wrapper for the DataSift Ruby client library
@@ -1,69 +0,0 @@
1
- require 'thor'
2
- require 'yaml'
3
-
4
- module Dscli
5
- class Commands < Thor
6
- include Thor::Actions
7
-
8
- def self.source_root
9
- File.dirname(__FILE__)
10
- end
11
-
12
- desc 'config', 'Configure your DataSift API credentials'
13
- option :user, type: :boolean, desc: 'Enter username and API key for your DataSift API user'
14
- #option :push, type: :boolean, desc: 'Enter details of a new Push Destination'
15
-
16
- def config
17
-
18
- #if options[:user]
19
- open(ENV['HOME'] + '/.datasiftcli', 'w') do |f|
20
- f.write Dscli::Parameters.new.user_config(options).to_yaml
21
- end
22
- #end
23
-
24
- #TODO Add other config options such as new push destinations
25
- end
26
-
27
- #
28
- # Core API endpoints
29
- # [ Missing /validate /balance ]
30
- #
31
-
32
- desc 'compile (csdl)', 'Compile CSDL'
33
- def compile(csdl)
34
- api = Dscli::API.new
35
- definition = api.compile(csdl)
36
- puts definition
37
- end
38
-
39
- desc 'usage [period]', 'Find your stream and license fee usage'
40
- def usage(period = 'day')
41
- api = Dscli::API.new
42
- puts Yajl::Encoder.encode(api.usage(period), :pretty => true)
43
- end
44
-
45
- desc 'dpu (hash)', 'Find the DPU cost of a given stream hash'
46
- def dpu(hash)
47
- api = Dscli::API.new
48
- puts Yajl::Encoder.encode(api.dpu(hash), :pretty => true)
49
- end
50
-
51
- desc 'stream (hash)', 'Stream interactions from a DataSift stream to the command line'
52
- def stream(hash)
53
- api = Dscli::API.new
54
- api.stream(hash)
55
- end
56
-
57
- #
58
- # Push API endpoints
59
- #
60
- #
61
-
62
- #desc 'pushcreate', ''
63
- #def pushcreate(name)
64
- # api = Dscli::API.new
65
- # api.pushcreate(name)
66
- #end
67
-
68
- end
69
- end