arangorb 1.4.1 → 2.0.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.
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