Skip to content

Commit 1cbe6b6

Browse files
authored
Merge pull request #344 from 3scale/modernize
update and modernize everything
2 parents a31a7f8 + e645f22 commit 1cbe6b6

File tree

8 files changed

+134
-70
lines changed

8 files changed

+134
-70
lines changed

.circleci/config.yml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,15 @@ jobs:
33
build:
44
working_directory: /home/circleci/echo-api
55
docker:
6-
- image: circleci/ruby:2.7
6+
- image: cimg/ruby:3.3
77
environment:
8-
BUNDLE_JOBS: 3
98
BUNDLE_RETRY: 3
109
BUNDLE_PATH: vendor/bundle
1110
OPENTRACING_TRACER: jaeger
1211
BUNDLE_FROZEN: true # --deployment
13-
- image: jaegertracing/all-in-one:1.21
12+
- image: quay.io/jaegertracing/jaeger:2.4.0
1413
environment:
15-
COLLECTOR_ZIPKIN_HTTP_PORT: 9411
14+
COLLECTOR_OTLP_ENABLED: 1
1615
steps:
1716
- checkout
1817

@@ -42,10 +41,12 @@ jobs:
4241
dockerize -wait tcp://0.0.0.0:3000 -timeout 1m # wait for echo-api
4342
4443
curl --fail http://0.0.0.0:3000/test
44+
[ x204 = x`curl -s -o /dev/null -w "%{http_code}" http://0.0.0.0:3000/status/204` ]
4545
4646
- run:
4747
name: Verify OpenTracing
4848
command: |
49-
sleep 1 # that is the flush timeout
50-
curl http://localhost:16686/api/services/echo-api/operations | jq '(.data | length) > 0' --exit-status
49+
sleep 11 # default flush timeout is 10 https://github.com/open-telemetry/opentelemetry-ruby/tree/main/exporter/otlp-http
50+
curl -sS http://localhost:16686/api/services/echo-api/operations | tee operations.out
51+
jq '(.data | length) > 0' --exit-status < operations.out
5152

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
*.rbc
33
.bundle
44
.config
5+
.tool-versions
56
coverage
67
InstalledFiles
78
lib/bundler/man

.tool-versions.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ruby 3.3.1

Dockerfile

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
# Common base image
2-
FROM registry.access.redhat.com/ubi8/ubi-minimal AS base
2+
FROM registry.access.redhat.com/ubi9/ubi-minimal AS base
33

44
EXPOSE 9292
55

66
ENV HOME=/home
77
WORKDIR "${HOME}/app"
88

9-
ARG RUBY_VERSION="2.7"
10-
ARG BUNDLER_VERSION="2.3.6"
9+
ARG RUBY_VERSION="3.3"
10+
ARG BUNDLER_VERSION="2.6.6"
1111
ARG RUNTIME_DEPS="ruby"
1212

1313
RUN echo -e "[ruby]\nname=ruby\nstream=${RUBY_VERSION}\nprofiles=\nstate=enabled\n" > /etc/dnf/modules.d/ruby.module \
14-
&& microdnf update --nodocs \
15-
&& microdnf install --nodocs ${RUNTIME_DEPS} \
14+
&& microdnf install -y --nodocs ${RUNTIME_DEPS} \
1615
&& rm -rf /var/cache/yum /var/cache/dnf \
1716
&& gem install -N bundler -v "= ${BUNDLER_VERSION}" \
1817
&& chown -R 1001:1001 "${HOME}"
@@ -22,7 +21,7 @@ FROM base AS builder-base
2221

2322
ARG BUILD_DEPS="tar make file findutils git patch gcc automake autoconf libtool redhat-rpm-config openssl-devel ruby-devel"
2423

25-
RUN microdnf install --nodocs ${BUILD_DEPS} \
24+
RUN microdnf install -y --nodocs ${BUILD_DEPS} \
2625
&& rm -rf /var/cache/yum /var/cache/dnf
2726

2827
COPY --chown=1001:1001 ./Gemfile* "${HOME}/app/"
@@ -58,7 +57,7 @@ FROM builder-base AS dev
5857
USER root
5958

6059
ARG DEV_TOOLS="vim gdb"
61-
RUN microdnf install --nodocs ${DEV_TOOLS} \
60+
RUN microdnf install -y --nodocs ${DEV_TOOLS} \
6261
&& rm -rf /var/cache/yum /var/cache/dnf
6362

6463
ARG DEV_UID=1001

Gemfile

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,18 @@ source 'https://rubygems.org'
44

55
gem 'nokogiri', '~> 1'
66
gem 'puma'
7-
gem 'rack', '~> 2'
7+
gem 'rack', '~> 3'
88
gem 'rack-cors', require: 'rack/cors'
9-
gem 'sinatra'
9+
gem 'rackup', '~> 2.2'
10+
gem 'sinatra', '~> 4'
1011

1112
gem 'json'
1213

