skylight 0.3.13 → 0.3.14

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: 7e55c1c2dc7308e528ed6b70c50bc46ded112deb
4
- data.tar.gz: b1cfa59af5c1b1b1c453c6cccefc8d3f7d83a031
3
+ metadata.gz: 5620862e4260060cc2887d5fa2e902eeb96af51a
4
+ data.tar.gz: 8e664fcdf47316d921921b96286c8b336f6c0892
5
5
  SHA512:
6
- metadata.gz: 902ff0813ae73c280619f70728b2669cb17bb249abab8e5f7508893d81f9cd1ab25b2d6b9d4a4203080175934c63d8a48f37fe3199d8df384269d7fc7cf590ba
7
- data.tar.gz: be41caa2f4ad1c66bfb779c1d0b851cc21388d63a17153b4c3c5c2ac216209d72b302b5e7d114a3df7968041592cdb392b87f2bc389083cb2115e4757921b2b2
6
+ metadata.gz: 0ad66490a91813115f262f0c1640a0a50839bd82f0a81fb32952cd03fede4a742ed220db5d14491b1fda95b0217a5ff3ec48e3ddff6d77a9f4674f4dbf45bae1
7
+ data.tar.gz: 122849003b5c4d135c8244d37e65ca1505a8cb421ff874c7d6e1af180e8fe122026155c734645ccf10a7527ad1182fe19cf64d9bab3ad2f0b13a1aa44b103c5b
@@ -1,3 +1,10 @@
1
+ ## 0.3.14 (June 3, 2014)
2
+
3
+ * Do not build C extension if dependencies (libraries/headers) are
4
+ missing
5
+ * [RUST] Improve performance by not double copying memory when serializing
6
+ * Enable the Net::HTTP probe by default
7
+
1
8
  ## 0.3.13 (May 12, 2014)
2
9
 
3
10
  * Load probes even when agent is disabled
@@ -104,7 +104,8 @@ end
104
104
 
105
105
  have_header 'dlfcn.h'
106
106
 
107
- find_library("skylight", "factory", ".")
107
+ find_header("rust_support/ruby.h", ".") or fail "could not find rust support header"
108
+ find_library("skylight", "factory", ".") or fail "could not find skylight library"
108
109
 
109
110
  $CFLAGS << " -Werror"
110
111
  if RbConfig::CONFIG["arch"] =~ /darwin(\d+)?/
@@ -116,4 +117,4 @@ end
116
117
 
117
118
  CONFIG['warnflags'].gsub!('-Wdeclaration-after-statement', '')
118
119
 
119
- create_makefile 'skylight_native', '.'
120
+ create_makefile 'skylight_native', '.' or fail "could not create makefile"
@@ -1,6 +1,6 @@
1
1
  ---
2
- version: "f2a0e15"
2
+ version: "dfa09f3"
3
3
  checksums:
4
- linux-x86_64: "a99d5542893418b0a5b6b53a599b2c2a07dc8186491181f6dbe0ccfab03dbed4"
5
- linux-x86: "a4db4dfbaaa1181e74e6756f4d56ba00fdf4b88e54476294086e7e27bf0c3cdc"
4
+ linux-x86_64: "be6c610564c66e2a098e7c22226ac879cc970bac252b2534a11b556197f2efca"
5
+ linux-x86: "2113e80b8afddf5f00c81590c8cbcfbb6ecaf9dbdec950eca06bb11ed1456351"
6
6
 
@@ -0,0 +1,93 @@
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
+ }
@@ -5,33 +5,27 @@
5
5
  #include <stdint.h>
6
6
  #include <stdbool.h>
7
7
 
8
+ #include <rust_support/ruby.h>
9
+
8
10
  /**
9
- * Rust types
11
+ * TODO: This is copied from rust_support
10
12
  */
11
13
 
12
- typedef struct {
13
- size_t fill; // in bytes; if zero, heapified
14
- size_t alloc; // in bytes
15
- uint8_t data[0];
16
- } rust_str;
17
-
18
- typedef struct {
19
- char * data;
20
- long len;
21
- } RustSlice;
14
+ bool skylight_string_as_slice(RustString, RustSlice*);
22
15
 
23
- typedef struct {
24
- uint8_t discrim;
25
- RustSlice slice;
26
- } OptionRustSlice;
27
-
28
- typedef rust_str * RustString;
29
- typedef RustString RustVector;
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
+ })
30
23
 
31
24
  /**
32
25
  * Externed Rust functions from libskylight
33
26
  */
34
27
 
28
+ typedef void * RustSerializer;
35
29
  typedef void * RustHello;
36
30
  typedef void * RustError;
