Skip to content

Commit 356d575

Browse files
authored
Merge pull request #1 from biximilien/biximilien/feature/opentelemetry-integration
OpenTelemetry Integration
2 parents 079ad8f + 2f0ae1d commit 356d575

File tree

7 files changed

+282
-28
lines changed

7 files changed

+282
-28
lines changed

.env.sample

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
11
OPENAI_API_KEY=my_openai_secret
22
DISCORD_BOT_TOKEN=my_discord_secret
33
REDIS_URL=redis://localhost:6379/0
4+
# OpenTelemetry
5+
OTEL_EXPORTER_OTLP_ENDPOINT="https://api.honeycomb.io"
6+
OTEL_EXPORTER_OTLP_HEADERS="x-honeycomb-team=secretkey"
7+
OTEL_SERVICE_NAME="ModerationGPT"

Gemfile

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,8 @@ gem "redis"
1515

1616
# testing
1717
gem "rspec", group: :test
18+
19+
# opentelemetry
20+
gem 'opentelemetry-sdk'
21+
gem 'opentelemetry-exporter-otlp'
22+
gem 'opentelemetry-instrumentation-all'

Gemfile.lock

Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,201 @@ GEM
1616
dotenv (2.8.1)
1717
event_emitter (0.2.6)
1818
ffi (1.15.5)
19+
google-protobuf (3.21.12-x86_64-linux)
20+
googleapis-common-protos-types (1.5.0)
21+
google-protobuf (~> 3.14)
1922
http-accept (1.7.0)
2023
http-cookie (1.0.5)
2124
domain_name (~> 0.5)
2225
mime-types (3.4.1)
2326
mime-types-data (~> 3.2015)
2427
mime-types-data (3.2022.0105)
2528
netrc (0.11.0)
29+
opentelemetry-api (1.1.0)
30+
opentelemetry-common (0.19.6)
31+
opentelemetry-api (~> 1.0)
32+
opentelemetry-exporter-otlp (0.24.0)
33+
google-protobuf (~> 3.19)
34+
googleapis-common-protos-types (~> 1.3)
35+
opentelemetry-api (~> 1.1)
36+
opentelemetry-common (~> 0.19.6)
37+
opentelemetry-sdk (~> 1.2)
38+
opentelemetry-semantic_conventions
39+
opentelemetry-instrumentation-action_pack (0.5.0)
40+
opentelemetry-api (~> 1.0)
41+
opentelemetry-instrumentation-base (~> 0.21.0)
42+
opentelemetry-instrumentation-rack (~> 0.21)
43+
opentelemetry-instrumentation-action_view (0.4.0)
44+
opentelemetry-api (~> 1.0)
45+
opentelemetry-instrumentation-active_support (~> 0.1)
46+
opentelemetry-instrumentation-base (~> 0.20)
47+
opentelemetry-instrumentation-active_job (0.4.0)
48+
opentelemetry-api (~> 1.0)
49+
opentelemetry-instrumentation-base (~> 0.21.0)
50+
opentelemetry-instrumentation-active_model_serializers (0.19.1)
51+
opentelemetry-api (~> 1.0)
52+
opentelemetry-instrumentation-base (~> 0.21.0)
53+
opentelemetry-instrumentation-active_record (0.5.0)
54+
opentelemetry-api (~> 1.0)
55+
opentelemetry-instrumentation-base (~> 0.21.0)
56+
ruby2_keywords
57+
opentelemetry-instrumentation-active_support (0.3.0)
58+
opentelemetry-api (~> 1.0)
59+
opentelemetry-instrumentation-base (~> 0.21.0)
60+
opentelemetry-instrumentation-all (0.31.0)
61+
opentelemetry-instrumentation-active_model_serializers (~> 0.19.0)
62+
opentelemetry-instrumentation-aws_sdk (~> 0.3.0)
63+
opentelemetry-instrumentation-bunny (~> 0.19.0)
64+
opentelemetry-instrumentation-concurrent_ruby (~> 0.20.0)
65+
opentelemetry-instrumentation-dalli (~> 0.22.0)
66+
opentelemetry-instrumentation-delayed_job (~> 0.19.0)
67+
opentelemetry-instrumentation-ethon (~> 0.20.0)
68+
opentelemetry-instrumentation-excon (~> 0.20.0)
69+
opentelemetry-instrumentation-faraday (~> 0.22.0)
70+
opentelemetry-instrumentation-graphql (~> 0.22.0)
71+
opentelemetry-instrumentation-http (~> 0.21.0)
72+
opentelemetry-instrumentation-http_client (~> 0.21.0)
73+
opentelemetry-instrumentation-koala (~> 0.19.0)
74+
opentelemetry-instrumentation-lmdb (~> 0.21.0)
75+
opentelemetry-instrumentation-mongo (~> 0.21.0)
76+
opentelemetry-instrumentation-mysql2 (~> 0.22.0)
77+
opentelemetry-instrumentation-net_http (~> 0.21.0)
78+
opentelemetry-instrumentation-pg (~> 0.23.0)
79+
opentelemetry-instrumentation-que (~> 0.5.0)
80+
opentelemetry-instrumentation-racecar (~> 0.1.0)
81+
opentelemetry-instrumentation-rack (~> 0.22.0)
82+
opentelemetry-instrumentation-rails (~> 0.25.0)
83+
opentelemetry-instrumentation-rake (~> 0.1.0)
84+
opentelemetry-instrumentation-rdkafka (~> 0.2.0)
85+
opentelemetry-instrumentation-redis (~> 0.24.0)
86+
opentelemetry-instrumentation-resque (~> 0.3.0)
87+
opentelemetry-instrumentation-restclient (~> 0.21.0)
88+
opentelemetry-instrumentation-ruby_kafka (~> 0.19.0)
89+
opentelemetry-instrumentation-sidekiq (~> 0.22.0)
90+
opentelemetry-instrumentation-sinatra (~> 0.21.0)
91+
opentelemetry-instrumentation-trilogy (~> 0.51.0)
92+
opentelemetry-instrumentation-aws_sdk (0.3.2)
93+
opentelemetry-api (~> 1.0)
94+
opentelemetry-instrumentation-base (~> 0.21.0)
95+
opentelemetry-instrumentation-base (0.21.1)
96+
opentelemetry-api (~> 1.0)
97+
opentelemetry-registry (~> 0.1)
98+
opentelemetry-instrumentation-bunny (0.19.1)
99+
opentelemetry-api (~> 1.0)
100+
opentelemetry-instrumentation-base (~> 0.21.0)
101+
opentelemetry-instrumentation-concurrent_ruby (0.20.1)
102+
opentelemetry-api (~> 1.0)
103+
opentelemetry-instrumentation-base (~> 0.21.0)
104+
opentelemetry-instrumentation-dalli (0.22.2)
105+
opentelemetry-api (~> 1.0)
106+
opentelemetry-common (~> 0.19.3)
107+
opentelemetry-instrumentation-base (~> 0.21.0)
108+
opentelemetry-instrumentation-delayed_job (0.19.1)
109+
opentelemetry-api (~> 1.0)
110+
opentelemetry-instrumentation-base (~> 0.21.0)
111+
opentelemetry-instrumentation-ethon (0.20.1)
112+
opentelemetry-api (~> 1.0)
113+
opentelemetry-common (~> 0.19.3)
114+
opentelemetry-instrumentation-base (~> 0.21.0)
115+
opentelemetry-instrumentation-excon (0.20.1)
116+
opentelemetry-api (~> 1.0)
117+
opentelemetry-common (~> 0.19.3)
118+
opentelemetry-instrumentation-base (~> 0.21.0)
119+
opentelemetry-instrumentation-faraday (0.22.0)
120+
opentelemetry-api (~> 1.0)
121+
opentelemetry-common (~> 0.19.3)
122+
opentelemetry-instrumentation-base (~> 0.21.0)
123+
opentelemetry-instrumentation-graphql (0.22.0)
124+
opentelemetry-api (~> 1.0)
125+
opentelemetry-instrumentation-base (~> 0.21.0)
126+
opentelemetry-instrumentation-http (0.21.0)
127+
opentelemetry-api (~> 1.0)
128+
opentelemetry-instrumentation-base (~> 0.21.0)
129+
opentelemetry-instrumentation-http_client (0.21.0)
130+
opentelemetry-api (~> 1.0)
131+
opentelemetry-common (~> 0.19.3)
132+
opentelemetry-instrumentation-base (~> 0.21.0)
133+
opentelemetry-instrumentation-koala (0.19.1)
134+
opentelemetry-api (~> 1.0)
135+
opentelemetry-common (~> 0.19.3)
136+
opentelemetry-instrumentation-base (~> 0.21.0)
137+
opentelemetry-instrumentation-lmdb (0.21.1)
138+
opentelemetry-api (~> 1.0)
139+
opentelemetry-instrumentation-base (~> 0.21.0)
140+
opentelemetry-instrumentation-mongo (0.21.1)
141+
opentelemetry-api (~> 1.0)
142+
opentelemetry-instrumentation-base (~> 0.21.0)
143+
opentelemetry-instrumentation-mysql2 (0.22.0)
144+
opentelemetry-api (~> 1.0)
145+
opentelemetry-instrumentation-base (~> 0.21.0)
146+
opentelemetry-instrumentation-net_http (0.21.1)
147+
opentelemetry-api (~> 1.0)
148+
opentelemetry-common (~> 0.19.3)
149+
opentelemetry-instrumentation-base (~> 0.21.0)
150+
opentelemetry-instrumentation-pg (0.23.0)
151+
opentelemetry-api (~> 1.0)
152+
opentelemetry-instrumentation-base (~> 0.21.0)
153+
opentelemetry-instrumentation-que (0.5.1)
154+
opentelemetry-api (~> 1.0)
155+
opentelemetry-instrumentation-base (~> 0.21.0)
156+
opentelemetry-instrumentation-racecar (0.1.1)
157+
opentelemetry-api (~> 1.0)
158+
opentelemetry-instrumentation-base (~> 0.21.0)
159+
opentelemetry-instrumentation-rack (0.22.1)
160+
opentelemetry-api (~> 1.0)
161+
opentelemetry-common (~> 0.19.3)
162+
opentelemetry-instrumentation-base (~> 0.21.0)
163+
opentelemetry-instrumentation-rails (0.25.0)
164+
opentelemetry-api (~> 1.0)
165+
opentelemetry-instrumentation-action_pack (~> 0.5.0)
166+
opentelemetry-instrumentation-action_view (~> 0.4.0)
167+
opentelemetry-instrumentation-active_job (~> 0.4.0)
168+
opentelemetry-instrumentation-active_record (~> 0.5.0)
169+
opentelemetry-instrumentation-active_support (~> 0.3.0)
170+
opentelemetry-instrumentation-base (~> 0.21.0)
171+
opentelemetry-instrumentation-rake (0.1.1)
172+
opentelemetry-api (~> 1.0)
173+
opentelemetry-instrumentation-base (~> 0.21.0)
174+
opentelemetry-instrumentation-rdkafka (0.2.2)
175+
opentelemetry-api (~> 1.0)
176+
opentelemetry-common (~> 0.19.3)
177+
opentelemetry-instrumentation-base (~> 0.21.0)
178+
opentelemetry-instrumentation-redis (0.24.1)
179+
opentelemetry-api (~> 1.0)
180+
opentelemetry-common (~> 0.19.3)
181+
opentelemetry-instrumentation-base (~> 0.21.0)
182+
opentelemetry-instrumentation-resque (0.3.1)
183+
opentelemetry-api (~> 1.0)
184+
opentelemetry-instrumentation-base (~> 0.21.0)
185+
opentelemetry-instrumentation-restclient (0.21.0)
186+
opentelemetry-api (~> 1.0)
187+
opentelemetry-common (~> 0.19.3)
188+
opentelemetry-instrumentation-base (~> 0.21.0)
189+
opentelemetry-instrumentation-ruby_kafka (0.19.1)
190+
opentelemetry-api (~> 1.0)
191+
opentelemetry-instrumentation-base (~> 0.21.0)
192+
opentelemetry-instrumentation-sidekiq (0.22.1)
193+
opentelemetry-api (~> 1.0)
194+
opentelemetry-common (~> 0.19.3)
195+
opentelemetry-instrumentation-base (~> 0.21.0)
196+
opentelemetry-instrumentation-sinatra (0.21.4)
197+
opentelemetry-api (~> 1.0)
198+
opentelemetry-common (~> 0.19.3)
199+
opentelemetry-instrumentation-base (~> 0.21.0)
200+
opentelemetry-instrumentation-rack (~> 0.21)
201+
opentelemetry-instrumentation-trilogy (0.51.1)
202+
opentelemetry-api (~> 1.0)
203+
opentelemetry-instrumentation-base (~> 0.21.0)
204+
opentelemetry-semantic_conventions (>= 1.8.0)
205+
opentelemetry-registry (0.2.0)
206+
opentelemetry-api (~> 1.1)
207+
opentelemetry-sdk (1.2.0)
208+
opentelemetry-api (~> 1.1)
209+
opentelemetry-common (~> 0.19.3)
210+
opentelemetry-registry (~> 0.2)
211+
opentelemetry-semantic_conventions
212+
opentelemetry-semantic_conventions (1.8.0)
213+
opentelemetry-api (~> 1.0)
26214
opus-ruby (1.0.1)
27215
ffi
28216
redis (5.0.6)
@@ -47,6 +235,7 @@ GEM
47235
diff-lcs (>= 1.2.0, < 2.0)
48236
rspec-support (~> 3.12.0)
49237
rspec-support (3.12.0)
238+
ruby2_keywords (0.0.5)
50239
unf (0.1.4)
51240
unf_ext
52241
unf_ext (0.0.8.2)
@@ -61,6 +250,9 @@ PLATFORMS
61250
DEPENDENCIES
62251
discordrb
63252
dotenv
253+
opentelemetry-exporter-otlp
254+
opentelemetry-instrumentation-all
255+
opentelemetry-sdk
64256
redis
65257
rspec
66258

