orientdb_client 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8c427444c46d0f4c5beecc6e0f6bfaf47e094dd6
4
- data.tar.gz: d9573d4f5bca08e707fe550d0d5422e7c686b331
3
+ metadata.gz: f6ff9bea3763a8ec608f82345d72cf055701c520
4
+ data.tar.gz: f87c97ac3b85eee009e16c28694c5ddbcad9af49
5
5
  SHA512:
6
- metadata.gz: 05f99c6bf186824a78c8c4817f3562fac61c362110cb93b8d296d20dbc3d7a9867c697aa3559202d3a8c3d03468d50c405bc300b4147c0b2c6d7a08da06d1e9e
7
- data.tar.gz: eb0a3d64d9594d05559fcd836c7773573f1a061b05e114b3629fb1d231af979364cfbb481a29968360e1ee4a5c0110b329f91174d9998209ff417ff7b453df86
6
+ metadata.gz: 4be54bafd6bbab818aa34f4f29b73468e620bd07a5c93bd32dc3e6c92d8d9dcd75b03644dbe4a5649a04544fc494113c35def34dadff55a8f4a3327e5ae215fb
7
+ data.tar.gz: 4028fbaa72f17074eff9a2588cc9f44a9824e6f0f94eda236984abcc8f55b1ad67c6354f8d91803c6a6d88723e96924b5a5e2d3ab47e25619e86d48ddd760671
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## Master
4
4
 
5
+ ## 0.0.8
6
+
7
+ * Fix circular argument warning.
8
+ * Add Skylight.io normalizer. b814880
9
+ * Support for OrientDB 2.2. 1ba0c34
10
+
5
11
  ## 0.0.7
6
12
 
7
13
  * Test ActiveSupport 5 and ruby 2.3.1.
data/Gemfile CHANGED
@@ -6,4 +6,5 @@ gemspec
6
6
  group :test do
7
7
  gem 'activesupport', '~> 4.0', require: false
8
8
  gem 'curb', '~> 0.8'
9
+ gem 'skylight', '~> 0.10'
9
10
  end
@@ -3,6 +3,7 @@ source "https://rubygems.org"
3
3
  group :test do
4
4
  gem 'curb', '~> 0.8'
5
5
  gem 'activesupport', '~> 3.2', require: false
6
+ gem 'skylight', '~> 0.10'
6
7
  end
7
8
 
8
9
  gemspec :path => "../"
@@ -3,6 +3,7 @@ source "https://rubygems.org"
3
3
  group :test do
4
4
  gem 'curb', '~> 0.8'
5
5
  gem 'activesupport', '~> 4.0', require: false
6
+ gem 'skylight', '~> 0.10'
6
7
  end
7
8
 
8
9
  gemspec :path => "../"
@@ -3,6 +3,7 @@ source "https://rubygems.org"
3
3
  group :test do
4
4
  gem 'curb', '~> 0.8'
5
5
  gem 'activesupport', '~> 5.0', require: false
6
+ gem 'skylight', '~> 0.10'
6
7
  end
7
8
 
8
9
  gemspec :path => "../"
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2015 Luke Rodgers
1
+ Copyright (c) 2015-2016 Luke Rodgers
2
2
 
3
3
  MIT License
4
4
 
@@ -20,3 +20,20 @@ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
20
  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
21
  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
22
  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+
25
+ ## Other Licenses
26
+
27
+ ### Ruby on Rails
28
+
29
+ Copyright (c) 2005-2016 David Heinemeier Hansson
30
+
31
+ Released under the MIT License.
32
+
33
+ Original source at https://github.com/rails/rails.
34
+
35
+ ### Skylight
36
+
37
+ Copyright (c) 2013-2016 Tilde, Inc.
38
+
39
+ Original source at https://github.com/skylightio/skylight-ruby
data/README.md CHANGED
@@ -12,6 +12,7 @@ Goals:
12
12
  * fine-grained handling of Orientdb errors, via rich set of ruby exceptions
13
13
 
14
14
  Tested on:
15
+ * 2.2.10
15
16
  * 2.1.10
16
17
  * 2.1.9
17
18
  * 2.1.5
@@ -91,6 +92,20 @@ The following events are instrumented:
91
92
  * `process_response.orientdb_client`: most of this will correspond to JSON parsing
