Class: ArangoServer

Inherits:
Object
  • Object
show all
Includes:
HTTParty
Defined in:
lib/ArangoRB_Ser.rb

Overview

SERVER ===

Constant Summary collapse

@@verbose =
false
@@async =
false
@@database =
"_system"
@@graph =
nil
@@collection =
nil
@@user =
nil
@@request =
{:body => {}, :headers => {}, :query => {}}
@@password =
""
@@username =
"root"
@@server =
"localhost"
@@port =
"8529"
@@cluster =
"cluster-test"

Class Method Summary collapse

Class Method Details

.addressObject

TESTED



28
29
30
# File 'lib/ArangoRB_Ser.rb', line 28

def self.address  # TESTED
  "#{@@server}:#{@@port}"
end

.asyncObject

TESTED



57
58
59
# File 'lib/ArangoRB_Ser.rb', line 57

def self.async  # TESTED
  @@async
end

.async=(async) ⇒ Object

TESTED



44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/ArangoRB_Ser.rb', line 44

def self.async=(async)  # TESTED
  if async == true || async == "true"
    @@request[:headers] = {"x-arango-async" => "true"}
    @@async = true
  elsif async == "store"
    @@request[:headers] = {"x-arango-async" => "store"}
    @@async = "store"
  else
    @@request[:headers] = {}
    @@async = false
  end
end

.batch(queries:) ⇒ Object

BATCH ===



244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
# File 'lib/ArangoRB_Ser.rb', line 244

def self.batch(queries:) # TESTED
  headers = {
    "Content-Type": "multipart/form-data",
    "boundary": "XboundaryX"
  }
  body = ""
  queries.each{|query|
    body += "--XboundaryX\n"
    body += "Content-Type: application/x-arango-batchpart\n"
    body += "Content-Id: #{query[:id]}\n" unless query[:id].nil?
    body += "\n"
    body += "#{query[:type]} "
    body += "#{query[:address]} HTTP/1.1\n"
    body += "\n#{query[:body].to_json}\n" unless query[:body].nil?
  }
  body += "--XboundaryX--\n" if queries.length > 0
  request = @@request.merge({ :body => body, :headers => headers })
  result = post("/_api/batch", request)
  return_result result: result
end

.cancelAsync(id:) ⇒ Object

TESTED



224
225
226
227
# File 'lib/ArangoRB_Ser.rb', line 224

def self.cancelAsync(id:) # TESTED
  result = put("/_api/job/#{id}/cancel")
  return_result_async result: result
end

.changePropertyWAL(allowOversizeEntries: nil, logfileSize: nil, historicLogfiles: nil, reserveLogfiles: nil, throttleWait: nil, throttleWhenPending: nil) ⇒ Object

TESTED



362
363
364
365
366
367
368
369
370
371
372
373
374
# File 'lib/ArangoRB_Ser.rb', line 362

def self.changePropertyWAL(allowOversizeEntries: nil, logfileSize: nil, historicLogfiles: nil, reserveLogfiles: nil, throttleWait: nil, throttleWhenPending: nil) # TESTED
  body = {
    "allowOversizeEntries" => allowOversizeEntries,
    "logfileSize" => allowOversizeEntries,
    "historicLogfiles" => historicLogfiles,
    "reserveLogfiles" => reserveLogfiles,
    "throttleWait" => throttleWait,
    "throttleWhenPending" => throttleWhenPending
  }.delete_if{|k,v| v.nil?}.to_json
  request = @@request.merge({ :body => body })
  result = put("/_admin/wal/properties", request)
  return_result result: result
end

.checkPort(port:) ⇒ Object



331
332
333
334
335
336
# File 'lib/ArangoRB_Ser.rb', line 331

def self.checkPort(port:)
  query = {"port": port}
  request = @@request.merge({ "query" => query })
  result = get("/_admin/clusterCheckPort", request)
  return_result result: result
end

.clusterObject



125
126
127
# File 'lib/ArangoRB_Ser.rb', line 125

def self.cluster
  @@cluster
end

.cluster=(cluster) ⇒ Object



129
130
131
# File 'lib/ArangoRB_Ser.rb', line 129

def self.cluster=(cluster)
  @@cluster = cluster
end

.clusterRoundtrip(cluster: @@cluster) ⇒ Object

