aboutsummaryrefslogtreecommitdiff
path: root/src/analytics/analytics_thread.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-12-18 20:23:10 -0800
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-12-18 20:23:10 -0800
commit430fe09d6dcf0f6bf10460c95d5ac47e51189fc3 (patch)
treefa1c2abedef74b2376158e7fdeb23240d94137fc /src/analytics/analytics_thread.zig
parent5455c71f93360a66af59b70ec569050ba7a28442 (diff)
downloadbun-430fe09d6dcf0f6bf10460c95d5ac47e51189fc3.tar.gz
bun-430fe09d6dcf0f6bf10460c95d5ac47e51189fc3.tar.zst
bun-430fe09d6dcf0f6bf10460c95d5ac47e51189fc3.zip
Delete synchronous HTTP client!
Diffstat (limited to 'src/analytics/analytics_thread.zig')
-rw-r--r--src/analytics/analytics_thread.zig46
1 files changed, 27 insertions, 19 deletions
diff --git a/src/analytics/analytics_thread.zig b/src/analytics/analytics_thread.zig
index e45359ddb..3d5b63e4f 100644
--- a/src/analytics/analytics_thread.zig
+++ b/src/analytics/analytics_thread.zig
@@ -2,7 +2,8 @@ usingnamespace @import("../global.zig");
const sync = @import("../sync.zig");
const std = @import("std");
-const HTTPClient = @import("../http_client.zig");
+const HTTP = @import("http");
+const NetworkThread = @import("network_thread");
const URL = @import("../query_string_map.zig").URL;
const Fs = @import("../fs.zig");
const Analytics = @import("./analytics_schema.zig").analytics;
@@ -349,10 +350,23 @@ fn readloop() anyerror!void {
defer Output.flush();
thread.setName("Analytics") catch {};
- var event_list = EventList.init();
- event_list.client.verbose = FeatureFlags.verbose_analytics;
- event_list.client.header_entries.append(default_allocator, header_entry) catch unreachable;
- event_list.client.header_buf = headers_buf;
+ var event_list = try default_allocator.create(EventList);
+ event_list.* = EventList.init();
+
+ var headers_entries: Headers.Entries = Headers.Entries{};
+ headers_entries.append(default_allocator, header_entry) catch unreachable;
+ event_list.async_http = HTTP.AsyncHTTP.init(
+ default_allocator,
+ .POST,
+ URL.parse(Environment.analytics_url),
+ headers_entries,
+ headers_buf,
+ &event_list.out_buffer,
+ &event_list.in_buffer,
+ std.time.ns_per_ms * 10000,
+ ) catch return;
+
+ event_list.async_http.client.verbose = FeatureFlags.verbose_analytics;
// everybody's random should be random
while (true) {
@@ -372,24 +386,18 @@ fn readloop() anyerror!void {
pub const EventList = struct {
header: Analytics.EventListHeader,
events: std.ArrayList(Event),
- client: HTTPClient,
+ async_http: HTTP.AsyncHTTP,
out_buffer: MutableString,
- in_buffer: std.ArrayList(u8),
+ in_buffer: MutableString,
pub fn init() EventList {
random = std.rand.DefaultPrng.init(@intCast(u64, std.time.milliTimestamp()));
return EventList{
.header = GenerateHeader.generate(),
.events = std.ArrayList(Event).init(default_allocator),
- .in_buffer = std.ArrayList(u8).init(default_allocator),
- .client = HTTPClient.init(
- default_allocator,
- .POST,
- URL.parse(Environment.analytics_url),
- Headers.Entries{},
- "",
- ),
+ .in_buffer = MutableString.init(default_allocator, 1024) catch unreachable,
+ .async_http = undefined,
.out_buffer = MutableString.init(default_allocator, 0) catch unreachable,
};
}
@@ -408,9 +416,9 @@ pub const EventList = struct {
pub var is_stuck = false;
var stuck_count: u8 = 0;
fn _flush(this: *EventList) !void {
- this.in_buffer.clearRetainingCapacity();
+ this.in_buffer.reset();
- const AnalyticsWriter = Writer(*std.ArrayList(u8).Writer);
+ const AnalyticsWriter = Writer(*MutableString.Writer);
var in_buffer = &this.in_buffer;
var buffer_writer = in_buffer.writer();
@@ -456,7 +464,7 @@ pub const EventList = struct {
var retry_remaining: usize = 10;
retry: while (retry_remaining > 0) {
- const response = this.client.send(this.in_buffer.items, &this.out_buffer) catch |err| {
+ const response = this.async_http.sendSync() catch |err| {
if (FeatureFlags.verbose_analytics) {
Output.prettyErrorln("[Analytics] failed due to error {s} ({d} retries remain)", .{ @errorName(err), retry_remaining });
}
@@ -490,7 +498,7 @@ pub const EventList = struct {
stuck_count *= @intCast(u8, @boolToInt(retry_remaining == 0));
disabled = disabled or stuck_count > 4;
- this.in_buffer.clearRetainingCapacity();
+ this.in_buffer.reset();
this.out_buffer.reset();
if (comptime FeatureFlags.verbose_analytics) {