adx_toolkit 0.0.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 +7 -0
- data/bin/slack_poster +12 -0
- data/lib/adx_toolkit/network_request.rb +49 -0
- data/lib/adx_toolkit/system_runner.rb +48 -0
- data/lib/gdrive_uploader.rb +61 -0
- data/lib/slack_poster.rb +29 -0
- metadata +229 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: a6c2072dca2f80b4b1de523a7f55fdd96361681d0d6330b57e27b4d5abae934c
|
4
|
+
data.tar.gz: f13e607cc958c25fe71e76f68211df46f4aad7b071bc57f1d5158b6acee39bda
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ef8bd8f1c7eae5b6f873dbc10bb766d387dbb152fa4e0015989f138095db6d2d396789ba64821dc496b205bf290acf5e921852291296a354d01e80c5be14bc6a
|
7
|
+
data.tar.gz: c299d3bd70b7ed919962275ae60a351d9955a6f09489dbe7f509e0471cbb03f62cc571fa782e6d44595212da486e8d43cd1d5cb1d3865ae1920731571de5e402
|
data/bin/slack_poster
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# frozen_string_literal: true
|
4
|
+
|
5
|
+
require 'net/http'
|
6
|
+
require 'uri'
|
7
|
+
require 'json'
|
8
|
+
|
9
|
+
# Helper class for network request like simple bash curl
|
10
|
+
class NetworkRequest
|
11
|
+
def request(url, params, headers = [], method = 'Get')
|
12
|
+
uri = URI.parse(url)
|
13
|
+
uri.query = URI.encode_www_form(params)
|
14
|
+
req_method = Object.const_get "Net::HTTP::#{method}"
|
15
|
+
request = req_method.new(uri.request_uri)
|
16
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
17
|
+
http.use_ssl = (uri.scheme == 'https')
|
18
|
+
headers.each do |key, value|
|
19
|
+
request[key] = value
|
20
|
+
end
|
21
|
+
response = http.request(request)
|
22
|
+
JSON.parse(response.body)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Simple post
|
26
|
+
def post(url, params, payload)
|
27
|
+
uri = URI.parse(url)
|
28
|
+
uri.query = URI.encode_www_form(params)
|
29
|
+
Net::HTTP.post_form(uri, payload)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Mock of NetworkRequest class
|
34
|
+
class MockedNetworkRequest
|
35
|
+
def request(url, params, headers = [], method = 'Get')
|
36
|
+
@uri = URI.parse(url)
|
37
|
+
@uri.query = URI.encode_www_form(params)
|
38
|
+
@req_method = Object.const_get "Net::HTTP::#{method}"
|
39
|
+
@headers = headers
|
40
|
+
end
|
41
|
+
|
42
|
+
# Simple post
|
43
|
+
def post(url, params, payload)
|
44
|
+
@uri = URI.parse(url)
|
45
|
+
@uri.query = URI.encode_www_form(params)
|
46
|
+
@req_method = Object.const_get 'Net::HTTP::Post'
|
47
|
+
@payload = payload
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# frozen_string_literal: true
|
4
|
+
|
5
|
+
# Class that responsible for running bash script
|
6
|
+
class SystemRunner
|
7
|
+
def run(command)
|
8
|
+
p "Running => #{command.chomp}"
|
9
|
+
system(command) || raise("Error running #{command}")
|
10
|
+
end
|
11
|
+
|
12
|
+
def run_with_output(command)
|
13
|
+
# p "Running => #{command.chomp}"
|
14
|
+
output = `#{command} 2>&1` || raise("Error running #{command}")
|
15
|
+
output.chomp
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# System runner test double
|
20
|
+
class TestSystemRunner
|
21
|
+
attr_reader :is_running
|
22
|
+
|
23
|
+
def initialize
|
24
|
+
@log = []
|
25
|
+
end
|
26
|
+
|
27
|
+
def run(command)
|
28
|
+
@log.append(command)
|
29
|
+
@is_running = true
|
30
|
+
end
|
31
|
+
|
32
|
+
def run_with_output(command)
|
33
|
+
@log.append(command)
|
34
|
+
@is_running = true
|
35
|
+
end
|
36
|
+
|
37
|
+
def running?(command)
|
38
|
+
@log.include?(command)
|
39
|
+
end
|
40
|
+
|
41
|
+
def running_sequence?(*commands)
|
42
|
+
@log == commands
|
43
|
+
end
|
44
|
+
|
45
|
+
def print_log
|
46
|
+
p @log
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# frozen_string_literal: true
|
4
|
+
|
5
|
+
require_relative 'adx_toolkit/system_runner'
|
6
|
+
|
7
|
+
module ADXToolkit
|
8
|
+
# Upload file to gdrive
|
9
|
+
class GdriveUploader
|
10
|
+
def initialize(runner)
|
11
|
+
@system_runner = runner
|
12
|
+
end
|
13
|
+
|
14
|
+
def check_file_validity(file_path)
|
15
|
+
abort("Can't find file at #{file_path}") unless File.exist?(file_path)
|
16
|
+
end
|
17
|
+
|
18
|
+
def upload(file_path, file_name, directory_id)
|
19
|
+
check_file_validity(file_path)
|
20
|
+
|
21
|
+
# p "uploading file #{file_path} with file_name #{file_name}"
|
22
|
+
command = "gdrive upload --share -p \"#{directory_id}\" --name \"#{file_name}\" \"#{file_path}\""
|
23
|
+
command += " | grep -i https | cut -d' ' -f7"
|
24
|
+
share_link = @system_runner.run_with_output command
|
25
|
+
share_link
|
26
|
+
end
|
27
|
+
|
28
|
+
def update(file_path, file_name, file_id)
|
29
|
+
check_file_validity(file_path)
|
30
|
+
|
31
|
+
# p "updating #{file_name} using file #{file_path} with file id #{file_id}"
|
32
|
+
command = "gdrive update --name \"#{file_name}\" \"#{file_id}\" \"#{file_path}\""
|
33
|
+
@system_runner.run command
|
34
|
+
end
|
35
|
+
|
36
|
+
def upload_or_update(file_path, file_name, directory_id)
|
37
|
+
file_id = get_file_id(directory_id, file_name)
|
38
|
+
if file_id.empty?
|
39
|
+
upload(file_path, file_name, directory_id)
|
40
|
+
else
|
41
|
+
update(file_path, file_name, file_id)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def get_file_id(directory_id, file_name_prefix)
|
46
|
+
## Get FILEID of the file with same file_name_prefix if exists
|
47
|
+
command = "gdrive list -q \"name contains '#{file_name_prefix}' and '#{directory_id}' in parents\" "
|
48
|
+
command += "--order \"modifiedTime desc\" -m 1 --no-header | awk '{print $1;}'"
|
49
|
+
file_id = @system_runner.run_with_output command
|
50
|
+
file_id
|
51
|
+
end
|
52
|
+
|
53
|
+
def download(file_path: '.', file_name:, directory_id: 'root')
|
54
|
+
file_id = get_file_id(directory_id, file_name)
|
55
|
+
abort "#{file_name} not found in directory id #{directory_id}" unless file_id
|
56
|
+
|
57
|
+
command = "gdrive download -f -r --path \"#{file_path}\" \"#{file_id}\""
|
58
|
+
@system_runner.run command
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
data/lib/slack_poster.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# frozen_string_literal: true
|
4
|
+
|
5
|
+
require_relative 'adx_toolkit/network_request'
|
6
|
+
|
7
|
+
module ADXToolkit
|
8
|
+
# Send message and upload file to slack
|
9
|
+
class SlackPoster
|
10
|
+
URL = 'https://slack.com/api/'
|
11
|
+
|
12
|
+
def initialize(network_request = NetworkRequest.new)
|
13
|
+
@network_request = network_request
|
14
|
+
end
|
15
|
+
|
16
|
+
def post_message(channel_id, message, token)
|
17
|
+
url = "#{URL}chat.postMessage"
|
18
|
+
escaped_message = escape_newline(message)
|
19
|
+
@network_request.post(url, { token: token }, 'channel' => channel_id, 'text' => escaped_message)
|
20
|
+
end
|
21
|
+
|
22
|
+
def escape_newline(message)
|
23
|
+
new_message = message.gsub('%0A', "\n")
|
24
|
+
# new_message = new_message.gsub('0x0A', "\n")
|
25
|
+
# new_message = new_message.gsub('\n', "\n")
|
26
|
+
new_message
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,229 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: adx_toolkit
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Core ADX
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-03-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: cucumber
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.1'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 3.1.2
|
23
|
+
type: :development
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3.1'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 3.1.2
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: mocha
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.11'
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 1.11.2
|
43
|
+
type: :development
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '1.11'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 1.11.2
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: rake
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '13.0'
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 13.0.1
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '13.0'
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 13.0.1
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: rubocop
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: 0.79.0
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.79'
|
83
|
+
type: :development
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.79.0
|
90
|
+
- - "~>"
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0.79'
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: rufo
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0.8'
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 0.8.1
|
103
|
+
type: :development
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0.8'
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: 0.8.1
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: simplecov
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - "~>"
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0.17'
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: 0.17.1
|
123
|
+
type: :development
|
124
|
+
prerelease: false
|
125
|
+
version_requirements: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - "~>"
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '0.17'
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: 0.17.1
|
133
|
+
- !ruby/object:Gem::Dependency
|
134
|
+
name: simplecov-html
|
135
|
+
requirement: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - "~>"
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0.10'
|
140
|
+
- - ">="
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: 0.10.2
|
143
|
+
type: :development
|
144
|
+
prerelease: false
|
145
|
+
version_requirements: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - "~>"
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0.10'
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 0.10.2
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: test-unit
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '3.3'
|
160
|
+
- - ">="
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: 3.3.5
|
163
|
+
type: :development
|
164
|
+
prerelease: false
|
165
|
+
version_requirements: !ruby/object:Gem::Requirement
|
166
|
+
requirements:
|
167
|
+
- - "~>"
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
version: '3.3'
|
170
|
+
- - ">="
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: 3.3.5
|
173
|
+
- !ruby/object:Gem::Dependency
|
174
|
+
name: webmock
|
175
|
+
requirement: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - "~>"
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: '3.7'
|
180
|
+
- - ">="
|
181
|
+
- !ruby/object:Gem::Version
|
182
|
+
version: 3.7.6
|
183
|
+
type: :development
|
184
|
+
prerelease: false
|
185
|
+
version_requirements: !ruby/object:Gem::Requirement
|
186
|
+
requirements:
|
187
|
+
- - "~>"
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '3.7'
|
190
|
+
- - ">="
|
191
|
+
- !ruby/object:Gem::Version
|
192
|
+
version: 3.7.6
|
193
|
+
description: " Toolkit for Core ADX\n"
|
194
|
+
email:
|
195
|
+
- apps.ci-cd@bukalapak.com
|
196
|
+
executables:
|
197
|
+
- slack_poster
|
198
|
+
extensions: []
|
199
|
+
extra_rdoc_files: []
|
200
|
+
files:
|
201
|
+
- bin/slack_poster
|
202
|
+
- lib/adx_toolkit/network_request.rb
|
203
|
+
- lib/adx_toolkit/system_runner.rb
|
204
|
+
- lib/gdrive_uploader.rb
|
205
|
+
- lib/slack_poster.rb
|
206
|
+
homepage:
|
207
|
+
licenses:
|
208
|
+
- MIT
|
209
|
+
metadata: {}
|
210
|
+
post_install_message:
|
211
|
+
rdoc_options: []
|
212
|
+
require_paths:
|
213
|
+
- lib
|
214
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
215
|
+
requirements:
|
216
|
+
- - ">="
|
217
|
+
- !ruby/object:Gem::Version
|
218
|
+
version: '0'
|
219
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
220
|
+
requirements:
|
221
|
+
- - ">="
|
222
|
+
- !ruby/object:Gem::Version
|
223
|
+
version: '0'
|
224
|
+
requirements: []
|
225
|
+
rubygems_version: 3.0.3
|
226
|
+
signing_key:
|
227
|
+
specification_version: 4
|
228
|
+
summary: A toolkit for ADX
|
229
|
+
test_files: []
|