skylight 0.8.0.beta.3 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -11
- data/ext/libskylight.yml +4 -4
- data/ext/skylight_native.c +47 -0
- data/lib/skylight/config.rb +4 -0
- data/lib/skylight/normalizers/active_record/sql.rb +28 -9
- data/lib/skylight/util/logging.rb +7 -1
- data/lib/skylight/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f6b231efb3b8755c457f1316274b958b7cca970b
|
4
|
+
data.tar.gz: 29de749779071d642006126ac6cf0d80abdd4fcb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13a8e72d5bcd1dc3fa3745ad27411020e1f5d6c9800fbd6d0b963a8a8d0bb0226831b1bb024ab48f30044fc6bbb44b871dda9591934eda213e8ce30701327b8d
|
7
|
+
data.tar.gz: 74be721ea966f9aa8836e273d41c49b1f392a19ef0f9e4856329460a6d7c76bed665d2c54c4a6dcb0e8ebcd5831d19d9ff6387475be83f589d89d21fb4832264
|
data/CHANGELOG.md
CHANGED
@@ -1,16 +1,9 @@
|
|
1
|
-
## 0.8.0
|
2
|
-
|
3
|
-
* [BUGFIX] Fix require issue in Grape probe
|
4
|
-
|
5
|
-
## 0.8.0-beta.2 (August 10, 2015) [YANKED]
|
1
|
+
## 0.8.0 (August 13, 2015)
|
6
2
|
|
3
|
+
* [FEATURE] Add Grape instumentation. See http://docs.skylight.io/grape
|
7
4
|
* [FEATURE] Process ERB in config/skylight.yml
|
8
|
-
* [
|
9
|
-
* [
|
10
|
-
|
11
|
-
## 0.8.0-beta.1 (August 4, 2015)
|
12
|
-
|
13
|
-
* [FEATURE] Add Grape instumentation
|
5
|
+
* [FEATURE] Add Rust based SQL lexing. Currently beta. Enable with `config.sql_mode = 'rust'`.
|
6
|
+
* [BUGFIX] Fixed a case where, With some logger configurations, duplicate messages could be written to STDOUT.
|
14
7
|
|
15
8
|
## 0.7.1 (August 4, 2015)
|
16
9
|
|
data/ext/libskylight.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
---
|
2
|
-
version: "0.7.0-
|
2
|
+
version: "0.7.0-1c24017"
|
3
3
|
checksums:
|
4
|
-
x86-linux: "
|
5
|
-
x86_64-linux: "
|
6
|
-
x86_64-darwin: "
|
4
|
+
x86-linux: "717333a52e0a9ee3cae0406339a5532e722ec00c77babe71412f02fda60df212"
|
5
|
+
x86_64-linux: "f63d13680ed9004bd958beb0f1bba6837125b882f005931201f9bcadc435d7f9"
|
6
|
+
x86_64-darwin: "9da568af9f4b9b2b613a36432b440d0fd705e567159819f9337fa344d42c04f6"
|
data/ext/skylight_native.c
CHANGED
@@ -389,9 +389,56 @@ trace_span_set_description(VALUE self, VALUE span, VALUE desc) {
|
|
389
389
|
return Qnil;
|
390
390
|
}
|
391
391
|
|
392
|
+
static VALUE
|
393
|
+
lex_sql(VALUE klass, VALUE rb_sql) {
|
394
|
+
sky_buf_t sql;
|
395
|
+
sky_buf_t title;
|
396
|
+
sky_buf_t statement;
|
397
|
+
uint8_t title_store[128];
|
398
|
+
VALUE rb_statement;
|
399
|
+
VALUE ret;
|
400
|
+
|
401
|
+
UNUSED(klass);
|
402
|
+
CHECK_TYPE(rb_sql, T_STRING);
|
403
|
+
|
404
|
+
sql = STR2BUF(rb_sql);
|
405
|
+
title = (sky_buf_t) {
|
406
|
+
.data = title_store,
|
407
|
+
.len = sizeof(title_store),
|
408
|
+
};
|
409
|
+
|
410
|
+
// The statement cannot be longer than the original sql string
|
411
|
+
rb_statement = rb_str_buf_new(RSTRING_LEN(rb_sql));
|
412
|
+
statement = (sky_buf_t) {
|
413
|
+
.data = RSTRING_PTR(rb_statement),
|
414
|
+
.len = RSTRING_LEN(rb_sql),
|
415
|
+
};
|
416
|
+
|
417
|
+
CHECK_FFI(
|
418
|
+
sky_lex_sql(sql, &title, &statement),
|
419
|
+
"native lex_sql failed");
|
420
|
+
|
421
|
+
// Set the statement return
|
422
|
+
rb_str_set_len(rb_statement, statement.len);
|
423
|
+
|
424
|
+
ret = rb_ary_new2(2);
|
425
|
+
|
426
|
+
if (title.len > 0) {
|
427
|
+
rb_ary_store(ret, 0, BUF2STR(title));
|
428
|
+
}
|
429
|
+
else {
|
430
|
+
rb_ary_store(ret, 0, Qnil);
|
431
|
+
}
|
432
|
+
|
433
|
+
rb_ary_store(ret, 1, rb_statement);
|
434
|
+
|
435
|
+
return ret;
|
436
|
+
}
|
437
|
+
|
392
438
|
void Init_skylight_native() {
|
393
439
|
rb_mSkylight = rb_define_module("Skylight");
|
394
440
|
rb_define_singleton_method(rb_mSkylight, "load_libskylight", load_libskylight, 1);
|
441
|
+
rb_define_singleton_method(rb_mSkylight, "lex_sql", lex_sql, 1);
|
395
442
|
|
396
443
|
rb_mUtil = rb_define_module_under(rb_mSkylight, "Util");
|
397
444
|
rb_cClock = rb_define_class_under(rb_mUtil, "Clock", rb_cObject);
|
data/lib/skylight/config.rb
CHANGED
@@ -32,12 +32,14 @@ module Skylight
|
|
32
32
|
'LOG_FILE' => :'log_file',
|
33
33
|
'LOG_LEVEL' => :'log_level',
|
34
34
|
'ALERT_LOG_FILE' => :'alert_log_file',
|
35
|
+
'LOG_SQL_PARSE_ERRORS' => :'log_sql_parse_errors',
|
35
36
|
|
36
37
|
# == Proxy ==
|
37
38
|
'PROXY_URL' => :'proxy_url',
|
38
39
|
|
39
40
|
# == Instrumenter ==
|
40
41
|
"IGNORED_ENDPOINT" => :'ignored_endpoint',
|
42
|
+
"SQL_MODE" => :'sql_mode',
|
41
43
|
|
42
44
|
# == Skylight Remote ==
|
43
45
|
"AUTH_URL" => :'auth_url',
|
@@ -82,6 +84,7 @@ module Skylight
|
|
82
84
|
DEFAULTS = {
|
83
85
|
:'version' => VERSION,
|
84
86
|
:'auth_url' => 'https://auth.skylight.io/agent',
|
87
|
+
:'sql_mode' => 'ruby',
|
85
88
|
:'daemon.lazy_start' => true,
|
86
89
|
:'daemon.ssl_cert_path' => Util::SSL.ca_cert_file_or_default,
|
87
90
|
:'daemon.ssl_cert_dir' => Util::SSL.ca_cert_dir,
|
@@ -90,6 +93,7 @@ module Skylight
|
|
90
93
|
:'log_file' => '-'.freeze,
|
91
94
|
:'log_level' => 'INFO'.freeze,
|
92
95
|
:'alert_log_file' => '-'.freeze,
|
96
|
+
:'log_sql_parse_errors' => false,
|
93
97
|
:'hostname' => Util::Hostname.default_hostname,
|
94
98
|
:'agent.keepalive' => 60,
|
95
99
|
:'agent.interval' => 5,
|
@@ -26,18 +26,37 @@ module Skylight
|
|
26
26
|
binds = binds.map { |col, val| val.inspect }
|
27
27
|
end
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
29
|
+
begin
|
30
|
+
extracted_title, sql = extract_binds(payload, binds)
|
31
|
+
[ name, extracted_title || title, sql ]
|
32
|
+
rescue => e
|
33
|
+
if config[:log_sql_parse_errors]
|
34
|
+
config.logger.warn "failed to extract binds in SQL; sql=#{payload[:sql].inspect}; exception=#{e.inspect}"
|
35
|
+
end
|
36
|
+
[ name, title, nil ]
|
37
|
+
end
|
33
38
|
end
|
34
39
|
|
35
|
-
|
40
|
+
private
|
41
|
+
|
36
42
|
def extract_binds(payload, precalculated)
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
43
|
+
case config[:sql_mode]
|
44
|
+
when 'rust'
|
45
|
+
extract_rust(payload)
|
46
|
+
when 'ruby'
|
47
|
+
extract_ruby(payload, precalculated)
|
48
|
+
else
|
49
|
+
raise "Unrecognized sql_mode: #{config.sql_mode}"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def extract_rust(payload)
|
54
|
+
Skylight.lex_sql(payload[:sql])
|
55
|
+
end
|
56
|
+
|
57
|
+
def extract_ruby(payload, precalculated)
|
58
|
+
name, title, _ = SqlLexer::Lexer.bindify(payload[:sql], precalculated, true)
|
59
|
+
[ name, title ]
|
41
60
|
end
|
42
61
|
end
|
43
62
|
end
|
@@ -10,7 +10,13 @@ module Skylight
|
|
10
10
|
|
11
11
|
def write(*args)
|
12
12
|
STDERR.write *args
|
13
|
-
|
13
|
+
|
14
|
+
# Try to avoid writing to STDOUT/STDERR twice
|
15
|
+
logger_logdev = @logger.instance_variable_get(:@logdev)
|
16
|
+
logger_out = logger_logdev && logger_logdev.respond_to?(:dev) ? logger_logdev.dev : nil
|
17
|
+
if logger_out != STDOUT && logger_out != STDERR
|
18
|
+
@logger.<<(*args)
|
19
|
+
end
|
14
20
|
end
|
15
21
|
|
16
22
|
def close
|
data/lib/skylight/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: skylight
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.0
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tilde, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -173,9 +173,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
173
173
|
version: 1.9.2
|
174
174
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
175
175
|
requirements:
|
176
|
-
- - "
|
176
|
+
- - ">="
|
177
177
|
- !ruby/object:Gem::Version
|
178
|
-
version:
|
178
|
+
version: '0'
|
179
179
|
requirements: []
|
180
180
|
rubyforge_project:
|
181
181
|
rubygems_version: 2.4.8
|