cmetrics 0.2.1 → 0.2.5

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: 2886740550218bbb68b6248676ffefa606939d2c2f6fabb5043e9b08f2cb152f
4
- data.tar.gz: 4b73350710d2c56349fdb83af9e45565e4e38cffb62f48344f25244c27688cce
3
+ metadata.gz: 17d74002b1bf99b4f6be2b1b2ce5d79409da9305d7915e2006014f42c8c01429
4
+ data.tar.gz: 75fc26e6fa974c990f83fae2e16484b185bf00262713ac24d07e607e6d2a7095
5
5
  SHA512:
6
- metadata.gz: 0e93ebcde84cfd9c2835f68516891f6616c3c77785b789d195c3bf0fe2d5b384314c700f34413f640680da91190cbe16f03961f540dd326515647dc754237265
7
- data.tar.gz: b1c4c88fb1416047862f5d5027ce7c92bed28fe0e1172707fa3394af947cc320a64833ab9cbbcfa510ced7f14201ab4ea6b9958a16b5af9fd28a1be26bd00d98
6
+ metadata.gz: bd95645446f591377adfa1b4561a45bb22cc20446e60ebe577c13b4c67325cd9d1c9c87c3c215f786585853da71eb05449a37ace48339f12c2e3c422c69b68f4
7
+ data.tar.gz: 85ccdb531c1cb45df65b477352e1a9c555b105a6a658b5cea977e987123d92e05b827148b4ddc4e11e1f129413c602bacccd77da32e0ded9bee6e51a68e1e5d1
@@ -10,9 +10,9 @@ jobs:
10
10
  - name: Set up Ruby
11
11
  uses: ruby/setup-ruby@v1
12
12
  with:
13
- ruby-version: 3.0.1
13
+ ruby-version: '3.0'
14
14
  - name: Run the default task
15
15
  run: |
16
- gem install bundler -v 2.2.15
16
+ gem install bundler -v 2.2.26
17
17
  bundle install
18
18
  bundle exec rake
@@ -10,9 +10,9 @@ jobs:
10
10
  - name: Set up Ruby
11
11
  uses: ruby/setup-ruby@v1
12
12
  with:
13
- ruby-version: 3.0.1
13
+ ruby-version: '3.0'
14
14
  - name: Run the default task
15
15
  run: |
16
- gem install bundler -v 2.2.15
16
+ gem install bundler -v 2.2.26
17
17
  bundle install
18
18
  bundle exec rake
@@ -10,9 +10,9 @@ jobs:
10
10
  - name: Set up Ruby
11
11
  uses: ruby/setup-ruby@v1
12
12
  with:
13
- ruby-version: 3.0.1
13
+ ruby-version: '3.0'
14
14
  - name: Run the default task
15
15
  run: |
16
- gem install bundler -v 2.2.15
16
+ gem install bundler -v 2.2.26
17
17
  ridk exec bundle install
18
18
  ridk exec bundle exec rake
@@ -29,6 +29,7 @@ Gem::Specification.new do |spec|
29
29
  spec.add_development_dependency "rake", ">= 0"
30
30
  spec.add_development_dependency "rake-compiler", "~> 1.0"
31
31
  spec.add_development_dependency "rake-compiler-dock", "~> 1.0"
32
+ spec.add_development_dependency "msgpack", "~> 1.4.2"
32
33
 
33
34
  spec.add_dependency 'mini_portile2', '~> 2.7'
34
35
  end
@@ -65,5 +65,8 @@ void Init_cmetrics_counter(VALUE rb_mCMetrics);
65
65
  void Init_cmetrics_gauge(VALUE rb_mCMetrics);
66
66
  void Init_cmetrics_serde(VALUE rb_mCMetrics);
67
67
  void Init_cmetrics_untyped(VALUE rb_mCMetrics);
68
+ const struct CMetricsCounter *cmetrics_counter_get_ptr(VALUE rb_mCMetrics);
69
+ const struct CMetricsGauge *cmetrics_gauge_get_ptr(VALUE rb_mCMetrics);
70
+ const struct CMetricsUntyped *cmetrics_untyped_get_ptr(VALUE rb_mCMetrics);
68
71
 