SHARDING ===



298
299
300
301
# File 'lib/ArangoRB_Ser.rb', line 298

def self.clusterRoundtrip(cluster: @@cluster)
  result = get("/_admin/#{cluster}", @@request)
  return_result result: result
end

.clusterStatistics(dbserver:) ⇒ Object



164
165
166
167
168
169
# File 'lib/ArangoRB_Ser.rb', line 164

def self.clusterStatistics dbserver:
  query = {"DBserver": dbserver}
  request = @@request.merge({ :query => query })
  result = get("/_admin/clusterStatistics", request)
  return_result result: result
end

.collectionObject

TESTED



102
103
104
# File 'lib/ArangoRB_Ser.rb', line 102

def self.collection  # TESTED
  ArangoCollection.new(database: @@database, collection: @@collection)
end

.collection=(collection) ⇒ Object

TESTED



91
92
93
94
95
96
97
98
99
100
# File 'lib/ArangoRB_Ser.rb', line 91

def self.collection=(collection)  # TESTED
  if collection.is_a? String
    @@collection = collection
  elsif collection.is_a? ArangoCollection
    @@collection = collection.collection
  else
    raise "graph should be a String or an ArangoCollection instance, not a #{collection.class}"
  end
  ArangoCollection.new(database: @@database, collection: @@collection)
end

.createDumpBatch(ttl:, dbserver: nil) ⇒ Object

TESTED



273
274
275
276
277
278
279
# File 'lib/ArangoRB_Ser.rb', line 273

def self.createDumpBatch(ttl:, dbserver: nil) # TESTED
  query = {"DBserver" => dbserver}.delete_if{|k,v| v.nil?}
  body = { "ttl" => ttl }
  request = @@request.merge({ :body => body.to_json, :query => query })
  result = post("/_api/replication/batch", request)
  return_result result: result, key: "id"
end

.databaseObject

TESTED



72
73
74
# File 'lib/ArangoRB_Ser.rb', line 72

def self.database  # TESTED
  ArangoDatabase.new(database: @@database)
end

.database=(database) ⇒ Object

TESTED



61
62
63
64
65
66
67
68
69
70
# File 'lib/ArangoRB_Ser.rb', line 61

def self.database=(database)  # TESTED
  if database.is_a? String
    @@database = database
  elsif database.is_a? ArangoDatabase
    @@database = database.database
  else
    raise "database should be a String or an ArangoDatabase instance, not a #{database.class}"
  end
  ArangoDatabase.new(database: @@database)
end

.databases(user: nil) ⇒ Object

TESTED



186
187
188
# File 'lib/ArangoRB_Ser.rb', line 186

def self.databases(user: nil) # TESTED
  ArangoDatabase.databases user: user
end

.databaseVersionObject

def self.longEcho body: {}

request = @@request.merge({ :body => body.to_json })
result = get("/_admin/long_echo", request)
return_result result: result

end



397
398
399
400
# File 'lib/ArangoRB_Ser.rb', line 397

def self.databaseVersion # TESTED
  result = get("/_admin/database/target-version", @@request)
  return_result result: result, key: "version"
end

.default_server(user: @@username, password: @@password, server: @@server, port: @@port) ⇒ Object

TESTED



19
20
21
22
23
24
25
26
# File 'lib/ArangoRB_Ser.rb', line 19

def self.default_server(user: @@username, password: @@password, server: @@server, port: @@port) # TESTED
  base_uri "http://#{server}:#{port}"
  basic_auth user, password
  @@username = user
  @@password = password
  @@server = server
  @@port = port
end

.destroyAllAsyncObject

TESTED



234
235
236
# File 'lib/ArangoRB_Ser.rb', line 234

def self.destroyAllAsync # TESTED
  destroyAsync(type: "all")
end

.destroyAsync(type: nil, id: nil) ⇒ Object

TESTED



229
230
231
232
# File 'lib/ArangoRB_Ser.rb', line 229

def self.destroyAsync(type: nil, id: nil) # TESTED
  result = id.nil? ? delete("/_api/job/#{type}") : delete("/_api/job/#{id}")
  return_result_async result: result, caseTrue: true
end

.destroyCluster(cluster: @@cluster) ⇒ Object



315
316
317
318
# File 'lib/ArangoRB_Ser.rb', line 315