37
31
  typedef void * RustTrace;
@@ -46,8 +40,9 @@ bool skylight_hello_load(RustSlice, RustHello*);
46
40
  bool skylight_hello_cmd_add(RustHello, RustSlice);
47
41
  bool skylight_hello_get_version(RustHello, RustSlice*);
48
42
  bool skylight_hello_cmd_length(RustHello, uint32_t*);
49
- bool skylight_hello_get_cmd(RustHello, int, RustSlice*);
50
- bool skylight_hello_serialize_into_new_buffer(RustHello, RustString*);
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);
51
46
  bool skylight_high_res_time(uint64_t*);
52
47
 
53
48
  // Rust skylight_trace prototypes
@@ -60,22 +55,18 @@ bool skylight_trace_get_name(RustTrace, RustSlice*);
60
55
  bool skylight_trace_get_uuid(RustTrace, RustSlice*);
61
56
  bool skylight_trace_start_span(RustTrace, uint64_t, RustSlice, uint32_t*);
62
57
  bool skylight_trace_stop_span(RustTrace, uint32_t, uint64_t);
63
- bool skylight_trace_serialize_into_new_buffer(RustTrace, RustString*);
64
58
  bool skylight_trace_span_set_title(RustTrace, uint64_t, RustSlice);
65
59
  bool skylight_trace_span_set_description(RustTrace, uint64_t, RustSlice);
66
-
67
- // Trace annotation methods
68
- bool skylight_trace_add_annotation_int(RustTrace, uint32_t, uint32_t*, RustSlice*, int64_t);
69
- bool skylight_trace_add_annotation_double(RustTrace, uint32_t, uint32_t*, RustSlice*, double);
70
- bool skylight_trace_add_annotation_string(RustTrace, uint32_t, uint32_t*, RustSlice*, RustSlice);
71
- bool skylight_trace_add_annotation_nested(RustTrace, uint32_t, uint32_t*, RustSlice*, uint32_t*);
60
+ bool skylight_trace_get_serializer(RustTrace, RustSerializer*);
61
+ bool skylight_trace_serialize(RustTrace, RustSerializer, RustSlice);
72
62
 
73
63
  // Batch methods
74
- bool skylight_batch_new(uint32_t, RustString, RustBatch*);
64
+ bool skylight_batch_new(uint32_t, RustSlice*, RustBatch*);
75
65
  bool skylight_batch_free(RustBatch);
76
66
  bool skylight_batch_set_endpoint_count(RustBatch, RustSlice, uint64_t);
77
- bool skylight_batch_move_in(RustBatch, RustString);
78
- bool skylight_batch_serialize_into_new_buffer(RustBatch, RustString*);
67
+ bool skylight_batch_move_in(RustBatch, RustSlice);
68
+ bool skylight_batch_get_serializer(RustBatch, RustSerializer*);
69
+ bool skylight_batch_serialize(RustBatch, RustSerializer, RustSlice);
79
70
 
80
71
  // Error methods
81
72
  bool skylight_error_new(RustSlice, RustSlice, RustError*);
@@ -85,8 +76,10 @@ bool skylight_error_get_group(RustError, RustSlice*);
85
76
  bool skylight_error_get_description(RustError, RustSlice*);
86
77
  bool skylight_error_get_details(RustError, RustSlice*);
87
78
  bool skylight_error_set_details(RustError, RustSlice);
88
- bool skylight_error_serialize_into_new_buffer(RustError, RustString*);
79
+ bool skylight_error_get_serializer(RustError, RustSerializer*);
80
+ bool skylight_error_serialize(RustError, RustSerializer, RustSlice);
89
81
 
90
- void skylight_free_buf(RustString);
82
+ bool skylight_serializer_get_serialized_size(RustSerializer, size_t*);
83
+ bool skylight_serializer_free(RustSerializer);
91
84
 
92
85
  #endif
@@ -9,104 +9,27 @@
9
9
  * Ruby helpers
10
10
  */
11
11
 