69
72
  #endif // _CMETRICS_C_H
@@ -34,16 +34,32 @@ static const rb_data_type_t rb_cmetrics_counter_type = { "cmetrics/counter",
34
34
  RUBY_TYPED_FREE_IMMEDIATELY };
35
35
 
36
36
 
37
+ const struct CMetricsCounter *cmetrics_counter_get_ptr(VALUE self)
38
+ {
39
+ struct CMetricsCounter *cmetricsCounter = NULL;
40
+
41
+ TypedData_Get_Struct(
42
+ self, struct CMetricsCounter, &rb_cmetrics_counter_type, cmetricsCounter);
43
+
44
+ if (NIL_P(self)) {
45
+ rb_raise(rb_eRuntimeError, "Given CMetrics argument must not be nil");
46
+ }
47
+ if (!cmetricsCounter->counter) {
48
+ rb_raise(rb_eRuntimeError, "Create counter with CMetrics::Counter#create first.");
49
+ }
50
+ return cmetricsCounter;
51
+ }
52
+
37
53
  static void
38
54
  counter_free(void* ptr)
39
55
  {
40
56
  struct CMetricsCounter* cmetricsCounter = (struct CMetricsCounter*)ptr;
41
57
 
42
- if (!cmetricsCounter) {
43
- if (!cmetricsCounter->counter) {
58
+ if (cmetricsCounter) {
59
+ if (cmetricsCounter->counter) {
44
60
  cmt_counter_destroy(cmetricsCounter->counter);
45
61
  }
46
- if (!cmetricsCounter->instance) {
62
+ if (cmetricsCounter->instance) {
47
63
  cmt_destroy(cmetricsCounter->instance);
48
64
  }
49
65
  }
@@ -34,16 +34,32 @@ static const rb_data_type_t rb_cmetrics_gauge_type = { "cmetrics/gauge",
34
34
  RUBY_TYPED_FREE_IMMEDIATELY };
35
35
 
36
36
 
37
+ const struct CMetricsGauge *cmetrics_gauge_get_ptr(VALUE self)
38
+ {
39
+ struct CMetricsGauge *cmetricsGauge = NULL;
40
+
41
+ TypedData_Get_Struct(
42
+ self, struct CMetricsGauge, &rb_cmetrics_gauge_type, cmetricsGauge);
43
+
44
+ if (NIL_P(self)) {
45
+ rb_raise(rb_eRuntimeError, "Given CMetrics argument must not be nil");
46
+ }
47
+ if (!cmetricsGauge->gauge) {
48
+ rb_raise(rb_eRuntimeError, "Create gauge with CMetrics::Gauge#create first.");
49
+ }
50
+ return cmetricsGauge;
51
+ }
52
+
37
53
  static void
38
54
  gauge_free(void* ptr)
39
55
  {
40
56
  struct CMetricsGauge* cmetricsGauge = (struct CMetricsGauge*)ptr;
41
57
 
42
- if (!cmetricsGauge) {
43
- if (!cmetricsGauge->gauge) {
58
+ if (cmetricsGauge) {
59
+ if (cmetricsGauge->gauge) {
44
60
  cmt_gauge_destroy(cmetricsGauge->gauge);
45
61
  }
46
- if (!cmetricsGauge->instance) {
62
+ if (cmetricsGauge->instance) {
47
63
  cmt_destroy(cmetricsGauge->instance);
48
64
  }
49
65
  }
@@ -20,9 +20,15 @@
20
20
  #include "cmetrics_c.h"
21
21
  #include <cmetrics/cmt_map.h>
22
22
  #include <cmetrics/cmt_metric.h>
23
+ #include <cmetrics/cmt_cat.h>
24
+ #include <cmetrics/cmt_encode_prometheus_remote_write.h>
23
25
 
24
26
  VALUE rb_cSerde;
25
27
 
28
+ extern VALUE rb_cCounter;
29
+ extern VALUE rb_cGauge;
30
+ extern VALUE rb_cUntyped;
31
+
26
32
  static void serde_free(void* ptr);
27
33
 
28
34
  static const rb_data_type_t rb_cmetrics_serde_type = { "cmetrics/serde",
@@ -41,8 +47,8 @@ serde_free(void* ptr)
41
47
  {
42
48
  struct CMetricsSerde* cmetricsSerde = (struct CMetricsSerde*)ptr;
43
49
 
44
- if (!cmetricsSerde) {
45
- if (!cmetricsSerde->instance) {
50
+ if (cmetricsSerde) {
51
+ if (cmetricsSerde->instance) {
46
52
  cmt_destroy(cmetricsSerde->instance);
47
53
  }
48
54
  }
@@ -98,7 +104,7 @@ rb_cmetrics_serde_from_msgpack(int argc, VALUE *argv, VALUE self)
98
104
  rb_scan_args(argc, argv, "12", &rb_msgpack_buffer, &rb_msgpack_length, &rb_offset);
99
105
  if (!NIL_P(rb_msgpack_length)) {
100
106
  Check_Type(rb_msgpack_length, T_FIXNUM);
101
- msgpack_length = INT2NUM(rb_msgpack_length);
107
+ msgpack_length = ULONG2NUM(rb_msgpack_length);
102
108
  } else {
103
109
  msgpack_length = RSTRING_LEN(rb_msgpack_buffer);
104
110
  }
@@ -168,6 +174,64 @@ rb_cmetrics_serde_from_msgpack_feed_each(VALUE self, VALUE rb_data)
168
174
  }
169
175
  }
170
176
 
177
+ static VALUE
178
+ rb_cmetrics_serde_concat_metric(VALUE self, VALUE rb_data)
179
+ {
180
+ struct CMetricsSerde* cmetricsSerde = NULL;
181
+ struct CMetricsCounter* cmetricsCounter = NULL;
182
+ struct CMetricsGauge* cmetricsGauge = NULL;
183
+ struct CMetricsUntyped* cmetricsUntyped = NULL;
184
+
185
+ TypedData_Get_Struct(
186
+ self, struct CMetricsSerde, &rb_cmetrics_serde_type, cmetricsSerde);
187
+
188
+ if (!NIL_P(rb_data)) {
189
+ if (cmetricsSerde->instance == NULL) {
190
+ cmetricsSerde->instance = cmt_create();
191
+ }
192
+
193
+ if (rb_obj_is_kind_of(rb_data, rb_cCounter)) {
194
+ cmetricsCounter = (struct CMetricsCounter *)cmetrics_counter_get_ptr(rb_data);
195
+ cmt_cat(cmetricsSerde->instance, cmetricsCounter->instance);
196
+ } else if (rb_obj_is_kind_of(rb_data, rb_cGauge)) {
197
+ cmetricsGauge = (struct CMetricsGauge *)cmetrics_gauge_get_ptr(rb_data);
198
+ cmt_cat(cmetricsSerde->instance, cmetricsGauge->instance);
199
+ } else if (rb_obj_is_kind_of(rb_data, rb_cUntyped)) {
200
+ cmetricsUntyped = (struct CMetricsUntyped *)cmetrics_untyped_get_ptr(rb_data);
201
+ cmt_cat(cmetricsSerde->instance, cmetricsUntyped->instance);
202
+ } else {
203
+ rb_raise(rb_eArgError, "specified type of instance is not supported.");
204
+ }
205
+ } else {
206
+ rb_raise(rb_eArgError, "nil is not valid value for concatenating");
207
+ }
208
+
209
+ return Qnil;
210
+ }
211
+
212
+ static VALUE
213
+ rb_metrics_serde_prometheus_remote_write(VALUE self)
214
+ {
215
+ struct CMetricsSerde* cmetricsSerde;
216
+ cmt_sds_t prom;
217
+ VALUE str;
218
+
219
+ TypedData_Get_Struct(
220
+ self, struct CMetricsSerde, &rb_cmetrics_serde_type, cmetricsSerde);
221
+
222
+ if (cmetricsSerde->instance == NULL) {
223
+ rb_raise(rb_eRuntimeError, "Invalid cmt context");
224
+ }
225
+
226
+ prom = cmt_encode_prometheus_remote_write_create(cmetricsSerde->instance);
227
+
228
+ str = rb_str_new2(prom);
229
+
230
+ cmt_encode_prometheus_remote_write_destroy(prom);
231
+
232
+ return str;
233
+ }
234
+
171
235
  static VALUE
172
236
  rb_cmetrics_serde_to_prometheus(VALUE self)
173
237
  {
@@ -178,6 +242,10 @@ rb_cmetrics_serde_to_prometheus(VALUE self)
178
242
  TypedData_Get_Struct(
179
243
  self, struct CMetricsSerde, &rb_cmetrics_serde_type, cmetricsSerde);
180
244
 
245
+ if (cmetricsSerde->instance == NULL) {
246
+ rb_raise(rb_eRuntimeError, "Invalid cmt context");
247
+ }
248
+
181
249
  prom = cmt_encode_prometheus_create(cmetricsSerde->instance, CMT_TRUE);
182
250
 
183
251
  str = rb_str_new2(prom);
@@ -197,6 +265,10 @@ rb_cmetrics_serde_to_influx(VALUE self)
197
265
  TypedData_Get_Struct(
198
266
  self, struct CMetricsSerde, &rb_cmetrics_serde_type, cmetricsSerde);
199
267
 
268
+ if (cmetricsSerde->instance == NULL) {
269
+ rb_raise(rb_eRuntimeError, "Invalid cmt context");
270
+ }
271
+
200
272
  prom = cmt_encode_influx_create(cmetricsSerde->instance);
201
273
 
202
274
  str = rb_str_new2(prom);
@@ -216,6 +288,10 @@ rb_cmetrics_serde_to_msgpack(VALUE self)
216
288
  TypedData_Get_Struct(
217
289
  self, struct CMetricsSerde, &rb_cmetrics_serde_type, cmetricsSerde);
218
290
 
291
+ if (cmetricsSerde->instance == NULL) {
292
+ rb_raise(rb_eRuntimeError, "Invalid cmt context");
293
+ }
294
+
219
295
  ret = cmt_encode_msgpack_create(cmetricsSerde->instance, &buffer, &buffer_size);
220
296
 
221
297
  if (ret == 0) {
@@ -235,6 +311,10 @@ rb_cmetrics_serde_to_text(VALUE self)
235
311
  TypedData_Get_Struct(
236
312
  self, struct CMetricsSerde, &rb_cmetrics_serde_type, cmetricsSerde);
237
313
 
314
+ if (cmetricsSerde->instance == NULL) {
315
+ rb_raise(rb_eRuntimeError, "Invalid cmt context");
316
+ }
317
+
238
318
  buffer = cmt_encode_text_create(cmetricsSerde->instance);
239
319
  if (buffer == NULL) {
240
320
  return Qnil;
@@ -399,7 +479,9 @@ void Init_cmetrics_serde(VALUE rb_mCMetrics)
399
479
  rb_define_alloc_func(rb_cSerde, rb_cmetrics_serde_alloc);
400
480
 
401
481
  rb_define_method(rb_cSerde, "initialize", rb_cmetrics_serde_initialize, 0);
482
+ rb_define_method(rb_cSerde, "concat", rb_cmetrics_serde_concat_metric, 1);
402
483
  rb_define_method(rb_cSerde, "from_msgpack", rb_cmetrics_serde_from_msgpack, -1);
484
+ rb_define_method(rb_cSerde, "prometheus_remote_write", rb_metrics_serde_prometheus_remote_write, 0);
403
485
  rb_define_method(rb_cSerde, "to_prometheus", rb_cmetrics_serde_to_prometheus, 0);
404
486
  rb_define_method(rb_cSerde, "to_influx", rb_cmetrics_serde_to_influx, 0);
405
487
  rb_define_method(rb_cSerde, "to_msgpack", rb_cmetrics_serde_to_msgpack, 0);
@@ -34,16 +34,32 @@ static const rb_data_type_t rb_cmetrics_untyped_type = { "cmetrics/untyped",
34
34
  RUBY_TYPED_FREE_IMMEDIATELY };
35
35
 
36
36
 
37
+ const struct CMetricsUntyped *cmetrics_untyped_get_ptr(VALUE self)
38
+ {
39
+ struct CMetricsUntyped *cmetricsUntyped = NULL;
40
+
41
+ TypedData_Get_Struct(
42
+ self, struct CMetricsUntyped, &rb_cmetrics_untyped_type, cmetricsUntyped);
43
+
44
+ if (NIL_P(self)) {
45
+ rb_raise(rb_eRuntimeError, "Given CMetrics argument must not be nil");
46
+ }
47
+ if (!cmetricsUntyped->untyped) {
48
+ rb_raise(rb_eRuntimeError, "Create untyped with CMetrics::Untyped#create first.");
49
+ }
50
+ return cmetricsUntyped;
51
+ }
52
+
37
53
  static void
38
54
  untyped_free(void* ptr)
39
55
  {
40
56
  struct CMetricsUntyped* cmetricsUntyped = (struct CMetricsUntyped*)ptr;
41
57
 
42
- if (!cmetricsUntyped) {
43
- if (!cmetricsUntyped->untyped) {
58
+ if (cmetricsUntyped) {
59
+ if (cmetricsUntyped->untyped) {
44
60
  cmt_untyped_destroy(cmetricsUntyped->untyped);
45
61
  }
46
- if (!cmetricsUntyped->instance) {
62
+ if (cmetricsUntyped->instance) {
47
63
  cmt_destroy(cmetricsUntyped->instance);
48
64
  }
49
65
  }
@@ -46,7 +46,7 @@ class BuildCMetrics
46
46
  @recipe.target = File.join(ROOT, "ports")
47
47
  @recipe.files << {
48
48
  url: "https://codeload.github.com/calyptia/cmetrics/tar.gz/v#{version}",
49
- sha256sum: "f0c79707ad4d18980bf0d1d64ed8cb73a40c586c36a4caf38233ae8d9a4c6cc7",
49
+ sha256sum: "922965a3ccc5aeb9a423d9b82be06e7aaf37f2bc8736ad6e70ac1c8845155710",
50
50
  }
51
51
  end
52
52
 
@@ -70,7 +70,7 @@ class BuildCMetrics
70
70
  end
71
71
  end
72
72
 
73
- cmetrics = BuildCMetrics.new("0.2.1", cmake_command: determine_preferred_command("cmake3", "cmake"))
73
+ cmetrics = BuildCMetrics.new("0.2.2", cmake_command: determine_preferred_command("cmake3", "cmake"))
74
74
  cmetrics.build
75
75
 
76
76
  libdir = RbConfig::CONFIG["libdir"]
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CMetrics
4
- VERSION = "0.2.1"
4
+ VERSION = "0.2.5"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cmetrics
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hiroshi Hatake
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-09-01 00:00:00.000000000 Z
11
+ date: 2021-10-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '1.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: msgpack
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 1.4.2
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 1.4.2
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: mini_portile2
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -118,7 +132,7 @@ licenses:
118
132
  metadata:
119
133
  homepage_uri: https://github.com/calyptia/cmetrics-ruby
120
134
  changelog_uri: https://github.com/calyptia/cmetrics-ruby/blob/master/CHANGELOG.md
121
- post_install_message:
135
+ post_install_message:
122
136
  rdoc_options: []
123
137
  require_paths:
124
138
  - lib
@@ -134,7 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
148
  version: '0'
135
149
  requirements: []
136
150
  rubygems_version: 3.2.22
137
- signing_key:
151
+ signing_key:
138
152
  specification_version: 4
139
153
  summary: C binding for cmetric library.
140
154
  test_files: []