arangorb 1.2.0 → 1.3.0
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/ArangoRB.gemspec +18 -18
- data/Gemfile +8 -7
- data/LICENSE +21 -21
- data/README.md +906 -867
- data/lib/ArangoRB_AQL.rb +181 -160
- data/lib/ArangoRB_Cache.rb +174 -174
- data/lib/ArangoRB_Col.rb +526 -499
- data/lib/ArangoRB_DB.rb +363 -339
- data/lib/ArangoRB_Doc.rb +319 -298
- data/lib/ArangoRB_Edg.rb +184 -169
- data/lib/ArangoRB_Gra.rb +201 -180
- data/lib/ArangoRB_Index.rb +135 -115
- data/lib/ArangoRB_Replication.rb +261 -0
- data/lib/ArangoRB_Ser.rb +446 -441
- data/lib/ArangoRB_Task.rb +129 -113
- data/lib/ArangoRB_Tra.rb +169 -142
- data/lib/ArangoRB_Tran.rb +68 -53
- data/lib/ArangoRB_User.rb +149 -136
- data/lib/ArangoRB_Ver.rb +162 -147
- data/lib/arangorb.rb +16 -15
- data/spec/arangoRB_helper.rb +4 -4
- data/spec/arangoRestart_helper.rb +14 -14
- data/spec/lib/0.1.0/arangoAQL_helper.rb +64 -64
- data/spec/lib/0.1.0/arangoC_helper.rb +170 -170
- data/spec/lib/0.1.0/arangoDB_helper.rb +119 -119
- data/spec/lib/0.1.0/arangoDoc_helper.rb +79 -79
- data/spec/lib/0.1.0/arangoE_helper.rb +50 -50
- data/spec/lib/0.1.0/arangoG_helper.rb +78 -78
- data/spec/lib/0.1.0/arangoS_helper.rb +37 -37
- data/spec/lib/0.1.0/arangoT_helper.rb +48 -48
- data/spec/lib/0.1.0/arangoV_helper.rb +65 -65
- data/spec/lib/1.0.0/arangoC_helper.rb +73 -73
- data/spec/lib/1.0.0/arangoDB_helper.rb +48 -48
- data/spec/lib/1.0.0/arangoI_helper.rb +43 -43
- data/spec/lib/1.0.0/arangoS_helper.rb +192 -192
- data/spec/lib/1.0.0/arangoTa_helper.rb +49 -49
- data/spec/lib/1.0.0/arangoTr_helper.rb +15 -15
- data/spec/lib/1.0.0/arangoU_helper.rb +72 -72
- data/spec/lib/1.1.0/arangoRB_helper.rb +144 -144
- data/spec/lib/1.1.0/arangoRB_walks_helper.rb +19 -19
- data/spec/lib/1.2.0/arangoCache_helper.rb +66 -66
- data/spec/lib/1.3.0/arangoHash_helper.rb +30 -0
- data/spec/lib/arangoRB_0.1.0_helper.rb +9 -9
- data/spec/lib/arangoRB_1.0.0_helper.rb +6 -6
- data/spec/lib/arangoRB_1.1.0_helper.rb +2 -2
- data/spec/lib/arangoRB_1.2.0_helper.rb +2 -1
- data/spec/spec_helper.rb +41 -41
- metadata +6 -5
data/lib/ArangoRB_Ser.rb
CHANGED
@@ -1,441 +1,446 @@
|
|
1
|
-
# === SERVER ===
|
2
|
-
|
3
|
-
class ArangoServer
|
4
|
-
include HTTParty
|
5
|
-
|
6
|
-
@@verbose = false
|
7
|
-
@@async = false
|
8
|
-
@@database = "_system"
|
9
|
-
@@graph = nil
|
10
|
-
@@collection = nil
|
11
|
-
@@user = nil
|
12
|
-
@@request = {:body => {}, :headers => {}, :query => {}}
|
13
|
-
@@password = ""
|
14
|
-
@@username = "root"
|
15
|
-
@@server = "localhost"
|
16
|
-
@@port = "8529"
|
17
|
-
@@cluster = "cluster-test"
|
18
|
-
|
19
|
-
def self.default_server(user: @@username, password: @@password, server: @@server, port: @@port) # TESTED
|
20
|
-
base_uri "http://#{server}:#{port}"
|
21
|
-
basic_auth user, password
|
22
|
-
@@username = user
|
23
|
-
@@password = password
|
24
|
-
@@server = server
|
25
|
-
@@port = port
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.address # TESTED
|
29
|
-
"#{@@server}:#{@@port}"
|
30
|
-
end
|
31
|
-
|
32
|
-
def self.username # TESTED
|
33
|
-
@@username
|
34
|
-
end
|
35
|
-
|
36
|
-
def self.verbose=(verbose) # TESTED
|
37
|
-
@@verbose = verbose
|
38
|
-
end
|
39
|
-
|
40
|
-
def self.verbose # TESTED
|
41
|
-
@@verbose
|
42
|
-
end
|
43
|
-
|
44
|
-
def self.async=(async) # TESTED
|
45
|
-
|
46
|
-
|
47
|
-
@@
|
48
|
-
elsif async == "store"
|
49
|
-
@@request[:headers] = {"x-arango-async" => "store"}
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
@@database = database
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
@@graph = graph
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
@@collection = collection
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
@@user = user
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
result = get("/_admin/statistics", @@request)
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
result =
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
result
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
result
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
end
|
215
|
-
|
216
|
-
def self.
|
217
|
-
retrieveAsync(type: "
|
218
|
-
end
|
219
|
-
|
220
|
-
def self.
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
result
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
end
|
233
|
-
|
234
|
-
def self.
|
235
|
-
destroyAsync(type: "
|
236
|
-
end
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
body += "
|
252
|
-
body += "
|
253
|
-
body += "
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
result
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
result
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
result
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
"
|
365
|
-
"
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
result
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
result
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
result
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
#
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
result
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
end
|
413
|
-
|
414
|
-
def self.
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
return
|
434
|
-
return
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
end
|
441
|
-
|
1
|
+
# === SERVER ===
|
2
|
+
|
3
|
+
class ArangoServer
|
4
|
+
include HTTParty
|
5
|
+
|
6
|
+
@@verbose = false
|
7
|
+
@@async = false
|
8
|
+
@@database = "_system"
|
9
|
+
@@graph = nil
|
10
|
+
@@collection = nil
|
11
|
+
@@user = nil
|
12
|
+
@@request = {:body => {}, :headers => {}, :query => {}}
|
13
|
+
@@password = ""
|
14
|
+
@@username = "root"
|
15
|
+
@@server = "localhost"
|
16
|
+
@@port = "8529"
|
17
|
+
@@cluster = "cluster-test"
|
18
|
+
|
19
|
+
def self.default_server(user: @@username, password: @@password, server: @@server, port: @@port) # TESTED
|
20
|
+
base_uri "http://#{server}:#{port}"
|
21
|
+
basic_auth user, password
|
22
|
+
@@username = user
|
23
|
+
@@password = password
|
24
|
+
@@server = server
|
25
|
+
@@port = port
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.address # TESTED
|
29
|
+
"#{@@server}:#{@@port}"
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.username # TESTED
|
33
|
+
@@username
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.verbose=(verbose) # TESTED
|
37
|
+
@@verbose = verbose
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.verbose # TESTED
|
41
|
+
@@verbose
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.async=(async) # TESTED
|
45
|
+
if async == true || async == "true"
|
46
|
+
@@request[:headers] = {"x-arango-async" => "true"}
|
47
|
+
@@async = true
|
48
|
+
elsif async == "store"
|
49
|
+
@@request[:headers] = {"x-arango-async" => "store"}
|
50
|
+
@@async = "store"
|
51
|
+
else
|
52
|
+
@@request[:headers] = {}
|
53
|
+
@@async = false
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.async # TESTED
|
58
|
+
@@async
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.database=(database) # TESTED
|
62
|
+
if database.is_a? String
|
63
|
+
@@database = database
|
64
|
+
elsif database.is_a? ArangoDatabase
|
65
|
+
@@database = database.database
|
66
|
+
else
|
67
|
+
raise "database should be a String or an ArangoDatabase instance, not a #{database.class}"
|
68
|
+
end
|
69
|
+
ArangoDatabase.new(database: @@database)
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.database # TESTED
|
73
|
+
ArangoDatabase.new(database: @@database)
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.graph=(graph) # TESTED
|
77
|
+
if graph.is_a? String
|
78
|
+
@@graph = graph
|
79
|
+
elsif graph.is_a? ArangoGraph
|
80
|
+
@@graph = graph.graph
|
81
|
+
else
|
82
|
+
raise "graph should be a String or an ArangoGraph instance, not a #{graph.class}"
|
83
|
+
end
|
84
|
+
ArangoGraph.new(database: @@database, graph: @@graph)
|
85
|
+
end
|
86
|
+
|
87
|
+
def self.graph # TESTED
|
88
|
+
ArangoGraph.new(database: @@database, graph: @@graph)
|
89
|
+
end
|
90
|
+
|
91
|
+
def self.collection=(collection) # TESTED
|
92
|
+
if collection.is_a? String
|
93
|
+
@@collection = collection
|
94
|
+
elsif collection.is_a? ArangoCollection
|
95
|
+
@@collection = collection.collection
|
96
|
+
else
|
97
|
+
raise "graph should be a String or an ArangoCollection instance, not a #{collection.class}"
|
98
|
+
end
|
99
|
+
ArangoCollection.new(database: @@database, collection: @@collection)
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.collection # TESTED
|
103
|
+
ArangoCollection.new(database: @@database, collection: @@collection)
|
104
|
+
end
|
105
|
+
|
106
|
+
def self.user=(user)
|
107
|
+
if user.is_a? String
|
108
|
+
@@user = user
|
109
|
+
elsif user.is_a? ArangoUser
|
110
|
+
@@user = user.user
|
111
|
+
else
|
112
|
+
raise "graph should be a String or an ArangoUser instance, not a #{user.class}"
|
113
|
+
end
|
114
|
+
ArangoUser.new(user: @@user)
|
115
|
+
end
|
116
|
+
|
117
|
+
def self.user # TESTED
|
118
|
+
ArangoUser.new(user: @@user)
|
119
|
+
end
|
120
|
+
|
121
|
+
def self.request # TESTED
|
122
|
+
@@request
|
123
|
+
end
|
124
|
+
|
125
|
+
def self.cluster
|
126
|
+
@@cluster
|
127
|
+
end
|
128
|
+
|
129
|
+
def self.cluster=(cluster)
|
130
|
+
@@cluster = cluster
|
131
|
+
end
|
132
|
+
|
133
|
+
# === MONITORING ===
|
134
|
+
|
135
|
+
def self.log # TESTED
|
136
|
+
result = get("/_admin/log", @@request)
|
137
|
+
return_result result: result
|
138
|
+
end
|
139
|
+
|
140
|
+
def self.reload # TESTED
|
141
|
+
result = post("/_admin/routing/reload", @@request)
|
142
|
+
return_result result: result, caseTrue: true
|
143
|
+
end
|
144
|
+
|
145
|
+
def self.statistics description: false # TESTED
|
146
|
+
if description
|
147
|
+
result = get("/_admin/statistics-description", @@request)
|
148
|
+
else
|
149
|
+
result = get("/_admin/statistics", @@request)
|
150
|
+
end
|
151
|
+
return_result result: result
|
152
|
+
end
|
153
|
+
|
154
|
+
def self.role # TESTED
|
155
|
+
result = get("/_admin/server/role", @@request)
|
156
|
+
return_result result: result, key: "role"
|
157
|
+
end
|
158
|
+
|
159
|
+
def self.server
|
160
|
+
result = get("/_admin/server/id", @@request)
|
161
|
+
return_result result: result
|
162
|
+
end
|
163
|
+
|
164
|
+
def self.clusterStatistics dbserver:
|
165
|
+
query = {"DBserver": dbserver}
|
166
|
+
request = @@request.merge({ :query => query })
|
167
|
+
result = get("/_admin/clusterStatistics", request)
|
168
|
+
return_result result: result
|
169
|
+
end
|
170
|
+
|
171
|
+
# === LISTS ===
|
172
|
+
|
173
|
+
def self.endpoints # TESTED
|
174
|
+
result = get("/_api/endpoint", @@request)
|
175
|
+
return_result result: result
|
176
|
+
end
|
177
|
+
|
178
|
+
def self.users # TESTED
|
179
|
+
result = get("/_api/user", @@request)
|
180
|
+
return result.headers["x-arango-async-id"] if @@async == "store"
|
181
|
+
return true if @@async
|
182
|
+
result = result.parsed_response
|
183
|
+
@@verbose ? result : result["error"] ? result["errorMessage"] : result["result"].map{|x| ArangoUser.new(user: x["user"], active: x["active"], extra: x["extra"])}
|
184
|
+
end
|
185
|
+
|
186
|
+
def self.databases(user: nil) # TESTED
|
187
|
+
ArangoDatabase.databases user: user
|
188
|
+
end
|
189
|
+
|
190
|
+
|
191
|
+
def self.tasks # TESTED
|
192
|
+
result = get("/_api/tasks", @@request)
|
193
|
+
return result.headers["x-arango-async-id"] if @@async == "store"
|
194
|
+
return true if @@async
|
195
|
+
result = result.parsed_response
|
196
|
+
@@verbose ? result : (result.is_a?(Hash) && result["error"]) ? result["errorMessage"] : result.map{|x| ArangoTask.new(id: x["id"], name: x["name"], type: x["type"], period: x["period"], created: x["created"], command: x["command"], database: x["database"])}
|
197
|
+
end
|
198
|
+
|
199
|
+
# === ASYNC ===
|
200
|
+
|
201
|
+
def self.pendingAsync # TESTED
|
202
|
+
result = get("/_api/job/pending")
|
203
|
+
return_result_async result: result
|
204
|
+
end
|
205
|
+
|
206
|
+
def self.fetchAsync(id:) # TESTED
|
207
|
+
result = put("/_api/job/#{id}")
|
208
|
+
return_result_async result: result
|
209
|
+
end
|
210
|
+
|
211
|
+
def self.retrieveAsync(type: nil, id: nil) # TESTED
|
212
|
+
result = id.nil? ? get("/_api/job/#{type}") : get("/_api/job/#{id}")
|
213
|
+
return_result_async result: result
|
214
|
+
end
|
215
|
+
|
216
|
+
def self.retrieveDoneAsync # TESTED
|
217
|
+
retrieveAsync(type: "done")
|
218
|
+
end
|
219
|
+
|
220
|
+
def self.retrievePendingAsync # TESTED
|
221
|
+
retrieveAsync(type: "pending")
|
222
|
+
end
|
223
|
+
|
224
|
+
def self.cancelAsync(id:) # TESTED
|
225
|
+
result = put("/_api/job/#{id}/cancel")
|
226
|
+
return_result_async result: result
|
227
|
+
end
|
228
|
+
|
229
|
+
def self.destroyAsync(type: nil, id: nil) # TESTED
|
230
|
+
result = id.nil? ? delete("/_api/job/#{type}") : delete("/_api/job/#{id}")
|
231
|
+
return_result_async result: result, caseTrue: true
|
232
|
+
end
|
233
|
+
|
234
|
+
def self.destroyAllAsync # TESTED
|
235
|
+
destroyAsync(type: "all")
|
236
|
+
end
|
237
|
+
|
238
|
+
def self.destroyExpiredAsync # TESTED
|
239
|
+
destroyAsync(type: "expired")
|
240
|
+
end
|
241
|
+
|
242
|
+
# === BATCH ===
|
243
|
+
|
244
|
+
def self.batch(queries:) # TESTED
|
245
|
+
headers = {
|
246
|
+
"Content-Type": "multipart/form-data",
|
247
|
+
"boundary": "XboundaryX"
|
248
|
+
}
|
249
|
+
body = ""
|
250
|
+
queries.each{|query|
|
251
|
+
body += "--XboundaryX\n"
|
252
|
+
body += "Content-Type: application/x-arango-batchpart\n"
|
253
|
+
body += "Content-Id: #{query[:id]}\n" unless query[:id].nil?
|
254
|
+
body += "\n"
|
255
|
+
body += "#{query[:type]} "
|
256
|
+
body += "#{query[:address]} HTTP/1.1\n"
|
257
|
+
body += "\n#{query[:body].to_json}\n" unless query[:body].nil?
|
258
|
+
}
|
259
|
+
body += "--XboundaryX--\n" if queries.length > 0
|
260
|
+
request = @@request.merge({ :body => body, :headers => headers })
|
261
|
+
result = post("/_api/batch", request)
|
262
|
+
return_result result: result
|
263
|
+
end
|
264
|
+
|
265
|
+
def self.destroyDumpBatch(id:, dbserver: nil) # TESTED
|
266
|
+
query = {"DBserver" => dbserver}.delete_if{|k,v| v.nil?}
|
267
|
+
request = @@request.merge({ :query => query })
|
268
|
+
result = delete("/_api/replication/batch/#{id}", request)
|
269
|
+
return true if result.nil?
|
270
|
+
return result["errorMessage"] if result["error"]
|
271
|
+
end
|
272
|
+
|
273
|
+
def self.createDumpBatch(ttl:, dbserver: nil) # TESTED
|
274
|
+
query = {"DBserver" => dbserver}.delete_if{|k,v| v.nil?}
|
275
|
+
body = { "ttl" => ttl }
|
276
|
+
request = @@request.merge({ :body => body.to_json, :query => query })
|
277
|
+
result = post("/_api/replication/batch", request)
|
278
|
+
return_result result: result, key: "id"
|
279
|
+
end
|
280
|
+
|
281
|
+
def self.prolongDumpBatch(id:, ttl:, dbserver: nil) # TESTED
|
282
|
+
query = {"DBserver" => dbserver}.delete_if{|k,v| v.nil?}
|
283
|
+
body = { "ttl" => ttl }
|
284
|
+
request = @@request.merge({ :body => body.to_json, :query => query })
|
285
|
+
result = post("/_api/replication/batch/#{id}", request)
|
286
|
+
return_result result: result, key: "id"
|
287
|
+
end
|
288
|
+
|
289
|
+
# === REPLICATION ===
|
290
|
+
|
291
|
+
def self.serverId # TESTED
|
292
|
+
result = get("/_api/replication/server-id", @@request)
|
293
|
+
return_result result: result, key: "serverId"
|
294
|
+
end
|
295
|
+
|
296
|
+
# === SHARDING ===
|
297
|
+
|
298
|
+
def self.clusterRoundtrip(cluster: @@cluster)
|
299
|
+
result = get("/_admin/#{cluster}", @@request)
|
300
|
+
return_result result: result
|
301
|
+
end
|
302
|
+
|
303
|
+
def self.executeCluster(body:, cluster: @@cluster)
|
304
|
+
request = @@request.merge({ "body" => body.to_json })
|
305
|
+
result = post("/_admin/#{cluster}", request)
|
306
|
+
return_result result: result
|
307
|
+
end
|
308
|
+
|
309
|
+
def self.executeClusterPut(body:, cluster: @@cluster)
|
310
|
+
request = @@request.merge({ "body" => body.to_json })
|
311
|
+
result = put("/_admin/#{cluster}", request)
|
312
|
+
return_result result: result
|
313
|
+
end
|
314
|
+
|
315
|
+
def self.destroyCluster(cluster: @@cluster)
|
316
|
+
result = delete("/_admin/#{cluster}", @@request)
|
317
|
+
return_result result: result, caseTrue: true
|
318
|
+
end
|
319
|
+
|
320
|
+
def self.updateCluster(body:, cluster: @@cluster)
|
321
|
+
request = @@request.merge({ "body" => body.to_json })
|
322
|
+
result = patch("/_admin/#{cluster}", request)
|
323
|
+
return_result result: result, caseTrue: true
|
324
|
+
end
|
325
|
+
|
326
|
+
def self.executeClusterHead(body:, cluster: @@cluster)
|
327
|
+
result = head("/_admin/#{cluster}", @@request)
|
328
|
+
return_result result: result
|
329
|
+
end
|
330
|
+
|
331
|
+
def self.checkPort(port:)
|
332
|
+
query = {"port": port}
|
333
|
+
request = @@request.merge({ "query" => query })
|
334
|
+
result = get("/_admin/clusterCheckPort", request)
|
335
|
+
return_result result: result
|
336
|
+
end
|
337
|
+
|
338
|
+
# === MISCELLANEOUS FUNCTIONS ===
|
339
|
+
|
340
|
+
def self.version(details: nil) # TESTED
|
341
|
+
query = {"details": details}
|
342
|
+
request = @@request.merge({ "query" => query })
|
343
|
+
result = get("/_api/version", request)
|
344
|
+
return_result result: result
|
345
|
+
end
|
346
|
+
|
347
|
+
def self.flushWAL(waitForSync: nil, waitForCollector: nil) # TESTED
|
348
|
+
body = {
|
349
|
+
"waitForSync" => waitForSync,
|
350
|
+
"waitForCollector" => waitForCollector
|
351
|
+
}.delete_if{|k,v| v.nil?}.to_json
|
352
|
+
request = @@request.merge({ :body => body })
|
353
|
+
result = put("/_admin/wal/flush", request)
|
354
|
+
return_result result: result, caseTrue: true
|
355
|
+
end
|
356
|
+
|
357
|
+
def self.propertyWAL # TESTED
|
358
|
+
result = put("/_admin/wal/properties", @@request)
|
359
|
+
return_result result: result
|
360
|
+
end
|
361
|
+
|
362
|
+
def self.changePropertyWAL(allowOversizeEntries: nil, logfileSize: nil, historicLogfiles: nil, reserveLogfiles: nil, throttleWait: nil, throttleWhenPending: nil) # TESTED
|
363
|
+
body = {
|
364
|
+
"allowOversizeEntries" => allowOversizeEntries,
|
365
|
+
"logfileSize" => allowOversizeEntries,
|
366
|
+
"historicLogfiles" => historicLogfiles,
|
367
|
+
"reserveLogfiles" => reserveLogfiles,
|
368
|
+
"throttleWait" => throttleWait,
|
369
|
+
"throttleWhenPending" => throttleWhenPending
|
370
|
+
}.delete_if{|k,v| v.nil?}.to_json
|
371
|
+
request = @@request.merge({ :body => body })
|
372
|
+
result = put("/_admin/wal/properties", request)
|
373
|
+
return_result result: result
|
374
|
+
end
|
375
|
+
|
376
|
+
def self.transactions # TESTED
|
377
|
+
result = get("/_admin/wal/transactions", @@request)
|
378
|
+
return_result result: result
|
379
|
+
end
|
380
|
+
|
381
|
+
def self.time # TESTED
|
382
|
+
result = get("/_admin/time", @@request)
|
383
|
+
return_result result: result, key: "time"
|
384
|
+
end
|
385
|
+
|
386
|
+
def self.echo # TESTED
|
387
|
+
result = get("/_admin/echo", @@request)
|
388
|
+
return_result result: result
|
389
|
+
end
|
390
|
+
|
391
|
+
# def self.longEcho body: {}
|
392
|
+
# request = @@request.merge({ :body => body.to_json })
|
393
|
+
# result = get("/_admin/long_echo", request)
|
394
|
+
# return_result result: result
|
395
|
+
# end
|
396
|
+
|
397
|
+
def self.databaseVersion # TESTED
|
398
|
+
result = get("/_admin/database/target-version", @@request)
|
399
|
+
return_result result: result, key: "version"
|
400
|
+
end
|
401
|
+
|
402
|
+
def self.sleep(duration:) # TESTED
|
403
|
+
query = {"duration": duration}
|
404
|
+
request = @@request.merge({ "query" => query })
|
405
|
+
result = get("/_admin/sleep", request)
|
406
|
+
return_result result: result, key: "duration"
|
407
|
+
end
|
408
|
+
|
409
|
+
def self.shutdown # TESTED
|
410
|
+
result = delete("/_admin/shutdown", @@request)
|
411
|
+
return_result result: result, caseTrue: true
|
412
|
+
end
|
413
|
+
|
414
|
+
def self.restart
|
415
|
+
`sudo service arangodb restart`
|
416
|
+
end
|
417
|
+
|
418
|
+
def self.test(body:)
|
419
|
+
request = @@request.merge({ "body" => body.to_json })
|
420
|
+
result = post("/_admin/test", request)
|
421
|
+
return_result result: result
|
422
|
+
end
|
423
|
+
|
424
|
+
def self.execute(body:)
|
425
|
+
request = @@request.merge({ "body" => body.to_json })
|
426
|
+
result = post("/_admin/execute", request)
|
427
|
+
return_result result: result
|
428
|
+
end
|
429
|
+
|
430
|
+
# === UTILITY ===
|
431
|
+
|
432
|
+
def self.return_result(result:, caseTrue: false, key: nil)
|
433
|
+
return result.headers["x-arango-async-id"] if @@async == "store"
|
434
|
+
return true if @@async
|
435
|
+
result = result.parsed_response
|
436
|
+
return result if @@verbose || !result.is_a?(Hash)
|
437
|
+
return result["errorMessage"] if result["error"]
|
438
|
+
return true if caseTrue
|
439
|
+
return key.nil? ? result.delete_if{|k,v| k == "error" || k == "code"} : result[key]
|
440
|
+
end
|
441
|
+
|
442
|
+
def self.return_result_async(result:, caseTrue: false)
|
443
|
+
result = result.parsed_response
|
444
|
+
(@@verbose || !result.is_a?(Hash)) ? result : result["error"] ? result["errorMessage"] : caseTrue ? true : result.delete_if{|k,v| k == "error" || k == "code"}
|
445
|
+
end
|
446
|
+
end
|