diff options
author | 2021-10-05 03:11:35 -0700 | |
---|---|---|
committer | 2021-10-05 03:11:35 -0700 | |
commit | dfe74cb5c485f14793499d05539aac17f50822d9 (patch) | |
tree | 7804ed7d59d563ae347767f7940d1a7490e91d93 /src/analytics/analytics_thread.zig | |
parent | 00e7b7c3d53e41ff3df264bfe382a8fa70bb0b9d (diff) | |
download | bun-dfe74cb5c485f14793499d05539aac17f50822d9.tar.gz bun-dfe74cb5c485f14793499d05539aac17f50822d9.tar.zst bun-dfe74cb5c485f14793499d05539aac17f50822d9.zip |
Add `BUN_DISABLE_ANALYTICS` flag to disable analytics and automatically disable analytics when running inside `hyperfine`
Diffstat (limited to 'src/analytics/analytics_thread.zig')
-rw-r--r-- | src/analytics/analytics_thread.zig | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/analytics/analytics_thread.zig b/src/analytics/analytics_thread.zig index 0b986af18..2f4998c66 100644 --- a/src/analytics/analytics_thread.zig +++ b/src/analytics/analytics_thread.zig @@ -17,6 +17,8 @@ pub const EventName = enum(u8) { http_build, }; +var random: std.rand.DefaultPrng = undefined; + const platform_arch = if (Environment.isAarch64) Analytics.Architecture.arm else Analytics.Architecture.x64; pub const Event = struct { @@ -60,6 +62,7 @@ pub const GenerateHeader = struct { .machine_id = GenerateMachineID.forMac() catch Analytics.Uint64{}, .platform = GeneratePlatform.forMac(), .build_id = comptime @truncate(u32, Global.build_id), + .session_id = random.random.int(u32), }; } @@ -68,6 +71,7 @@ pub const GenerateHeader = struct { .machine_id = GenerateMachineID.forLinux() catch Analytics.Uint64{}, .platform = GeneratePlatform.forLinux(), .build_id = comptime @truncate(u32, Global.build_id), + .session_id = random.random.int(u32), }; } @@ -166,6 +170,7 @@ pub fn enqueue(comptime name: EventName) void { if (!has_loaded) { defer has_loaded = true; + event_queue = EventQueue.init(std.heap.c_allocator); spawn() catch |err| { if (comptime isDebug) { @@ -218,8 +223,6 @@ pub const EventList = struct { out_buffer: MutableString, in_buffer: std.ArrayList(u8), - var random: std.rand.DefaultPrng = undefined; - pub fn init() EventList { random = std.rand.DefaultPrng.init(@intCast(u64, std.time.milliTimestamp())); return EventList{ @@ -249,6 +252,7 @@ pub const EventList = struct { } pub var is_stuck = false; + var stuck_count: u8 = 0; fn _flush(this: *EventList) !void { this.in_buffer.clearRetainingCapacity(); @@ -327,6 +331,9 @@ pub const EventList = struct { } @atomicStore(bool, &is_stuck, retry_remaining == 0, .Release); + stuck_count += @intCast(u8, @boolToInt(retry_remaining == 0)); + stuck_count *= @intCast(u8, @boolToInt(retry_remaining == 0)); + disabled = disabled or stuck_count > 4; this.in_buffer.clearRetainingCapacity(); this.out_buffer.reset(); |