arangorb 1.4.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/ArangoRB.gemspec +20 -18
  3. data/Gemfile +3 -0
  4. data/README.md +1079 -908
  5. data/lib/AQL.rb +155 -0
  6. data/lib/Batch.rb +97 -0
  7. data/lib/Cache.rb +71 -0
  8. data/lib/Collection.rb +852 -0
  9. data/lib/Database.rb +417 -0
  10. data/lib/Document.rb +346 -0
  11. data/lib/Edge.rb +104 -0
  12. data/lib/Error.rb +125 -0
  13. data/lib/Foxx.rb +277 -0
  14. data/lib/Graph.rb +325 -0
  15. data/lib/Index.rb +126 -0
  16. data/lib/Replication.rb +235 -0
  17. data/lib/Request.rb +143 -0
  18. data/lib/Server.rb +466 -0
  19. data/lib/Task.rb +120 -0
  20. data/lib/Transaction.rb +115 -0
  21. data/lib/Traversal.rb +224 -0
  22. data/lib/User.rb +197 -0
  23. data/lib/Vertex.rb +127 -0
  24. data/lib/View.rb +151 -0
  25. data/lib/arangorb.rb +23 -15
  26. data/lib/helpers/Error.rb +28 -0
  27. data/lib/helpers/Return.rb +53 -0
  28. metadata +64 -45
  29. data/lib/ArangoRB_AQL.rb +0 -181
  30. data/lib/ArangoRB_Cache.rb +0 -174
  31. data/lib/ArangoRB_Col.rb +0 -526
  32. data/lib/ArangoRB_DB.rb +0 -363
  33. data/lib/ArangoRB_Doc.rb +0 -319
  34. data/lib/ArangoRB_Edg.rb +0 -184
  35. data/lib/ArangoRB_Gra.rb +0 -201
  36. data/lib/ArangoRB_Index.rb +0 -135
  37. data/lib/ArangoRB_Replication.rb +0 -261
  38. data/lib/ArangoRB_Ser.rb +0 -446
  39. data/lib/ArangoRB_Task.rb +0 -129
  40. data/lib/ArangoRB_Tra.rb +0 -169
  41. data/lib/ArangoRB_Tran.rb +0 -68
  42. data/lib/ArangoRB_User.rb +0 -157
  43. data/lib/ArangoRB_Ver.rb +0 -162
  44. data/spec/arangoRB_helper.rb +0 -4
  45. data/spec/arangoRestart_helper.rb +0 -14
  46. data/spec/arangorb-1.3.0.gem +0 -0
  47. data/spec/lib/0.1.0/arangoAQL_helper.rb +0 -64
  48. data/spec/lib/0.1.0/arangoC_helper.rb +0 -170
  49. data/spec/lib/0.1.0/arangoDB_helper.rb +0 -119
  50. data/spec/lib/0.1.0/arangoDoc_helper.rb +0 -79
  51. data/spec/lib/0.1.0/arangoE_helper.rb +0 -50
  52. data/spec/lib/0.1.0/arangoG_helper.rb +0 -78
  53. data/spec/lib/0.1.0/arangoS_helper.rb +0 -37
  54. data/spec/lib/0.1.0/arangoT_helper.rb +0 -48
  55. data/spec/lib/0.1.0/arangoV_helper.rb +0 -65
  56. data/spec/lib/1.0.0/arangoC_helper.rb +0 -73
  57. data/spec/lib/1.0.0/arangoDB_helper.rb +0 -48
  58. data/spec/lib/1.0.0/arangoI_helper.rb +0 -43
  59. data/spec/lib/1.0.0/arangoS_helper.rb +0 -192
  60. data/spec/lib/1.0.0/arangoTa_helper.rb +0 -49
  61. data/spec/lib/1.0.0/arangoTr_helper.rb +0 -15
  62. data/spec/lib/1.0.0/arangoU_helper.rb +0 -72
  63. data/spec/lib/1.1.0/arangoRB_helper.rb +0 -144
  64. data/spec/lib/1.1.0/arangoRB_walks_helper.rb +0 -19
  65. data/spec/lib/1.2.0/arangoCache_helper.rb +0 -66
  66. data/spec/lib/1.3.0/arangoHash_helper.rb +0 -30
  67. data/spec/lib/arangoRB_0.1.0_helper.rb +0 -9
  68. data/spec/lib/arangoRB_1.0.0_helper.rb +0 -6
  69. data/spec/lib/arangoRB_1.1.0_helper.rb +0 -2
  70. data/spec/lib/arangoRB_1.2.0_helper.rb +0 -2
  71. data/spec/spec_helper.rb +0 -42
