navi_client 1.0.7 → 1.0.8
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 +4 -4
- data/lib/client.rb +1 -93
- data/lib/cloud/navi_cloud_client.rb +47 -14
- data/lib/http_service/naviai.rb +2 -6
- data/lib/local/navi_local_client.rb +109 -15
- data/lib/navi_client/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6dc4c7acfc106147f55f221429c73ee8065fee41
|
4
|
+
data.tar.gz: dc617dcb96936756409e2158f6bcd96ccf65d965
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 152cec5e2561c48b29b04b2462d376865ccf2c85f85ec3499a92f5e79e6e0793aa75e809d7568ebaba8561ce694fb9a81b80c0815a9ded534b848da673451160
|
7
|
+
data.tar.gz: 6af82c926c26ce5dd8158d0efea07efc56d4387170200e5e052e7c8be040e2649cf3114b042925f24cbd0e47220a65c13fb6160eee5c5d89fd095dfbc7c1393d
|
data/lib/client.rb
CHANGED
@@ -17,23 +17,6 @@ module Client
|
|
17
17
|
@logger
|
18
18
|
end
|
19
19
|
|
20
|
-
#
|
21
|
-
# login
|
22
|
-
#
|
23
|
-
# login to the navi-cloud and get the authentication token
|
24
|
-
#
|
25
|
-
def login
|
26
|
-
url = "#{@sso_web_url}/oauth/token"
|
27
|
-
provider_url = url
|
28
|
-
@token = HTTParty.post(provider_url,
|
29
|
-
body: {
|
30
|
-
client_id: config["uid"], # get from sso_web application
|
31
|
-
client_secret: config["secret_key"],
|
32
|
-
grant_type: "client_credentials"
|
33
|
-
}
|
34
|
-
)['access_token']
|
35
|
-
end
|
36
|
-
|
37
20
|
#
|
38
21
|
# imap_connection
|
39
22
|
#
|
@@ -103,60 +86,6 @@ module Client
|
|
103
86
|
end
|
104
87
|
end
|
105
88
|
|
106
|
-
#
|
107
|
-
# idle_loop
|
108
|
-
#
|
109
|
-
# check for any further mail with "real-time" responsiveness.
|
110
|
-
# retrieve any mail from a folder, following specified search condition
|
111
|
-
# for any mail retrieved call a specified block
|
112
|
-
#
|
113
|
-
def idle_loop(imap, search_condition, folder, server, username, password)
|
114
|
-
|
115
|
-
@logger.info "\nwaiting new mails (IDLE loop)..."
|
116
|
-
|
117
|
-
loop do
|
118
|
-
begin
|
119
|
-
imap.select folder
|
120
|
-
imap.idle do |resp|
|
121
|
-
|
122
|
-
# You'll get all the things from the server. For new emails (EXISTS)
|
123
|
-
if resp.kind_of?(Net::IMAP::UntaggedResponse) and resp.name == "EXISTS"
|
124
|
-
|
125
|
-
@logger.debug resp.inspect if @debug
|
126
|
-
# Got something. Send DONE. This breaks you out of the blocking call
|
127
|
-
imap.idle_done
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
# We're out, which means there are some emails ready for us.
|
132
|
-
# Go do a search for UNSEEN and fetch them.
|
133
|
-
filenames = []
|
134
|
-
retrieve_emails(imap, search_condition, folder) { |mail| filenames << process_email(mail)}
|
135
|
-
self.send_request(filenames)
|
136
|
-
|
137
|
-
@logger.debug "Process Completed." if @debug
|
138
|
-
|
139
|
-
rescue SignalException => e
|
140
|
-
# http://stackoverflow.com/questions/2089421/capturing-ctrl-c-in-ruby
|
141
|
-
@logger.info "Signal received at #{time_now}: #{e.class}. #{e.message}"
|
142
|
-
shutdown imap
|
143
|
-
|
144
|
-
rescue Net::IMAP::Error => e
|
145
|
-
@logger.error "Net::IMAP::Error at #{time_now}: #{e.class}. #{e.message}"
|
146
|
-
|
147
|
-
# timeout ? reopen connection
|
148
|
-
imap = imap_connection(server, username, password) #if e.message == 'connection closed'
|
149
|
-
@logger.info "reconnected to server: #{server}"
|
150
|
-
|
151
|
-
rescue Exception => e
|
152
|
-
@logger.error "Something went wrong at #{time_now}: #{e.class}. #{e.message}"
|
153
|
-
|
154
|
-
imap = imap_connection(server, username, password)
|
155
|
-
@logger.info "reconnected to server: #{server}"
|
156
|
-
end
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
89
|
def send_request(in_filenames = [])
|
161
90
|
download_path = config['download_path']
|
162
91
|
filename = download_path + "inputs/" + (Time.now.to_f * 1000).to_s
|
@@ -167,7 +96,7 @@ module Client
|
|
167
96
|
in_filenames.each { |element| f.puts(element) }
|
168
97
|
end
|
169
98
|
|
170
|
-
|
99
|
+
HTTPService::NaviAI.start(filename, @client_type, @token)
|
171
100
|
end
|
172
101
|
|
173
102
|
def process_email(mail)
|
@@ -193,27 +122,10 @@ module Client
|
|
193
122
|
save(meta, "meta/#{custom_uid}")
|
194
123
|
end
|
195
124
|
|
196
|
-
def save(data={}, filename)
|
197
|
-
download_path = config['download_path']
|
198
|
-
filepath = download_path + filename + ".yml"
|
199
|
-
|
200
|
-
mkdir_if_not_exist(filepath)
|
201
|
-
|
202
|
-
File.write(filepath, data.to_yaml)
|
203
|
-
return filepath
|
204
|
-
end
|
205
|
-
|
206
125
|
def encrypt(data)
|
207
126
|
Base64.encode64(data)
|
208
127
|
end
|
209
128
|
|
210
|
-
def mkdir_if_not_exist(filepath)
|
211
|
-
dirname = File.dirname(filepath)
|
212
|
-
unless File.directory?(dirname)
|
213
|
-
FileUtils.mkdir_p(dirname)
|
214
|
-
end
|
215
|
-
end
|
216
|
-
|
217
129
|
def time_now
|
218
130
|
Time.now.utc.iso8601(3)
|
219
131
|
end
|
@@ -226,8 +138,4 @@ module Client
|
|
226
138
|
@logger.info "#{$0} has ended (crowd applauds)"
|
227
139
|
exit 0
|
228
140
|
end
|
229
|
-
|
230
|
-
def config
|
231
|
-
YAML.load_file(ENV['HOME'] + '/.navi/config.yml')
|
232
|
-
end
|
233
141
|
end
|
@@ -4,24 +4,34 @@ module NaviClient
|
|
4
4
|
class Cloud
|
5
5
|
include Client
|
6
6
|
def initialize(sso_web_url = "http://localhost:3008/")
|
7
|
-
|
8
|
-
|
7
|
+
# flag to print Ruby library debug info (very detailed)
|
8
|
+
@net_imap_debug = false
|
9
9
|
|
10
|
-
|
11
|
-
|
10
|
+
# flag to mark email as read after gets downloaded.
|
11
|
+
@mark_as_read = false
|
12
12
|
|
13
|
-
|
14
|
-
|
13
|
+
# flag to turn on/off debug mode.
|
14
|
+
@debug = false
|
15
15
|
|
16
|
-
|
17
|
-
mkdir_if_not_exist(config['client_log_file'])
|
18
|
-
@logger = Logger.new(config['client_log_file'])
|
16
|
+
@logger = Logger.new
|
19
17
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
18
|
+
# sso_web (authentication) config.
|
19
|
+
@sso_web_url = sso_web_url
|
20
|
+
# authentication token received from sso_web used to authenticate the request to database_api
|
21
|
+
@token = nil
|
22
|
+
|
23
|
+
# client_type
|
24
|
+
@client_type = "cloud"
|
25
|
+
end
|
26
|
+
|
27
|
+
#
|
28
|
+
# login
|
29
|
+
#
|
30
|
+
# login to the navi-cloud and get the authentication token
|
31
|
+
#
|
32
|
+
def login(session_token)
|
33
|
+
@token = session_token
|
34
|
+
end
|
25
35
|
|
26
36
|
def download(message, custom_uid)
|
27
37
|
download_path = config[:s3_download_folder]
|
@@ -37,5 +47,28 @@ module NaviClient
|
|
37
47
|
return h
|
38
48
|
end
|
39
49
|
end
|
50
|
+
|
51
|
+
def save(data={}, filename)
|
52
|
+
download_path = config[:s3_download_folder]
|
53
|
+
filepath = download_path + "/" + filename + ".yml"
|
54
|
+
|
55
|
+
return upload_to_s3(filepath, data.to_yaml)
|
56
|
+
end
|
57
|
+
|
58
|
+
def upload_to_s3(file_path, content)
|
59
|
+
credentials = Aws::Credentials.new(config[:aws_key], config[:aws_secret])
|
60
|
+
s3 = Aws::S3::Client.new(credentials: credentials, region: config[:aws_region])
|
61
|
+
obj = s3.put_object({
|
62
|
+
body: content,
|
63
|
+
bucket: config[:s3_bucket],
|
64
|
+
key: file_path
|
65
|
+
})
|
66
|
+
return "https://s3.amazonaws.com/#{config[:s3_bucket]}/#{file_path}" if obj.successful?
|
67
|
+
return ""
|
68
|
+
end
|
69
|
+
|
70
|
+
def config
|
71
|
+
YAML.load_file(Rails.root.join("config/navi_client.yml")).with_indifferent_access
|
72
|
+
end
|
40
73
|
end
|
41
74
|
end
|
data/lib/http_service/naviai.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require "httparty"
|
2
2
|
|
3
|
-
GO_SERVER_URL = 'http://localhost:9090'
|
3
|
+
GO_SERVER_URL = 'http://localhost:9090/v2/metas'
|
4
4
|
|
5
5
|
module HTTPService
|
6
6
|
class NaviAI
|
@@ -11,11 +11,7 @@ module HTTPService
|
|
11
11
|
else
|
12
12
|
go_url = ''
|
13
13
|
end
|
14
|
-
HTTParty.post(GO_SERVER_URL, body: {
|
15
|
-
client_type: client_type,
|
16
|
-
list_meta_path: file_path,
|
17
|
-
token: token
|
18
|
-
})
|
14
|
+
HTTParty.post(GO_SERVER_URL, body: { client_type: client_type, list_meta_path: file_path, token: token })
|
19
15
|
end
|
20
16
|
end
|
21
17
|
end
|
@@ -3,25 +3,44 @@ module NaviClient
|
|
3
3
|
class Local
|
4
4
|
include Client
|
5
5
|
def initialize(sso_web_url = 'http://localhost:3008')
|
6
|
-
|
7
|
-
|
6
|
+
# flag to print Ruby library debug info (very detailed)
|
7
|
+
@net_imap_debug = false
|
8
8
|
|
9
|
-
|
10
|
-
|
9
|
+
# flag to mark email as read after gets downloaded.
|
10
|
+
@mark_as_read = false
|
11
11
|
|
12
|
-
|
13
|
-
|
12
|
+
# flag to turn on/off debug mode.
|
13
|
+
@debug = false
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
# override the log file
|
16
|
+
mkdir_if_not_exist(config['client_log_file'])
|
17
|
+
@logger = Logger.new(config['client_log_file'])
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
19
|
+
# sso_web (authentication) config.
|
20
|
+
@sso_web_url = sso_web_url
|
21
|
+
# authentication token received from sso_web used to authenticate the request to database_api
|
22
|
+
@token = nil
|
23
|
+
|
24
|
+
# client_type
|
25
|
+
@client_type = "local"
|
26
|
+
end
|
27
|
+
|
28
|
+
#
|
29
|
+
# login
|
30
|
+
#
|
31
|
+
# login to the navi-cloud and get the authentication token
|
32
|
+
#
|
33
|
+
def login
|
34
|
+
url = "#{@sso_web_url}/oauth/token"
|
35
|
+
provider_url = url
|
36
|
+
@token = HTTParty.post(provider_url,
|
37
|
+
body: {
|
38
|
+
client_id: config["uid"], # get from sso_web application
|
39
|
+
client_secret: config["secret_key"],
|
40
|
+
grant_type: "client_credentials"
|
41
|
+
}
|
42
|
+
)['access_token']
|
43
|
+
end
|
25
44
|
|
26
45
|
def download(message, custom_uid)
|
27
46
|
download_path = config['download_path']
|
@@ -38,5 +57,80 @@ module NaviClient
|
|
38
57
|
return h
|
39
58
|
end
|
40
59
|
end
|
60
|
+
|
61
|
+
def save(data={}, filename)
|
62
|
+
download_path = config['download_path']
|
63
|
+
filepath = download_path + filename + ".yml"
|
64
|
+
|
65
|
+
mkdir_if_not_exist(filepath)
|
66
|
+
|
67
|
+
File.write(filepath, data.to_yaml)
|
68
|
+
return filepath
|
69
|
+
end
|
70
|
+
|
71
|
+
def mkdir_if_not_exist(filepath)
|
72
|
+
dirname = File.dirname(filepath)
|
73
|
+
unless File.directory?(dirname)
|
74
|
+
FileUtils.mkdir_p(dirname)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
#
|
79
|
+
# idle_loop
|
80
|
+
#
|
81
|
+
# check for any further mail with "real-time" responsiveness.
|
82
|
+
# retrieve any mail from a folder, following specified search condition
|
83
|
+
# for any mail retrieved call a specified block
|
84
|
+
#
|
85
|
+
def idle_loop(imap, search_condition, folder, server, username, password)
|
86
|
+
|
87
|
+
@logger.info "\nwaiting new mails (IDLE loop)..."
|
88
|
+
|
89
|
+
loop do
|
90
|
+
begin
|
91
|
+
imap.select folder
|
92
|
+
imap.idle do |resp|
|
93
|
+
|
94
|
+
# You'll get all the things from the server. For new emails (EXISTS)
|
95
|
+
if resp.kind_of?(Net::IMAP::UntaggedResponse) and resp.name == "EXISTS"
|
96
|
+
|
97
|
+
@logger.debug resp.inspect if @debug
|
98
|
+
# Got something. Send DONE. This breaks you out of the blocking call
|
99
|
+
imap.idle_done
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
# We're out, which means there are some emails ready for us.
|
104
|
+
# Go do a search for UNSEEN and fetch them.
|
105
|
+
filenames = []
|
106
|
+
retrieve_emails(imap, search_condition, folder) { |mail| filenames << process_email(mail)}
|
107
|
+
self.send_request(filenames)
|
108
|
+
|
109
|
+
@logger.debug "Process Completed." if @debug
|
110
|
+
|
111
|
+
rescue SignalException => e
|
112
|
+
# http://stackoverflow.com/questions/2089421/capturing-ctrl-c-in-ruby
|
113
|
+
@logger.info "Signal received at #{time_now}: #{e.class}. #{e.message}"
|
114
|
+
shutdown imap
|
115
|
+
|
116
|
+
rescue Net::IMAP::Error => e
|
117
|
+
@logger.error "Net::IMAP::Error at #{time_now}: #{e.class}. #{e.message}"
|
118
|
+
|
119
|
+
# timeout ? reopen connection
|
120
|
+
imap = imap_connection(server, username, password) #if e.message == 'connection closed'
|
121
|
+
@logger.info "reconnected to server: #{server}"
|
122
|
+
|
123
|
+
rescue Exception => e
|
124
|
+
@logger.error "Something went wrong at #{time_now}: #{e.class}. #{e.message}"
|
125
|
+
|
126
|
+
imap = imap_connection(server, username, password)
|
127
|
+
@logger.info "reconnected to server: #{server}"
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
def config
|
133
|
+
YAML.load_file(ENV['HOME'] + '/.navi/config.yml').with_indifferent_access
|
134
|
+
end
|
41
135
|
end
|
42
136
|
end
|
data/lib/navi_client/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: navi_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Surya
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-12-
|
11
|
+
date: 2017-12-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|