appsignal 3.0.12-java → 3.0.16-java

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f2f641f96c4fe0e4dfa58bc6893fd162f33a636257f2f2f880f6dd4be9584092
4
- data.tar.gz: a0fca3a053fb705072ff1f50c5f7a426fbae06cdea72f340b62b21a3ccd122d9
3
+ metadata.gz: 61a15fcd31446aaa4f813957c6480260938926b5aeaa737529e168bc79b5ea9b
4
+ data.tar.gz: 3a0f796a71985048fac24343f92a79d041069470280fb78f7a51121f934397b2
5
5
  SHA512:
6
- metadata.gz: 81ba4de4a545694826d50d75aecc1455f2c30aabbe2b1bb6ccc99166fb01f0c74947dabbd725baf81b254c5a73c2abc4292ad507a6b7db51f0edfe3253b57713
7
- data.tar.gz: 26fb17f939f7358c7f8ad7beaa748750bbc7ed973a38ae9b09ba8a973adc64d834d55e82a71acf439f438d8821c8b2566b18886b5e9e9a4fe8451a5891b21cfe
6
+ metadata.gz: 9e4764dab62e7dcb8e166d29c9b2264e47cd9285abc2b06affa8898232fa6f9ef3e734de67e3a361b01bb981acec1fdfcde4ec945162a583572a8834c68f23a6
7
+ data.tar.gz: 74d11d47c32a02ffdc5da5f42aaed1c113188bb780123304492516c4aecf0b1f14fb65b8c2a3dc711dc0dd43892598b960c3a4f1b61ccbe55cc1b979ac0e8ce1
@@ -11,7 +11,7 @@ agent:
11
11
  os_image: ubuntu1804
12
12
  auto_cancel:
13
13
  running:
14
- when: branch != 'main' AND branch != 'develop' AND branch != 'diagnose-testing'
14
+ when: branch != 'main' AND branch != 'develop'
15
15
  global_job_config:
16
16
  env_vars:
17
17
  - name: RUNNING_IN_CI
@@ -95,12 +95,8 @@ blocks:
95
95
  task:
96
96
  jobs:
97
97
  - name: Git Lint (Lintje)
98
- env_vars:
99
- - name: LINTJE_VERSION
100
- value: 0.3.0
101
98
  commands:
102
- - script/install_lintje
103
- - "$HOME/bin/lintje $SEMAPHORE_GIT_COMMIT_RANGE"
99
+ - script/lint_git
104
100
  - name: Integration tests
105
101
  dependencies:
106
102
  - Validation
@@ -117,7 +113,7 @@ blocks:
117
113
  - name: Diagnose
118
114
  env_vars:
119
115
  - name: RUBY_VERSION
120
- value: 2.6.6
116
+ value: 3.0.2
121
117
  - name: LANGUAGE
122
118
  value: ruby
123
119
  commands:
data/CHANGELOG.md CHANGED
@@ -1,5 +1,66 @@
1
1
  # AppSignal for Ruby gem Changelog
2
2
 
