Telemetry: Send batched events
What does this merge request do and why?
Prior this commit, flushing events caused GitLab SDK to send events individually using GET requests. This caused delays in the GDK command when it was interrupted (CTRL+C) or before it finished.
This commit increase the buffer size of events which makes GitLab SDK to send batched events using POST to the server.
Overall, this reduces the runtime of sending events from ~9s to ~2s for
gdk reconfigure command.
How to set up and validate locally
- Enable telemetry via
gdk telemetry - Run
gdk reconfigure - Verify in "Clickhouse Cloud" that all events are sent to the GDK project
Before
$ rg took: events.log
36:I, [2025-02-07T16:34:27.460141 #143792] INFO -- : took: 0.14513966599952255
60:I, [2025-02-07T16:34:28.083596 #143893] INFO -- : took: 0.14891107699986605
84:I, [2025-02-07T16:34:28.634065 #143907] INFO -- : took: 0.14098936099981074
120:I, [2025-02-07T16:34:29.653434 #143950] INFO -- : took: 0.13694271799977287
172:I, [2025-02-07T16:34:30.737217 #144355] INFO -- : took: 0.1367540880000888
176:I, [2025-02-07T16:34:30.748609 #144354] INFO -- : took: 0.15023922000000312
184:I, [2025-02-07T16:34:30.836347 #144476] INFO -- : took: 0.14197196799977974
188:I, [2025-02-07T16:34:30.850412 #144478] INFO -- : took: 0.14362148999862256
645:I, [2025-02-07T16:34:40.624526 #145234] INFO -- : took: 7.758297200000015
661:I, [2025-02-07T16:34:41.078928 #143346] INFO -- : took: 0.42740831800074375
$ rg -I -r '$1' -o 'took: (\S+)' events.log | paste -s -d+ | bc
9.33027510599822518
After
$ rg took: events-parallel.log
27:I, [2025-02-07T16:33:53.056641 #141602] INFO -- : took: 0.14396146900071471
35:I, [2025-02-07T16:33:53.659878 #141697] INFO -- : took: 0.14350753399958194
42:I, [2025-02-07T16:33:54.196404 #141707] INFO -- : took: 0.14932274200145912
49:I, [2025-02-07T16:33:55.211053 #141742] INFO -- : took: 0.1449820340003498
80:I, [2025-02-07T16:33:56.273942 #142138] INFO -- : took: 0.14145410300079675
83:I, [2025-02-07T16:33:56.281255 #142141] INFO -- : took: 0.15049594300035096
86:I, [2025-02-07T16:33:56.393341 #142259] INFO -- : took: 0.14611662199968123
89:I, [2025-02-07T16:33:56.400132 #142264] INFO -- : took: 0.1558429940014321
120:I, [2025-02-07T16:33:59.301435 #143018] INFO -- : took: 0.7170194649988844
127:I, [2025-02-07T16:33:59.459023 #141150] INFO -- : took: 0.14551586299967312
$ rg -I -r '$1' -o 'took: (\S+)' events-parallel.log | paste -s -d+ | bc
2.03821876900292413
But how?
Click to expand
diff --git a/lib/gdk/telemetry.rb b/lib/gdk/telemetry.rb
index d2414ede..ee488963 100644
--- a/lib/gdk/telemetry.rb
+++ b/lib/gdk/telemetry.rb
@@ -145,7 +145,12 @@ module GDK
end
end
+require 'logger'
+logger = Logger.new('events.log', 1)
+GDK::Telemetry.client.instance_variable_get(:@tracker).instance_variable_get(:@emitters).first.instance_variable_set(:@logger, logger)
+
at_exit do
# Flush all pending events synchronously before exit.
- GDK::Telemetry.flush_events
+ took = Benchmark.realtime { GDK::Telemetry.flush_events }
+ logger.info("took: #{took}")
end
Impacted categories
The following categories relate to this merge request:
-
gdk-reliability - e.g. When a GDK action fails to complete. -
gdk-usability - e.g. Improvements or suggestions around how the GDK functions. -
gdk-performance - e.g. When a GDK action is slow or times out.
Merge request checklist
-
This change is backward compatible. If not, please include steps to communicate to our users. -
Tests added for new functionality. If not, please raise an issue to follow-up. -
Documentation added/updated, if needed. -
Announcement added, if change is notable. -
gdk doctortest added, if needed.
Edited by Peter Leitzen