12
- #define TO_S(VAL) \
13
- RSTRING_PTR(rb_funcall(VAL, rb_intern("to_s"), 0))
14
-
15
- #define CHECK_TYPE(VAL, T) \
16
- do { \
17
- if (TYPE(VAL) != T) { \
18
- rb_raise(rb_eArgError, "expected " #VAL " to be " #T " but was '%s' (%s [%i])", \
19
- TO_S(VAL), rb_obj_classname(VAL), TYPE(VAL)); \
20
- return Qnil; \
21
- } \
22
- } while(0) \
23
-
24
- #define CHECK_NUMERIC(VAL) \
25
- do { \
26
- if (TYPE(VAL) != T_BIGNUM && \
27
- TYPE(VAL) != T_FIXNUM) { \
28
- rb_raise(rb_eArgError, "expected " #VAL " to be numeric but was '%s' (%s [%i])", \
29
- TO_S(VAL), rb_obj_classname(VAL), TYPE(VAL)); \
30
- return Qnil; \
31
- } \
32
- } while(0) \
33
-
34
- #define My_Struct(name, Type, msg) \
35
- Get_Struct(name, self, Type, msg); \
36
-
37
- #define Transfer_My_Struct(name, Type, msg) \
38
- My_Struct(name, Type, msg); \
39
- DATA_PTR(self) = NULL; \
40
-
41
- #define Transfer_Struct(name, obj, Type, msg) \
42
- Get_Struct(name, obj, Type, msg); \
43
- DATA_PTR(obj) = NULL; \
44
-
45
- #define Get_Struct(name, obj, Type, msg) \
46
- Type name; \
47
- Data_Get_Struct(obj, Type, name); \
48
- if (name == NULL) { \
49
- rb_raise(rb_eRuntimeError, "%s", msg); \
50
- } \
51
-
52
- #define CHECK_FFI(success, message) \
53
- ({ \
54
- if (!(success)) \
55
- rb_raise(rb_eRuntimeError, message); \
56
- })
57
-
58
- #define VEC2STR(vector) \
59
- ({ \
60
- RustVector v = (vector); \
61
- VALUE ret = rb_str_new((char *)v->data, v->fill); \
62
- ret; \
63
- })
64
-
65
- #define SLICE2STR(slice) \
66
- ({ \
67
- RustSlice s = (slice); \
68
- VALUE str = rb_str_new(s.data, s.len); \
69
- rb_enc_associate(str, rb_utf8_encoding()); \
70
- str; \
71
- })
72
-
73
- #define STR2SLICE(string) \
74
- ({ \
75
- RustSlice s; \
76
- VALUE rb_str = (string); \
77
- s.data = RSTRING_PTR(rb_str); \
78
- s.len = RSTRING_LEN(rb_str); \
79
- s; \
80
- })
81
-
82
- #define UnwrapOption(T, val, transform) \
83
- ({ \
84
- T * v = (val); \
85
- VALUE ret; \
86
- if (v == NULL) { \
87
- ret = Qnil; \
88
- } \
89
- else { \
90
- ret = transform(*v); \
91
- } \
92
- ret; \
93
- })
94
-
95
- #define IsNone(val) val.discrim == 0
96
-
97
- /**
98
- * Convert Ruby String to a Rust String
99
- */
100
-
101
- RustString skylight_slice_to_owned(RustSlice);
102
- RustString skylight_bytes_to_new_vec(uint8_t*, uint64_t);
103
-
104
- #define STR2RUST(string) \
105
- ({ \
106
- VALUE rb_str = (string); \
107
- skylight_bytes_to_new_vec( \
108
- (uint8_t*) RSTRING_PTR(rb_str), \
109
- RSTRING_LEN(rb_str)); \
12
+ #define SERIALIZE(MSG) \
13
+ ({ \
14
+ VALUE ret; \
15
+ size_t size; \
16
+ RustSerializer serializer; \
17
+ \
18
+ if (!MSG) { \
19
+ rb_raise(rb_eRuntimeError, "No "#MSG" message to serialize"); \
20
+ } \
21
+ else { \
22
+ CHECK_FFI(skylight_ ## MSG ## _get_serializer(MSG, &serializer), "could not get serializer for "#MSG); \
23
+ \
24
+ CHECK_FFI(skylight_serializer_get_serialized_size(serializer, &size), "could not get serialized size for "#MSG); \
25
+ ret = rb_str_new(NULL, size); \
26
+ \
27
+ CHECK_FFI(skylight_ ## MSG ## _serialize(MSG, serializer, STR2SLICE(ret)), "could not serialize "#MSG); \
28
+ skylight_serializer_free(serializer); \
29
+ } \
30
+ \
31
+ skylight_ ## MSG ## _free(MSG); \
32
+ ret; \
110
33
  })
111
34
 
112
35
  /**
@@ -189,7 +112,7 @@ static VALUE hello_add_cmd_part(VALUE self, VALUE rb_string) {
189
112
  }
190
113
 
191
114
  static VALUE hello_cmd_get(VALUE self, VALUE rb_off) {
192
- int off;
115
+ uint32_t off;
193
116
  RustSlice slice;
194
117
  My_Struct(hello, RustHello, freedHello);
195
118
 
@@ -202,15 +125,8 @@ static VALUE hello_cmd_get(VALUE self, VALUE rb_off) {
202
125
  }
203
126
 
204
127
  static VALUE hello_serialize(VALUE self) {
205
- RustString serialized;
206
128
  Transfer_My_Struct(hello, RustHello, freedHello);
207
-
208
- CHECK_FFI(skylight_hello_serialize_into_new_buffer(hello, &serialized), "Could not serialize Hello");
209
- skylight_hello_free(hello);
210
-
211
- VALUE string = VEC2STR(serialized);
212
- skylight_free_buf(serialized);
213
- return string;
129
+ return SERIALIZE(hello);
214
130
  }
215
131
 
216
132
  /**
@@ -281,15 +197,8 @@ static VALUE error_set_details(VALUE self, VALUE details) {
281
197
  }
282
198
 
283
199
  static VALUE error_serialize(VALUE self) {
284
- RustString serialized;
285
200
  Transfer_My_Struct(error, RustError, freedError);
286
-
287
- CHECK_FFI(skylight_error_serialize_into_new_buffer(error, &serialized), "Could not serialize Error");
288
- skylight_error_free(error);
289
-
290
- VALUE string = VEC2STR(serialized);
291
- skylight_free_buf(serialized);
292
- return string;
201
+ return SERIALIZE(error);
293
202
  }
294
203
 
295
204
  /**
@@ -316,9 +225,7 @@ static VALUE trace_name_from_serialized(VALUE self, VALUE protobuf) {
316
225
 
317
226
  CHECK_FFI(skylight_trace_name_from_serialized_into_new_buffer(STR2SLICE(protobuf), &trace_name), "Could not read name from serialized Trace");
318
227
 
319
- VALUE ret = VEC2STR(trace_name);
320
- skylight_free_buf(trace_name);
321
- return ret;
228
+ return SKYLIGHT_RUSTSTR2STR(trace_name);
322
229
  }
323
230
 
324
231
  static VALUE trace_get_started_at(VALUE self) {
@@ -348,8 +255,6 @@ static VALUE trace_get_name(VALUE self) {
348
255
  } else {
349
256
  return Qnil;
350
257
  }
351
-
352
- //return UnwrapOption(RustSlice, skylight_trace_get_name(trace), SLICE2STR);
353
258
  }
354
259
 
355
260
  static VALUE trace_get_uuid(VALUE self) {
@@ -408,15 +313,7 @@ static VALUE trace_span_set_description(VALUE self, VALUE index, VALUE descripti
408
313
 
409
314
  static VALUE trace_serialize(VALUE self) {
410
315
  Transfer_My_Struct(trace, RustTrace, freedTrace);
411
-
412
- RustString string;
413
-
414
- CHECK_FFI(skylight_trace_serialize_into_new_buffer(trace, &string), "Could not serialize Trace");
415
- skylight_trace_free(trace);
416
-
417
- VALUE rb_string = VEC2STR(string);
418
- skylight_free_buf(string);
419
- return rb_string;
316
+ return SERIALIZE(trace);
420
317
  }
421
318
 
422
319
  /**
@@ -428,12 +325,15 @@ static const char* freedBatch = "You can't do anything with a Batch once it's be
428
325
  VALUE batch_new(VALUE klass, VALUE rb_timestamp, VALUE rb_hostname) {
429
326
  CHECK_NUMERIC(rb_timestamp);
430
327
 
431
- RustString hostname = NULL;
328
+ RustSlice* hostname = NULL;
329
+ RustSlice tmp;
330
+
432
331
  uint32_t timestamp = (uint32_t) NUM2ULONG(rb_timestamp);
433
332
 
434
333
  if (rb_hostname != Qnil) {
435
334
  CHECK_TYPE(rb_hostname, T_STRING);
436
- hostname = STR2RUST(rb_hostname);
335
+ tmp = STR2SLICE(rb_hostname);
336
+ hostname = &tmp;
437
337
  }
438
338
 
439
339
  RustBatch batch;
@@ -459,22 +359,14 @@ VALUE batch_move_in(VALUE self, VALUE rb_string) {
459
359
 
460
360
  My_Struct(batch, RustBatch, freedBatch);
461
361
 
462
- CHECK_FFI(skylight_batch_move_in(batch, STR2RUST(rb_string)), "Could not add serialized Trace to Batch");
362
+ CHECK_FFI(skylight_batch_move_in(batch, STR2SLICE(rb_string)), "Could not add serialized Trace to Batch");
463
363
 
464
364
  return Qnil;
465
365
  }
466
366
 
467
367
  VALUE batch_serialize(VALUE self) {
468
368
  Transfer_My_Struct(batch, RustBatch, freedBatch);
469
-
470
- RustString string;
471
-
472
- CHECK_FFI(skylight_batch_serialize_into_new_buffer(batch, &string), "Could not serialize Batch");
473
- skylight_batch_free(batch);
474
-
475
- VALUE rb_string = VEC2STR(string);
476
- skylight_free_buf(string);
477
- return rb_string;
369
+ return SERIALIZE(batch);
478
370
  }
479
371
 
480
372
  void Init_skylight_native() {
@@ -0,0 +1,18 @@
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', '.'
@@ -0,0 +1,82 @@
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
+ }
@@ -0,0 +1,20 @@
1
+ #ifndef __SKYLIGHT_TEST_H__
2
+ #define __SKYLIGHT_TEST_H__
3
+
4
+ #include <stddef.h>
5
+ #include <stdint.h>
6
+ #include <stdbool.h>
7
+
8
+ #include <rust_support/ruby.h>
9
+
10
+ typedef void * RustPerson;
11
+
12
+ bool skylight_test_numeric_multiply(uint64_t, uint64_t, uint64_t*);
13
+ bool skylight_test_strings_reverse(RustSlice, RustString*);
14
+
15
+ bool skylight_test_person_new(RustSlice, uint64_t, RustPerson*);
16
+ bool skylight_test_person_get_name(RustPerson, RustSlice*);
17
+ bool skylight_test_person_get_age(RustPerson, uint64_t*);
18
+ bool skylight_test_person_free(RustPerson);
19
+
20
+ #endif
@@ -13,7 +13,9 @@ module Skylight
13
13
  config.skylight.config_path = "config/skylight.yml"
14
14
 
15
15
  # The probes to load
16
- config.skylight.probes = []
16
+ # net_http is on by default
17
+ # Also available: excon
18
+ config.skylight.probes = ['net_http']
17
19
 
18
20
  initializer 'skylight.configure' do |app|
19
21
  # Load probes even when agent is inactive to catch probe related bugs sooner
@@ -1,4 +1,4 @@
1
1
  module Skylight
2
- VERSION = '0.3.13'
2
+ VERSION = '0.3.14'
3
3
  end
4
4
 
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: skylight
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.13
4
+ version: 0.3.14
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-05-12 00:00:00.000000000 Z
11
+ date: 2014-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: 3.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: 3.0.0
27
27
  description:
@@ -33,14 +33,6 @@ extensions:
33
33
  - ext/extconf.rb
34
34
  extra_rdoc_files: []
35
35
  files:
36
- - CHANGELOG.md
37
- - README.md
38
- - bin/skylight
39
- - ext/extconf.rb
40
- - ext/libskylight.yml
41
- - ext/skylight.h
42
- - ext/skylight.map
43
- - ext/skylight_native.c
44
36
  - lib/skylight.rb
45
37
  - lib/skylight/api.rb
46
38
  - lib/skylight/cli.rb
@@ -151,6 +143,18 @@ files:
151
143
  - lib/sql_lexer.rb
152
144
  - lib/sql_lexer/lexer.rb
153
145
  - lib/sql_lexer/version.rb
146
+ - ext/rust_support/ruby.h
147
+ - ext/skylight.h
148
+ - ext/test/skylight_test.h
149
+ - ext/skylight_native.c
150
+ - ext/test/skylight_native_test.c
151
+ - ext/skylight.map
152
+ - ext/extconf.rb
153
+ - ext/test/extconf.rb
154
+ - ext/libskylight.yml
155
+ - CHANGELOG.md
156
+ - README.md
157
+ - bin/skylight
154
158
  homepage: http://www.skylight.io
155
159
  licenses: []
156
160
  metadata: {}
@@ -160,19 +164,19 @@ require_paths:
160
164
  - lib
161
165
  required_ruby_version: !ruby/object:Gem::Requirement
162
166
  requirements:
163
- - - ">="
167
+ - - '>='
164
168
  - !ruby/object:Gem::Version
165
169
  version: 1.9.2
166
170
  required_rubygems_version: !ruby/object:Gem::Requirement
167
171
  requirements:
168
- - - ">="
172
+ - - '>='
169
173
  - !ruby/object:Gem::Version
170
174
  version: '0'
171
175
  requirements: []
172
176
  rubyforge_project:
173
- rubygems_version: 2.2.2
177
+ rubygems_version: 2.0.3
174
178
  signing_key:
175
179
  specification_version: 4
176
- summary: Skylight is a ruby application monitoring tool. Currently in closed beta.
180
+ summary: Skylight is a smart profiler for Rails apps
177
181
  test_files: []
178
182
  has_rdoc: