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.
- checksums.yaml +4 -4
- data/ArangoRB.gemspec +20 -18
- data/Gemfile +3 -0
- data/README.md +1079 -908
- data/lib/AQL.rb +155 -0
- data/lib/Batch.rb +97 -0
- data/lib/Cache.rb +71 -0
- data/lib/Collection.rb +852 -0
- data/lib/Database.rb +417 -0
- data/lib/Document.rb +346 -0
- data/lib/Edge.rb +104 -0
- data/lib/Error.rb +125 -0
- data/lib/Foxx.rb +277 -0
- data/lib/Graph.rb +325 -0
- data/lib/Index.rb +126 -0
- data/lib/Replication.rb +235 -0
- data/lib/Request.rb +143 -0
- data/lib/Server.rb +466 -0
- data/lib/Task.rb +120 -0
- data/lib/Transaction.rb +115 -0
- data/lib/Traversal.rb +224 -0
- data/lib/User.rb +197 -0
- data/lib/Vertex.rb +127 -0
- data/lib/View.rb +151 -0
- data/lib/arangorb.rb +23 -15
- data/lib/helpers/Error.rb +28 -0
- data/lib/helpers/Return.rb +53 -0
- metadata +64 -45
- data/lib/ArangoRB_AQL.rb +0 -181
- data/lib/ArangoRB_Cache.rb +0 -174
- data/lib/ArangoRB_Col.rb +0 -526
- data/lib/ArangoRB_DB.rb +0 -363
- data/lib/ArangoRB_Doc.rb +0 -319
- data/lib/ArangoRB_Edg.rb +0 -184
- data/lib/ArangoRB_Gra.rb +0 -201
- data/lib/ArangoRB_Index.rb +0 -135
- data/lib/ArangoRB_Replication.rb +0 -261
- data/lib/ArangoRB_Ser.rb +0 -446
- data/lib/ArangoRB_Task.rb +0 -129
- data/lib/ArangoRB_Tra.rb +0 -169
- data/lib/ArangoRB_Tran.rb +0 -68
- data/lib/ArangoRB_User.rb +0 -157
- data/lib/ArangoRB_Ver.rb +0 -162
- data/spec/arangoRB_helper.rb +0 -4
- data/spec/arangoRestart_helper.rb +0 -14
- data/spec/arangorb-1.3.0.gem +0 -0
- data/spec/lib/0.1.0/arangoAQL_helper.rb +0 -64
- data/spec/lib/0.1.0/arangoC_helper.rb +0 -170
- data/spec/lib/0.1.0/arangoDB_helper.rb +0 -119
- data/spec/lib/0.1.0/arangoDoc_helper.rb +0 -79
- data/spec/lib/0.1.0/arangoE_helper.rb +0 -50
- data/spec/lib/0.1.0/arangoG_helper.rb +0 -78
- data/spec/lib/0.1.0/arangoS_helper.rb +0 -37
- data/spec/lib/0.1.0/arangoT_helper.rb +0 -48
- data/spec/lib/0.1.0/arangoV_helper.rb +0 -65
- data/spec/lib/1.0.0/arangoC_helper.rb +0 -73
- data/spec/lib/1.0.0/arangoDB_helper.rb +0 -48
- data/spec/lib/1.0.0/arangoI_helper.rb +0 -43
- data/spec/lib/1.0.0/arangoS_helper.rb +0 -192
- data/spec/lib/1.0.0/arangoTa_helper.rb +0 -49
- data/spec/lib/1.0.0/arangoTr_helper.rb +0 -15
- data/spec/lib/1.0.0/arangoU_helper.rb +0 -72
- data/spec/lib/1.1.0/arangoRB_helper.rb +0 -144
- data/spec/lib/1.1.0/arangoRB_walks_helper.rb +0 -19
- data/spec/lib/1.2.0/arangoCache_helper.rb +0 -66
- data/spec/lib/1.3.0/arangoHash_helper.rb +0 -30
- data/spec/lib/arangoRB_0.1.0_helper.rb +0 -9
- data/spec/lib/arangoRB_1.0.0_helper.rb +0 -6
- data/spec/lib/arangoRB_1.1.0_helper.rb +0 -2
- data/spec/lib/arangoRB_1.2.0_helper.rb +0 -2
- data/spec/spec_helper.rb +0 -42
data/lib/ArangoRB_Replication.rb
DELETED
@@ -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
|