3
+ ## 3.0.16
4
+
5
+ ### Added
6
+
7
+ - [fe226e99](https://github.com/appsignal/appsignal-ruby/commit/fe226e99f262bfa46e7a7630defe2fe90f8a3a13) patch - Add experimental Span API. This is not loaded by default and we do not recommend using it yet.
8
+ - [84b1ba18](https://github.com/appsignal/appsignal-ruby/commit/84b1ba18e50440e5c71d27319e560c5df180d0df) patch - Add "log_level" config option. This new option allows you to define the kind of messages
9
+ AppSignal's will log and up. The "debug" option will log all "debug", "info", "warning" and
10
+ "error" log messages. The default value is: "info"
11
+
12
+ The allowed values are:
13
+ - error
14
+ - warning
15
+ - info
16
+ - debug
17
+ - [6b2ecca2](https://github.com/appsignal/appsignal-ruby/commit/6b2ecca24603061f1b35800f60b0ee6e9f314998) patch - Clean up index values in error messages from PG index violation errors.
18
+
19
+ ### Changed
20
+
21
+ - [25bde454](https://github.com/appsignal/appsignal-ruby/commit/25bde454f82776f8d2ea1fd4dbb00a73e414076e) patch - Order the config options alphabetically in diagnose report output.
22
+ - [fe226e99](https://github.com/appsignal/appsignal-ruby/commit/fe226e99f262bfa46e7a7630defe2fe90f8a3a13) patch - Use the `filter_parameters` and `filter_session_data` options to filter out specific parameter keys or session data keys for the experimental Span API. Previously only the (undocumented) `filter_data_keys` config option was available to filter out all kinds of app data.
23
+ - [fe226e99](https://github.com/appsignal/appsignal-ruby/commit/fe226e99f262bfa46e7a7630defe2fe90f8a3a13) patch - Standardize diagnose validation failure message. Explain the diagnose request failed and why.
24
+ - [fe226e99](https://github.com/appsignal/appsignal-ruby/commit/fe226e99f262bfa46e7a7630defe2fe90f8a3a13) patch - Bump agent to v-5b63505
25
+
26
+ - Only filter parameters with the `filter_parameters` config option.
27
+ - Only filter session data with the `filter_session_data` config option.
28
+ - [3ad95ea5](https://github.com/appsignal/appsignal-ruby/commit/3ad95ea5dd8a9488d293a652231950bd4a721e6c) patch - Bump agent to v-0db01c2
29
+
30
+ - Add `log_level` config option in extension.
31
+ - Deprecate `debug` and `transaction_debug_mode` option in extension.
32
+
33
+ ### Deprecated
34
+
35
+ - [84b1ba18](https://github.com/appsignal/appsignal-ruby/commit/84b1ba18e50440e5c71d27319e560c5df180d0df) patch - Deprecate "debug" and "transaction_debug_mode" config options in favor of the new "log_level"
36
+ config option.
37
+
38
+ ## 3.0.15
39
+
40
+ - [b40b3b4f](https://github.com/appsignal/appsignal-ruby/commit/b40b3b4f5264c6b69f9515b53806435258c73086) patch - Print String values in the diagnose report surrounded by quotes. Makes it more clear that it's a String value and not a label we print.
41
+ - [fd6faf16](https://github.com/appsignal/appsignal-ruby/commit/fd6faf16d9feb73c3076c2e1283f6101dc4abf97) patch - Bump agent to 09308fb
42
+
43
+ - Update sql_lexer dependency with support for reversed operators in queries.
44
+ - Add debug level logging to custom metrics in transaction_debug_mode.
45
+ - Add hostname config option to standalone agent.
46
+
47
+ ## 3.0.14
48
+
49
+ - [c40f6d75](https://github.com/appsignal/appsignal-ruby/commit/c40f6d759e8d516cc47bd55cc83bfcb680fbd1ea) patch - Add minutely probe that collects metrics for :class_serial and :global_constant_state from RubyVM.
50
+ - [7c18fb6d](https://github.com/appsignal/appsignal-ruby/commit/7c18fb6db0c72f32adb6803ccde957963977008a) patch - Bump agent to 7376537
51
+
52
+ - Support JSON PostgreSQL operator in sql_lexer.
53
+ - Do not strip comments from SQL queries.
54
+ - [8d7b80ea](https://github.com/appsignal/appsignal-ruby/commit/8d7b80eafc203c295db037f2547f74a2f217f93f) patch - Add configuration option for the AppSignal agent StatsD server. This is on by default, but you can disable it with `enable_statsd: false`.
55
+
56
+ ## 3.0.13
57
+
58
+ - [5c202185](https://github.com/appsignal/appsignal-ruby/commit/5c20218526e026ab436854508ccfe26ca55e8f15) patch - Bump agent to v-0318770.
59
+
60
+ - Improve Dokku platform detection. Do not disable host metrics on
61
+ Dokku.
62
+ - Report CPU steal metric.
63
+
3
64
  ## 3.0.12
4
65
 
5
66
  - [7f3af841](https://github.com/appsignal/appsignal-ruby/commit/7f3af8418f830a7384c10b309e1aeb8ee32c5742) patch - Bump agent to 0f40689
data/build_matrix.yml CHANGED
@@ -11,7 +11,7 @@ semaphore: # Default `.semaphore/semaphore.yml` contents
11
11
  auto_cancel:
12
12
  running:
13
13
  # Ignore main AND develop branch as we want it to build all workflows
14
- when: "branch != 'main' AND branch != 'develop' AND branch != 'diagnose-testing'"
14
+ when: "branch != 'main' AND branch != 'develop'"
15
15
 
16
16
  global_job_config:
17
17
  env_vars:
@@ -93,12 +93,8 @@ semaphore: # Default `.semaphore/semaphore.yml` contents
93
93
  task:
94
94
  jobs:
95
95
  - name: Git Lint (Lintje)
96
- env_vars:
97
- - name: LINTJE_VERSION
98
- value: 0.3.0
99
96
  commands:
100
- - script/install_lintje
101
- - $HOME/bin/lintje $SEMAPHORE_GIT_COMMIT_RANGE
97
+ - script/lint_git
102
98
  - name: Integration tests
103
99
  dependencies:
104
100
  - Validation
@@ -115,7 +111,7 @@ semaphore: # Default `.semaphore/semaphore.yml` contents
115
111
  - name: Diagnose
116
112
  env_vars:
117
113
  - name: RUBY_VERSION
118
- value: 2.6.6
114
+ value: 3.0.2
119
115
  - name: LANGUAGE
120
116
  value: ruby
121
117
  commands:
data/ext/agent.yml CHANGED
@@ -1,90 +1,94 @@
1
+ # DO NOT EDIT
2
+ # This is a generated file by the `rake ship` family of tasks in the
3
+ # appsignal-agent repository.
4
+ # Modifications to this file will be overwritten with the next agent release.
1
5
  ---
2
- version: 0f40689
6
+ version: 0db01c2
3
7
  mirrors:
4
8
  - https://appsignal-agent-releases.global.ssl.fastly.net
5
9
  - https://d135dj0rjqvssy.cloudfront.net
6
10
  triples:
7
11
  x86_64-darwin:
8
12
  static:
9
- checksum: a2b46f8b5446a95878a023e1f5a0b8aaefc04f3fdd14875edc6cd0ae0c1bc6ca
13
+ checksum: 8a7cf35f8c9aa98e7778b720f33b38bfbdedcdedb0047035259ab187517be971
10
14
  filename: appsignal-x86_64-darwin-all-static.tar.gz
11
15
  dynamic:
12
- checksum: 31f41eb83504dd015f134a71f280d5d9d540b7b1790f8bbaa14970a8c29b8e0d
16
+ checksum: 4330f83a44db6f092b3f437d942204e9bf7f7022ae2cc24ade4e7b4137905d03
13
17
  filename: appsignal-x86_64-darwin-all-dynamic.tar.gz
14
18
  universal-darwin:
15
19
  static:
16
- checksum: a2b46f8b5446a95878a023e1f5a0b8aaefc04f3fdd14875edc6cd0ae0c1bc6ca
20
+ checksum: 8a7cf35f8c9aa98e7778b720f33b38bfbdedcdedb0047035259ab187517be971
17
21
  filename: appsignal-x86_64-darwin-all-static.tar.gz
18
22
  dynamic:
19
- checksum: 31f41eb83504dd015f134a71f280d5d9d540b7b1790f8bbaa14970a8c29b8e0d
23
+ checksum: 4330f83a44db6f092b3f437d942204e9bf7f7022ae2cc24ade4e7b4137905d03
20
24
  filename: appsignal-x86_64-darwin-all-dynamic.tar.gz
21
25
  aarch64-darwin:
22
26
  static:
23
- checksum: f5dced4eb1064cfe3a080164859bdb5cb7dc316c95c8ca606fb4dd3dae441020
27
+ checksum: a22cd07e656f194dd1921983be6507816b60c79bc0c4623d2cac5c88fda9d407
24
28
  filename: appsignal-aarch64-darwin-all-static.tar.gz
25
29
  dynamic:
26
- checksum: 0341cf25dd91c4ae81b1621aab6eacf3e0d7cd0c21994dfd07f2c6195109136e
30
+ checksum: 0535e4506ccd2230dfa59fee5ba00ec6d3a2ff67693bf1b622e7a454fc1a5851
27
31
  filename: appsignal-aarch64-darwin-all-dynamic.tar.gz
28
32
  arm64-darwin:
29
33
  static:
30
- checksum: f5dced4eb1064cfe3a080164859bdb5cb7dc316c95c8ca606fb4dd3dae441020
34
+ checksum: a22cd07e656f194dd1921983be6507816b60c79bc0c4623d2cac5c88fda9d407
31
35
  filename: appsignal-aarch64-darwin-all-static.tar.gz
32
36
  dynamic:
33
- checksum: 0341cf25dd91c4ae81b1621aab6eacf3e0d7cd0c21994dfd07f2c6195109136e
37
+ checksum: 0535e4506ccd2230dfa59fee5ba00ec6d3a2ff67693bf1b622e7a454fc1a5851
34
38
  filename: appsignal-aarch64-darwin-all-dynamic.tar.gz
35
39
  arm-darwin:
36
40
  static:
37
- checksum: f5dced4eb1064cfe3a080164859bdb5cb7dc316c95c8ca606fb4dd3dae441020
41
+ checksum: a22cd07e656f194dd1921983be6507816b60c79bc0c4623d2cac5c88fda9d407
38
42
  filename: appsignal-aarch64-darwin-all-static.tar.gz
39
43
  dynamic:
40
- checksum: 0341cf25dd91c4ae81b1621aab6eacf3e0d7cd0c21994dfd07f2c6195109136e
44
+ checksum: 0535e4506ccd2230dfa59fee5ba00ec6d3a2ff67693bf1b622e7a454fc1a5851
41
45
  filename: appsignal-aarch64-darwin-all-dynamic.tar.gz
42
46
  aarch64-linux:
43
47
  static:
44
- checksum: db2242050c5b99a6eb6aaafbb571f65e4a5ac08a08c25a009f992d8240864b27
48
+ checksum: edf43f1a6b340c0afa07c7b71963def9bb68bd8d62d17cb64a7f7a36f84a4517
45
49
  filename: appsignal-aarch64-linux-all-static.tar.gz
46
50
  dynamic:
47
- checksum: eb5a1659e7bc24d9a0888c248f6d40454663b6889952364c3f49b49965a62d45
51
+ checksum: 8390561e1a41e4b8bba8e4f92b9b49f957650eca21d281589143b9c3764f504e
48
52
  filename: appsignal-aarch64-linux-all-dynamic.tar.gz
49
53
  i686-linux:
50
54
  static:
51
- checksum: 6f952674ef7c0d7444c69991619e75bd244232b009617491d09b3f58a2939c9a
55
+ checksum: 4179334f88dc32e00ce62aa196b3e47b4258b12ec48dd3cf722d4f6eeb4dc2c0
52
56
  filename: appsignal-i686-linux-all-static.tar.gz
53
57
  dynamic:
54
- checksum: 222d86e552f954c006d32f27dd99e833b4e691df5dd7292b1d106a25ed9eec06
58
+ checksum: 7c6bcc88e5d218c1986d1a9f1c9ad728c72e68a440656b2e9228d432ba300f86
55
59
  filename: appsignal-i686-linux-all-dynamic.tar.gz
56
60
  x86-linux:
57
61
  static:
58
- checksum: 6f952674ef7c0d7444c69991619e75bd244232b009617491d09b3f58a2939c9a
62
+ checksum: 4179334f88dc32e00ce62aa196b3e47b4258b12ec48dd3cf722d4f6eeb4dc2c0
59
63
  filename: appsignal-i686-linux-all-static.tar.gz
60
64
  dynamic:
61
- checksum: 222d86e552f954c006d32f27dd99e833b4e691df5dd7292b1d106a25ed9eec06
65
+ checksum: 7c6bcc88e5d218c1986d1a9f1c9ad728c72e68a440656b2e9228d432ba300f86
62
66
  filename: appsignal-i686-linux-all-dynamic.tar.gz
63
67
  x86_64-linux:
64
68
  static:
65
- checksum: 85a719387ea6052f50396f932d924efb8b572face63d9f3610c72aeeb4c75e9e
69
+ checksum: d602823277cac752bdea742d928112cef457bc61ee05b960b316fc052f0cc714
66
70
  filename: appsignal-x86_64-linux-all-static.tar.gz
67
71
  dynamic:
68
- checksum: 29a3e258535cc13fa4aa715c99e2d17687c5ddaeb6cc4f33dddbd6578a571bee
72
+ checksum: 2e9e955672dec266b408770638c0503a072410e03526b1eef2170326b083a42f
69
73
  filename: appsignal-x86_64-linux-all-dynamic.tar.gz
70
74
  x86_64-linux-musl:
71
75
  static:
72
- checksum: 221add79e8216bf21c98af54c6eb0010c7b0cc77e7f8690e260c6d8e0e8d763d
76
+ checksum: dfbdff116339b99613fff6ed4092b772e58f0d3e667b7de347b4215fb7ea9d62
73
77
  filename: appsignal-x86_64-linux-musl-all-static.tar.gz
74
78
  dynamic:
75
- checksum: 719d4901a06e78df0dd34150da82bc448f559718ca9d17eb433710c3eff3a212
79
+ checksum: 560835ec657b471d50c765a932385cd0e3b6bdca54d2a5e28b4203e43869cf3d
76
80
  filename: appsignal-x86_64-linux-musl-all-dynamic.tar.gz
77
81
  x86_64-freebsd:
78
82
  static:
79
- checksum: 5d28a24eecc59cab62ecfce460ac83a4f783556efe060dccc740c5c651edb728
83
+ checksum: e31a7d89798193857247bd3590a554782fcff64b65d3da86d9c451d3147e961a
80
84
  filename: appsignal-x86_64-freebsd-all-static.tar.gz
81
85
  dynamic:
82
- checksum: ac6b920d6046fdd6fec8820aa423113fd8f3342bbd54fb95dc81b2ecd855ce31
86
+ checksum: e7f007cc385a23977ca93b58439dc720d703b7cc5929ef52a7acd59f74703b92
83
87
  filename: appsignal-x86_64-freebsd-all-dynamic.tar.gz
84
88
  amd64-freebsd:
85
89
  static:
86
- checksum: 5d28a24eecc59cab62ecfce460ac83a4f783556efe060dccc740c5c651edb728
90
+ checksum: e31a7d89798193857247bd3590a554782fcff64b65d3da86d9c451d3147e961a
87
91
  filename: appsignal-x86_64-freebsd-all-static.tar.gz
88
92
  dynamic:
89
- checksum: ac6b920d6046fdd6fec8820aa423113fd8f3342bbd54fb95dc81b2ecd855ce31
93
+ checksum: e7f007cc385a23977ca93b58439dc720d703b7cc5929ef52a7acd59f74703b92
90
94
  filename: appsignal-x86_64-freebsd-all-dynamic.tar.gz
@@ -19,6 +19,7 @@ VALUE Appsignal;
19
19
  VALUE Extension;
20
20
  VALUE Transaction;
21
21
  VALUE Data;
22
+ VALUE Span;
22
23
 
23
24
  static VALUE start(VALUE self) {
24
25
  appsignal_start();
@@ -545,6 +546,180 @@ static VALUE data_to_s(VALUE self) {
545
546
  }
546
547
  }
547
548
 
549
+ static VALUE root_span_new(VALUE self, VALUE namespace) {
550
+ appsignal_span_t* span;
551
+
552
+ Check_Type(namespace, T_STRING);
553
+
554
+ span = appsignal_create_root_span(make_appsignal_string(namespace));
555
+
556
+ if (span) {
557
+ return Data_Wrap_Struct(Span, NULL, appsignal_free_span, span);
558
+ } else {
559
+ return Qnil;
560
+ }
561
+ }
562
+
563
+ static VALUE child_span_new(VALUE self) {
564
+ appsignal_span_t* parent;
565
+ appsignal_span_t* span;
566
+
567
+ Data_Get_Struct(self, appsignal_span_t, parent);
568
+
569
+ span = appsignal_create_child_span(parent);
570
+
571
+ if (span) {
572
+ return Data_Wrap_Struct(Span, NULL, appsignal_free_span, span);
573
+ } else {
574
+ return Qnil;
575
+ }
576
+ }
577
+
578
+ static VALUE set_span_name(VALUE self, VALUE name) {
579
+ appsignal_span_t* span;
580
+
581
+ Check_Type(name, T_STRING);
582
+
583
+ Data_Get_Struct(self, appsignal_span_t, span);
584
+
585
+ appsignal_set_span_name(span, make_appsignal_string(name));
586
+ return Qnil;
587
+ }
588
+
589
+ static VALUE add_span_error(VALUE self, VALUE name, VALUE message, VALUE backtrace) {
590
+ appsignal_span_t* span;
591
+ appsignal_data_t* backtrace_data;
592
+
593
+ Check_Type(name, T_STRING);
594
+ Check_Type(message, T_STRING);
595
+ Check_Type(backtrace, RUBY_T_DATA);
596
+
597
+ Data_Get_Struct(self, appsignal_span_t, span);
598
+ Data_Get_Struct(backtrace, appsignal_data_t, backtrace_data);
599
+
600
+ appsignal_add_span_error(
601
+ span,
602
+ make_appsignal_string(name),
603
+ make_appsignal_string(message),
604
+ backtrace_data
605
+ );
606
+ return Qnil;
607
+ }
608
+
609
+ static VALUE set_span_sample_data(VALUE self, VALUE key, VALUE payload) {
610
+ appsignal_span_t* span;
611
+ appsignal_data_t* payload_data;
612
+
613
+ Check_Type(key, T_STRING);
614
+ Check_Type(payload, RUBY_T_DATA);
615
+
616
+ Data_Get_Struct(self, appsignal_span_t, span);
617
+ Data_Get_Struct(payload, appsignal_data_t, payload_data);
618
+
619
+ appsignal_set_span_sample_data(
620
+ span,
621
+ make_appsignal_string(key),
622
+ payload_data
623
+ );
624
+ return Qnil;
625
+ }
626
+
627
+ static VALUE set_span_attribute_string(VALUE self, VALUE key, VALUE value) {
628
+ appsignal_span_t* span;
629
+
630
+ Check_Type(key, T_STRING);
631
+ Check_Type(value, T_STRING);
632
+
633
+ Data_Get_Struct(self, appsignal_span_t, span);
634
+
635
+ appsignal_set_span_attribute_string(
636
+ span,
637
+ make_appsignal_string(key),
638
+ make_appsignal_string(value)
639
+ );
640
+
641
+ return Qnil;
642
+ }
643
+
644
+ static VALUE set_span_attribute_int(VALUE self, VALUE key, VALUE value) {
645
+ appsignal_span_t* span;
646
+ VALUE value_type = TYPE(value);
647
+
648
+ Check_Type(key, T_STRING);
649
+
650
+ if (value_type != T_FIXNUM && value_type != T_BIGNUM) {
651
+ rb_raise(rb_eTypeError, "wrong argument type %s (expected Integer)", rb_obj_classname(value));
652
+ }
653
+
654
+ Data_Get_Struct(self, appsignal_span_t, span);
655
+
656
+ appsignal_set_span_attribute_int(
657
+ span,
658
+ make_appsignal_string(key),
659
+ NUM2LONG(value)
660
+ );
661
+
662
+ return Qnil;
663
+ }
664
+
665
+ static VALUE set_span_attribute_bool(VALUE self, VALUE key, VALUE value) {
666
+ appsignal_span_t* span;
667
+
668
+ Check_Type(key, T_STRING);
669
+
670
+ Data_Get_Struct(self, appsignal_span_t, span);
671
+
672
+ appsignal_set_span_attribute_bool(
673
+ span,
674
+ make_appsignal_string(key),
675
+ RTEST(value)
676
+ );
677
+
678
+ return Qnil;
679
+ }
680
+
681
+ static VALUE set_span_attribute_double(VALUE self, VALUE key, VALUE value) {
682
+ appsignal_span_t* span;
683
+
684
+ Check_Type(key, T_STRING);
685
+ Check_Type(value, T_FLOAT);
686
+
687
+ Data_Get_Struct(self, appsignal_span_t, span);
688
+
689
+ appsignal_set_span_attribute_double(
690
+ span,
691
+ make_appsignal_string(key),
692
+ NUM2DBL(value)
693
+ );
694
+
695
+ return Qnil;
696
+ }
697
+
698
+ static VALUE span_to_json(VALUE self) {
699
+ appsignal_span_t* span;
700
+ appsignal_string_t json;
701
+
702
+ Data_Get_Struct(self, appsignal_span_t, span);
703
+
704
+ json = appsignal_span_to_json(span);
705
+
706
+ if (json.len == 0) {
707
+ return Qnil;
708
+ } else {
709
+ return make_ruby_string(json);
710
+ }
711
+ }
712
+
713
+ static VALUE close_span(VALUE self) {
714
+ appsignal_span_t* span;
715
+
716
+ Data_Get_Struct(self, appsignal_span_t, span);
717
+
718
+ appsignal_close_span(span);
719
+
720
+ return Qnil;
721
+ }
722
+
548
723
  static VALUE set_gauge(VALUE self, VALUE key, VALUE value, VALUE tags) {
549
724
  appsignal_data_t* tags_data;
550
725
 
@@ -652,6 +827,7 @@ void Init_appsignal_extension(void) {
652
827
  Extension = rb_define_class_under(Appsignal, "Extension", rb_cObject);
653
828
  Transaction = rb_define_class_under(Extension, "Transaction", rb_cObject);
654
829
  Data = rb_define_class_under(Extension, "Data", rb_cObject);
830
+ Span = rb_define_class_under(Extension, "Span", rb_cObject);
655
831
 
656
832
  // Starting and stopping
657
833
  rb_define_singleton_method(Extension, "start", start, 0);
@@ -705,6 +881,31 @@ void Init_appsignal_extension(void) {
705
881
  // Get JSON content of a data
706
882
  rb_define_method(Data, "to_s", data_to_s, 0);
707
883
 
884
+ // Create a span
885
+ rb_define_singleton_method(Span, "root", root_span_new, 1);
886
+ rb_define_method(Span, "child", child_span_new, 0);
887
+
888
+ // Set span error
889
+ rb_define_method(Span, "add_error", add_span_error, 3);
890
+
891
+ // Set span sample data
892
+ rb_define_method(Span, "set_sample_data", set_span_sample_data, 2);
893
+
894
+ // Span name and namespace
895
+ rb_define_method(Span, "set_name", set_span_name, 1);
896
+
897
+ // Set attributes on a span
898
+ rb_define_method(Span, "set_attribute_string", set_span_attribute_string, 2);
899
+ rb_define_method(Span, "set_attribute_int", set_span_attribute_int, 2);
900
+ rb_define_method(Span, "set_attribute_bool", set_span_attribute_bool, 2);
901
+ rb_define_method(Span, "set_attribute_double", set_span_attribute_double, 2);
902
+
903
+ // Span to json
904
+ rb_define_method(Span, "to_json", span_to_json, 0);
905
+
906
+ // Close span
907
+ rb_define_method(Span, "close", close_span, 0);
908
+
708
909
  // Other helper methods
709
910
  rb_define_singleton_method(Extension, "install_allocation_event_hook", install_allocation_event_hook, 0);
710
911
  rb_define_singleton_method(Extension, "running_in_container?", running_in_container, 0);