cmetrics 0.1.8 → 0.2.2

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: f1dbbff3db2b8ab48525d50430ae0996558ecb1ece4f939a91a22b883b37e996
4
- data.tar.gz: 1b940e1b8d6b008b7eac4bedd2ea7bc0607b3d7d000e10eaddb772e69fdc4be0
3
+ metadata.gz: '0861b3f6da8c48f905bfda1d4ab062153ac3afcca89daa7d4b74395758fa07ac'
4
+ data.tar.gz: 605435619199540b2637832786af4c8edaac0d18a702891047c8b28b7a62744f
5
5
  SHA512:
6
- metadata.gz: fa5335b809cd35aed0ece8c7b551b016d62ab5af6739124e4fd151dfa79ab1593326c27813311828cd92950e02cc41d4924e9f4da380459f9dc8ee828044a3fb
7
- data.tar.gz: a395971b303280ca1586fab5f190f55857eaa9b1ece6650fc92c003a7231c4af926dcfab7c887e4f39241950a7163bde82ba248164340e465aeab4ccf1b4cf87
6
+ metadata.gz: b0a3bf5de417bca85837acb7ca2c0eaa935402cbe8e38bafea45c87d9e9f81963cf46d27978374cd82532bc23a4403a66e454fdec30c6baf025cdc6e172675c0
7
+ data.tar.gz: cb41b8752fa5688f9856fbf57365851a9902d6a99453d2b3488e9ef6bef9c859e3b597ef3ffeb387d35032518270735153f3ac6e9bba2effad87c2fa987ae896
@@ -0,0 +1,39 @@
1
+ name: Apt based Linux
2
+ on:
3
+ push:
4
+ pull_request:
5
+ jobs:
6
+ build:
7
+ name: Build
8
+ strategy:
9
+ fail-fast: false
10
+ matrix:
11
+ label:
12
+ - Debian GNU/Linux Bullseye amd64
13
+ - Debian GNU/Linux Buster amd64
14
+ - Ubuntu Bionic amd64
15
+ - Ubuntu Focal amd64
16
+ include:
17
+ - label: Debian GNU/Linux Bullseye amd64
18
+ test-docker-image: debian:bullseye
19
+ test-script: ci/apt-test.sh
20
+ - label: Debian GNU/Linux Buster amd64
21
+ test-docker-image: debian:buster
22
+ test-script: ci/apt-test.sh
23
+ - label: Ubuntu Bionic amd64
24
+ test-docker-image: ubuntu:bionic
25
+ test-script: ci/apt-test.sh
26
+ - label: Ubuntu Focal amd64
27
+ test-docker-image: ubuntu:focal
28
+ test-script: ci/apt-test.sh
29
+ runs-on: ubuntu-latest
30
+ steps:
31
+ - uses: actions/checkout@master
32
+ - name: rake compile & rake test
33
+ run: |
34
+ docker run \
35
+ --rm \
36
+ --tty \
37
+ --volume ${PWD}:/cmetrics-ruby \
38
+ ${{ matrix.test-docker-image }} \
39
+ /cmetrics-ruby/${{ matrix.test-script }}
@@ -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
@@ -0,0 +1,39 @@
1
+ name: Yum based Linux
2
+ on:
3
+ push:
4
+ pull_request:
5
+ jobs:
6
+ build:
7
+ name: Build
8
+ strategy:
9
+ fail-fast: false
10
+ matrix:
11
+ label:
12
+ - CentOS 7 x86_64
13
+ - CentOS 8 x86_64
14
+ - Fedora 34 x86_64
15
+ - AmazonLinux 2 x86_64
16
+ include:
17
+ - label: CentOS 7 x86_64
18
+ test-docker-image: centos:7
19
+ test-script: ci/yum-test.sh
20
+ - label: CentOS 8 x86_64
21
+ test-docker-image: centos:8
22
+ test-script: ci/yum-test.sh
23
+ - label: Fedora 34 x86_64
24
+ test-docker-image: fedora:34
25
+ test-script: ci/yum-test.sh
26
+ - label: AmazonLinux 2 x86_64
27
+ test-docker-image: amazonlinux:2
28
+ test-script: ci/yum-test.sh
29
+ runs-on: ubuntu-latest
30
+ steps:
31
+ - uses: actions/checkout@master
32
+ - name: rake compile & rake test
33
+ run: |
34
+ docker run \
35
+ --rm \
36
+ --tty \
37
+ --volume ${PWD}:/cmetrics-ruby \
38
+ ${{ matrix.test-docker-image }} \
39
+ /cmetrics-ruby/${{ matrix.test-script }}
data/Gemfile CHANGED
@@ -7,4 +7,10 @@ gemspec
7
7
 