1314
# Opentracing
14-
gem 'jaeger-client', '~> 1', require: nil
15-
gem 'rack-tracer', '~> 0.9', require: nil
15+
gem 'opentelemetry-instrumentation-rack', '~> 0.22', require: false
16+
gem 'opentelemetry-instrumentation-sinatra', '~> 0.22', require: false
17+
gem 'opentelemetry-exporter-otlp', require: false
18+
gem 'opentelemetry-exporter-zipkin', require: false
1619

1720
group :development do
1821
gem 'shotgun'

Gemfile.lock

Lines changed: 84 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,110 @@
11
GEM
22
remote: https://rubygems.org/
33
specs:
4-
jaeger-client (1.3.0)
5-
opentracing (~> 0.3)
6-
thrift
7-
json (2.6.3)
8-
mini_portile2 (2.8.0)
9-
mustermann (1.1.1)
4+
base64 (0.2.0)
5+
bigdecimal (3.1.9)
6+
csv (3.3.3)
7+
google-protobuf (4.30.1)
8+
bigdecimal
9+
rake (>= 13)
10+
google-protobuf (4.30.1-x86_64-linux)
11+
bigdecimal
12+
rake (>= 13)
13+
googleapis-common-protos-types (1.19.0)
14+
google-protobuf (>= 3.18, < 5.a)
15+
json (2.10.2)
16+
logger (1.6.6)
17+
mini_portile2 (2.8.8)
18+
mustermann (3.0.3)
1019
ruby2_keywords (~> 0.0.1)
11-
nio4r (2.5.8)
12-
nokogiri (1.13.6)
13-
mini_portile2 (~> 2.8.0)
20+
nio4r (2.7.4)
21+
nokogiri (1.18.6)
22+
mini_portile2 (~> 2.8.2)
1423
racc (~> 1.4)
15-
nokogiri (1.13.6-x86_64-linux)
24+
nokogiri (1.18.6-x86_64-linux-gnu)
1625
racc (~> 1.4)
17-
opentracing (0.5.0)
18-
puma (5.6.4)
26+
opentelemetry-api (1.5.0)
27+
opentelemetry-common (0.22.0)
28+
opentelemetry-api (~> 1.0)
29+
opentelemetry-exporter-otlp (0.30.0)
30+
google-protobuf (>= 3.18)
31+
googleapis-common-protos-types (~> 1.3)
32+
opentelemetry-api (~> 1.1)
33+
opentelemetry-common (~> 0.20)
34+
opentelemetry-sdk (~> 1.2)
35+
opentelemetry-semantic_conventions
36+
opentelemetry-exporter-zipkin (0.24.0)
37+
csv (~> 3.1)
38+
opentelemetry-api (~> 1.1)
39+
opentelemetry-common (~> 0.20)
40+
opentelemetry-sdk (~> 1.2)
41+
opentelemetry-semantic_conventions
42+
opentelemetry-instrumentation-base (0.23.0)
43+
opentelemetry-api (~> 1.0)
44+
opentelemetry-common (~> 0.21)
45+
opentelemetry-registry (~> 0.1)
46+
opentelemetry-instrumentation-rack (0.26.0)
47+
opentelemetry-api (~> 1.0)
48+
opentelemetry-instrumentation-base (~> 0.23.0)
49+
opentelemetry-instrumentation-sinatra (0.25.0)
50+
opentelemetry-api (~> 1.0)
51+
opentelemetry-instrumentation-base (~> 0.23.0)
52+
opentelemetry-instrumentation-rack (~> 0.21)
53+
opentelemetry-registry (0.4.0)
54+
opentelemetry-api (~> 1.1)
55+
opentelemetry-sdk (1.8.0)
56+
opentelemetry-api (~> 1.1)
57+
opentelemetry-common (~> 0.20)
58+
opentelemetry-registry (~> 0.2)
59+
opentelemetry-semantic_conventions
60+
opentelemetry-semantic_conventions (1.11.0)
61+
opentelemetry-api (~> 1.0)
62+
puma (6.6.0)
1963
nio4r (~> 2.0)
20-
racc (1.6.0)
21-
rack (2.2.3)
22-
rack-cors (1.1.1)
64+
racc (1.8.1)
65+
rack (3.1.12)
66+
rack-cors (2.0.2)
2367
rack (>= 2.0.0)
24-
rack-protection (2.2.0)
25-
rack
26-
rack-tracer (0.9.0)
27-
opentracing (~> 0.4)
68+
rack-protection (4.1.1)
69+
base64 (>= 0.1.0)
70+
logger (>= 1.6.0)
71+
rack (>= 3.0.0, < 4)
72+
rack-session (2.1.0)
73+
base64 (>= 0.1.0)
74+
rack (>= 3.0.0)
75+
rackup (2.2.1)
76+
rack (>= 3)
77+
rake (13.2.1)
2878
ruby2_keywords (0.0.5)
2979
shotgun (0.9.2)
3080
rack (>= 1.0)
31-
sinatra (2.2.0)
32-
mustermann (~> 1.0)
33-
rack (~> 2.2)
34-
rack-protection (= 2.2.0)
81+
sinatra (4.1.1)
82+
logger (>= 1.6.0)
83+
mustermann (~> 3.0)
84+
rack (>= 3.0.0, < 4)
85+
rack-protection (= 4.1.1)
86+
rack-session (>= 2.0.0, < 3)
3587
tilt (~> 2.0)
36-
thrift (0.16.0)
37-
tilt (2.0.10)
88+
tilt (2.6.0)
3889

