skylight 0.3.21 → 0.4.0.alpha1
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 +0 -4
- data/ext/extconf.rb +92 -47
- data/ext/libskylight.yml +4 -4
- data/ext/skylight_native.c +248 -286
- data/lib/skylight.rb +19 -114
- data/lib/skylight/api.rb +1 -1
- data/lib/skylight/config.rb +176 -146
- data/lib/skylight/data/cacert.pem +717 -719
- data/lib/skylight/formatters/http.rb +1 -1
- data/lib/skylight/instrumenter.rb +28 -35
- data/lib/skylight/native.rb +58 -72
- data/lib/skylight/normalizers.rb +0 -1
- data/lib/skylight/normalizers/active_record/sql.rb +0 -4
- data/lib/skylight/probes/excon/middleware.rb +3 -1
- data/lib/skylight/probes/net_http.rb +3 -1
- data/lib/skylight/subscriber.rb +0 -4
- data/lib/skylight/trace.rb +189 -0
- data/lib/skylight/util.rb +10 -12
- data/lib/skylight/util/hostname.rb +17 -0
- data/lib/skylight/util/http.rb +33 -36
- data/lib/skylight/util/logging.rb +20 -1
- data/lib/skylight/util/multi_io.rb +21 -0
- data/lib/skylight/util/native_ext_fetcher.rb +83 -69
- data/lib/skylight/util/platform.rb +67 -0
- data/lib/skylight/util/ssl.rb +50 -0
- data/lib/skylight/version.rb +1 -1
- metadata +9 -34
- data/ext/rust_support/ruby.h +0 -93
- data/ext/skylight.h +0 -85
- data/ext/skylight.map +0 -4
- data/ext/test/extconf.rb +0 -18
- data/ext/test/skylight_native_test.c +0 -82
- data/ext/test/skylight_test.h +0 -20
- data/lib/skylight/formatters.rb +0 -6
- data/lib/skylight/messages.rb +0 -21
- data/lib/skylight/messages/error.rb +0 -15
- data/lib/skylight/messages/hello.rb +0 -13
- data/lib/skylight/messages/trace.rb +0 -179
- data/lib/skylight/messages/trace_envelope.rb +0 -19
- data/lib/skylight/metrics.rb +0 -9
- data/lib/skylight/metrics/ewma.rb +0 -69
- data/lib/skylight/metrics/meter.rb +0 -58
- data/lib/skylight/metrics/process_cpu_gauge.rb +0 -65
- data/lib/skylight/metrics/process_mem_gauge.rb +0 -34
- data/lib/skylight/util/conversions.rb +0 -9
- data/lib/skylight/util/queue.rb +0 -96
- data/lib/skylight/util/task.rb +0 -172
- data/lib/skylight/util/uniform_sample.rb +0 -63
- data/lib/skylight/worker.rb +0 -19
- data/lib/skylight/worker/builder.rb +0 -73
- data/lib/skylight/worker/collector.rb +0 -274
- data/lib/skylight/worker/connection.rb +0 -87
- data/lib/skylight/worker/connection_set.rb +0 -56
- data/lib/skylight/worker/embedded.rb +0 -24
- data/lib/skylight/worker/metrics_reporter.rb +0 -104
- data/lib/skylight/worker/server.rb +0 -336
- data/lib/skylight/worker/standalone.rb +0 -421
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'openssl'
|
2
|
+
|
3
|
+
module Skylight
|
4
|
+
module Util
|
5
|
+
class SSL
|
6
|
+
DEFAULT_CA_FILE = File.expand_path('../../data/cacert.pem', __FILE__)
|
7
|
+
|
8
|
+
def self.detect_ca_cert_file!
|
9
|
+
@ca_cert_file = false
|
10
|
+
if defined?(OpenSSL::X509::DEFAULT_CERT_FILE)
|
11
|
+
f = OpenSSL::X509::DEFAULT_CERT_FILE
|
12
|
+
|
13
|
+
if f && File.exist?(f)
|
14
|
+
@ca_cert_file = f
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.detect_ca_cert_dir!
|
20
|
+
@ca_cert_dir = false
|
21
|
+
if defined?(OpenSSL::X509::DEFAULT_CERT_DIR)
|
22
|
+
d = OpenSSL::X509::DEFAULT_CERT_DIR
|
23
|
+
|
24
|
+
if d && File.exist?(d)
|
25
|
+
@ca_cert_dir = d
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
detect_ca_cert_file!
|
31
|
+
detect_ca_cert_dir!
|
32
|
+
|
33
|
+
def self.ca_cert_file?
|
34
|
+
!!@ca_cert_file
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.ca_cert_dir?
|
38
|
+
!!@ca_cert_dir
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.ca_cert_file_or_default
|
42
|
+
@ca_cert_file || DEFAULT_CA_FILE
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.ca_cert_dir
|
46
|
+
@ca_cert_dir
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
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.
|
4
|
+
version: 0.4.0.alpha1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tilde, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -41,34 +41,17 @@ files:
|
|
41
41
|
- bin/skylight
|
42
42
|
- ext/extconf.rb
|
43
43
|
- ext/libskylight.yml
|
44
|
-
- ext/rust_support/ruby.h
|
45
|
-
- ext/skylight.h
|
46
|
-
- ext/skylight.map
|
47
44
|
- ext/skylight_native.c
|
48
|
-
- ext/test/extconf.rb
|
49
|
-
- ext/test/skylight_native_test.c
|
50
|
-
- ext/test/skylight_test.h
|
51
45
|
- lib/skylight.rb
|
52
46
|
- lib/skylight/api.rb
|
53
47
|
- lib/skylight/cli.rb
|
54
48
|
- lib/skylight/compat.rb
|
55
49
|
- lib/skylight/config.rb
|
56
50
|
- lib/skylight/data/cacert.pem
|
57
|
-
- lib/skylight/formatters.rb
|
58
51
|
- lib/skylight/formatters/http.rb
|
59
52
|
- lib/skylight/gc.rb
|
60
53
|
- lib/skylight/helpers.rb
|
61
54
|
- lib/skylight/instrumenter.rb
|
62
|
-
- lib/skylight/messages.rb
|
63
|
-
- lib/skylight/messages/error.rb
|
64
|
-
- lib/skylight/messages/hello.rb
|
65
|
-
- lib/skylight/messages/trace.rb
|
66
|
-
- lib/skylight/messages/trace_envelope.rb
|
67
|
-
- lib/skylight/metrics.rb
|
68
|
-
- lib/skylight/metrics/ewma.rb
|
69
|
-
- lib/skylight/metrics/meter.rb
|
70
|
-
- lib/skylight/metrics/process_cpu_gauge.rb
|
71
|
-
- lib/skylight/metrics/process_mem_gauge.rb
|
72
55
|
- lib/skylight/middleware.rb
|
73
56
|
- lib/skylight/native.rb
|
74
57
|
- lib/skylight/normalizers.rb
|
@@ -98,18 +81,19 @@ files:
|
|
98
81
|
- lib/skylight/probes/redis.rb
|
99
82
|
- lib/skylight/railtie.rb
|
100
83
|
- lib/skylight/subscriber.rb
|
84
|
+
- lib/skylight/trace.rb
|
101
85
|
- lib/skylight/util.rb
|
102
86
|
- lib/skylight/util/allocation_free.rb
|
103
87
|
- lib/skylight/util/clock.rb
|
104
|
-
- lib/skylight/util/conversions.rb
|
105
88
|
- lib/skylight/util/gzip.rb
|
89
|
+
- lib/skylight/util/hostname.rb
|
106
90
|
- lib/skylight/util/http.rb
|
107
91
|
- lib/skylight/util/inflector.rb
|
108
92
|
- lib/skylight/util/logging.rb
|
93
|
+
- lib/skylight/util/multi_io.rb
|
109
94
|
- lib/skylight/util/native_ext_fetcher.rb
|
110
|
-
- lib/skylight/util/
|
111
|
-
- lib/skylight/util/
|
112
|
-
- lib/skylight/util/uniform_sample.rb
|
95
|
+
- lib/skylight/util/platform.rb
|
96
|
+
- lib/skylight/util/ssl.rb
|
113
97
|
- lib/skylight/vendor/active_support/notifications.rb
|
114
98
|
- lib/skylight/vendor/active_support/notifications/fanout.rb
|
115
99
|
- lib/skylight/vendor/active_support/notifications/instrumenter.rb
|
@@ -158,15 +142,6 @@ files:
|
|
158
142
|
- lib/skylight/vendor/thread_safe/synchronized_cache_backend.rb
|
159
143
|
- lib/skylight/version.rb
|
160
144
|
- lib/skylight/vm/gc.rb
|
161
|
-
- lib/skylight/worker.rb
|
162
|
-
- lib/skylight/worker/builder.rb
|
163
|
-
- lib/skylight/worker/collector.rb
|
164
|
-
- lib/skylight/worker/connection.rb
|
165
|
-
- lib/skylight/worker/connection_set.rb
|
166
|
-
- lib/skylight/worker/embedded.rb
|
167
|
-
- lib/skylight/worker/metrics_reporter.rb
|
168
|
-
- lib/skylight/worker/server.rb
|
169
|
-
- lib/skylight/worker/standalone.rb
|
170
145
|
- lib/sql_lexer.rb
|
171
146
|
- lib/sql_lexer/lexer.rb
|
172
147
|
- lib/sql_lexer/string_scanner.rb
|
@@ -185,9 +160,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
185
160
|
version: 1.9.2
|
186
161
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
187
162
|
requirements:
|
188
|
-
- - "
|
163
|
+
- - ">"
|
189
164
|
- !ruby/object:Gem::Version
|
190
|
-
version:
|
165
|
+
version: 1.3.1
|
191
166
|
requirements: []
|
192
167
|
rubyforge_project:
|
193
168
|
rubygems_version: 2.2.2
|
data/ext/rust_support/ruby.h
DELETED
@@ -1,93 +0,0 @@
|
|
1
|
-
#ifndef __RUST_H__
|
2
|
-
#define __RUST_H__
|
3
|
-
|
4
|
-
#include <stddef.h>
|
5
|
-
#include <stdint.h>
|
6
|
-
#include <stdbool.h>
|
7
|
-
|
8
|
-
/**
|
9
|
-
* Rust types
|
10
|
-
*/
|
11
|
-
|
12
|
-
typedef struct {
|
13
|
-
char* data;
|
14
|
-
long len;
|
15
|
-
} RustSlice;
|
16
|
-
|
17
|
-
typedef void* RustVec;
|
18
|
-
typedef void* RustString;
|
19
|
-
|
20
|
-
bool rust_string_as_slice(RustString, RustSlice*);
|
21
|
-
|
22
|
-
#define TO_S(VAL) \
|
23
|
-
RSTRING_PTR(rb_funcall(VAL, rb_intern("to_s"), 0))
|
24
|
-
|
25
|
-
#define CHECK_NUMERIC(VAL) \
|
26
|
-
do { \
|
27
|
-
if (TYPE(VAL) != T_BIGNUM && \
|
28
|
-
TYPE(VAL) != T_FIXNUM) { \
|
29
|
-
rb_raise(rb_eArgError, "expected " #VAL " to be numeric but was '%s' (%s [%i])", \
|
30
|
-
TO_S(VAL), rb_obj_classname(VAL), TYPE(VAL)); \
|
31
|
-
return Qnil; \
|
32
|
-
} \
|
33
|
-
} while(0) \
|
34
|
-
|
35
|
-
#define CHECK_TYPE(VAL, T) \
|
36
|
-
do { \
|
37
|
-
if (TYPE(VAL) != T) { \
|
38
|
-
rb_raise(rb_eArgError, "expected " #VAL " to be " #T " but was '%s' (%s [%i])", \
|
39
|
-
TO_S(VAL), rb_obj_classname(VAL), TYPE(VAL)); \
|
40
|
-
return Qnil; \
|
41
|
-
} \
|
42
|
-
} while(0) \
|
43
|
-
|
44
|
-
#define CHECK_FFI(success, message) \
|
45
|
-
({ \
|
46
|
-
if (!(success)) \
|
47
|
-
rb_raise(rb_eRuntimeError, message); \
|
48
|
-
})
|
49
|
-
|
50
|
-
#define SLICE2STR(slice) \
|
51
|
-
({ \
|
52
|
-
RustSlice s = (slice); \
|
53
|
-
VALUE str = rb_str_new(s.data, s.len); \
|
54
|
-
rb_enc_associate(str, rb_utf8_encoding()); \
|
55
|
-
str; \
|
56
|
-
})
|
57
|
-
|
58
|
-
#define STR2SLICE(string) \
|
59
|
-
({ \
|
60
|
-
RustSlice s; \
|
61
|
-
VALUE rb_str = (string); \
|
62
|
-
s.data = RSTRING_PTR(rb_str); \
|
63
|
-
s.len = RSTRING_LEN(rb_str); \
|
64
|
-
s; \
|
65
|
-
})
|
66
|
-
|
67
|
-
#define RUSTSTR2STR(string) \
|
68
|
-
({ \
|
69
|
-
RustString s = (string); \
|
70
|
-
RustSlice slice; \
|
71
|
-
CHECK_FFI(rust_string_as_slice(s, &slice), "Couldn't convert String to &str"); \
|
72
|
-
SLICE2STR(slice); \
|
73
|
-
})
|
74
|
-
|
75
|
-
#endif
|
76
|
-
|
77
|
-
#define My_Struct(name, Type, msg) \
|
78
|
-
Get_Struct(name, self, Type, msg); \
|
79
|
-
|
80
|
-
#define Transfer_My_Struct(name, Type, msg) \
|
81
|
-
My_Struct(name, Type, msg); \
|
82
|
-
DATA_PTR(self) = NULL; \
|
83
|
-
|
84
|
-
#define Transfer_Struct(name, obj, Type, msg) \
|
85
|
-
Get_Struct(name, obj, Type, msg); \
|
86
|
-
DATA_PTR(obj) = NULL; \
|
87
|
-
|
88
|
-
#define Get_Struct(name, obj, Type, msg) \
|
89
|
-
Type name; \
|
90
|
-
Data_Get_Struct(obj, Type, name); \
|
91
|
-
if (name == NULL) { \
|
92
|
-
rb_raise(rb_eRuntimeError, "%s", msg); \
|
93
|
-
}
|
data/ext/skylight.h
DELETED
@@ -1,85 +0,0 @@
|
|
1
|
-
#ifndef __SKYLIGHT_H__
|
2
|
-
#define __SKYLIGHT_H__
|
3
|
-
|
4
|
-
#include <stddef.h>
|
5
|
-
#include <stdint.h>
|
6
|
-
#include <stdbool.h>
|
7
|
-
|
8
|
-
#include <rust_support/ruby.h>
|
9
|
-
|
10
|
-
/**
|
11
|
-
* TODO: This is copied from rust_support
|
12
|
-
*/
|
13
|
-
|
14
|
-
bool skylight_string_as_slice(RustString, RustSlice*);
|
15
|
-
|
16
|
-
#define SKYLIGHT_RUSTSTR2STR(string) \
|
17
|
-
({ \
|
18
|
-
RustString s = (string); \
|
19
|
-
RustSlice slice; \
|
20
|
-
CHECK_FFI(skylight_string_as_slice(s, &slice), "Couldn't convert String to &str"); \
|
21
|
-
SLICE2STR(slice); \
|
22
|
-
})
|
23
|
-
|
24
|
-
/**
|
25
|
-
* Externed Rust functions from libskylight
|
26
|
-
*/
|
27
|
-
|
28
|
-
typedef void * RustSerializer;
|
29
|
-
typedef void * RustHello;
|
30
|
-
typedef void * RustError;
|
31
|
-
typedef void * RustTrace;
|
32
|
-
typedef void * RustBatch;
|
33
|
-
|
34
|
-
void factory();
|
35
|
-
|
36
|
-
// Rust skylight_hello prototypes
|
37
|
-
bool skylight_hello_new(RustSlice, uint32_t, RustHello*);
|
38
|
-
bool skylight_hello_free(RustHello);
|
39
|
-
bool skylight_hello_load(RustSlice, RustHello*);
|
40
|
-
bool skylight_hello_cmd_add(RustHello, RustSlice);
|
41
|
-
bool skylight_hello_get_version(RustHello, RustSlice*);
|
42
|
-
bool skylight_hello_cmd_length(RustHello, uint32_t*);
|
43
|
-
bool skylight_hello_get_cmd(RustHello, uint32_t, RustSlice*);
|
44
|
-
bool skylight_hello_get_serializer(RustHello, RustSerializer*);
|
45
|
-
bool skylight_hello_serialize(RustHello, RustSerializer, RustSlice);
|
46
|
-
bool skylight_high_res_time(uint64_t*);
|
47
|
-
|
48
|
-
// Rust skylight_trace prototypes
|
49
|
-
bool skylight_trace_new(uint64_t, RustSlice, RustTrace*);
|
50
|
-
bool skylight_trace_free(RustTrace);
|
51
|
-
bool skylight_trace_name_from_serialized_into_new_buffer(RustSlice, RustString*);
|
52
|
-
bool skylight_trace_get_started_at(RustTrace, uint64_t*);
|
53
|
-
bool skylight_trace_set_name(RustTrace, RustSlice);
|
54
|
-
bool skylight_trace_get_name(RustTrace, RustSlice*);
|
55
|
-
bool skylight_trace_get_uuid(RustTrace, RustSlice*);
|
56
|
-
bool skylight_trace_start_span(RustTrace, uint64_t, RustSlice, uint32_t*);
|
57
|
-
bool skylight_trace_stop_span(RustTrace, uint32_t, uint64_t);
|
58
|
-
bool skylight_trace_span_set_title(RustTrace, uint64_t, RustSlice);
|
59
|
-
bool skylight_trace_span_set_description(RustTrace, uint64_t, RustSlice);
|
60
|
-
bool skylight_trace_get_serializer(RustTrace, RustSerializer*);
|
61
|
-
bool skylight_trace_serialize(RustTrace, RustSerializer, RustSlice);
|
62
|
-
|
63
|
-
// Batch methods
|
64
|
-
bool skylight_batch_new(uint32_t, RustSlice*, RustBatch*);
|
65
|
-
bool skylight_batch_free(RustBatch);
|
66
|
-
bool skylight_batch_set_endpoint_count(RustBatch, RustSlice, uint64_t);
|
67
|
-
bool skylight_batch_move_in(RustBatch, RustSlice);
|
68
|
-
bool skylight_batch_get_serializer(RustBatch, RustSerializer*);
|
69
|
-
bool skylight_batch_serialize(RustBatch, RustSerializer, RustSlice);
|
70
|
-
|
71
|
-
// Error methods
|
72
|
-
bool skylight_error_new(RustSlice, RustSlice, RustError*);
|
73
|
-
bool skylight_error_free(RustError);
|
74
|
-
bool skylight_error_load(RustSlice, RustError*);
|
75
|
-
bool skylight_error_get_group(RustError, RustSlice*);
|
76
|
-
bool skylight_error_get_description(RustError, RustSlice*);
|
77
|
-
bool skylight_error_get_details(RustError, RustSlice*);
|
78
|
-
bool skylight_error_set_details(RustError, RustSlice);
|
79
|
-
bool skylight_error_get_serializer(RustError, RustSerializer*);
|
80
|
-
bool skylight_error_serialize(RustError, RustSerializer, RustSlice);
|
81
|
-
|
82
|
-
bool skylight_serializer_get_serialized_size(RustSerializer, size_t*);
|
83
|
-
bool skylight_serializer_free(RustSerializer);
|
84
|
-
|
85
|
-
#endif
|
data/ext/skylight.map
DELETED
data/ext/test/extconf.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'mkmf'
|
2
|
-
|
3
|
-
have_header 'dlfcn.h'
|
4
|
-
|
5
|
-
find_header("rust_support/ruby.h", "..") || abort("No rust_support")
|
6
|
-
find_library("skylight_test", "skylight_test_factory", ".") || abort("No skylight_test")
|
7
|
-
|
8
|
-
$CFLAGS << " -Werror"
|
9
|
-
if RbConfig::CONFIG["arch"] =~ /darwin(\d+)?/
|
10
|
-
$LDFLAGS << " -lpthread"
|
11
|
-
else
|
12
|
-
$LDFLAGS << " -Wl"
|
13
|
-
$LDFLAGS << " -lrt -ldl -lm -lpthread"
|
14
|
-
end
|
15
|
-
|
16
|
-
CONFIG['warnflags'].gsub!('-Wdeclaration-after-statement', '')
|
17
|
-
|
18
|
-
create_makefile 'skylight_native_test', '.'
|
@@ -1,82 +0,0 @@
|
|
1
|
-
#include <ruby.h>
|
2
|
-
#include "skylight_test.h"
|
3
|
-
|
4
|
-
#ifdef HAVE_RUBY_ENCODING_H
|
5
|
-
#include <ruby/encoding.h>
|
6
|
-
#endif
|
7
|
-
|
8
|
-
VALUE rb_mSkylightTest;
|
9
|
-
VALUE rb_mNumeric;
|
10
|
-
VALUE rb_mStrings;
|
11
|
-
VALUE rb_mStructs;
|
12
|
-
VALUE rb_cPerson;
|
13
|
-
|
14
|
-
static VALUE numeric_multiply(VALUE klass, VALUE a, VALUE b) {
|
15
|
-
CHECK_NUMERIC(a);
|
16
|
-
CHECK_NUMERIC(b);
|
17
|
-
|
18
|
-
uint64_t ret;
|
19
|
-
|
20
|
-
CHECK_FFI(skylight_test_numeric_multiply(NUM2ULL(a), NUM2ULL(b), &ret), "could not multiply");
|
21
|
-
|
22
|
-
return ULL2NUM(ret);
|
23
|
-
}
|
24
|
-
|
25
|
-
static VALUE strings_multiple(VALUE klass, VALUE input) {
|
26
|
-
CHECK_TYPE(input, T_STRING);
|
27
|
-
|
28
|
-
RustString string;
|
29
|
-
|
30
|
-
CHECK_FFI(skylight_test_strings_reverse(STR2SLICE(input), &string), "could not reverse");
|
31
|
-
|
32
|
-
return RUSTSTR2STR(string);
|
33
|
-
}
|
34
|
-
|
35
|
-
static const char* freedPerson = "You can't do anything with a Person once it is freed";
|
36
|
-
|
37
|
-
static VALUE person_new(VALUE klass, VALUE name, VALUE age) {
|
38
|
-
CHECK_TYPE(name, T_STRING);
|
39
|
-
CHECK_NUMERIC(age);
|
40
|
-
|
41
|
-
RustPerson person;
|
42
|
-
|
43
|
-
CHECK_FFI(skylight_test_person_new(STR2SLICE(name), NUM2ULL(age), &person), "could not create new Person");
|
44
|
-
|
45
|
-
return Data_Wrap_Struct(rb_cPerson, NULL, skylight_test_person_free, person);
|
46
|
-
}
|
47
|
-
|
48
|
-
static VALUE person_get_name(VALUE self) {
|
49
|
-
My_Struct(person, RustPerson, freedPerson);
|
50
|
-
|
51
|
-
RustSlice name;
|
52
|
-
|
53
|
-
CHECK_FFI(skylight_test_person_get_name(person, &name), "could not get person name");
|
54
|
-
|
55
|
-
return SLICE2STR(name);
|
56
|
-
}
|
57
|
-
|
58
|
-
static VALUE person_get_age(VALUE self) {
|
59
|
-
My_Struct(person, RustPerson, freedPerson);
|
60
|
-
|
61
|
-
uint64_t age;
|
62
|
-
|
63
|
-
CHECK_FFI(skylight_test_person_get_age(person, &age), "could not get person age");
|
64
|
-
|
65
|
-
return ULL2NUM(age);
|
66
|
-
}
|
67
|
-
|
68
|
-
void Init_skylight_native_test() {
|
69
|
-
rb_mSkylightTest = rb_define_module("SkylightTest");
|
70
|
-
rb_mNumeric = rb_define_module_under(rb_mSkylightTest, "Numeric");
|
71
|
-
rb_mStrings = rb_define_module_under(rb_mSkylightTest, "Strings");
|
72
|
-
rb_mStructs = rb_define_module_under(rb_mSkylightTest, "Structs");
|
73
|
-
rb_cPerson = rb_define_class_under(rb_mStructs, "Person", rb_cObject);
|
74
|
-
|
75
|
-
rb_define_singleton_method(rb_mNumeric, "multiply", numeric_multiply, 2);
|
76
|
-
|
77
|
-
rb_define_singleton_method(rb_mStrings, "reverse", strings_multiple, 1);
|
78
|
-
|
79
|
-
rb_define_singleton_method(rb_cPerson, "new", person_new, 2);
|
80
|
-
rb_define_method(rb_cPerson, "name", person_get_name, 0);
|
81
|
-
rb_define_method(rb_cPerson, "age", person_get_age, 0);
|
82
|
-
}
|