neetob 0.4.33 → 0.4.35
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/Gemfile.lock +153 -113
- data/bookmarks.md +1 -0
- data/lib/neetob/cli/cloudflare/bot_fight_mode.rb +27 -0
- data/lib/neetob/cli/cloudflare/commands.rb +7 -0
- data/lib/neetob/cli/heroku/autoscaling_config.rb +64 -0
- data/lib/neetob/cli/heroku/commands.rb +21 -0
- data/lib/neetob/cli/heroku/maintenance_window.rb +44 -0
- data/lib/neetob/cli/heroku/stack.rb +55 -0
- data/lib/neetob/cli/neeto_deploy/autoscaling_config.rb +20 -0
- data/lib/neetob/cli/neeto_deploy/commands.rb +14 -0
- data/lib/neetob/cli/neeto_deploy/scheduled_exports.rb +20 -0
- data/lib/neetob/cli/sre/base.rb +68 -0
- data/lib/neetob/cli/sre/check_essential_env.rb +80 -0
- data/lib/neetob/cli/sre/commands.rb +18 -0
- data/lib/neetob/cli.rb +4 -0
- data/lib/neetob/version.rb +1 -1
- metadata +11 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: '0945e07017cccbf8d7801d39d5db83ce7f691983d9007a96471f1302f6ed8c46'
|
|
4
|
+
data.tar.gz: 59d75132f79177edcf0ddeca67d0b52a853ed3114bb5ea0e2f51eaf2ee976109
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4ba8e4fb4bd8bb66e6200ac955731770574e86b7aebf8cfbd5e05511c42d1259e6cc3f4ec355fe2502ff4aad33424855c2a5568c12aee336b0f8db315eaf4c6f
|
|
7
|
+
data.tar.gz: 4bd38078fb648387677a1685b9a21c32c372437d964721a18dc16879409bfb5b6aedf95668d2bf2241fb85f887d25e283f60663e4f031b004709d27f1a1377ee
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
neetob (0.4.
|
|
4
|
+
neetob (0.4.35)
|
|
5
5
|
brakeman (~> 5.0)
|
|
6
6
|
chronic
|
|
7
7
|
dotenv (~> 2.8.1)
|
|
@@ -15,13 +15,18 @@ PATH
|
|
|
15
15
|
GEM
|
|
16
16
|
remote: https://O6Ts9-SVDaUZpHMRs2CpJp22RwbETDE@gems.neeto.com/
|
|
17
17
|
specs:
|
|
18
|
-
neeto-commons-backend (1.
|
|
18
|
+
neeto-commons-backend (1.6.42)
|
|
19
19
|
actionview
|
|
20
20
|
bullet
|
|
21
|
+
colorize
|
|
21
22
|
database_cleaner
|
|
22
23
|
honeybadger
|
|
23
|
-
|
|
24
|
+
htmlentities
|
|
25
|
+
intercom-rails
|
|
26
|
+
mixpanel-ruby
|
|
27
|
+
multipart-post
|
|
24
28
|
omniauth-google-oauth2
|
|
29
|
+
pagy
|
|
25
30
|
premailer-rails
|
|
26
31
|
public_suffix
|
|
27
32
|
pundit
|
|
@@ -32,9 +37,11 @@ GEM
|
|
|
32
37
|
rails_email_preview
|
|
33
38
|
rake
|
|
34
39
|
redis
|
|
40
|
+
rinku
|
|
35
41
|
sidekiq
|
|
36
42
|
sidekiq-cron
|
|
37
43
|
sidekiq-failures
|
|
44
|
+
solid_cache
|
|
38
45
|
webmock
|
|
39
46
|
neeto-compliance (1.1.114)
|
|
40
47
|
colorize
|
|
@@ -45,78 +52,89 @@ GEM
|
|
|
45
52
|
GEM
|
|
46
53
|
remote: https://rubygems.org/
|
|
47
54
|
specs:
|
|
48
|
-
actioncable (7.
|
|
49
|
-
actionpack (= 7.
|
|
50
|
-
activesupport (= 7.
|
|
55
|
+
actioncable (7.1.3.4)
|
|
56
|
+
actionpack (= 7.1.3.4)
|
|
57
|
+
activesupport (= 7.1.3.4)
|
|
51
58
|
nio4r (~> 2.0)
|
|
52
59
|
websocket-driver (>= 0.6.1)
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
60
|
+
zeitwerk (~> 2.6)
|
|
61
|
+
actionmailbox (7.1.3.4)
|
|
62
|
+
actionpack (= 7.1.3.4)
|
|
63
|
+
activejob (= 7.1.3.4)
|
|
64
|
+
activerecord (= 7.1.3.4)
|
|
65
|
+
activestorage (= 7.1.3.4)
|
|
66
|
+
activesupport (= 7.1.3.4)
|
|
59
67
|
mail (>= 2.7.1)
|
|
60
68
|
net-imap
|
|
61
69
|
net-pop
|
|
62
70
|
net-smtp
|
|
63
|
-
actionmailer (7.
|
|
64
|
-
actionpack (= 7.
|
|
65
|
-
actionview (= 7.
|
|
66
|
-
activejob (= 7.
|
|
67
|
-
activesupport (= 7.
|
|
71
|
+
actionmailer (7.1.3.4)
|
|
72
|
+
actionpack (= 7.1.3.4)
|
|
73
|
+
actionview (= 7.1.3.4)
|
|
74
|
+
activejob (= 7.1.3.4)
|
|
75
|
+
activesupport (= 7.1.3.4)
|
|
68
76
|
mail (~> 2.5, >= 2.5.4)
|
|
69
77
|
net-imap
|
|
70
78
|
net-pop
|
|
71
79
|
net-smtp
|
|
72
|
-
rails-dom-testing (~> 2.
|
|
73
|
-
actionpack (7.
|
|
74
|
-
actionview (= 7.
|
|
75
|
-
activesupport (= 7.
|
|
76
|
-
|
|
80
|
+
rails-dom-testing (~> 2.2)
|
|
81
|
+
actionpack (7.1.3.4)
|
|
82
|
+
actionview (= 7.1.3.4)
|
|
83
|
+
activesupport (= 7.1.3.4)
|
|
84
|
+
nokogiri (>= 1.8.5)
|
|
85
|
+
racc
|
|
86
|
+
rack (>= 2.2.4)
|
|
87
|
+
rack-session (>= 1.0.1)
|
|
77
88
|
rack-test (>= 0.6.3)
|
|
78
|
-
rails-dom-testing (~> 2.
|
|
79
|
-
rails-html-sanitizer (~> 1.
|
|
80
|
-
actiontext (7.
|
|
81
|
-
actionpack (= 7.
|
|
82
|
-
activerecord (= 7.
|
|
83
|
-
activestorage (= 7.
|
|
84
|
-
activesupport (= 7.
|
|
89
|
+
rails-dom-testing (~> 2.2)
|
|
90
|
+
rails-html-sanitizer (~> 1.6)
|
|
91
|
+
actiontext (7.1.3.4)
|
|
92
|
+
actionpack (= 7.1.3.4)
|
|
93
|
+
activerecord (= 7.1.3.4)
|
|
94
|
+
activestorage (= 7.1.3.4)
|
|
95
|
+
activesupport (= 7.1.3.4)
|
|
85
96
|
globalid (>= 0.6.0)
|
|
86
97
|
nokogiri (>= 1.8.5)
|
|
87
|
-
actionview (7.
|
|
88
|
-
activesupport (= 7.
|
|
98
|
+
actionview (7.1.3.4)
|
|
99
|
+
activesupport (= 7.1.3.4)
|
|
89
100
|
builder (~> 3.1)
|
|
90
|
-
erubi (~> 1.
|
|
91
|
-
rails-dom-testing (~> 2.
|
|
92
|
-
rails-html-sanitizer (~> 1.
|
|
93
|
-
activejob (7.
|
|
94
|
-
activesupport (= 7.
|
|
101
|
+
erubi (~> 1.11)
|
|
102
|
+
rails-dom-testing (~> 2.2)
|
|
103
|
+
rails-html-sanitizer (~> 1.6)
|
|
104
|
+
activejob (7.1.3.4)
|
|
105
|
+
activesupport (= 7.1.3.4)
|
|
95
106
|
globalid (>= 0.3.6)
|
|
96
|
-
activemodel (7.
|
|
97
|
-
activesupport (= 7.
|
|
98
|
-
activerecord (7.
|
|
99
|
-
activemodel (= 7.
|
|
100
|
-
activesupport (= 7.
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
107
|
+
activemodel (7.1.3.4)
|
|
108
|
+
activesupport (= 7.1.3.4)
|
|
109
|
+
activerecord (7.1.3.4)
|
|
110
|
+
activemodel (= 7.1.3.4)
|
|
111
|
+
activesupport (= 7.1.3.4)
|
|
112
|
+
timeout (>= 0.4.0)
|
|
113
|
+
activestorage (7.1.3.4)
|
|
114
|
+
actionpack (= 7.1.3.4)
|
|
115
|
+
activejob (= 7.1.3.4)
|
|
116
|
+
activerecord (= 7.1.3.4)
|
|
117
|
+
activesupport (= 7.1.3.4)
|
|
106
118
|
marcel (~> 1.0)
|
|
107
|
-
|
|
108
|
-
|
|
119
|
+
activesupport (7.1.3.4)
|
|
120
|
+
base64
|
|
121
|
+
bigdecimal
|
|
109
122
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
123
|
+
connection_pool (>= 2.2.5)
|
|
124
|
+
drb
|
|
110
125
|
i18n (>= 1.6, < 2)
|
|
111
126
|
minitest (>= 5.1)
|
|
127
|
+
mutex_m
|
|
112
128
|
tzinfo (~> 2.0)
|
|
113
129
|
addressable (2.8.6)
|
|
114
130
|
public_suffix (>= 2.0.2, < 6.0)
|
|
115
131
|
ansi (1.5.0)
|
|
116
132
|
ast (2.4.2)
|
|
133
|
+
base64 (0.2.0)
|
|
134
|
+
bigdecimal (3.1.8)
|
|
117
135
|
brakeman (5.4.1)
|
|
118
|
-
builder (3.
|
|
119
|
-
bullet (7.1.
|
|
136
|
+
builder (3.3.0)
|
|
137
|
+
bullet (7.1.6)
|
|
120
138
|
activesupport (>= 3.0.0)
|
|
121
139
|
uniform_notifier (~> 1.11)
|
|
122
140
|
byebug (11.1.3)
|
|
@@ -124,12 +142,12 @@ GEM
|
|
|
124
142
|
chronic (0.10.2)
|
|
125
143
|
coderay (1.1.3)
|
|
126
144
|
colorize (1.1.0)
|
|
127
|
-
concurrent-ruby (1.
|
|
145
|
+
concurrent-ruby (1.3.1)
|
|
128
146
|
connection_pool (2.4.1)
|
|
129
147
|
crack (0.4.5)
|
|
130
148
|
rexml
|
|
131
149
|
crass (1.0.6)
|
|
132
|
-
css_parser (1.
|
|
150
|
+
css_parser (1.17.1)
|
|
133
151
|
addressable
|
|
134
152
|
database_cleaner (2.0.2)
|
|
135
153
|
database_cleaner-active_record (>= 2, < 3)
|
|
@@ -140,8 +158,9 @@ GEM
|
|
|
140
158
|
date (3.3.4)
|
|
141
159
|
docile (1.4.0)
|
|
142
160
|
dotenv (2.8.1)
|
|
161
|
+
drb (2.2.1)
|
|
143
162
|
erubi (1.12.0)
|
|
144
|
-
et-orbi (1.2.
|
|
163
|
+
et-orbi (1.2.11)
|
|
145
164
|
tzinfo
|
|
146
165
|
event_emitter (0.2.6)
|
|
147
166
|
faraday (2.7.1)
|
|
@@ -150,9 +169,11 @@ GEM
|
|
|
150
169
|
faraday-net_http (3.0.2)
|
|
151
170
|
faraday-retry (2.0.0)
|
|
152
171
|
faraday (~> 2.0)
|
|
153
|
-
ffi (1.
|
|
154
|
-
|
|
155
|
-
|
|
172
|
+
ffi (1.17.0)
|
|
173
|
+
ffi (1.17.0-x86_64-darwin)
|
|
174
|
+
ffi (1.17.0-x86_64-linux-gnu)
|
|
175
|
+
fugit (1.11.0)
|
|
176
|
+
et-orbi (~> 1, >= 1.2.11)
|
|
156
177
|
raabro (~> 1.4)
|
|
157
178
|
fury (0.0.1)
|
|
158
179
|
globalid (1.2.1)
|
|
@@ -160,28 +181,23 @@ GEM
|
|
|
160
181
|
hash-deep-merge (0.1.1)
|
|
161
182
|
hashdiff (1.1.0)
|
|
162
183
|
hashie (5.0.0)
|
|
163
|
-
honeybadger (5.
|
|
184
|
+
honeybadger (5.13.0)
|
|
164
185
|
htmlentities (4.3.4)
|
|
165
186
|
httparty (0.21.0)
|
|
166
187
|
mini_mime (>= 1.0.0)
|
|
167
188
|
multi_xml (>= 0.5.2)
|
|
168
|
-
i18n (1.14.
|
|
189
|
+
i18n (1.14.5)
|
|
169
190
|
concurrent-ruby (~> 1.0)
|
|
170
191
|
iniparse (1.5.0)
|
|
192
|
+
intercom-rails (1.0.1)
|
|
193
|
+
activesupport (> 4.0)
|
|
194
|
+
io-console (0.7.2)
|
|
195
|
+
irb (1.13.1)
|
|
196
|
+
rdoc (>= 4.0.0)
|
|
197
|
+
reline (>= 0.4.2)
|
|
171
198
|
json (2.6.3)
|
|
172
|
-
jwt (2.
|
|
173
|
-
|
|
174
|
-
activesupport (>= 4.1.0)
|
|
175
|
-
kaminari-actionview (= 1.2.2)
|
|
176
|
-
kaminari-activerecord (= 1.2.2)
|
|
177
|
-
kaminari-core (= 1.2.2)
|
|
178
|
-
kaminari-actionview (1.2.2)
|
|
179
|
-
actionview
|
|
180
|
-
kaminari-core (= 1.2.2)
|
|
181
|
-
kaminari-activerecord (1.2.2)
|
|
182
|
-
activerecord
|
|
183
|
-
kaminari-core (= 1.2.2)
|
|
184
|
-
kaminari-core (1.2.2)
|
|
199
|
+
jwt (2.8.2)
|
|
200
|
+
base64
|
|
185
201
|
launchy (2.5.2)
|
|
186
202
|
addressable (~> 2.8)
|
|
187
203
|
loofah (2.22.0)
|
|
@@ -195,16 +211,19 @@ GEM
|
|
|
195
211
|
marcel (1.0.4)
|
|
196
212
|
method_source (1.0.0)
|
|
197
213
|
mini_mime (1.1.5)
|
|
198
|
-
mini_portile2 (2.8.
|
|
214
|
+
mini_portile2 (2.8.7)
|
|
199
215
|
minitest (5.16.3)
|
|
200
216
|
minitest-reporters (1.5.0)
|
|
201
217
|
ansi
|
|
202
218
|
builder
|
|
203
219
|
minitest (>= 5.0)
|
|
204
220
|
ruby-progressbar
|
|
221
|
+
mixpanel-ruby (2.3.0)
|
|
205
222
|
mocha (2.0.2)
|
|
206
223
|
ruby2_keywords (>= 0.0.5)
|
|
207
224
|
multi_xml (0.6.0)
|
|
225
|
+
multipart-post (2.4.1)
|
|
226
|
+
mutex_m (0.2.0)
|
|
208
227
|
neetodeploy (1.1.5)
|
|
209
228
|
colorize
|
|
210
229
|
dotenv (~> 2.8.1)
|
|
@@ -241,15 +260,15 @@ GEM
|
|
|
241
260
|
octokit (4.25.1)
|
|
242
261
|
faraday (>= 1, < 3)
|
|
243
262
|
sawyer (~> 0.9)
|
|
244
|
-
omniauth (2.1.
|
|
263
|
+
omniauth (2.1.2)
|
|
245
264
|
hashie (>= 3.4.6)
|
|
246
265
|
rack (>= 2.2.3)
|
|
247
266
|
rack-protection
|
|
248
|
-
omniauth-google-oauth2 (1.1.
|
|
267
|
+
omniauth-google-oauth2 (1.1.2)
|
|
249
268
|
jwt (>= 2.0)
|
|
250
|
-
oauth2 (~> 2.0
|
|
269
|
+
oauth2 (~> 2.0)
|
|
251
270
|
omniauth (~> 2.0)
|
|
252
|
-
omniauth-oauth2 (~> 1.8
|
|
271
|
+
omniauth-oauth2 (~> 1.8)
|
|
253
272
|
omniauth-oauth2 (1.8.0)
|
|
254
273
|
oauth2 (>= 1.4, < 3)
|
|
255
274
|
omniauth (~> 2.0)
|
|
@@ -257,10 +276,11 @@ GEM
|
|
|
257
276
|
childprocess (>= 0.6.3, < 5)
|
|
258
277
|
iniparse (~> 1.4)
|
|
259
278
|
rexml (~> 3.2)
|
|
279
|
+
pagy (8.5.0)
|
|
260
280
|
parallel (1.22.1)
|
|
261
281
|
parser (3.1.3.0)
|
|
262
282
|
ast (~> 2.4.1)
|
|
263
|
-
premailer (1.
|
|
283
|
+
premailer (1.23.0)
|
|
264
284
|
addressable
|
|
265
285
|
css_parser (>= 1.12.0)
|
|
266
286
|
htmlentities (>= 4.0.0)
|
|
@@ -271,37 +291,45 @@ GEM
|
|
|
271
291
|
pry (0.14.1)
|
|
272
292
|
coderay (~> 1.1)
|
|
273
293
|
method_source (~> 1.0)
|
|
294
|
+
psych (5.1.2)
|
|
295
|
+
stringio
|
|
274
296
|
public_suffix (5.0.5)
|
|
275
|
-
pundit (2.3.
|
|
297
|
+
pundit (2.3.2)
|
|
276
298
|
activesupport (>= 3.0.0)
|
|
277
299
|
raabro (1.4.0)
|
|
278
|
-
racc (1.
|
|
279
|
-
rack (2.2.
|
|
300
|
+
racc (1.8.0)
|
|
301
|
+
rack (2.2.9)
|
|
280
302
|
rack-attack (6.7.0)
|
|
281
303
|
rack (>= 1.0, < 4)
|
|
282
304
|
rack-cors (2.0.2)
|
|
283
305
|
rack (>= 2.0.0)
|
|
284
|
-
rack-mini-profiler (3.
|
|
306
|
+
rack-mini-profiler (3.3.1)
|
|
285
307
|
rack (>= 1.2.0)
|
|
286
|
-
rack-protection (3.
|
|
308
|
+
rack-protection (3.2.0)
|
|
309
|
+
base64 (>= 0.1.0)
|
|
287
310
|
rack (~> 2.2, >= 2.2.4)
|
|
311
|
+
rack-session (1.0.2)
|
|
312
|
+
rack (< 3)
|
|
288
313
|
rack-test (2.1.0)
|
|
289
314
|
rack (>= 1.3)
|
|
290
|
-
rack-timeout (0.
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
315
|
+
rack-timeout (0.7.0)
|
|
316
|
+
rackup (1.0.0)
|
|
317
|
+
rack (< 3)
|
|
318
|
+
webrick
|
|
319
|
+
rails (7.1.3.4)
|
|
320
|
+
actioncable (= 7.1.3.4)
|
|
321
|
+
actionmailbox (= 7.1.3.4)
|
|
322
|
+
actionmailer (= 7.1.3.4)
|
|
323
|
+
actionpack (= 7.1.3.4)
|
|
324
|
+
actiontext (= 7.1.3.4)
|
|
325
|
+
actionview (= 7.1.3.4)
|
|
326
|
+
activejob (= 7.1.3.4)
|
|
327
|
+
activemodel (= 7.1.3.4)
|
|
328
|
+
activerecord (= 7.1.3.4)
|
|
329
|
+
activestorage (= 7.1.3.4)
|
|
330
|
+
activesupport (= 7.1.3.4)
|
|
303
331
|
bundler (>= 1.15.0)
|
|
304
|
-
railties (= 7.
|
|
332
|
+
railties (= 7.1.3.4)
|
|
305
333
|
rails-dom-testing (2.2.0)
|
|
306
334
|
activesupport (>= 5.0.0)
|
|
307
335
|
minitest
|
|
@@ -314,24 +342,30 @@ GEM
|
|
|
314
342
|
request_store
|
|
315
343
|
sassc-rails (>= 2.0.0)
|
|
316
344
|
turbolinks
|
|
317
|
-
railties (7.
|
|
318
|
-
actionpack (= 7.
|
|
319
|
-
activesupport (= 7.
|
|
320
|
-
|
|
345
|
+
railties (7.1.3.4)
|
|
346
|
+
actionpack (= 7.1.3.4)
|
|
347
|
+
activesupport (= 7.1.3.4)
|
|
348
|
+
irb
|
|
349
|
+
rackup (>= 1.0.0)
|
|
321
350
|
rake (>= 12.2)
|
|
322
|
-
thor (~> 1.0)
|
|
323
|
-
zeitwerk (~> 2.
|
|
351
|
+
thor (~> 1.0, >= 1.2.2)
|
|
352
|
+
zeitwerk (~> 2.6)
|
|
324
353
|
rainbow (3.1.1)
|
|
325
354
|
rake (13.0.6)
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
redis
|
|
355
|
+
rdoc (6.7.0)
|
|
356
|
+
psych (>= 4.0.0)
|
|
357
|
+
redis (5.2.0)
|
|
358
|
+
redis-client (>= 0.22.0)
|
|
359
|
+
redis-client (0.22.2)
|
|
329
360
|
connection_pool
|
|
330
361
|
regexp_parser (2.6.1)
|
|
331
|
-
|
|
362
|
+
reline (0.5.8)
|
|
363
|
+
io-console (~> 0.5)
|
|
364
|
+
request_store (1.7.0)
|
|
332
365
|
rack (>= 1.4)
|
|
333
366
|
rexml (3.2.8)
|
|
334
367
|
strscan (>= 3.0.9)
|
|
368
|
+
rinku (2.0.6)
|
|
335
369
|
rubocop (1.39.0)
|
|
336
370
|
json (~> 2.3)
|
|
337
371
|
parallel (~> 1.10)
|
|
@@ -357,12 +391,12 @@ GEM
|
|
|
357
391
|
sawyer (0.9.2)
|
|
358
392
|
addressable (>= 2.3.5)
|
|
359
393
|
faraday (>= 0.17.3, < 3)
|
|
360
|
-
sidekiq (7.
|
|
394
|
+
sidekiq (7.2.4)
|
|
361
395
|
concurrent-ruby (< 2)
|
|
362
396
|
connection_pool (>= 2.3.0)
|
|
363
397
|
rack (>= 2.2.4)
|
|
364
|
-
redis-client (>= 0.
|
|
365
|
-
sidekiq-cron (1.
|
|
398
|
+
redis-client (>= 0.19.0)
|
|
399
|
+
sidekiq-cron (1.12.0)
|
|
366
400
|
fugit (~> 1.8)
|
|
367
401
|
globalid (>= 1.0.1)
|
|
368
402
|
sidekiq (>= 6)
|
|
@@ -377,13 +411,18 @@ GEM
|
|
|
377
411
|
snaky_hash (2.0.1)
|
|
378
412
|
hashie
|
|
379
413
|
version_gem (~> 1.1, >= 1.1.1)
|
|
414
|
+
solid_cache (0.6.0)
|
|
415
|
+
activejob (>= 7)
|
|
416
|
+
activerecord (>= 7)
|
|
417
|
+
railties (>= 7)
|
|
380
418
|
sprockets (4.2.1)
|
|
381
419
|
concurrent-ruby (~> 1.0)
|
|
382
420
|
rack (>= 2.2.4, < 4)
|
|
383
|
-
sprockets-rails (3.
|
|
384
|
-
actionpack (>=
|
|
385
|
-
activesupport (>=
|
|
421
|
+
sprockets-rails (3.5.1)
|
|
422
|
+
actionpack (>= 6.1)
|
|
423
|
+
activesupport (>= 6.1)
|
|
386
424
|
sprockets (>= 3.0.0)
|
|
425
|
+
stringio (3.1.0)
|
|
387
426
|
strscan (3.1.0)
|
|
388
427
|
terminal-table (3.0.2)
|
|
389
428
|
unicode-display_width (>= 1.1.1, < 3)
|
|
@@ -400,11 +439,12 @@ GEM
|
|
|
400
439
|
concurrent-ruby (~> 1.0)
|
|
401
440
|
unicode-display_width (2.5.0)
|
|
402
441
|
uniform_notifier (1.16.0)
|
|
403
|
-
version_gem (1.1.
|
|
442
|
+
version_gem (1.1.4)
|
|
404
443
|
webmock (3.18.1)
|
|
405
444
|
addressable (>= 2.8.0)
|
|
406
445
|
crack (>= 0.3.2)
|
|
407
446
|
hashdiff (>= 0.4.0, < 2.0.0)
|
|
447
|
+
webrick (1.8.1)
|
|
408
448
|
websocket (1.2.10)
|
|
409
449
|
websocket-client-simple (0.8.0)
|
|
410
450
|
event_emitter
|
data/bookmarks.md
CHANGED
|
@@ -93,6 +93,7 @@ example: [All nano issues created before the 20th Mar 2024](https://github.com/i
|
|
|
93
93
|
- [Joseph's Board](https://github.com/orgs/bigbinary/projects/79/views/1):
|
|
94
94
|
[neeto-engineering-web](https://github.com/orgs/bigbinary/projects/79/views/1?filterQuery=repo%3A%22bigbinary%2Fneeto-engineering-web%22),
|
|
95
95
|
[neeto-replay-web](https://github.com/orgs/bigbinary/projects/79/views/1?filterQuery=repo%3A%22bigbinary%2Fneeto-replay-web%22),
|
|
96
|
+
[neeto-publish-web](https://github.com/orgs/bigbinary/projects/79/views/10),
|
|
96
97
|
[neeto-wireframe-web](https://github.com/orgs/bigbinary/projects/79/views/1?filterQuery=repo%3A%22bigbinary%2Fneeto-wireframe-web%22),
|
|
97
98
|
[neeto-commons-frontend](https://github.com/orgs/bigbinary/projects/79/views/1?filterQuery=repo%3A%22bigbinary%2Fneeto-commons-frontend%22),
|
|
98
99
|
[eslint-plugin-neeto](https://github.com/orgs/bigbinary/projects/79/views/1?filterQuery=repo%3A%22bigbinary%2Feslint-plugin-neeto%22),
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
|
|
5
|
+
module Neetob
|
|
6
|
+
class CLI
|
|
7
|
+
module Cloudflare
|
|
8
|
+
class BotFightMode < Base
|
|
9
|
+
attr_accessor :domain
|
|
10
|
+
|
|
11
|
+
def initialize(domain)
|
|
12
|
+
super()
|
|
13
|
+
@domain = domain
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def run
|
|
17
|
+
zone_id = ZONE_IDS[domain.to_sym]
|
|
18
|
+
raise(StandardError, "Domain '#{domain}' not found.") if zone_id.nil?
|
|
19
|
+
|
|
20
|
+
url = create_url(zone_id, "bot_management")
|
|
21
|
+
response = get(url)
|
|
22
|
+
ui.info("Bot fight mode is turned #{response[:result][:fight_mode] ? "on" : "off"}")
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -6,6 +6,7 @@ require_relative "min_tls_version"
|
|
|
6
6
|
require_relative "always_use_https"
|
|
7
7
|
require_relative "dns_proxy_status"
|
|
8
8
|
require_relative "ensure_cloudflare_cdn"
|
|
9
|
+
require_relative "bot_fight_mode"
|
|
9
10
|
|
|
10
11
|
module Neetob
|
|
11
12
|
class CLI
|
|
@@ -40,6 +41,12 @@ module Neetob
|
|
|
40
41
|
def ensure_cloudflare_cdn
|
|
41
42
|
EnsureCloudflareCdn.new(options[:app]).process
|
|
42
43
|
end
|
|
44
|
+
|
|
45
|
+
desc "bot_fight_mode", "Check if a domain has bot fight mode turned on or not."
|
|
46
|
+
option :domain, type: :string, aliases: "-d", required: true, description: "Domain name"
|
|
47
|
+
def bot_fight_mode
|
|
48
|
+
BotFightMode.new(options[:domain]).process
|
|
49
|
+
end
|
|
43
50
|
end
|
|
44
51
|
end
|
|
45
52
|
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "zlib"
|
|
4
|
+
require "stringio"
|
|
5
|
+
|
|
6
|
+
require_relative "../base"
|
|
7
|
+
|
|
8
|
+
module Neetob
|
|
9
|
+
class CLI
|
|
10
|
+
module Heroku
|
|
11
|
+
class AutoscalingConfig < Base
|
|
12
|
+
attr_accessor :app
|
|
13
|
+
|
|
14
|
+
def initialize(app)
|
|
15
|
+
super()
|
|
16
|
+
@app = app
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def run
|
|
20
|
+
raise(StandardError, "HEROKU_API_KEY is not given") if ENV["HEROKU_API_KEY"].nil?
|
|
21
|
+
|
|
22
|
+
url = create_url(app)
|
|
23
|
+
response = get(url)
|
|
24
|
+
if response.any? { |addon| addon[:addon_service][:name] == "judoscale" }
|
|
25
|
+
ui.success("Judoscale addon is enabled for #{app}")
|
|
26
|
+
else
|
|
27
|
+
ui.error("Judoscale not present for #{app}")
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def create_url(app)
|
|
34
|
+
"https://api.heroku.com/apps/#{app}/addons"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def parse_response(http_result)
|
|
38
|
+
case http_result
|
|
39
|
+
when Net::HTTPSuccess
|
|
40
|
+
compressed_string = StringIO.new(http_result.body)
|
|
41
|
+
response = Zlib::GzipReader.new(compressed_string).read
|
|
42
|
+
JSON.parse(response, symbolize_names: true)
|
|
43
|
+
else
|
|
44
|
+
error_message = JSON.parse(http_result.body)["message"]
|
|
45
|
+
raise(StandardError, "Request failed with status code #{http_result.code}: #{error_message}")
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def get(url,
|
|
50
|
+
headers: { "Accept" => "application/vnd.heroku+json; version=3", "Authorization" => "Bearer #{ENV["HEROKU_API_KEY"]}" })
|
|
51
|
+
uri = URI(url)
|
|
52
|
+
request = Net::HTTP::Get.new(uri)
|
|
53
|
+
headers.each { |key, value| request[key] = value }
|
|
54
|
+
|
|
55
|
+
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
|
|
56
|
+
http.request(request)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
parse_response(response)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -4,6 +4,9 @@ require "thor"
|
|
|
4
4
|
require_relative "config_vars/commands"
|
|
5
5
|
require_relative "access/commands"
|
|
6
6
|
require_relative "execute"
|
|
7
|
+
require_relative "stack"
|
|
8
|
+
require_relative "autoscaling_config"
|
|
9
|
+
require_relative "maintenance_window"
|
|
7
10
|
|
|
8
11
|
module Neetob
|
|
9
12
|
class CLI
|
|
@@ -22,6 +25,24 @@ module Neetob
|
|
|
22
25
|
|
|
23
26
|
desc "access", "Interact with the users of the Heroku apps"
|
|
24
27
|
subcommand "access", Access::Commands
|
|
28
|
+
|
|
29
|
+
desc "stack", "Check the stack of the app on Heroku"
|
|
30
|
+
option :app, type: :string, aliases: "-a", required: "true", desc: "Name of your app in Heroku"
|
|
31
|
+
def stack
|
|
32
|
+
Stack.new(options[:app]).process
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
desc "autoscaling_config", "Check the stack of the app on Heroku"
|
|
36
|
+
option :app, type: :string, aliases: "-a", required: "true", desc: "Name of your app in Heroku"
|
|
37
|
+
def autoscaling_config
|
|
38
|
+
AutoscalingConfig.new(options[:app]).process
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
desc "maintenance_window", "Check the maintenance windows of addons of an app in Heroku"
|
|
42
|
+
option :app, type: :string, aliases: "-a", required: "true", desc: "Name of your app in Heroku"
|
|
43
|
+
def maintenance_window
|
|
44
|
+
MaintenanceWindow.new(options[:app]).process
|
|
45
|
+
end
|
|
25
46
|
end
|
|
26
47
|
end
|
|
27
48
|
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../base"
|
|
4
|
+
|
|
5
|
+
module Neetob
|
|
6
|
+
class CLI
|
|
7
|
+
module Heroku
|
|
8
|
+
class MaintenanceWindow < Base
|
|
9
|
+
attr_accessor :app
|
|
10
|
+
|
|
11
|
+
def initialize(app)
|
|
12
|
+
super()
|
|
13
|
+
@app = app
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def run
|
|
17
|
+
redis_maintenance_modes =
|
|
18
|
+
`heroku redis:info -a #{app} |
|
|
19
|
+
awk '/^===/ {addon=$2} /Maintenance window:/ {print addon ":", $3, $4, $5, $6, $7}'`
|
|
20
|
+
redis_succeeded = $?.success?
|
|
21
|
+
pg_maintenance_modes =
|
|
22
|
+
`heroku pg:info -a #{app} |
|
|
23
|
+
awk '/^===/ {url=$2; gsub(",", "", url)} /Maintenance window:/ {print url ":", $3, $4, $5, $6, $7}'`
|
|
24
|
+
pg_succeeded = $?.success?
|
|
25
|
+
|
|
26
|
+
unless redis_succeeded || pg_succeeded
|
|
27
|
+
ui.error("There is a problem in accessing the app with name \"#{app}\" in your account.")
|
|
28
|
+
ui.error("Please check the specified app name and ensure you're authorized to view that app.")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
unless redis_maintenance_modes.empty?
|
|
32
|
+
ui.success("Redis maintenance windows:")
|
|
33
|
+
ui.info(redis_maintenance_modes)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
unless pg_maintenance_modes.empty?
|
|
37
|
+
ui.success("PostgreSQL maintenance windows:")
|
|
38
|
+
ui.info(pg_maintenance_modes)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../base"
|
|
4
|
+
|
|
5
|
+
module Neetob
|
|
6
|
+
class CLI
|
|
7
|
+
module Heroku
|
|
8
|
+
class Stack < Base
|
|
9
|
+
attr_accessor :app
|
|
10
|
+
|
|
11
|
+
def initialize(app)
|
|
12
|
+
super()
|
|
13
|
+
@app = app
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def run
|
|
17
|
+
raise(StandardError, "HEROKU_API_KEY is not given") if ENV["HEROKU_API_KEY"].nil?
|
|
18
|
+
|
|
19
|
+
url = create_url(app)
|
|
20
|
+
response = get(url)
|
|
21
|
+
ui.success(response[:build_stack][:name])
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
def create_url(app)
|
|
27
|
+
"https://api.heroku.com/apps/#{app}"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def parse_response(http_result)
|
|
31
|
+
case http_result
|
|
32
|
+
when Net::HTTPSuccess
|
|
33
|
+
JSON.parse(http_result.body, symbolize_names: true)
|
|
34
|
+
else
|
|
35
|
+
error_message = JSON.parse(http_result.body)["message"]
|
|
36
|
+
raise(StandardError, "Request failed with status code #{http_result.code}: #{error_message}")
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def get(url,
|
|
41
|
+
headers: { "Accept" => "application/vnd.heroku+json; version=3", "Authorization" => "Bearer #{ENV["HEROKU_API_KEY"]}" })
|
|
42
|
+
uri = URI(url)
|
|
43
|
+
request = Net::HTTP::Get.new(uri)
|
|
44
|
+
headers.each { |key, value| request[key] = value }
|
|
45
|
+
|
|
46
|
+
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
|
|
47
|
+
http.request(request)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
parse_response(response)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Neetob
|
|
4
|
+
class CLI
|
|
5
|
+
module NeetoDeploy
|
|
6
|
+
class AutoscalingConfig < CLI::Base
|
|
7
|
+
attr_accessor :app
|
|
8
|
+
|
|
9
|
+
def initialize(app)
|
|
10
|
+
super()
|
|
11
|
+
@app = app
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def run
|
|
15
|
+
ui.success(`neetodeploy autoscaling_config list -a #{app}`)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
require "thor"
|
|
4
4
|
require_relative "config_vars/commands"
|
|
5
|
+
require_relative "./autoscaling_config"
|
|
6
|
+
require_relative "./scheduled_exports"
|
|
5
7
|
|
|
6
8
|
module Neetob
|
|
7
9
|
class CLI
|
|
@@ -9,6 +11,18 @@ module Neetob
|
|
|
9
11
|
class Commands < Thor
|
|
10
12
|
desc "config_vars", "Interact with the config(env) variables on neetoDeploy apps"
|
|
11
13
|
subcommand "config_vars", ConfigVars::Commands
|
|
14
|
+
|
|
15
|
+
desc "autoscaling_config", "Get the autoscaling config of an app deployed on NeetoDeploy"
|
|
16
|
+
option :app, type: :string, aliases: :a, desc: "App name"
|
|
17
|
+
def autoscaling_config
|
|
18
|
+
AutoscalingConfig.new(options[:app]).run
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
desc "scheduled_exports", "Get the scheduled exports setting of an app's primary database deployed on NeetoDeploy"
|
|
22
|
+
option :app, type: :string, aliases: :a, desc: "App name"
|
|
23
|
+
def scheduled_exports
|
|
24
|
+
ScheduledExports.new(options[:app]).run
|
|
25
|
+
end
|
|
12
26
|
end
|
|
13
27
|
end
|
|
14
28
|
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Neetob
|
|
4
|
+
class CLI
|
|
5
|
+
module NeetoDeploy
|
|
6
|
+
class ScheduledExports < CLI::Base
|
|
7
|
+
attr_accessor :app
|
|
8
|
+
|
|
9
|
+
def initialize(app)
|
|
10
|
+
super()
|
|
11
|
+
@app = app
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def run
|
|
15
|
+
ui.success(`neetodeploy addon scheduled_exports_enabled -a #{app}`)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../base"
|
|
4
|
+
|
|
5
|
+
module Neetob
|
|
6
|
+
class CLI
|
|
7
|
+
module Sre
|
|
8
|
+
class Base < CLI::Base
|
|
9
|
+
APPS_LIST = {
|
|
10
|
+
"heroku": [
|
|
11
|
+
"neeto-auth-web-production",
|
|
12
|
+
"neeto-chat-web-production",
|
|
13
|
+
"neeto-cal-web-production",
|
|
14
|
+
"neeto-desk-web-production",
|
|
15
|
+
"neeto-kb-web-production",
|
|
16
|
+
"neeto-invoice-web-production",
|
|
17
|
+
"neeto-form-web-production",
|
|
18
|
+
"neeto-runner-web-production",
|
|
19
|
+
"neeto-course-web-production",
|
|
20
|
+
"neeto-deploy-web-production"
|
|
21
|
+
],
|
|
22
|
+
"neetodeploy": [
|
|
23
|
+
"neeto-auth-web-staging",
|
|
24
|
+
"neeto-chat-web-staging",
|
|
25
|
+
"neeto-cal-web-staging",
|
|
26
|
+
"neeto-desk-web-staging",
|
|
27
|
+
"neeto-kb-web-staging",
|
|
28
|
+
"neeto-invoice-web-staging",
|
|
29
|
+
"neeto-form-web-staging",
|
|
30
|
+
"neeto-runner-web-staging",
|
|
31
|
+
"neeto-course-web-staging",
|
|
32
|
+
"neeto-ci-web-production",
|
|
33
|
+
"neeto-code-web-production",
|
|
34
|
+
"neeto-code-web-staging",
|
|
35
|
+
"neeto-crm-web-production",
|
|
36
|
+
"neeto-crm-web-staging",
|
|
37
|
+
"neeto-git-web-production",
|
|
38
|
+
"neeto-git-web-staging",
|
|
39
|
+
"neeto-invisible-web-production",
|
|
40
|
+
"neeto-invisible-web-staging",
|
|
41
|
+
"neeto-planner-web-production",
|
|
42
|
+
"neeto-planner-web-staging",
|
|
43
|
+
"neeto-quiz-web-production",
|
|
44
|
+
"neeto-quiz-web-staging",
|
|
45
|
+
"neeto-record-web-production",
|
|
46
|
+
"neeto-record-web-staging",
|
|
47
|
+
"neeto-replay-web-production",
|
|
48
|
+
"neeto-replay-web-staging",
|
|
49
|
+
"neeto-site-web-production",
|
|
50
|
+
"neeto-site-web-staging",
|
|
51
|
+
"neeto-testify-web-production",
|
|
52
|
+
"neeto-testify-web-staging",
|
|
53
|
+
"neeto-tower-web-production",
|
|
54
|
+
"neeto-tower-web-staging",
|
|
55
|
+
"neeto-trail-web-production",
|
|
56
|
+
"neeto-trail-web-staging",
|
|
57
|
+
"neeto-wireframe-web-production",
|
|
58
|
+
"neeto-wireframe-web-staging"
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
def initialize
|
|
63
|
+
super()
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
|
|
5
|
+
module Neetob
|
|
6
|
+
class CLI
|
|
7
|
+
module Sre
|
|
8
|
+
class CheckEssentialEnv < Base
|
|
9
|
+
REQUIRED_KEYS = [
|
|
10
|
+
"RAILS_ENV",
|
|
11
|
+
"RAILS_LOG_TO_STDOUT",
|
|
12
|
+
"RACK_ENV",
|
|
13
|
+
"RAILS_SERVE_STATIC_FILES",
|
|
14
|
+
"HONEYBADGER_API_KEY",
|
|
15
|
+
"HONEYBADGER_JS_API_KEY",
|
|
16
|
+
"NODE_MODULES_CACHE",
|
|
17
|
+
"YARN_CACHE",
|
|
18
|
+
"YARN_PRODUCTION"
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
REQUIRED_KEYS_HEROKU = [
|
|
22
|
+
"HEROKU_APP_NAME"
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
REQUIRED_KEYS_NEETODEPLOY = [
|
|
26
|
+
"NODE_OPTIONS",
|
|
27
|
+
"NEETODEPLOY_APP_NAME"
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
def initialize
|
|
31
|
+
super()
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def run
|
|
35
|
+
APPS_LIST[:heroku].each do |app|
|
|
36
|
+
check_envs_heroku(app)
|
|
37
|
+
end
|
|
38
|
+
APPS_LIST[:neetodeploy].each do |app|
|
|
39
|
+
check_envs_neetodeploy(app)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
private
|
|
44
|
+
|
|
45
|
+
def check_envs_heroku(app)
|
|
46
|
+
begin
|
|
47
|
+
envs = JSON.parse(`heroku config -a #{app} --json`)
|
|
48
|
+
required_keys = REQUIRED_KEYS + REQUIRED_KEYS_HEROKU
|
|
49
|
+
compare_envs(required_keys, envs, app)
|
|
50
|
+
rescue => exception
|
|
51
|
+
ui.error(exception.message)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def check_envs_neetodeploy(app)
|
|
56
|
+
# TODO: Optimize once github.com/bigbinary/neeto-deploy-web/issues/3745 is done
|
|
57
|
+
begin
|
|
58
|
+
env_table = `neetodeploy env list -a #{app}`
|
|
59
|
+
envs = {}
|
|
60
|
+
env_table.each_line do |line|
|
|
61
|
+
match = line.match(/^\| (\w+) +\| (.+?) +\|$/)
|
|
62
|
+
envs[match[1]] = match[2] if match
|
|
63
|
+
end
|
|
64
|
+
required_keys = REQUIRED_KEYS + REQUIRED_KEYS_NEETODEPLOY
|
|
65
|
+
compare_envs(required_keys, envs, app)
|
|
66
|
+
rescue => exception
|
|
67
|
+
ui.error(exception.message)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def compare_envs(required_keys, envs, app)
|
|
72
|
+
all_keys_present = required_keys.all? { |key| envs.has_key?(key) }
|
|
73
|
+
all_keys_present ?
|
|
74
|
+
ui.success("#{app} has all required envs") :
|
|
75
|
+
ui.error("#{app} doesn't have all required envs. Missing #{required_keys - envs.keys}")
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "thor"
|
|
4
|
+
|
|
5
|
+
require_relative "check_essential_env"
|
|
6
|
+
|
|
7
|
+
module Neetob
|
|
8
|
+
class CLI
|
|
9
|
+
module Sre
|
|
10
|
+
class Commands < Thor
|
|
11
|
+
desc "check_essential_env", "Confirm whether essential environment variables are set for all Neeto apps"
|
|
12
|
+
def check_essential_env
|
|
13
|
+
CheckEssentialEnv.new.run
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
data/lib/neetob/cli.rb
CHANGED
|
@@ -6,6 +6,7 @@ module Neetob
|
|
|
6
6
|
class CLI < Thor
|
|
7
7
|
require_relative "cli/heroku/commands"
|
|
8
8
|
require_relative "cli/cloudflare/commands"
|
|
9
|
+
require_relative "cli/sre/commands"
|
|
9
10
|
require_relative "cli/github/commands"
|
|
10
11
|
require_relative "cli/users/commands"
|
|
11
12
|
require_relative "cli/fetchorupdate_repos/execute"
|
|
@@ -32,6 +33,9 @@ module Neetob
|
|
|
32
33
|
desc "cloudflare", "Interact with any resource in Cloudflare"
|
|
33
34
|
subcommand "cloudflare", Cloudflare::Commands
|
|
34
35
|
|
|
36
|
+
desc "sre", "Commands related to the SRE checklist"
|
|
37
|
+
subcommand "sre", Sre::Commands
|
|
38
|
+
|
|
35
39
|
desc "neetodeploy", "Interact with resources in neetoDeploy"
|
|
36
40
|
subcommand "neetodeploy", NeetoDeploy::Commands
|
|
37
41
|
|
data/lib/neetob/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: neetob
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.4.
|
|
4
|
+
version: 0.4.35
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Udai Gupta
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2024-
|
|
11
|
+
date: 2024-07-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: thor
|
|
@@ -173,6 +173,7 @@ files:
|
|
|
173
173
|
- lib/neetob/cli/base.rb
|
|
174
174
|
- lib/neetob/cli/cloudflare/always_use_https.rb
|
|
175
175
|
- lib/neetob/cli/cloudflare/base.rb
|
|
176
|
+
- lib/neetob/cli/cloudflare/bot_fight_mode.rb
|
|
176
177
|
- lib/neetob/cli/cloudflare/commands.rb
|
|
177
178
|
- lib/neetob/cli/cloudflare/dns_proxy_status.rb
|
|
178
179
|
- lib/neetob/cli/cloudflare/ensure_cloudflare_cdn.rb
|
|
@@ -208,6 +209,7 @@ files:
|
|
|
208
209
|
- lib/neetob/cli/heroku/access/commands.rb
|
|
209
210
|
- lib/neetob/cli/heroku/access/list.rb
|
|
210
211
|
- lib/neetob/cli/heroku/access/remove.rb
|
|
212
|
+
- lib/neetob/cli/heroku/autoscaling_config.rb
|
|
211
213
|
- lib/neetob/cli/heroku/base.rb
|
|
212
214
|
- lib/neetob/cli/heroku/commands.rb
|
|
213
215
|
- lib/neetob/cli/heroku/config_vars/audit.rb
|
|
@@ -217,14 +219,21 @@ files:
|
|
|
217
219
|
- lib/neetob/cli/heroku/config_vars/remove.rb
|
|
218
220
|
- lib/neetob/cli/heroku/config_vars/upsert.rb
|
|
219
221
|
- lib/neetob/cli/heroku/execute.rb
|
|
222
|
+
- lib/neetob/cli/heroku/maintenance_window.rb
|
|
223
|
+
- lib/neetob/cli/heroku/stack.rb
|
|
220
224
|
- lib/neetob/cli/local/commands.rb
|
|
221
225
|
- lib/neetob/cli/local/ls.rb
|
|
226
|
+
- lib/neetob/cli/neeto_deploy/autoscaling_config.rb
|
|
222
227
|
- lib/neetob/cli/neeto_deploy/commands.rb
|
|
223
228
|
- lib/neetob/cli/neeto_deploy/config_vars/base.rb
|
|
224
229
|
- lib/neetob/cli/neeto_deploy/config_vars/commands.rb
|
|
225
230
|
- lib/neetob/cli/neeto_deploy/config_vars/list.rb
|
|
226
231
|
- lib/neetob/cli/neeto_deploy/config_vars/remove.rb
|
|
227
232
|
- lib/neetob/cli/neeto_deploy/config_vars/upsert.rb
|
|
233
|
+
- lib/neetob/cli/neeto_deploy/scheduled_exports.rb
|
|
234
|
+
- lib/neetob/cli/sre/base.rb
|
|
235
|
+
- lib/neetob/cli/sre/check_essential_env.rb
|
|
236
|
+
- lib/neetob/cli/sre/commands.rb
|
|
228
237
|
- lib/neetob/cli/sub_command_base.rb
|
|
229
238
|
- lib/neetob/cli/ui.rb
|
|
230
239
|
- lib/neetob/cli/users/audit.rb
|