92
93
  and error response code/message handling.
93
94
 
95
+ ### Skylight.io integration
96
+
97
+ If you use Skylight for application monitoring, you can include an OrientDB normalizer so that Skylight will group
98
+ your OrientDB queries with other db (sql, redis) queries and visually separate them from the rest of your rails code.
99
+
100
+ The best way I've found to do this is including this in your `config/application.rb`:
101
+
102
+ ```ruby
103
+ config.before_initialize do
104
+ # This will run before initializers for all railties, which is where Skylight registers its normalizers.
105
+ require 'orientdb_client/integration/skylight_normalizer'
106
+ end
107
+ ```
108
+
94
109
  ## HTTP Adapters
95
110
 
96
111
  OrientdbClient currently supports Typhoeus and Curb HTTP adapters.
@@ -140,7 +140,7 @@ module OrientdbClient
140
140
  attr_reader :database
141
141
  attr_writer :debug
142
142
 
143
- def initialize(host:, port:, http_client: http_client, client: client)
143
+ def initialize(host:, port:, http_client:, client:)
144
144
  @host = host
145
145
  @port = port
146
146
  @http_client = http_client
@@ -276,6 +276,8 @@ module OrientdbClient
276
276
  raise ConnectionError.new("No server at #{@host}:#{@port}", 0, nil)
277
277
  when 200, 201, 204
278
278
  return response
279
+ when 400
280
+ translate_error(response)
279
281
  when 401
280
282
  raise UnauthorizedError.new('Unauthorized', response.response_code, response.body)
281
283
  when 404
@@ -307,8 +309,8 @@ module OrientdbClient
307
309
  code = response.response_code
308
310
  body = response.body
309
311
  case odb_error_class
310
- when /OCommandSQLParsingException/
311
- raise ClientError.new("#{odb_error_class}: #{odb_error_message}", code, body)
312
+ when /OCommandSQLParsingException/, "Error parsing query", "Error on parsing command"
313
+ raise ParsingError.new("#{odb_error_class}: #{odb_error_message}", code, body)
312
314
  when /OQueryParsingException/
313
315
  raise ClientError.new("#{odb_error_class}: #{odb_error_message}", code, body)
314
316
  when /OCommandExecutorNotFoundException/
@@ -28,6 +28,7 @@ module OrientdbClient
28
28
  class IllegalArgumentException < ClientError; end
29
29
  class CommandExecutionException < ClientError; end
30
30
  class SerializationException < ClientError; end
31
+ class ParsingError < ClientError; end
31
32
 
32
33
  # ConflictError: you tried to create something that already exists
33
34
  class ConflictError < ClientError; end
@@ -0,0 +1,34 @@
1
+ require 'skylight'
2
+ require 'uri'
3
+
4
+ module Skylight
5
+ module Normalizers
6
+ module OrientdbClient
7
+ class Query < Normalizer
8
+ register "request.orientdb_client"
9
+
10
+ CAT = "db.orientdb.query".freeze
11
+ QUERY_REGEX = /\/([^\/]+)/
12
+ SUPPORTED_QUERY_TYPES = ["query".freeze, "command".freeze]
13
+
14
+ def normalize(trace, name, payload)
15
+ url = payload[:url]
16
+ query_type = nil
17
+ begin
18
+ uri = URI.parse(url)
19
+ match = uri.path.match(QUERY_REGEX)
20
+ if match
21
+ query_type = match[1]
22
+ end
23
+ rescue URI::Error
24
+ return :skip
25
+ end
26
+
27
+ return :skip unless SUPPORTED_QUERY_TYPES.include?(query_type)
28
+
29
+ [ CAT, "orientdb: #{query_type}", nil ]
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -1,3 +1,3 @@
1
1
  module OrientdbClient
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
@@ -206,7 +206,7 @@ RSpec.describe OrientdbClient do
206
206
 
207
207
  context 'with invalid query' do
208
208
  it 'raises ClientError' do
209
- expect { client.query('select * crumb') }.to raise_exception(OrientdbClient::ClientError, /OCommandSQLParsingException/)
209
+ expect { client.query('select * crumb') }.to raise_exception(OrientdbClient::ParsingError)
210
210
  end