3990
PLATFORMS
4091
powerpc64le-linux
4192
ruby
4293
x86_64-linux
4394

4495
DEPENDENCIES
45-
jaeger-client (~> 1)
4696
json
4797
nokogiri (~> 1)
98+
opentelemetry-exporter-otlp
99+
opentelemetry-exporter-zipkin
100+
opentelemetry-instrumentation-rack (~> 0.22)
101+
opentelemetry-instrumentation-sinatra (~> 0.22)
48102
puma
49-
rack (~> 2)
103+
rack (~> 3)
50104
rack-cors
51-
rack-tracer (~> 0.9)
105+
rackup (~> 2.2)
52106
shotgun
53-
sinatra
107+
sinatra (~> 4)
54108

55109
BUNDLED WITH
56-
2.3.6
110+
2.6.6

contrib/openshift/echo-api-template.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
apiVersion: v1
1+
apiVersion: template.openshift.io/v1
22
kind: Template
33
metadata:
44
creationTimestamp: null
@@ -10,7 +10,7 @@ metadata:
1010

1111
objects:
1212

13-
- apiVersion: v1
13+
- apiVersion: apps.openshift.io/v1
1414
kind: DeploymentConfig
1515
metadata:
1616
name: echo-api
@@ -67,7 +67,7 @@ objects:
6767
selector:
6868
deploymentconfig: echo-api
6969

70-
- apiVersion: v1
70+
- apiVersion: route.openshift.io/v1
7171
kind: Route
7272
metadata:
7373
name: echo-api

echo_api.rb

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,13 @@
33
# shotgun app.rb -p 9294
44

55
module EchoAPI
6-
VERSION = '1.0.5'.freeze
6+
VERSION = '1.1.0'.freeze
77
end
88

9-
require 'sinatra'
10-
require 'json'
11-
require 'nokogiri'
12-
require 'digest/sha1'
13-
require 'securerandom'
14-
require 'base64'
15-
require 'rack/cors'
9+
require 'rubygems'
10+
require 'bundler'
11+
12+
Bundler.require
1613

1714
enable :logging
1815
set :protection, except: [:json_csrf]
@@ -23,20 +20,28 @@ module EchoAPI
2320
enable :static
2421
end
2522

26-
case ENV['OPENTRACING_TRACER']
27-
when 'jaeger'
28-
require 'jaeger/client'
29-
require 'rack/tracer'
3023

31-
jaeger_agent_host = ENV['JAEGER_AGENT_HOST'] || '127.0.0.1'
32-
jaeger_agent_port = ENV['JAEGER_AGENT_PORT'] || 6831
33-
jaeger_service_name = ENV['JAEGER_SERVICE_NAME'] || 'echo-api'
34-
jaeger_client = Jaeger::Client.build(host: jaeger_agent_host,
35-
port: jaeger_agent_port,
36-
service_name: jaeger_service_name,
37-
flush_interval: 1)
24+
telemetry_exporter = ENV['OTEL_TRACES_EXPORTER'] || ENV['OPENTRACING_TRACER']
25+
if telemetry_exporter
26+
telemetry_exporter = 'otlp' if telemetry_exporter == 'jaeger'
27+
28+
ENV['OTEL_TRACES_EXPORTER'] = telemetry_exporter
29+
require 'opentelemetry/sdk'
30+
unless telemetry_exporter == 'console'
31+
host = ENV['JAEGER_AGENT_HOST'] || '127.0.0.1'
32+
port = ENV['JAEGER_AGENT_PORT']
33+
port ||= telemetry_exporter == 'zipkin' ? 6831 : 4318
34+
ENV['OTEL_EXPORTER_OTLP_ENDPOINT'] ||= "http://#{host}:#{port}"
35+
require "opentelemetry/exporter/#{telemetry_exporter}"
36+
end
37+
38+
require 'opentelemetry/instrumentation/sinatra'
39+
40+
OpenTelemetry::SDK.configure do |c|
41+
c.service_name = ENV['OTEL_SERVICE_NAME'] || ENV['JAEGER_SERVICE_NAME'] || 'echo-api'
3842

39-
use ::Rack::Tracer, tracer: jaeger_client
43+
c.use 'OpenTelemetry::Instrumentation::Sinatra'
44+
end
4045
end
4146

4247
# Enabling CORS

0 commit comments

Comments
 (0)