Exemplo n.º 1
0
        /// <summary>
        /// Parses <see cref="SessionUpdate"/> from JSON.
        /// </summary>
        public static SessionUpdate FromJson(JsonElement json)
        {
            var id             = json.GetProperty("sid").GetStringOrThrow().Pipe(SentryId.Parse);
            var distinctId     = json.GetPropertyOrNull("did")?.GetString();
            var startTimestamp = json.GetProperty("started").GetDateTimeOffset();
            var release        = json.GetProperty("attrs").GetProperty("release").GetStringOrThrow();
            var environment    = json.GetProperty("attrs").GetPropertyOrNull("environment")?.GetString();
            var ipAddress      = json.GetProperty("attrs").GetPropertyOrNull("ip_address")?.GetString();
            var userAgent      = json.GetProperty("attrs").GetPropertyOrNull("user_agent")?.GetString();
            var errorCount     = json.GetPropertyOrNull("errors")?.GetInt32() ?? 0;
            var isInitial      = json.GetPropertyOrNull("init")?.GetBoolean() ?? false;
            var timestamp      = json.GetProperty("timestamp").GetDateTimeOffset();
            var sequenceNumber = json.GetProperty("seq").GetInt32();
            var endStatus      = json.GetPropertyOrNull("status")?.GetString()?.ParseEnum <SessionEndStatus>();

            return(new SessionUpdate(
                       id,
                       distinctId,
                       startTimestamp,
                       release,
                       environment,
                       ipAddress,
                       userAgent,
                       errorCount,
                       isInitial,
                       timestamp,
                       sequenceNumber,
                       endStatus));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Parses from JSON.
        /// </summary>
        public static Browser FromJson(JsonElement json)
        {
            var name    = json.GetPropertyOrNull("name")?.GetString();
            var version = json.GetPropertyOrNull("version")?.GetString();

            return(new Browser {
                Name = name, Version = version
            });
        }
Exemplo n.º 3
0
        /// <summary>
        /// Parses from JSON.
        /// </summary>
        public static UserFeedback FromJson(JsonElement json)
        {
            var eventId  = json.GetPropertyOrNull("event_id")?.Pipe(SentryId.FromJson) ?? SentryId.Empty;
            var name     = json.GetPropertyOrNull("name")?.GetString();
            var email    = json.GetPropertyOrNull("email")?.GetString();
            var comments = json.GetPropertyOrNull("comments")?.GetString();

            return(new UserFeedback(eventId, name, email, comments));
        }
Exemplo n.º 4
0
        /// <summary>
        /// Parses from JSON.
        /// </summary>
        public static Gpu FromJson(JsonElement json)
        {
            var name                   = json.GetPropertyOrNull("name")?.GetString();
            var id                     = json.GetPropertyOrNull("id")?.GetInt32();
            var vendorId               = json.GetPropertyOrNull("vendor_id")?.GetString();
            var vendorName             = json.GetPropertyOrNull("vendor_name")?.GetString();
            var memorySize             = json.GetPropertyOrNull("memory_size")?.GetInt32();
            var apiType                = json.GetPropertyOrNull("api_type")?.GetString();
            var multiThreadedRendering = json.GetPropertyOrNull("multi_threaded_rendering")?.GetBoolean();
            var version                = json.GetPropertyOrNull("version")?.GetString();
            var npotSupport            = json.GetPropertyOrNull("npot_support")?.GetString();

            return(new Gpu
            {
                Name = name,
                Id = id,
                VendorId = vendorId,
                VendorName = vendorName,
                MemorySize = memorySize,
                ApiType = apiType,
                MultiThreadedRendering = multiThreadedRendering,
                Version = version,
                NpotSupport = npotSupport
            });
        }
Exemplo n.º 5
0
 private static VideoInfo GetVideoInfo(JsonElement?element)
 {
     return(new()
     {
         ExtractedUrl = element?.GetPropertyOrNull("url")?.GetString(),
         ThumbnailUrl = element?.GetPropertyOrNull("thumbnail")?.GetString(),
         DurationSeconds = element?.GetPropertyOrNull("duration")?.GetDoubleOrNull(),
         Width = element?.GetPropertyOrNull("width")?.GetIntOrNull(),
         Height = element?.GetPropertyOrNull("height")?.GetIntOrNull()
     });
 }
Exemplo n.º 6
0
        /// <summary>
        /// Parses from JSON.
        /// </summary>
        public static SentryMessage FromJson(JsonElement json)
        {
            var message   = json.GetPropertyOrNull("message")?.GetString();
            var @params   = json.GetPropertyOrNull("params")?.EnumerateArray().Select(j => j.GetDynamic()).Where(o => o != null).ToArray();
            var formatted = json.GetPropertyOrNull("formatted")?.GetString();

            return(new SentryMessage
            {
                Message = message,
                Params = @params !,
                Formatted = formatted
            });
Exemplo n.º 7
0
 public string?TryGetVideoPlayabilityError()
 {
     return(_root
            .GetPropertyOrNull("playabilityStatus")?
            .GetPropertyOrNull("reason")?
            .GetString());
 }
Exemplo n.º 8
0
        /// <summary>
        /// Parses from JSON.
        /// </summary>
        public static Runtime FromJson(JsonElement json)
        {
            var name           = json.GetPropertyOrNull("name")?.GetString();
            var version        = json.GetPropertyOrNull("version")?.GetString();
            var rawDescription = json.GetPropertyOrNull("raw_description")?.GetString();
            var build          = json.GetPropertyOrNull("build")?.GetString();

            return(new Runtime
            {
                Name = name,
                Version = version,
                RawDescription = rawDescription,
                Build = build
            });
        }
Exemplo n.º 9
0
        public static PersistedSessionUpdate FromJson(JsonElement json)
        {
            var update         = SessionUpdate.FromJson(json.GetProperty("update"));
            var pauseTimestamp = json.GetPropertyOrNull("paused")?.GetDateTimeOffset();

            return(new PersistedSessionUpdate(update, pauseTimestamp));
        }
Exemplo n.º 10
0
        /// <summary>
        /// Parses from JSON.
        /// </summary>
        public static SentryThread FromJson(JsonElement json)
        {
            var id         = json.GetPropertyOrNull("id")?.GetInt32();
            var name       = json.GetPropertyOrNull("name")?.GetString();
            var crashed    = json.GetPropertyOrNull("crashed")?.GetBoolean();
            var current    = json.GetPropertyOrNull("current")?.GetBoolean();
            var stacktrace = json.GetPropertyOrNull("stacktrace")?.Pipe(SentryStackTrace.FromJson);

            return(new SentryThread
            {
                Id = id,
                Name = name,
                Crashed = crashed,
                Current = current,
                Stacktrace = stacktrace
            });
        }
Exemplo n.º 11
0
        private static IReadOnlyDictionary <string, object?>?ParseExtensions(this JsonElement error)
        {
            if (error.GetPropertyOrNull("extensions") is { ValueKind : JsonValueKind.Object } ext)
            {
                return((IReadOnlyDictionary <string, object?>?)ParseValue(ext));
            }

            return(null);
        }
Exemplo n.º 12
0
        /// <summary>
        /// Parses from JSON.
        /// </summary>
        public static SdkVersion FromJson(JsonElement json)
        {
            // Packages
            var packages =
                json.GetPropertyOrNull("packages")?.EnumerateArray().Select(Package.FromJson).ToArray()
                ?? Array.Empty <Package>();

            // Name
            var name = json.GetPropertyOrNull("name")?.GetString() ?? "dotnet.unknown";

            // Version
            var version = json.GetPropertyOrNull("version")?.GetString() ?? "0.0.0";

            return(new SdkVersion
            {
                InternalPackages = new ConcurrentBag <Package>(packages),
                Name = name,
                Version = version
            });
        }
Exemplo n.º 13
0
        private static IClientError ParseError(JsonElement error)
        {
            var message = error.GetPropertyOrNull("message")?.GetString();

            if (message is null)
            {
                return(new ClientError(JsonErrorParser_ParseError_MessageCannotBeNull));
            }

            IReadOnlyList <object>?  path      = error.ParsePath();
            IReadOnlyList <Location>?locations = error.ParseLocations();
            IReadOnlyDictionary <string, object?>?extensions = error.ParseExtensions();
            var code = error.ParseCode(extensions);

            return(new ClientError(message, code, path, locations, extensions: extensions));
        }
Exemplo n.º 14
0
        /// <summary>
        /// Parses from JSON.
        /// </summary>
        public static Breadcrumb FromJson(JsonElement json)
        {
            var timestamp = json.GetPropertyOrNull("timestamp")?.GetDateTimeOffset();
            var message   = json.GetPropertyOrNull("message")?.GetString();
            var type      = json.GetPropertyOrNull("type")?.GetString();
            var data      = json.GetPropertyOrNull("data")?.GetStringDictionaryOrNull();
            var category  = json.GetPropertyOrNull("category")?.GetString();
            var level     = json.GetPropertyOrNull("level")?.GetString()?.ParseEnum <BreadcrumbLevel>() ?? default;

            return(new Breadcrumb(timestamp, message, type, data !, category, level));
        }
Exemplo n.º 15
0
        public static TEnum?GetEnumOrNull <TEnum>(this JsonElement json, string name)
            where TEnum : struct
        {
            var enumString = json.GetPropertyOrNull(name)?.ToString();

            if (string.IsNullOrWhiteSpace(enumString))
            {
                return(null);
            }

            if (!Enum.TryParse(enumString, true, out TEnum value))
            {
                return(null);
            }

            return(value);
        }
Exemplo n.º 16
0
        /// <summary>
        /// Gets the <see cref="JsonElement"/> that represents a property that matches the specified path.
        ///
        /// Returns null if no matching property is found.
        /// </summary>
        /// <remarks>This currently supports only simple paths, e.g. 'prop1.prop2.prop3'.</remarks>
        public static JsonElement?GetPropertyByPathOrNull(this JsonElement element, string propertyPath)
        {
            var propertyNames = propertyPath.Split('.', StringSplitOptions.RemoveEmptyEntries);

            var currentElement = new JsonElement?(element);

            foreach (var propertyName in propertyNames)
            {
                currentElement = currentElement?.GetPropertyOrNull(propertyName);

                if (currentElement is null)
                {
                    break;
                }
            }

            return(currentElement);
        }
Exemplo n.º 17
0
        private static IReadOnlyList <Location>?ParseLocations(this JsonElement error)
        {
            if (error.GetPropertyOrNull("locations") is { ValueKind : JsonValueKind.Array } locations)
            {
                var array = new Location[locations.GetArrayLength()];
                var i     = 0;

                foreach (JsonElement location in locations.EnumerateArray())
                {
                    array[i++] = new Location(
                        location.GetProperty("line").GetInt32(),
                        location.GetProperty("column").GetInt32());
                }

                return(array);
            }

            return(null);
        }
Exemplo n.º 18
0
        /// <summary>
        /// Parses from JSON.
        /// </summary>
        public static Request FromJson(JsonElement json)
        {
            var env     = json.GetPropertyOrNull("env")?.GetDictionary();
            var other   = json.GetPropertyOrNull("other")?.GetDictionary();
            var headers = json.GetPropertyOrNull("headers")?.GetDictionary();
            var url     = json.GetPropertyOrNull("url")?.GetString();
            var method  = json.GetPropertyOrNull("method")?.GetString();
            var data    = json.GetPropertyOrNull("data")?.GetDynamic();
            var query   = json.GetPropertyOrNull("query_string")?.GetString();
            var cookies = json.GetPropertyOrNull("cookies")?.GetString();

            return(new Request
            {
                InternalEnv = env?.ToDictionary() !,
                InternalOther = other?.ToDictionary() !,
                InternalHeaders = headers?.ToDictionary() !,
                Url = url,
                Method = method,
                Data = data,
                QueryString = query,
                Cookies = cookies
            });
Exemplo n.º 19
0
        private static string?ParseCode(
            this JsonElement error,
            IReadOnlyDictionary <string, object?>?extensions)
        {
            // if we have a top level code property we will take this.
            // While this is not spec compliant with the 2018 spec many people still do this.
            if (error.GetPropertyOrNull("code") is { ValueKind : JsonValueKind.String } code)
            {
                return(code.GetString());
            }

            // if we do not have a top level error code we will check if the extensions
            // dictionary has any field called code.
            if (extensions is not null && extensions.TryGetValue("code", out object?value) &&
                value is string s)
            {
                return(s);
            }

            return(null);
        }
Exemplo n.º 20
0
        private static IReadOnlyList <object>?ParsePath(this JsonElement error)
        {
            if (error.GetPropertyOrNull("path") is { ValueKind : JsonValueKind.Array } path)
            {
                var array = new object[path.GetArrayLength()];
                var i     = 0;

                foreach (JsonElement element in path.EnumerateArray())
                {
                    array[i++] = element.ValueKind switch
                    {
                        JsonValueKind.String => element.GetString() !,
                        JsonValueKind.Number => element.GetInt32(),
                        _ => "NOT_SUPPORTED_VALUE"
                    };
                }

                return(array);
            }

            return(null);
        }
Exemplo n.º 21
0
        /// <summary>
        /// Parses from JSON.
        /// </summary>
        public static App FromJson(JsonElement json)
        {
            var identifier = json.GetPropertyOrNull("app_identifier")?.GetString();
            var startTime  = json.GetPropertyOrNull("app_start_time")?.GetDateTimeOffset();
            var hash       = json.GetPropertyOrNull("device_app_hash")?.GetString();
            var buildType  = json.GetPropertyOrNull("build_type")?.GetString();
            var name       = json.GetPropertyOrNull("app_name")?.GetString();
            var version    = json.GetPropertyOrNull("app_version")?.GetString();
            var build      = json.GetPropertyOrNull("app_build")?.GetString();

            return(new App
            {
                Identifier = identifier,
                StartTime = startTime,
                Hash = hash,
                BuildType = buildType,
                Name = name,
                Version = version,
                Build = build
            });
        }
Exemplo n.º 22
0
        /// <summary>
        /// Parses from JSON.
        /// </summary>
        public static Mechanism FromJson(JsonElement json)
        {
            var data        = json.GetPropertyOrNull("data")?.GetObjectDictionary();
            var meta        = json.GetPropertyOrNull("meta")?.GetObjectDictionary();
            var type        = json.GetPropertyOrNull("type")?.GetString();
            var description = json.GetPropertyOrNull("description")?.GetString();
            var helpLink    = json.GetPropertyOrNull("help_link")?.GetString();
            var handled     = json.GetPropertyOrNull("handled")?.GetBoolean();

            return(new Mechanism
            {
                InternalData = data?.ToDictionary() !,
                InternalMeta = meta?.ToDictionary() !,
                Type = type,
                Description = description,
                HelpLink = helpLink,
                Handled = handled
            });
Exemplo n.º 23
0
        /// <summary>
        /// Parses from JSON.
        /// </summary>
        public static SentryException FromJson(JsonElement json)
        {
            var type       = json.GetPropertyOrNull("type")?.GetString();
            var value      = json.GetPropertyOrNull("value")?.GetString();
            var module     = json.GetPropertyOrNull("module")?.GetString();
            var threadId   = json.GetPropertyOrNull("thread_id")?.GetInt32() ?? 0;
            var stacktrace = json.GetPropertyOrNull("stacktrace")?.Pipe(SentryStackTrace.FromJson);
            var mechanism  = json.GetPropertyOrNull("mechanism")?.Pipe(Mechanism.FromJson);

            return(new SentryException
            {
                Type = type,
                Value = value,
                Module = module,
                ThreadId = threadId,
                Stacktrace = stacktrace,
                Mechanism = mechanism
            });
        }
Exemplo n.º 24
0
        /// <summary>
        /// Parses from JSON.
        /// </summary>
        public static OperatingSystem FromJson(JsonElement json)
        {
            var name           = json.GetPropertyOrNull("name")?.GetString();
            var version        = json.GetPropertyOrNull("version")?.GetString();
            var rawDescription = json.GetPropertyOrNull("raw_description")?.GetString();
            var build          = json.GetPropertyOrNull("build")?.GetString();
            var kernelVersion  = json.GetPropertyOrNull("kernel_version")?.GetString();
            var rooted         = json.GetPropertyOrNull("rooted")?.GetBoolean();

            return(new OperatingSystem
            {
                Name = name,
                Version = version,
                RawDescription = rawDescription,
                Build = build,
                KernelVersion = kernelVersion,
                Rooted = rooted
            });
        }
Exemplo n.º 25
0
        /// <summary>
        /// Parses from JSON.
        /// </summary>
        public static Device FromJson(JsonElement json)
        {
            var timezone            = json.GetPropertyOrNull("timezone")?.GetString()?.Pipe(TimeZoneInfo.FindSystemTimeZoneById);
            var name                = json.GetPropertyOrNull("name")?.GetString();
            var manufacturer        = json.GetPropertyOrNull("manufacturer")?.GetString();
            var brand               = json.GetPropertyOrNull("brand")?.GetString();
            var family              = json.GetPropertyOrNull("family")?.GetString();
            var model               = json.GetPropertyOrNull("model")?.GetString();
            var modelId             = json.GetPropertyOrNull("model_id")?.GetString();
            var architecture        = json.GetPropertyOrNull("arch")?.GetString();
            var batteryLevel        = json.GetPropertyOrNull("battery_level")?.GetInt16();
            var isCharging          = json.GetPropertyOrNull("charging")?.GetBoolean();
            var isOnline            = json.GetPropertyOrNull("online")?.GetBoolean();
            var orientation         = json.GetPropertyOrNull("orientation")?.GetString()?.Pipe(s => s.ParseEnum <DeviceOrientation>());
            var simulator           = json.GetPropertyOrNull("simulator")?.GetBoolean();
            var memorySize          = json.GetPropertyOrNull("memory_size")?.GetInt64();
            var freeMemory          = json.GetPropertyOrNull("free_memory")?.GetInt64();
            var usableMemory        = json.GetPropertyOrNull("usable_memory")?.GetInt64();
            var lowMemory           = json.GetPropertyOrNull("low_memory")?.GetBoolean();
            var storageSize         = json.GetPropertyOrNull("storage_size")?.GetInt64();
            var freeStorage         = json.GetPropertyOrNull("free_storage")?.GetInt64();
            var externalStorageSize = json.GetPropertyOrNull("external_storage_size")?.GetInt64();
            var externalFreeStorage = json.GetPropertyOrNull("external_free_storage")?.GetInt64();
            var screenResolution    = json.GetPropertyOrNull("screen_resolution")?.GetString();
            var screenDensity       = json.GetPropertyOrNull("screen_density")?.GetSingle();
            var screenDpi           = json.GetPropertyOrNull("screen_dpi")?.GetInt32();
            var bootTime            = json.GetPropertyOrNull("boot_time")?.GetDateTimeOffset();

            return(new Device
            {
                Timezone = timezone,
                Name = name,
                Manufacturer = manufacturer,
                Brand = brand,
                Family = family,
                Model = model,
                ModelId = modelId,
                Architecture = architecture,
                BatteryLevel = batteryLevel,
                IsCharging = isCharging,
                IsOnline = isOnline,
                Orientation = orientation,
                Simulator = simulator,
                MemorySize = memorySize,
                FreeMemory = freeMemory,
                UsableMemory = usableMemory,
                LowMemory = lowMemory,
                StorageSize = storageSize,
                FreeStorage = freeStorage,
                ExternalStorageSize = externalStorageSize,
                ExternalFreeStorage = externalFreeStorage,
                ScreenResolution = screenResolution,
                ScreenDensity = screenDensity,
                ScreenDpi = screenDpi,
                BootTime = bootTime
            });
        }
Exemplo n.º 26
0
 public static string Flatten(this JsonElement element) => string.Concat(
     element
     .GetPropertyOrNull("runs")?
     .EnumerateArray()
     .Select(x => x.GetPropertyOrNull("text")?.GetString()) ?? Enumerable.Empty <string>()
     );
Exemplo n.º 27
0
            private static IEnumerable <Task <Feed?> > ParseFeedJson(JsonElement stacc)
            {
                var users     = stacc.GetPropertyOrNull("user").EnumerateObjectOrEmpty();
                var illusts   = stacc.GetPropertyOrNull("illust").EnumerateObjectOrEmpty();
                var novels    = stacc.GetPropertyOrNull("novel").EnumerateObjectOrEmpty();
                var statuses  = stacc.GetPropertyOrNull("status").EnumerateObjectOrEmpty();
                var timelines = stacc.GetPropertyOrNull("timeline").EnumerateObjectOrEmpty();

                return(timelines.SelectNotNull(timeline => Task.Run(() => ParseFeed(timeline))));

                Feed?ParseFeed(JsonProperty timeline)
                {
                    var id     = timeline.Name;
                    var status = statuses.FirstOrNull(st => st.Name == id);

                    if (!status.HasValue)
                    {
                        return(null);
                    }

                    FeedType?feedType = status.Value.GetPropertyString("type") switch
                    {
                        "add_bookmark" => FeedType.AddBookmark,
                        "add_illust" => FeedType.AddIllust,
                        "add_novel_bookmark" => FeedType.AddNovelBookmark,
                        "add_favorite" => FeedType.AddFavorite,
                        _ => null
                    };
                    var feedTargetId = feedType switch
                    {
                        FeedType.AddBookmark or FeedType.AddIllust => status.Value.GetProperty("ref_illust").GetPropertyString("id"),
                        FeedType.AddFavorite => status.Value.GetProperty("ref_user").GetPropertyLong("id").ToString(),                       // long & string in two objects with almost the same properties? f**k pixiv
                        FeedType.AddNovelBookmark => status.Value.GetProperty("ref_novel").GetPropertyString("id"),
                        _ => null
                    };

                    if (feedTargetId is null)
                    {
                        return(null); // a feed with null target ID is considered useless because we cannot track its target
                    }

                    var feedTargetThumbnail = feedType switch
                    {
                        FeedType.AddBookmark or FeedType.AddIllust => illusts.FirstOrNull(i => i.Name == feedTargetId)
                        ?.GetPropertyOrNull("url")
                        ?.GetPropertyOrNull("m")
                        ?.GetString(),
                        FeedType.AddFavorite => users.FirstOrNull(u => u.Name == feedTargetId)
                        ?.GetPropertyOrNull("profile_image")
                        .EnumerateObjectOrEmpty()
                        .FirstOrNull()
                        ?.GetPropertyOrNull("url")
                        ?.GetPropertyOrNull("m")
                        ?.GetString(),
                        FeedType.AddNovelBookmark => novels.FirstOrNull(n => n.Name == feedTargetId)
                        ?.GetPropertyOrNull("url")
                        ?.GetPropertyOrNull("m")
                        ?.GetString(),
                        _ => null
                    };
                    var postDate   = DateTime.ParseExact(status.Value.GetPropertyString("post_date") !, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture.DateTimeFormat, DateTimeStyles.AllowWhiteSpaces);
                    var postUserId = status.Value.GetProperty("post_user").GetPropertyLong("id").ToString();
                    var postUser   = users.FirstOrNull(u => u.Name == postUserId);

                    if (!postUser.HasValue)
                    {
                        return(null);
                    }

                    var postUserName      = postUser.Value.GetPropertyString("name");
                    var postUserThumbnail = postUser.Value
                                            .GetPropertyOrNull("profile_image")
                                            .EnumerateObjectOrEmpty()
                                            .FirstOrNull()
                                            ?.GetPropertyOrNull("url")
                                            ?.GetPropertyOrNull("m")
                                            ?.GetString();
                    var feedObject = new Feed
                    {
                        FeedId            = feedTargetId,
                        FeedThumbnail     = feedTargetThumbnail,
                        Type              = feedType,
                        PostDate          = postDate,
                        PostUserId        = postUserId,
                        PostUserName      = postUserName,
                        PostUserThumbnail = postUserThumbnail
                    };

                    switch (feedType)
                    {
                    case FeedType.AddBookmark or FeedType.AddIllust:
                    {
                        var illustration = illusts.FirstOrNull(i => i.Name == feedTargetId);
                        feedObject.ArtistName = users.FirstOrNull(u => u.Name == (illustration?.GetPropertyOrNull("post_user")?.GetPropertyOrNull("id")?.GetString() ?? string.Empty))?.GetPropertyOrNull("name")?.GetString();
                        feedObject.FeedName   = illustration?.GetPropertyOrNull("title")?.GetString();
                        break;
                    }

                    case FeedType.AddFavorite:
                        feedObject.FeedName             = users.FirstOrNull(u => u.Name == feedTargetId)?.GetPropertyOrNull("name")?.GetString();
                        feedObject.IsTargetRefersToUser = true;
                        break;
                    }

                    return(feedObject);
                }
            }
Exemplo n.º 28
0
 public string?TryGetAuthor()
 {
     return(_root
            .GetPropertyOrNull("author")?
            .GetString());
 }
Exemplo n.º 29
0
        /// <summary>
        /// Parses from JSON.
        /// </summary>
        public static SentryStackFrame FromJson(JsonElement json)
        {
            var preContext         = json.GetPropertyOrNull("pre_context")?.EnumerateArray().Select(j => j.GetString()).ToList();
            var postContext        = json.GetPropertyOrNull("post_context")?.EnumerateArray().Select(j => j.GetString()).ToList();
            var vars               = json.GetPropertyOrNull("vars")?.GetDictionary();
            var framesOmitted      = json.GetPropertyOrNull("frames_omitted")?.EnumerateArray().Select(j => j.GetInt32()).ToList();
            var filename           = json.GetPropertyOrNull("filename")?.GetString();
            var function           = json.GetPropertyOrNull("function")?.GetString();
            var module             = json.GetPropertyOrNull("module")?.GetString();
            var lineNumber         = json.GetPropertyOrNull("lineno")?.GetInt32();
            var columnNumber       = json.GetPropertyOrNull("colno")?.GetInt32();
            var absolutePath       = json.GetPropertyOrNull("abs_path")?.GetString();
            var contextLine        = json.GetPropertyOrNull("context_line")?.GetString();
            var inApp              = json.GetPropertyOrNull("in_app")?.GetBoolean();
            var package            = json.GetPropertyOrNull("package")?.GetString();
            var platform           = json.GetPropertyOrNull("platform")?.GetString();
            var imageAddress       = json.GetPropertyOrNull("image_addr")?.GetInt64() ?? 0;
            var symbolAddress      = json.GetPropertyOrNull("symbol_addr")?.GetInt64();
            var instructionAddress = json.GetPropertyOrNull("instruction_addr")?.GetString();
            var instructionOffset  = json.GetPropertyOrNull("instruction_offset")?.GetInt64();

            return(new SentryStackFrame
            {
                InternalPreContext = preContext !,
                InternalPostContext = postContext !,
                InternalVars = vars?.ToDictionary() !,
                InternalFramesOmitted = framesOmitted,
                FileName = filename,
                Function = function,
                Module = module,
                LineNumber = lineNumber,
                ColumnNumber = columnNumber,
                AbsolutePath = absolutePath,
                ContextLine = contextLine,
                InApp = inApp,
                Package = package,
                Platform = platform,
                ImageAddress = imageAddress,
                SymbolAddress = symbolAddress,
                InstructionAddress = instructionAddress,
                InstructionOffset = instructionOffset
            });
Exemplo n.º 30
0
 public string GetUrl()
 {
     return(_root
            .GetPropertyOrNull("url")?
            .GetString() ??
            _root
            .GetPropertyOrNull("cipher")?
            .GetString()
            .Pipe(Url.SplitQuery)["url"] ??
            _root
            .GetProperty("signatureCipher")
            .GetString()
            .Pipe(Url.SplitQuery)["url"]);
 }