def self.destroyCluster(cluster: @@cluster)
  result = delete("/_admin/#{cluster}", @@request)
  return_result result: result, caseTrue: true
end

.destroyDumpBatch(id:, dbserver: nil) ⇒ Object

TESTED



265
266
267
268
269
270
271
# File 'lib/ArangoRB_Ser.rb', line 265

def self.destroyDumpBatch(id:, dbserver: nil) # TESTED
  query = {"DBserver" => dbserver}.delete_if{|k,v| v.nil?}
  request = @@request.merge({ :query => query })
  result = delete("/_api/replication/batch/#{id}", request)
  return true if result.nil?
  return result["errorMessage"] if result["error"]
end

.destroyExpiredAsyncObject

TESTED



238
239
240
# File 'lib/ArangoRB_Ser.rb', line 238

def self.destroyExpiredAsync # TESTED
  destroyAsync(type: "expired")
end

.echoObject

TESTED



386
387
388
389
# File 'lib/ArangoRB_Ser.rb', line 386

def self.echo # TESTED
  result = get("/_admin/echo", @@request)
  return_result result: result
end

.endpointsObject

LISTS ===



173
174
175
176
# File 'lib/ArangoRB_Ser.rb', line 173

def self.endpoints # TESTED
  result = get("/_api/endpoint", @@request)
  return_result result: result
end

.execute(body:) ⇒ Object



424
425
426
427
428
# File 'lib/ArangoRB_Ser.rb', line 424

def self.execute(body:)
  request = @@request.merge({ "body" => body.to_json })
  result = post("/_admin/execute", request)
  return_result result: result
end

.executeCluster(body:, cluster: @@cluster) ⇒ Object



303
304
305
306
307
# File 'lib/ArangoRB_Ser.rb', line 303

def self.executeCluster(body:, cluster: @@cluster)
  request = @@request.merge({ "body" => body.to_json })
  result = post("/_admin/#{cluster}", request)
  return_result result: result
end

.executeClusterHead(body:, cluster: @@cluster) ⇒ Object



326
327
328
329
# File 'lib/ArangoRB_Ser.rb', line 326

def self.executeClusterHead(body:, cluster: @@cluster)
  result = head("/_admin/#{cluster}", @@request)
  return_result result: result
end

.executeClusterPut(body:, cluster: @@cluster) ⇒ Object



309
310
311
312
313
# File 'lib/ArangoRB_Ser.rb', line 309

def self.executeClusterPut(body:, cluster: @@cluster)
  request = @@request.merge({ "body" => body.to_json })
  result = put("/_admin/#{cluster}", request)
  return_result result: result
end

.fetchAsync(id:) ⇒ Object

TESTED



206
207
208
209
# File 'lib/ArangoRB_Ser.rb', line 206

def self.fetchAsync(id:) # TESTED
  result = put("/_api/job/#{id}")
  return_result_async result: result
end

.flushWAL(waitForSync: nil, waitForCollector: nil) ⇒ Object

TESTED



347
348
349
350
351
352
353
354
355
# File 'lib/ArangoRB_Ser.rb', line 347

def self.flushWAL(waitForSync: nil, waitForCollector: nil) # TESTED
  body = {
    "waitForSync" => waitForSync,
    "waitForCollector" => waitForCollector
  }.delete_if{|k,v| v.nil?}.to_json
  request = @@request.merge({ :body => body })
  result = put("/_admin/wal/flush", request)
  return_result result: result, caseTrue: true
end

.graphObject

TESTED



87
88
89
# File 'lib/ArangoRB_Ser.rb', line 87

def self.graph  # TESTED
  ArangoGraph.new(database: @@database, graph: @@graph)
end

.graph=(graph) ⇒ Object

TESTED



76
77
78
79
80
81
82
83
84
85
# File 'lib/ArangoRB_Ser.rb', line 76

def self.graph=(graph)  # TESTED
  if graph.is_a? String
    @@graph = graph
  elsif graph.is_a? ArangoGraph
    @@graph = graph.graph
  else
    raise "graph should be a String or an ArangoGraph instance, not a #{graph.class}"
  end
  ArangoGraph.new(database: @@database, graph: @@graph)
end

.logObject

MONITORING ===



135
136
137
138
# File 'lib/ArangoRB_Ser.rb', line 135

def self.log  # TESTED
  result = get("/_admin/log", @@request)
  return_result result: result
end

.pendingAsyncObject

ASYNC ===



201
202
203
204
# File 'lib/ArangoRB_Ser.rb', line 201

def self.pendingAsync # TESTED
  result = get("/_api/job/pending")
  return_result_async result: result
end

.prolongDumpBatch(id:, ttl:, dbserver: nil) ⇒ Object

TESTED



281
282
283
284
285
286
287
# File 'lib/ArangoRB_Ser.rb', line 281

def self.prolongDumpBatch(id:, ttl:, dbserver: nil) # TESTED
  query = {"DBserver" => dbserver}.delete_if{|k,v| v.nil?}
  body = { "ttl" => ttl }
  request = @@request.merge({ :body => body.to_json, :query => query })
  result = post("/_api/replication/batch/#{id}", request)
  return_result result: result, key: "id"
end

.propertyWALObject

TESTED



357
358
359
360
# File 'lib/ArangoRB_Ser.rb', line 357

def self.propertyWAL # TESTED
  result = get("/_admin/wal/properties", @@request)
  return_result result: result
end

.reloadObject

TESTED



140
141
142
143
# File 'lib/ArangoRB_Ser.rb', line 140

def self.reload # TESTED
  result = post("/_admin/routing/reload", @@request)
  return_result result: result, caseTrue: true
end

.requestObject

TESTED



121
122
123
# File 'lib/ArangoRB_Ser.rb', line 121

def self.request # TESTED
  @@request
end

.restartObject



414
415
416
# File 'lib/ArangoRB_Ser.rb', line 414

def self.restart
  `sudo service arangodb restart`
end

.retrieveAsync(type: nil, id: nil) ⇒ Object

TESTED



211
212
213
214
# File 'lib/ArangoRB_Ser.rb', line 211

def self.retrieveAsync(type: nil, id: nil) # TESTED
  result = id.nil? ? get("/_api/job/#{type}") : get("/_api/job/#{id}")
  return_result_async result: result
end

.retrieveDoneAsyncObject

TESTED



216
217
218
# File 'lib/ArangoRB_Ser.rb', line 216

def self.retrieveDoneAsync # TESTED
  retrieveAsync(type: "done")
end

.retrievePendingAsyncObject

TESTED



220
221
222
# File 'lib/ArangoRB_Ser.rb', line 220

def self.retrievePendingAsync # TESTED
  retrieveAsync(type: "pending")
end

.return_result(result:, caseTrue: false, key: nil) ⇒ Object

UTILITY ===



432
433
434
435
436
437
438
439
440
# File 'lib/ArangoRB_Ser.rb', line 432

def self.return_result(result:, caseTrue: false, key: nil)
  return result.headers["x-arango-async-id"] if @@async == "store"
  return true if @@async
  result = result.parsed_response
  return result if @@verbose || !result.is_a?(Hash)
  return result["errorMessage"] if result["error"]
  return true if caseTrue
  return key.nil? ? result.delete_if{|k,v| k == "error" || k == "code"} : result[key]
end

.return_result_async(result:, caseTrue: false) ⇒ Object



442
443
444
445
# File 'lib/ArangoRB_Ser.rb', line 442

def self.return_result_async(result:, caseTrue: false)
  result = result.parsed_response
  (@@verbose || !result.is_a?(Hash)) ? result : result["error"] ? result["errorMessage"] : caseTrue ? true : result.delete_if{|k,v| k == "error" || k == "code"}
end

.roleObject

TESTED



154
155
156
157
# File 'lib/ArangoRB_Ser.rb', line 154

def self.role # TESTED
  result = get("/_admin/server/role", @@request)
  return_result result: result, key: "role"
end

.serverObject



159
160
161
162
# File 'lib/ArangoRB_Ser.rb', line 159

def self.server
  result = get("/_admin/server/id", @@request)
  return_result result: result
end

.serverIdObject

REPLICATION ===



291
292
293
294
# File 'lib/ArangoRB_Ser.rb', line 291

def self.serverId # TESTED
  result = get("/_api/replication/server-id", @@request)
  return_result result: result, key: "serverId"
end

.shutdownObject

TESTED



