skylight 0.8.0.beta.3 → 0.8.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/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
|