8
8
  gem "rake", "~> 13.0"
9
9
 
10
- gem "test-unit", "~> 3.0"
10
+ gem "test-unit", "~> 3.4"
11
+
12
+ local_gemfile = File.join(File.dirname(__FILE__), "Gemfile.local")
13
+ if File.exist?(local_gemfile)
14
+ puts "Loading Gemfile.local ..." if $DEBUG # `ruby -d` or `bundle -v`
15
+ instance_eval File.read(local_gemfile)
16
+ end
data/ci/apt-test.sh ADDED
@@ -0,0 +1,40 @@
1
+ #!/bin/bash
2
+
3
+ set -exu
4
+
5
+ export DEBIAN_FRONTEND=noninteractive
6
+
7
+ if [ -f /etc/lsb-release ]; then
8
+ . /etc/lsb-release
9
+ distribution=$DISTRIB_ID
10
+ version=${DISTRIB_RELEASE%%.*}
11
+ codename=${DISTRIB_CODENAME%%.*}
12
+ else
13
+ distribution="Debian"
14
+ version=$(cat /etc/debian_version | cut -d'.' -f1)
15
+ fi
16
+
17
+ apt update
18
+
19
+ case "$distribution" in
20
+ "Ubuntu")
21
+ case "$codename" in
22
+ "bionic")
23
+ apt install -V -y wget gpg
24
+ wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null && \
25
+ echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ bionic main' | tee /etc/apt/sources.list.d/kitware.list >/dev/null && \
26
+ apt update
27
+ ;;
28
+ *)
29
+ ;;
30
+ esac
31
+ ;;
32
+ esac
33
+
34
+ apt install -V -y lsb-release
35
+
36
+ apt install -V -y ruby-dev git build-essential pkg-config cmake
37
+ cd /cmetrics-ruby && \
38
+ gem install bundler --no-document && \
39
+ bundle install && \
40
+ bundle exec rake
data/ci/yum-test.sh ADDED
@@ -0,0 +1,77 @@
1
+ #!/bin/bash
2
+
3
+ set -exu
4
+
5
+ USE_SCL=0
6
+ USE_AMZN_EXT=0
7
+
8
+ distribution=$(cat /etc/system-release-cpe | awk '{print substr($0, index($1, "o"))}' | cut -d: -f2)
9
+ version=$(cat /etc/system-release-cpe | awk '{print substr($0, index($1, "o"))}' | cut -d: -f4)
10
+ USE_SCL=0
11
+ USE_AMZN_EXT=0
12
+
13
+ case ${distribution} in
14
+ amazon)
15
+ case ${version} in
16
+ 2)
17
+ DNF=yum
18
+ USE_AMZN_EXT=1
19
+ ;;
20
+ esac
21
+ ;;
22
+ centos)
23
+ case ${version} in
24
+ 7)
25
+ DNF=yum
26
+ USE_SCL=1
27
+ ;;
28
+ *)
29
+ DNF="dnf --enablerepo=powertools"
30
+ ;;
31
+ esac
32
+ ;;
33
+ fedoraproject)
34
+ case ${version} in
35
+ 33|34)
36
+ DNF=yum
37
+ ;;
38
+ esac
39
+ ;;
40
+ esac
41
+
42
+ ${DNF} groupinstall -y "Development Tools"
43
+
44
+ if [ $USE_SCL -eq 1 ]; then
45
+ ${DNF} install -y centos-release-scl && \
46
+ ${DNF} install -y epel-release && \
47
+ ${DNF} install -y \
48
+ rh-ruby26-ruby-devel \
49
+ rh-ruby26-rubygems \
50
+ rh-ruby26-rubygem-rake \
51
+ rpm-build \
52
+ cmake3
53
+ elif [ $USE_AMZN_EXT -eq 1 ]; then
54
+ yum update -y && \
55
+ yum install -y yum-utils && \
56
+ yum-config-manager --enable epel && \
57
+ amazon-linux-extras install -y ruby2.6 && \
58
+ ${DNF} install -y ruby-devel \
59
+ cmake3
60
+ else
61
+ ${DNF} install -y ruby-devel \
62
+ rubygems \
63
+ rpm-build \
64
+ cmake \
65
+ libarchive
66
+ fi
67
+
68
+ if [ $USE_SCL -eq 1 ]; then
69
+ # For unbound variable error
70
+ export MANPATH=
71
+ cd /cmetrics-ruby && source /opt/rh/rh-ruby26/enable && gem install bundler --no-document && bundle install && bundle exec rake
72
+ else
73
+ if [ $USE_AMZN_EXT -eq 1 ]; then
74
+ echo 'gem "io-console"' > /cmetrics-ruby/Gemfile.local
75
+ fi
76
+ cd /cmetrics-ruby && gem install bundler --no-document && bundle install && bundle exec rake
77
+ fi
@@ -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
- spec.add_dependency 'mini_portile2', '~> 2.1'
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,6 +34,22 @@ 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
  {
@@ -34,6 +34,22 @@ 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
  {
@@ -18,9 +18,16 @@
18
18
  */
19
19
 
20
20
  #include "cmetrics_c.h"
21
+ #include <cmetrics/cmt_map.h>
22
+ #include <cmetrics/cmt_metric.h>
23
+ #include <cmetrics/cmt_cat.h>
21
24
 
22
25
  VALUE rb_cSerde;
23
26
 
27
+ extern VALUE rb_cCounter;
28
+ extern VALUE rb_cGauge;
29
+ extern VALUE rb_cUntyped;
30
+
24
31
  static void serde_free(void* ptr);
25
32
 
26
33
  static const rb_data_type_t rb_cmetrics_serde_type = { "cmetrics/serde",
@@ -111,7 +118,11 @@ rb_cmetrics_serde_from_msgpack(int argc, VALUE *argv, VALUE self)
111
118
  rb_raise(rb_eRuntimeError, "offset should be smaller than msgpack buffer size.");
112
119
  }
113
120
 
114
- ret = cmt_decode_msgpack_create(&cmt, StringValuePtr(rb_msgpack_buffer), msgpack_length, &offset);
121
+ if (!NIL_P(rb_msgpack_buffer)) {
122
+ ret = cmt_decode_msgpack_create(&cmt, StringValuePtr(rb_msgpack_buffer), msgpack_length, &offset);
123
+ } else {
124
+ rb_raise(rb_eArgError, "nil is not valid value for buffer");
125
+ }
115
126
 
116
127
  if (ret == 0) {
117
128
  cmetricsSerde->instance = cmt;
@@ -129,13 +140,14 @@ rb_cmetrics_serde_from_msgpack_feed_each_impl(VALUE self, VALUE rb_msgpack_buffe
129
140
  struct CMetricsSerde* cmetricsSerde;
130
141
  struct cmt *cmt = NULL;
131
142
  int ret = 0;
143
+ size_t offset = 0;
132
144
 
133
145
  RETURN_ENUMERATOR(self, 0, 0);
134
146
 
135
147
  TypedData_Get_Struct(
136
148
  self, struct CMetricsSerde, &rb_cmetrics_serde_type, cmetricsSerde);
137
149
 
138
- for (size_t offset = 0; offset <= msgpack_length; ) {
150
+ for (offset = 0; offset <= msgpack_length; ) {
139
151
  ret = cmt_decode_msgpack_create(&cmt, StringValuePtr(rb_msgpack_buffer), msgpack_length, &offset);
140
152
  if (ret == 0) {
141
153
  cmetricsSerde->instance = cmt;
@@ -154,8 +166,46 @@ static VALUE
154
166
  rb_cmetrics_serde_from_msgpack_feed_each(VALUE self, VALUE rb_data)
155
167
  {
156
168
  RETURN_ENUMERATOR(self, 0, 0);
169
+ if (!NIL_P(rb_data)) {
170
+ return rb_cmetrics_serde_from_msgpack_feed_each_impl(self, rb_data, RSTRING_LEN(rb_data));
171
+ } else {
172
+ rb_raise(rb_eArgError, "nil is not valid value for buffer");
173
+ }
174
+ }
175
+
176
+ static VALUE
177
+ rb_cmetrics_serde_concat_metric(VALUE self, VALUE rb_data)
178
+ {
179
+ struct CMetricsSerde* cmetricsSerde = NULL;
180
+ struct CMetricsCounter* cmetricsCounter = NULL;
181
+ struct CMetricsGauge* cmetricsGauge = NULL;
182
+ struct CMetricsUntyped* cmetricsUntyped = NULL;
183
+
184
+ TypedData_Get_Struct(
185
+ self, struct CMetricsSerde, &rb_cmetrics_serde_type, cmetricsSerde);
186
+
187
+ if (!NIL_P(rb_data)) {
188
+ if (cmetricsSerde->instance == NULL) {
189
+ cmetricsSerde->instance = cmt_create();
190
+ }
191
+
192
+ if (rb_obj_is_kind_of(rb_data, rb_cCounter)) {
193
+ cmetricsCounter = (struct CMetricsCounter *)cmetrics_counter_get_ptr(rb_data);
194
+ cmt_cat(cmetricsSerde->instance, cmetricsCounter->instance);
195
+ } else if (rb_obj_is_kind_of(rb_data, rb_cGauge)) {
196
+ cmetricsGauge = (struct CMetricsGauge *)cmetrics_gauge_get_ptr(rb_data);
197
+ cmt_cat(cmetricsSerde->instance, cmetricsGauge->instance);
198
+ } else if (rb_obj_is_kind_of(rb_data, rb_cUntyped)) {
199
+ cmetricsUntyped = (struct CMetricsUntyped *)cmetrics_untyped_get_ptr(rb_data);
200
+ cmt_cat(cmetricsSerde->instance, cmetricsUntyped->instance);
201
+ } else {
202
+ rb_raise(rb_eArgError, "specified type of instance is not supported.");
203
+ }
204
+ } else {
205
+ rb_raise(rb_eArgError, "nil is not valid value for concatenating");
206
+ }
157
207
 
158
- return rb_cmetrics_serde_from_msgpack_feed_each_impl(self, rb_data, RSTRING_LEN(rb_data));
208
+ return Qnil;
159
209
  }
160
210
 
161
211
  static VALUE
@@ -237,6 +287,151 @@ rb_cmetrics_serde_to_text(VALUE self)
237
287
  return text;
238
288
  }
239
289
 
290
+ static VALUE
291
+ append_metric_value(struct cmt_map *map,
292
+ VALUE rbHash, struct cmt_metric *metric)
293
+ {
294
+ uint64_t ts;
295
+ double val;
296
+ struct cmt_opts *opts;
297
+
298
+ opts = map->opts;
299
+
300
+ /* Retrieve metric value */
301
+ val = cmt_metric_get_value(metric);
302
+
303
+ ts = cmt_metric_get_timestamp(metric);
304
+
305
+ rb_hash_aset(rbHash, rb_str_new2("name"), rb_str_new2(opts->name));
306
+ rb_hash_aset(rbHash, rb_str_new2("description"), rb_str_new2(opts->description));
307
+ rb_hash_aset(rbHash, rb_str_new2("value"), DBL2NUM(val));
308
+ rb_hash_aset(rbHash, rb_str_new2("timestamp"), DBL2NUM(ts/1000000000.0));
309
+
310
+ return rbHash;
311
+ }
312
+
313
+ static VALUE
314
+ format_metric(struct cmt *cmt, struct cmt_map *map,
315
+ struct cmt_metric *metric)
316
+ {
317
+ int n;
318
+ int static_labels = 0;
319
+ struct cmt_map_label *label_k;
320
+ struct cmt_map_label *label_v;
321
+ struct mk_list *head;
322
+ struct cmt_opts *opts;
323
+ struct cmt_label *slabel;
324
+ VALUE rb_hash = rb_hash_new();
325
+ VALUE shash = rb_hash_new();
326
+ VALUE lhash = rb_hash_new();
327
+
328
+ opts = map->opts;
329
+
330
+ /* Measurement */
331
+ rb_hash_aset(rb_hash, rb_str_new2("namespace"), rb_str_new2(opts->ns));
332
+ rb_hash_aset(rb_hash, rb_str_new2("subsystem"), rb_str_new2(opts->subsystem));
333
+
334
+ /* Static labels (tags) */
335
+ static_labels = cmt_labels_count(cmt->static_labels);
336
+ if (static_labels > 0) {
337
+ mk_list_foreach(head, &cmt->static_labels->list) {
338
+ slabel = mk_list_entry(head, struct cmt_label, _head);
339
+ rb_hash_aset(shash, rb_str_new2(slabel->key), rb_str_new2(slabel->val));
340
+ }
341
+ rb_hash_aset(rb_hash, rb_str_new2("static_labels"), shash);
342
+ }
343
+
344
+ /* Labels / Tags */
345
+ n = mk_list_size(&metric->labels);
346
+ if (n > 0) {
347
+ label_k = mk_list_entry_first(&map->label_keys, struct cmt_map_label, _head);
348
+
349
+ mk_list_foreach(head, &metric->labels) {
350
+ label_v = mk_list_entry(head, struct cmt_map_label, _head);
351
+
352
+ rb_hash_aset(lhash, rb_str_new2(label_k->name), rb_str_new2(label_v->name));
353
+
354
+ label_k = mk_list_entry_next(&label_k->_head, struct cmt_map_label,
355
+ _head, &map->label_keys);
356
+ }
357
+ rb_hash_aset(rb_hash, rb_str_new2("labels"), lhash);
358
+ }
359
+
360
+ rb_hash = append_metric_value(map, rb_hash, metric);
361
+
362
+ return rb_hash;
363
+ }
364
+
365
+ static VALUE
366
+ format_metrics(struct cmt *cmt,
367
+ struct cmt_map *map, int add_timestamp)
368
+ {
369
+ VALUE rbMetrics = rb_ary_new();
370
+ VALUE rbMetric;
371
+ struct mk_list *head;
372
+ struct cmt_metric *metric;
373
+
374
+ /* Simple metric, no labels */
375
+ if (map->metric_static_set == 1) {
376
+ rbMetric = format_metric(cmt, map, &map->metric);
377
+ rb_ary_push(rbMetrics, rbMetric);
378
+ }
379
+
380
+ mk_list_foreach(head, &map->metrics) {
381
+ metric = mk_list_entry(head, struct cmt_metric, _head);
382
+ rbMetric = format_metric(cmt, map, metric);
383
+ rb_ary_push(rbMetrics, rbMetric);
384
+ }
385
+
386
+ return rbMetrics;
387
+ }
388
+
389
+ static VALUE
390
+ rb_cmetrics_serde_get_metrics(VALUE self)
391
+ {
392
+ VALUE rbMetrics = rb_ary_new();
393
+ VALUE rbMetricsInner = rb_ary_new();
394
+ struct CMetricsSerde* cmetricsSerde;
395
+ struct mk_list *head;
396
+ struct cmt_gauge *gauge;
397
+ struct cmt_counter *counter;
398
+ struct cmt_untyped *untyped;
399
+ struct cmt *cmt;
400
+ int add_timestamp = CMT_TRUE;
401
+
402
+ TypedData_Get_Struct(
403
+ self, struct CMetricsSerde, &rb_cmetrics_serde_type, cmetricsSerde);
404
+
405
+ cmt = cmetricsSerde->instance;
406
+
407
+ if (cmt == NULL) {
408
+ rb_raise(rb_eRuntimeError, "Invalid cmt context");
409
+ }
410
+
411
+ /* Counters */
412
+ mk_list_foreach(head, &cmt->counters) {
413
+ counter = mk_list_entry(head, struct cmt_counter, _head);
414
+ rbMetricsInner = format_metrics(cmt, counter->map, add_timestamp);
415
+ rb_ary_push(rbMetrics, rbMetricsInner);
416
+ }
417
+
418
+ /* Gauges */
419
+ mk_list_foreach(head, &cmt->gauges) {
420
+ gauge = mk_list_entry(head, struct cmt_gauge, _head);
421
+ rbMetricsInner = format_metrics(cmt, gauge->map, add_timestamp);
422
+ rb_ary_push(rbMetrics, rbMetricsInner);
423
+ }
424
+
425
+ /* Untyped */
426
+ mk_list_foreach(head, &cmt->untypeds) {
427
+ untyped = mk_list_entry(head, struct cmt_untyped, _head);
428
+ rbMetricsInner = format_metrics(cmt, untyped->map, add_timestamp);
429
+ rb_ary_push(rbMetrics, rbMetricsInner);
430
+ }
431
+
432
+ return rbMetrics;
433
+ }
434
+
240
435
  void Init_cmetrics_serde(VALUE rb_mCMetrics)
241
436
  {
242
437
  rb_cSerde = rb_define_class_under(rb_mCMetrics, "Serde", rb_cObject);
@@ -244,10 +439,13 @@ void Init_cmetrics_serde(VALUE rb_mCMetrics)
244
439
  rb_define_alloc_func(rb_cSerde, rb_cmetrics_serde_alloc);
245
440
 
246
441
  rb_define_method(rb_cSerde, "initialize", rb_cmetrics_serde_initialize, 0);
442
+ rb_define_method(rb_cSerde, "concat", rb_cmetrics_serde_concat_metric, 1);
247
443
  rb_define_method(rb_cSerde, "from_msgpack", rb_cmetrics_serde_from_msgpack, -1);
248
444
  rb_define_method(rb_cSerde, "to_prometheus", rb_cmetrics_serde_to_prometheus, 0);
249
445
  rb_define_method(rb_cSerde, "to_influx", rb_cmetrics_serde_to_influx, 0);
250
446
  rb_define_method(rb_cSerde, "to_msgpack", rb_cmetrics_serde_to_msgpack, 0);
251
447
  rb_define_method(rb_cSerde, "feed_each", rb_cmetrics_serde_from_msgpack_feed_each, 1);
252
448
  rb_define_method(rb_cSerde, "to_s", rb_cmetrics_serde_to_text, 0);
449
+ rb_define_method(rb_cSerde, "get_metrics", rb_cmetrics_serde_get_metrics, 0);
450
+ rb_define_method(rb_cSerde, "metrics", rb_cmetrics_serde_get_metrics, 0);
253
451
  }
@@ -34,6 +34,22 @@ 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
  {
@@ -13,22 +13,40 @@ def windows?
13
13
  RUBY_PLATFORM =~ /mingw|mswin/
14
14
  end
15
15
 
16
+ def determine_preferred_command(bin, default_bin)
17
+ printf "checking for whether %s or %s is usable... ", bin, default_bin
18
+ STDOUT.flush
19
+ bin += RbConfig::CONFIG['EXEEXT']
20
+ path = ENV['PATH'].split(RbConfig::CONFIG['PATH_SEPARATOR'])
21
+ for dir in path
22
+ file = File.join(dir, bin)
23
+ if FileTest.executable?(file)
24
+ printf "%s\n", bin
25
+ return bin
26
+ else
27
+ next
28
+ end
29
+ end
30
+ printf "%s\n", default_bin
31
+ return default_bin
32
+ end
33
+
16
34
  class BuildCMetrics
17
35
 
18
36
  attr_reader :recipe
19
37
 
20
- def initialize(version=nil)
38
+ def initialize(version=nil, **kwargs)
21
39
  @version = if version
22
40
  version
23
41
  else
24
42
  "master".freeze
25
43
  end
26
- @recipe = MiniPortileCMake.new("cmetrics", @version)
44
+ @recipe = MiniPortileCMake.new("cmetrics", @version, **kwargs)
27
45
  @checkpoint = ".#{@recipe.name}-#{@recipe.version}.installed"
28
46
  @recipe.target = File.join(ROOT, "ports")
29
47
  @recipe.files << {
30
- url: "file://#{ROOT}/ext/#{@recipe.name}-#{@recipe.version}.tar.gz",
31
- sha256sum: "3375ac1073b0bbea44ee9986601977ef04b119a74a7c663e2486a3ed31953203",
48
+ url: "https://codeload.github.com/calyptia/cmetrics/tar.gz/v#{version}",
49
+ sha256sum: "f0c79707ad4d18980bf0d1d64ed8cb73a40c586c36a4caf38233ae8d9a4c6cc7",
32
50
  }
33
51
  end
34
52
 
@@ -52,7 +70,7 @@ class BuildCMetrics
52
70
  end
53
71
  end
54
72
 
55
- cmetrics = BuildCMetrics.new
73
+ cmetrics = BuildCMetrics.new("0.2.1", cmake_command: determine_preferred_command("cmake3", "cmake"))
56
74
  cmetrics.build
57
75
 
58
76
  libdir = RbConfig::CONFIG["libdir"]
@@ -63,8 +81,6 @@ find_library("xxhash", nil, __dir__)
63
81
  find_library("mpack", nil, __dir__)
64
82
  find_library("cmetrics", nil, __dir__)
65
83
 
66
- $CFLAGS << " -std=c99 "
67
-
68
84
  have_func("gmtime_s", "time.h")
69
85
 
70
86
  create_makefile("cmetrics/cmetrics")
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CMetrics
4
- VERSION = "0.1.8"
4
+ VERSION = "0.2.2"
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.1.8
4
+ version: 0.2.2
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-07-13 00:00:00.000000000 Z
11
+ date: 2021-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,20 +66,34 @@ 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
72
86
  requirements:
73
87
  - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: '2.1'
89
+ version: '2.7'
76
90
  type: :runtime
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: '2.1'
96
+ version: '2.7'
83
97
  description: C binding for cmetric library.
84
98
  email:
85
99
  - cosmo0920.oucc@gmail.com
@@ -88,9 +102,11 @@ extensions:
88
102
  - ext/cmetrics/extconf.rb
89
103
  extra_rdoc_files: []
90
104
  files:
105
+ - ".github/workflows/apt.yml"
91
106
  - ".github/workflows/linux.yml"
92
107
  - ".github/workflows/macos.yml"
93
108
  - ".github/workflows/windows.yml"
109
+ - ".github/workflows/yum.yml"
94
110
  - ".gitignore"
95
111
  - Gemfile
96
112
  - LICENSE
@@ -98,8 +114,9 @@ files:
98
114
  - Rakefile
99
115
  - bin/console
100
116
  - bin/setup
117
+ - ci/apt-test.sh
118
+ - ci/yum-test.sh
101
119
  - cmetrics-ruby.gemspec
102
- - ext/cmetrics-master.tar.gz
103
120
  - ext/cmetrics/cmetrics.c
104
121
  - ext/cmetrics/cmetrics_c.h
105
122
  - ext/cmetrics/cmetrics_counter.c
@@ -115,7 +132,7 @@ licenses:
115
132
  metadata:
116
133
  homepage_uri: https://github.com/calyptia/cmetrics-ruby
117
134
  changelog_uri: https://github.com/calyptia/cmetrics-ruby/blob/master/CHANGELOG.md
118
- post_install_message:
135
+ post_install_message:
119
136
  rdoc_options: []
120
137
  require_paths:
121
138
  - lib
@@ -130,8 +147,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
147
  - !ruby/object:Gem::Version
131
148
  version: '0'
132
149
  requirements: []
133
- rubygems_version: 3.0.3
134
- signing_key:
150
+ rubygems_version: 3.2.22
151
+ signing_key:
135
152
  specification_version: 4
136
153
  summary: C binding for cmetric library.
137
154
  test_files: []
Binary file