appsignal 3.0.12 → 3.0.16

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
  SHA256:
3
- metadata.gz: 973a1a70de140abf941861a75363da01cde2d8f3b681a6310002932d8d06dae6
4
- data.tar.gz: a0fca3a053fb705072ff1f50c5f7a426fbae06cdea72f340b62b21a3ccd122d9
3
+ metadata.gz: c328cc2792e823cfde99017052cb090d704c9e919aa9dd826343518616df0e48
4
+ data.tar.gz: 3a0f796a71985048fac24343f92a79d041069470280fb78f7a51121f934397b2
5
5
  SHA512:
6
- metadata.gz: 24bcccb873bf3813244b7bdd079b2c27043225617e074c4c64576557cf7059e00a84c7e5c6454873844312c2f877843a598cfb253a138e6375c1bd9d5fc2896f
7
- data.tar.gz: 26fb17f939f7358c7f8ad7beaa748750bbc7ed973a38ae9b09ba8a973adc64d834d55e82a71acf439f438d8821c8b2566b18886b5e9e9a4fe8451a5891b21cfe
6
+ metadata.gz: 80db72cdb0f313e0f1adf92e70e9ea44974d537bf8ad396b238135541b2fbb0ab84527722825fde4915a5d640ba73f94fff52e2eaea367decabe8276733f5c99
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);