409
410
411
412
# File 'lib/ArangoRB_Ser.rb', line 409

def self.shutdown # TESTED
  result = delete("/_admin/shutdown", @@request)
  return_result result: result, caseTrue: true
end

.sleep(duration:) ⇒ Object

TESTED



402
403
404
405
406
407
# File 'lib/ArangoRB_Ser.rb', line 402

def self.sleep(duration:) # TESTED
  query = {"duration": duration}
  request = @@request.merge({ "query" => query })
  result = get("/_admin/sleep", request)
  return_result result: result, key: "duration"
end

.statistics(description: false) ⇒ Object

TESTED



145
146
147
148
149
150
151
152
# File 'lib/ArangoRB_Ser.rb', line 145

def self.statistics description: false # TESTED
  if description
    result = get("/_admin/statistics-description", @@request)
  else
    result = get("/_admin/statistics", @@request)
  end
  return_result result: result
end

.tasksObject

TESTED



191
192
193
194
195
196
197
# File 'lib/ArangoRB_Ser.rb', line 191

def self.tasks # TESTED
  result = get("/_api/tasks", @@request)
  return result.headers["x-arango-async-id"] if @@async == "store"
  return true if @@async
  result = result.parsed_response
  @@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"])}
end

.test(body:) ⇒ Object



418
419
420
421
422
# File 'lib/ArangoRB_Ser.rb', line 418

def self.test(body:)
  request = @@request.merge({ "body" => body.to_json })
  result = post("/_admin/test", request)
  return_result result: result
end

.timeObject

TESTED



381
382
383
384
# File 'lib/ArangoRB_Ser.rb', line 381

def self.time # TESTED
  result = get("/_admin/time", @@request)
  return_result result: result, key: "time"
end

.transactionsObject

TESTED



376
377
378
379
# File 'lib/ArangoRB_Ser.rb', line 376

def self.transactions # TESTED
  result = get("/_admin/wal/transactions", @@request)
  return_result result: result
end

.updateCluster(body:, cluster: @@cluster) ⇒ Object



320
321
322
323
324
# File 'lib/ArangoRB_Ser.rb', line 320

def self.updateCluster(body:, cluster: @@cluster)
  request = @@request.merge({ "body" => body.to_json })
  result = patch("/_admin/#{cluster}", request)
  return_result result: result, caseTrue: true
end

.userObject

TESTED



117
118
119
# File 'lib/ArangoRB_Ser.rb', line 117

def self.user # TESTED
  ArangoUser.new(user: @@user)
end

.user=(user) ⇒ Object



106
107
108
109
110
111
112
113
114
115
# File 'lib/ArangoRB_Ser.rb', line 106

def self.user=(user)
  if user.is_a? String
    @@user = user
  elsif user.is_a? ArangoUser
    @@user = user.user
  else
    raise "graph should be a String or an ArangoUser instance, not a #{user.class}"
  end
  ArangoUser.new(user: @@user)
end

.usernameObject

TESTED



32
33
34
# File 'lib/ArangoRB_Ser.rb', line 32

def self.username  # TESTED
  @@username
end

.usersObject

TESTED



178
179
180
181
182
183
184
# File 'lib/ArangoRB_Ser.rb', line 178

def self.users # TESTED
  result = get("/_api/user", @@request)
  return result.headers["x-arango-async-id"] if @@async == "store"
  return true if @@async
  result = result.parsed_response
  @@verbose ? result : result["error"] ? result["errorMessage"] : result["result"].map{|x| ArangoUser.new(user: x["user"], active: x["active"], extra: x["extra"])}
end

.verboseObject

TESTED



40
41
42
# File 'lib/ArangoRB_Ser.rb', line 40

def self.verbose  # TESTED
  @@verbose
end

.verbose=(verbose) ⇒ Object

TESTED



36
37
38
# File 'lib/ArangoRB_Ser.rb', line 36

def self.verbose=(verbose) # TESTED
  @@verbose = verbose
end

.version(details: nil) ⇒ Object

MISCELLANEOUS FUNCTIONS ===



340
341
342
343
344
345
# File 'lib/ArangoRB_Ser.rb', line 340

def self.version(details: nil) # TESTED
  query = {"details": details}
  request = @@request.merge({ "query" => query })
  result = get("/_api/version", request)
  return_result result: result
end