diff --git a/src/crash/sentry_envelope.zig b/src/crash/sentry_envelope.zig index 6b675554c..3c4fce2ea 100644 --- a/src/crash/sentry_envelope.zig +++ b/src/crash/sentry_envelope.zig @@ -349,6 +349,100 @@ pub const EncodedItem = struct { payload: []const u8, }; + +pub const SessionStatus = enum { + // Session is healthy, will never happend crash reporting + ok, + // Session terminated normally, will never happend crash reporting + exited, + // Session crashed + crashed, + // Session exited in an abnormal state that is not crash + abnormal, +}; + +pub const SessionAttrs = struct { + // Sentry release ID (release) + release: []const u8, + + // Sentry environment + // Feel like it should be an enum, but possible values not provided + environment: []const u8, + // Sentry docs does say it's required, but also that is not persisted + ip_address: ?[]const u8, + // Sentry docs does say it's required, but also that is not persisted + user_agent: ?[]const u8, + +}; + + +/// A sentry session +/// +/// https://develop.sentry.dev/sdk/data-model/envelope-items/#session +pub const Session = struct { + + // Session start datetime string, ISO format + started: []const u8, + + // Unique session id generated by the client, it can be + // empty for sessions in exited state + sid: ?[]const u8, + + // Distinct id, should identify a machine or a user. It is an hash + did: ?[]const u8, + + // Sequential number, logical clock, defaults to current unix + // timestamp in milliseconds + seq: ?u64, + + // Timestamp of session change event, not sure of its meaning for crash handling + // Datetime string, ISO format + timestamp: ?[]const u8, + + // Denotes that an event is the first recorded one for a specific session + init: ?bool = false, + + // Represents the length of a session in seconds + duration: ?f64, + + // The current status of the session, tracks reason of + // termination, should not be different from "crashed" + status: ?SessionStatus, + + // Number of errors encountered during the session. The crash is + // always counted as an error + errors: u16, + + // From the docs "The mechanism that caused the session to finish + // with an abnormal status...". If useless can be removed + abnormal_mechanism: ?[] const u8, + + attrs: SessionAttrs, + + pub fn decode( + alloc: Allocator, + encoded: EncodedItem, + ) Item.DecodeError!Session { + _ = alloc; + _ = encoded; + + std.debug.print("Decode requested correctly", .{}); + } + + pub fn encode( + self: *Session, + alloc: Allocator, + ) !EncodedItem { + _ = alloc; + _ = self; + + std.debug.print("Encode requested correctly", .{}); + + return .{}; + } +}; + + /// An arbitrary file attachment. /// /// https://develop.sentry.dev/sdk/envelopes/#attachment