bot.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
require "./lib/discord/permission"
77
require "./lib/backend"
88
require "./lib/moderation_strategy"
9+
require "./lib/opentelemetry"
910

1011
# setup logging
1112
$logger = Logger.new(STDOUT)
@@ -64,7 +65,7 @@
6465
# execute enabled strategies
6566
strategies.each do |strategy|
6667
if strategy.condition(event)
67-
strategy.execute(event)
68+
strategy.execute(event) and break
6869
end
6970
end
7071
end

lib/moderation_strategy.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def execute(event)
1414

1515
class RemoveMessageStrategy < ModerationStrategy
1616
def condition(event)
17-
case analysed = sentiment_analysis(event.message.content)
17+
case analysed = sentiment_analysis(event.message.content, event.user)
1818
when /Positive/i
1919
$logger.info("Sentiment Analysis: Positive")
2020
false
@@ -37,7 +37,7 @@ class WatchListStrategy < ModerationStrategy
3737
def condition(event)
3838
# watched users loop
3939
if @bot.get_watch_list_users(event.server.id.to_i).include?(event.user.id.to_i)
40-
case analysed = sentiment_analysis(event.message.content)
40+
case analysed = sentiment_analysis(event.message.content, event.user)
4141
when /Positive/i
4242
$logger.info("Sentiment Analysis: Positive")
4343
false
@@ -52,7 +52,7 @@ def condition(event)
5252
end
5353

5454
def execute(event)
55-
edited = moderation_rewrite(event.message.content)
55+
edited = moderation_rewrite(event.message.content, event.user)
5656
$logger.info(edited)
5757
reason = "Moderation (rewriting due to negative sentiment)"
5858
event.message.delete(reason)

0 commit comments

Comments
 (0)