From c9bc5be42b9e2d5490f8a31be3f087dea23ef2db Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Tue, 18 Mar 2025 09:56:57 +0800 Subject: [PATCH] add additition navigate fields --- src/browser/browser.zig | 6 ++++- src/telemetry/lightpanda.zig | 49 ++++++++++++++++++++++++++++-------- src/telemetry/telemetry.zig | 7 +++++- 3 files changed, 50 insertions(+), 12 deletions(-) diff --git a/src/browser/browser.zig b/src/browser/browser.zig index c00ae52f..2469c94f 100644 --- a/src/browser/browser.zig +++ b/src/browser/browser.zig @@ -339,7 +339,6 @@ pub const Page = struct { // see Inspector.contextCreated pub fn navigate(self: *Page, uri: []const u8, aux_data: ?[]const u8) !void { const arena = self.arena; - self.session.app.telemetry.record(.{ .navigate = {} }); log.debug("starting GET {s}", .{uri}); @@ -366,6 +365,11 @@ pub const Page = struct { // TODO handle fragment in url. + self.session.app.telemetry.record(.{ .navigate = .{ + .proxy = false, + .tls = std.ascii.eqlIgnoreCase(self.uri.scheme, "https"), + } }); + // load the data var resp = try self.session.loader.get(arena, self.uri); defer resp.deinit(); diff --git a/src/telemetry/lightpanda.zig b/src/telemetry/lightpanda.zig index d77818ac..7a53cd38 100644 --- a/src/telemetry/lightpanda.zig +++ b/src/telemetry/lightpanda.zig @@ -50,12 +50,8 @@ pub const LightPanda = struct { pub fn send(self: *LightPanda, iid: ?[]const u8, run_mode: RunMode, raw_event: telemetry.Event) !void { const event = LightPandaEvent{ .iid = iid, - .driver = if (std.meta.activeTag(raw_event) == .navigate) "cdp" else null, .mode = run_mode, - .os = builtin.os.tag, - .arch = builtin.cpu.arch, - .version = build_info.git_commit, - .event = @tagName(std.meta.activeTag(raw_event)), + .event = raw_event, }; self.mutex.lock(); @@ -119,9 +115,42 @@ pub const LightPanda = struct { const LightPandaEvent = struct { iid: ?[]const u8, mode: RunMode, - driver: ?[]const u8, - os: std.Target.Os.Tag, - arch: std.Target.Cpu.Arch, - version: []const u8, - event: []const u8, + event: telemetry.Event, + + pub fn jsonStringify(self: *const LightPandaEvent, writer: anytype) !void { + try writer.beginObject(); + + try writer.objectField("iid"); + try writer.write(self.iid); + + try writer.objectField("mode"); + try writer.write(self.mode); + + try writer.objectField("os"); + try writer.write(builtin.os.tag); + + try writer.objectField("arch"); + try writer.write(builtin.cpu.arch); + + try writer.objectField("version"); + try writer.write(build_info.git_commit); + + try writer.objectField("event"); + try writer.write(@tagName(std.meta.activeTag(self.event))); + + inline for (@typeInfo(telemetry.Event).Union.fields) |union_field| { + if (self.event == @field(telemetry.Event, union_field.name)) { + const inner = @field(self.event, union_field.name); + const TI = @typeInfo(@TypeOf(inner)); + if (TI == .Struct) { + inline for (TI.Struct.fields) |field| { + try writer.objectField(field.name); + try writer.write(@field(inner, field.name)); + } + } + } + } + + try writer.endObject(); + } }; diff --git a/src/telemetry/telemetry.zig b/src/telemetry/telemetry.zig index c55b4a19..4d170a19 100644 --- a/src/telemetry/telemetry.zig +++ b/src/telemetry/telemetry.zig @@ -93,8 +93,13 @@ fn getOrCreateId(app_dir_path_: ?[]const u8) ?[36]u8 { pub const Event = union(enum) { run: void, - navigate: void, + navigate: Navigate, flag: []const u8, // used for testing + + const Navigate = struct { + tls: bool, + proxy: bool, + }; }; const NoopProvider = struct {