211
211
  end
212
212
 
@@ -255,7 +255,7 @@ RSpec.describe OrientdbClient do
255
255
 
256
256
  context 'with invalid query' do
257
257
  it 'returns result' do
258
- expect { client.command('select * crumb') }.to raise_exception(OrientdbClient::ClientError, /OCommandSQLParsingException/)
258
+ expect { client.command('select * crumb') }.to raise_exception(OrientdbClient::ParsingError)
259
259
  end
260
260
  end
261
261
  end
@@ -511,7 +511,7 @@ RSpec.describe OrientdbClient do
511
511
  it 'raises exception on creation of classes that extend nothing' do
512
512
  expect do
513
513
  client.create_class(class_name, extends: 'VJk')
514
- end.to raise_exception(OrientdbClient::ClientError, /OCommandSQLParsingException/)
514
+ end.to raise_exception(OrientdbClient::ParsingError)
515
515
  end
516
516
 
517
517
  describe 'with block' do
@@ -0,0 +1,84 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+ require 'orientdb_client/integration/skylight_normalizer'
5
+
6
+ RSpec.describe Skylight::Normalizers::OrientdbClient::Query do
7
+
8
+ let(:n) { Skylight::Normalizers::OrientdbClient::Query.new({}) }
9
+ let(:name) { 'odb_query' }
10
+
11
+ it 'normalizes a graph query' do
12
+ name, title, desc = n.normalize(trace, name, url: 'http://localhost:2480/query/graphdb/sql/select+%2A+from+Post+order+by+%40rid+desc+limit+1')
13
+ expect(name).to eql('db.orientdb.query')
14
+ expect(title).to eql('orientdb: query')
15
+ expect(desc).to be_nil
16
+ end
17
+
18
+ it 'normalizes a graph query without a title' do
19
+ name, title, desc = n.normalize(trace, nil, url: 'http://localhost:2480/query/graphdb/sql/select+%2A+from+Post+order+by+%40rid+desc+limit+1')
20
+ expect(name).to eql('db.orientdb.query')
21
+ expect(title).to eql('orientdb: query')
22
+ expect(desc).to be_nil
23
+ end
24
+
25
+ it 'normalizes a graph query with multibyte characaters' do
26
+ name, title, desc = n.normalize(trace, nil, url: 'http://localhost:2480/query/graphdb/sql/select+%2A+from+Post+where+name+%3D+%22%F0%9D%92%9C+FROM+z%C3%B8mg+%C3%A5%22')
27
+ expect(name).to eql('db.orientdb.query')
28
+ expect(title).to eql('orientdb: query')
29
+ expect(desc).to be_nil
30
+ end
31
+
32
+ it 'normalizes a graph update with JSON in URL' do
33
+ name, title, desc = n.normalize(trace, name, url: 'http://localhost:2480/command/graphdb/sql/update+%2311%3A2+set+category_list%3D%5B%22sports%22%2C+%22gaming%22%2C+%22music%22%5D')
34
+ expect(name).to eql('db.orientdb.query')
35
+ expect(title).to eql('orientdb: command')
36
+ expect(desc).to be_nil
37
+ end
38
+
39
+ it 'normalizes property creation commands' do
40
+ name, title, desc = n.normalize(trace, name, url: 'http://localhost:2480/command/graphdb/sql/CREATE+PROPERTY+Post.id+string')
41
+ expect(name).to eql('db.orientdb.query')
42
+ expect(title).to eql('orientdb: command')
43
+ expect(desc).to be_nil
44
+ end
45
+
46
+ it 'normalizes property alter commands' do
47
+ name, title, desc = n.normalize(trace, name, url: 'http://localhost:2480/command/graphdb/sql/ALTER+PROPERTY+Post.exists+type+integer')
48
+ expect(name).to eql('db.orientdb.query')
49
+ expect(title).to eql('orientdb: command')
50
+ expect(desc).to be_nil
51
+ end
52
+
53
+ it 'normalizes class creation commands' do
54
+ name, title, desc = n.normalize(trace, name, url: 'http://localhost:2480/command/graphdb/sql/CREATE+CLASS+Post')
55
+ expect(name).to eql('db.orientdb.query')
56
+ expect(title).to eql('orientdb: command')
57
+ expect(desc).to be_nil
58
+ end
59
+
60
+ it 'skips connect queries' do
61
+ name, * = n.normalize(trace, name, url: 'http://localhost:2480/connect/graphdb')
62
+ expect(name).to eql(:skip)
63
+ end
64
+
65
+ it 'skips disconnect queries' do
66
+ name, * = n.normalize(trace, name, url: 'http://localhost:2480/disconnect')
67
+ expect(name).to eql(:skip)
68
+ end
69
+
70
+ it 'skips listDatabase queries' do
71
+ name, * = n.normalize(trace, name, url: 'http://localhost:2480/listDatabases')
72
+ expect(name).to eql(:skip)
73
+ end
74
+
75
+ it 'skips database creation' do
76
+ name, * = n.normalize(trace, name, url: 'http://localhost:2480/database/foobaz/plocal/graph')
77
+ expect(name).to eql(:skip)
78
+ end
79
+
80
+ it 'skips unknown queries' do
81
+ name, * = n.normalize(trace, name, url: 'http://localhost:2480/cluster/unknownop?x=y')
82
+ expect(name).to eql(:skip)
83
+ end
84
+ end
data/spec/spec_helper.rb CHANGED
@@ -39,6 +39,11 @@ ensure
39
39
  end