@@ -1,261 +0,0 @@
1
- # === REPLICATION ===
2
-
3
- class ArangoReplication < ArangoServer
4
- def initialize(endpoint:, username:, password:, database: nil, includeSystem: true, initialSyncMaxWaitTime: nil, incremental: nil, restrictCollections: nil, verbose: false, connectTimeout: nil, autoResync: nil, idleMinWaitTime: nil, requestTimeout: nil, requireFromPresent: nil, idleMaxWaitTime: nil, restrictType: nil, maxConnectRetries: nil, adaptivePolling: nil, connectionRetryWaitTime: nil, autoResyncRetries: nil, chunkSize: nil)
5
- if database.is_a?(String) || database.nil?
6
- @database = database
7
- elsif database.is_a?(ArangoDatabase)
8
- @database = database.database
9
- else
10
- raise "database should be nil, a String or an ArangoDatabase instance, not a #{database.class}"
11
- end
12
-
13
- if restrictType == "include" || restrictType == "exclude" || restrictType.nil?
14
- @restrictType = restrictType
15
- else
16
- raise "restrictType can be only \"include\" or \"exclude\"."
17
- end
18
-
19
- if restrictCollections.nil?
20
- @restrictCollections = nil
21
- else
22
- @restrictCollections = []
23
- restrictCollections.each do |v|
24
- if v.is_a? (String)
25
- @restrictCollections << v
26
- elsif v.is_a? (ArangoCollection)
27
- @restrictCollections << v.name
28
- end
29
- end
30
- end
31
-
32
- @endpoint = endpoint
33
- @username = username
34
- @password = password
35
- @includeSytem = includeSystem
36
- @initialSyncMaxWaitTime = initialSyncMaxWaitTime,
37
- @incremental = incremental
38
- @verbose = verbose,
39
- @connectTimeout = connectTimeout
40
- @autoResync = autoResync
41
- @idleMinWaitTime = idleMinWaitTime
42
- @requestTimeout = requestTimeout
43
- @requireFromPresent = requireFromPresent
44
- @idleMaxWaitTime = idleMaxWaitTime
45
- @maxConnectRetries = maxConnectRetries
46
- @adaptivePolling = adaptivePolling
47
- @connectionRetryWaitTime = connectionRetryWaitTime
48
- @autoResyncRetries = autoResyncRetries
49
- @chunkSize = chunkSize
50
- end
51
-
52
- def master(endpoint:, username:, password:, database: nil)
53
- if database.is_a?(String) || database.nil?
54
- @database = database
55
- elsif database.is_a?(ArangoDatabase)
56
- @database = database.database
57
- else
58
- raise "database should be nil, a String or an ArangoDatabase instance, not a #{database.class}"
59
- end
60
-
61
- @endpoint = endpoint
62
- @username = username
63
- @password = password
64
- end
65
-
66
- attr_accessor :endpoint, :username, :password, :includeSystem, :initialSyncMaxWaitTime, :incremental, :verbose, :connectTimeout, :autoResync, :idleMinWaitTime, :requestTimeout, :requireFromPresent, :idleMaxWaitTime, :maxConnectRetries, :adaptivePolling, :connectionRetryWaitTime, :autoResyncRetries, :chunkSize
67
- attr_reader :database, :restrictType, :restrictCollections
68
-
69
- def restrictType=(value)
70
- if value == "include" || value == "exclude" || value.nil?
71
- @restrictType = value
72
- else
73
- raise "restrictType can be only \"include\" or \"exclude\"."
74
- end
75
- end
76
-
77
- def restrictCollections=(value)
78
- if value.nil?
79
- @restrictCollections = nil
80
- else
81
- value = [value] unless value.is_a? Array
82
- @restrictCollections = []
83
- value.each do |v|
84
- if v.is_a? (String)
85
- @restrictCollections << v
86
- elsif v.is_a? (ArangoCollection)
87
- @restrictCollections << v.name
88
- end
89
- end
90
- end
91
- end
92
-
93
- def to_hash
94
- master
95
- {
96
- "master" => {
97
- "endpoint" => @endpoint,
98
- "username" => @username,
99
- "password" => @password,
100
- "database" => @database
101
- }.delete_if{|k,v| v.nil?},
102
- "options" => {
103
- "includeSytem" => @includeSystem,
104
- "initialSyncMaxWaitTime" => @initialSyncMaxWaitTime,
105
- "restrictType" => @restrictType,
106
- "incremental" => @incremental,
107
- "restrictCollections" => @restrictCollections,
108
- "verbose" => @verbose,
109
- "connectTimeout" => @connectTimeout,
110
- "autoResync" => @autoResync,
111
- "idleMinWaitTime" => @idleMinWaitTime,
112
- "requestTimeout" => @requestTimeout,
113
- "requireFromPresent" => @requireFromPresent,
114
- "idleMaxWaitTime" => @idleMaxWaitTime,
115
- "maxConnectRetries" => @maxConnectRetries,
116
- "adaptivePolling" => @adaptivePolling,
117
- "connectionRetryWaitTime" => @connectionRetryWaitTime,
118
- "autoResyncRetries" => @autoResyncRetries,
119
- "chunkSize" => @chunkSize
120
- }.delete_if{|k,v| v.nil?}
121
- }
122
- end
123
- alias to_h to_hash
124
-
125
- # SYNCRONISATION
126
-
127
- def sync
128
- body = {
129
- "username" => @username,
130
- "password" => @password,
131
- "endpoint" => @endpoint,
132
- "database" => @database,
133
- "includeSystem" => @includeSystem,
134
- "initialSyncMaxWaitTime" => @initialSyncMaxWaitTime,
135
- "restrictType" => @restrictType,
136
- "incremental" => @incremental,
137
- "restrictCollections" => @restrictCollections
138
- }.delete_if{|k,v| v.nil?}
139
- request = @@request.merge({ :body => body.to_json })
140
- result = self.class.put("/_api/replication/sync", request)
141
- self.class.return_result result: result
142
- end
143
-
144
- # ENSLAVE
145
-
146
- def enslave
147
- body = {
148
- "username" => @username,
149
- "password" => @password,
150
- "endpoint" => @endpoint,
151
- "database" => @database,
152
- "includeSystem" => @includeSystem,
153
- "initialSyncMaxWaitTime" => @initialSyncMaxWaitTime,
154
- "verbose" => @verbose,
155
- "connectTimeout" => @connectTimeout,
156
- "autoResync" => @autoResync,
157
- "idleMinWaitTime" => @idleMinWaitTime,
158
- "requestTimeout" => @requestTimeout,
159
- "requireFromPresent" => @requireFromPresent,
160
- "idleMaxWaitTime" => @idleMaxWaitTime,
161
- "restrictType" => @restrictType,
162
- "maxConnectRetries" => @maxConnectRetries,
163
- "adaptivePolling" => @adaptivePolling,
164
- "connectionRetryWaitTime" => @connectionRetryWaitTime,
165
- "restrictCollections" => @restrictCollections,
166
- "autoResyncRetries" => @autoResyncRetries,
167
- "chunkSize" => @chunkSize
168
- }.delete_if{|k,v| v.nil?}
169
- request = @@request.merge({ :body => body.to_json })
170
- result = self.class.put("/_api/replication/make-slave", request)
171
- self.class.return_result result: result
172
- end
173
-
174
- # MANAGE CONFIGURATION
175
-
176
- def stateReplication # TESTED
177
- result = self.class.get("/_db/#{@database}/_api/replication/applier-state", @@request)
178
- self.class.return_result result: result
179
- end
180
-
181
- def configurationReplication
182
- result = self.class.get("/_api/replication/applier-config", @@request)
183
- self.class.return_result result: result
184
- end
185
-
186
- def modifyConfigurationReplication
187
- body = {
188
- "username" => @username,
189
- "password" => @password,
190
- "includeSystem" => @includeSystem,
191
- "endpoint" => @endpoint,
192
- "initialSyncMaxWaitTime" => @initialSyncMaxWaitTime,
193
- "database" => @database,
194
- "verbose" => @verbose,
195
- "connectTimeout" => @connectTimeout,
196
- "autoResync" => @autoResync,
197
- "idleMinWaitTime" => @idleMinWaitTime,
198
- "requestTimeout" => @requestTimeout,
199
- "requireFromPresent" => @requireFromPresent,
200
- "idleMaxWaitTime" => @idleMaxWaitTime,
201
- "restrictType" => @restrictType,
202
- "maxConnectRetries" => @maxConnectRetries,
203
- "autoStart" => @autoStart,
204
- "adaptivePolling" => @adaptivePolling,
205
- "connectionRetryWaitTime" => @connectionRetryWaitTime,
206
- "restrictCollections" => @restrictCollections,
207
- "autoResyncRetries" => @autoResyncRetries,
208
- "chunkSize" => @chunkSize
209
- }.delete_if{|k,v| v.nil?}
210
- request = @@request.merge({ :body => body.to_json })
211
- result = self.class.put("/_api/replication/applier-config", request)
212
- self.class.return_result result: result
213
- end
214
- alias modifyReplication modifyConfigurationReplication
215
-
216
- def startReplication(from: nil) # TESTED
217
- query = {from: from}.delete_if{|k,v| v.nil?}
218
- request = @@request.merge({ :query => query })
219
- result = self.class.put("/_api/replication/applier-start", request)
220
- self.class.return_result result: result
221
- end
222
-
223
- def stopReplication # TESTED
224
- result = self.class.put("/_api/replication/applier-stop", @@request)
225
- self.class.return_result result: result
226
- end
227
-
228
- # INFO
229
-
230
- def serverId # TESTED
231
- result = self.class.get("/_db/#{@database}/_api/replication/server-id", @@request)
232
- self.class.return_result result: result, key: "serverId"
233
- end
234
-
235
- def logger # TESTED
236
- result = self.class.get("/_db/#{@database}/_api/replication/logger-state")
237
- self.class.return_result result: result
238
- end
239
-
240
- def loggerFollow(from: nil, to: nil, chunkSize: nil, includeSystem: false) # TESTED
241
- query = {
242
- "from": from,
243
- "to": to,
244
- "chunkSize": chunkSize,
245
- "includeSystem": includeSystem
246
- }.delete_if{|k,v| v.nil?}
247
- request = @@request.merge({ :query => query })
248
- result = self.class.get("/_db/#{@database}/_api/replication/logger-follow", request)
249
- self.class.return_result result: result
250
- end
251
-
252
- def firstTick # TESTED
253
- result = self.class.get("/_db/#{@database}/_api/replication/logger-first-tick")
254
- self.class.return_result result: result, key: "firstTick"
255
- end
256
-
257
- def rangeTick # TESTED
258
- result = self.class.get("/_db/#{@database}/_api/replication/logger-tick-ranges")
259
- self.class.return_result result: result
260
- end
261
- end
data/lib/ArangoRB_Ser.rb DELETED
@@ -1,446 +0,0 @@
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 = get("/_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