40
40
  end
41
41
 
42
+ # Require support files
43
+ Dir[File.expand_path('../support/*.rb', __FILE__)].each do |f|
44
+ require "support/#{File.basename(f, ".rb")}"
45
+ end
46
+
42
47
  RSpec.configure do |config|
43
48
  # rspec-expectations config goes here. You can use an alternate
44
49
  # assertion/expectation library such as wrong or the stdlib/minitest
@@ -68,6 +73,8 @@ RSpec.configure do |config|
68
73
  config.order = :random
69
74
  Kernel.srand config.seed
70
75
 
76
+ config.include SpecHelper
77
+
71
78
  # The settings below are suggested to provide a good initial experience
72
79
  # with RSpec, but feel free to customize to your heart's content.
73
80
  =begin
@@ -0,0 +1,15 @@
1
+ # From Skylight spec/support/tracing.rb
2
+
3
+ module SpecHelper
4
+ class MockTrace
5
+ attr_accessor :endpoint
6
+
7
+ def initialize
8
+ @endpoint = "Rack"
9
+ end
10
+ end
11
+
12
+ def trace
13
+ @trace ||= MockTrace.new
14
+ end
15
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: orientdb_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luke Rodgers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-07 00:00:00.000000000 Z
11
+ date: 2016-10-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: typhoeus
@@ -150,14 +150,17 @@ files:
150
150
  - lib/orientdb_client/instrumentation/log_subscriber.rb
151
151
  - lib/orientdb_client/instrumenters/memory.rb
152
152
  - lib/orientdb_client/instrumenters/noop.rb
153
+ - lib/orientdb_client/integration/skylight_normalizer.rb
153
154
  - lib/orientdb_client/test.rb
154
155
  - lib/orientdb_client/version.rb
155
156
  - orientdb_client.gemspec
156
157
  - spec/curb_adapter_spec.rb
157
158
  - spec/integration/orientdb_client/instrumentation/log_subscriber_spec.rb
158
159
  - spec/orientdb_client_spec.rb
160
+ - spec/skylight_normalizer_spec.rb
159
161
  - spec/spec_helper.rb
160
162
  - spec/support/shared_examples_for_http_adapter.rb
163
+ - spec/support/skylight_tracing.rb
161
164
  - spec/typhoeus_adapter_spec.rb
162
165
  homepage: https://github.com/lukeasrodgers/orientdb_client
163
166
  licenses:
@@ -187,6 +190,8 @@ test_files:
187
190
  - spec/curb_adapter_spec.rb
188
191
  - spec/integration/orientdb_client/instrumentation/log_subscriber_spec.rb
189
192
  - spec/orientdb_client_spec.rb
193
+ - spec/skylight_normalizer_spec.rb
190
194
  - spec/spec_helper.rb
191
195
  - spec/support/shared_examples_for_http_adapter.rb
196
+ - spec/support/skylight_tracing.rb
192
197
  - spec/typhoeus_adapter_spec.rb