Esempio n. 1
0
        public BacktraceJObject ToJson()
        {
            if (_serializedAnnotations != null)
            {
                return(_serializedAnnotations as BacktraceJObject);
            }
            var annotations  = new BacktraceJObject();
            var envVariables = new BacktraceJObject();

            foreach (var envVariable in EnvironmentVariables)
            {
                envVariables[envVariable.Key] = envVariable.Value ?? string.Empty;
            }
            annotations[ENVIRONMENT_VARIABLE_KEY] = envVariables;

            if (GameObjectDepth > -1)
            {
                var activeScene = SceneManager.GetActiveScene();

                var gameObjects = new JArray();

                var rootObjects = new List <GameObject>();
                activeScene.GetRootGameObjects(rootObjects);
                foreach (var gameObject in rootObjects)
                {
                    gameObjects.Add(ConvertGameObject(gameObject));
                }
                annotations["Game objects"] = gameObjects;
            }


            return(annotations);
        }
 public void Post(string submissionUrl, BacktraceJObject jObject, Action <long, bool, string> onComplete)
 {
     NumberOfRequests++;
     Called = true;
     OnInvoke?.Invoke(submissionUrl, jObject);
     onComplete?.Invoke(StatusCode, IsHttpError, Response);
 }
Esempio n. 3
0
        /// <summary>
        /// Convert Backtrace report to JSON
        /// </summary>
        /// <returns>Backtrace report JSON representation</returns>
        public string ToJson()
        {
            var reportStackTrace = new JArray();

            foreach (var diagnosticFrame in DiagnosticStack)
            {
                reportStackTrace.Add(diagnosticFrame.ToJson());
            }

            var attributes = new BacktraceJObject();

            foreach (var value in Attributes)
            {
                attributes[value.Key] = value.Value.ToString();
            }

            var report = new BacktraceJObject()
            {
                { "Fingerprint", Fingerprint },
                { "Factor", Factor },
                { "Uuid", Uuid.ToString() },
                { "Timestamp", Timestamp },
                { "ExceptionTypeReport", ExceptionTypeReport },
                { "Classifier", Classifier },
                { "message", Message },
                { "minidumpFile", MinidumpFile },
                { "attachmentPaths", new JArray(AttachmentPaths) },
                { "diagnosticStack", reportStackTrace },
                { "attributes", attributes }
            };

            return(report.ToString());
        }
        /// <summary>
        /// Post Backtrace JObject to server
        /// </summary>
        /// <param name="submissionUrl">Submission URL</param>
        /// <param name="jObject">Backtrace JObject</param>
        /// <param name="onComplete">On complete callback</param>
        /// <returns>Async operation</returns>
        public void Post(string submissionUrl, BacktraceJObject jObject, Action <long, bool, string> onComplete)
        {
            UnityWebRequest request = new UnityWebRequest(submissionUrl, "POST")
            {
                timeout = RequestTimeout
            };

            request.IgnoreSsl(IgnoreSslValidation);

            var bytes = Encoding.UTF8.GetBytes(jObject.ToJson());

            request.uploadHandler   = (UploadHandler) new UploadHandlerRaw(bytes);
            request.downloadHandler = (DownloadHandler) new DownloadHandlerBuffer();

            request.SetJsonContentType();
            var asyncOperation = request.SendWebRequest();

            asyncOperation.completed += (AsyncOperation operation) =>
            {
                var statusCode   = request.responseCode;
                var response     = request.downloadHandler.text;
                var networkError = request.ReceivedNetworkError();
                request.Dispose();
                if (onComplete != null)
                {
                    onComplete.Invoke(statusCode, networkError, response);
                }
            };
        }
        public IEnumerator TestDataSerialization_ShouldSerializeArray_DataSerializeCorrectly()
        {
            var sampleObject = new SampleObject()
            {
                StringArray = new string[] { "foo", "bar" },
                NumberArray = new int[] { 1, 2, 3, 4 }
            };

            var jObject = new BacktraceJObject();

            jObject.Add("StringArray", sampleObject.StringArray);
            jObject.Add("NumberArray", sampleObject.NumberArray);

            var json = jObject.ToJson();
            var deserializedObject = JsonUtility.FromJson <SampleObject>(json);

            for (int i = 0; i < sampleObject.StringArray.Length; i++)
            {
                Assert.AreEqual(sampleObject.StringArray[i], deserializedObject.StringArray[i]);
            }

            for (int i = 0; i < sampleObject.NumberArray.Length; i++)
            {
                Assert.AreEqual(sampleObject.NumberArray[i], deserializedObject.NumberArray[i]);
            }


            yield return(null);
        }
        public IEnumerator TestDataSerialization_JsonWithCharactersToEscape_ShouldEscapeCorrectly()
        {
            var expected = new EmptyCharacters()
            {
                doubleQuote    = "\"",
                slash          = "\\",
                newLine        = "\n",
                tab            = "\t",
                carriageReturn = "\r"
            };

            var jObject = new BacktraceJObject();

            jObject.Add("doubleQuote", expected.doubleQuote);
            jObject.Add("slash", expected.slash);
            jObject.Add("newLine", expected.newLine);
            jObject.Add("tab", expected.tab);
            jObject.Add("carriageReturn", expected.carriageReturn);


            var json       = jObject.ToJson();
            var emptyChars = JsonUtility.FromJson <EmptyCharacters>(json);

            Assert.AreEqual(expected.doubleQuote, emptyChars.doubleQuote);
            Assert.AreEqual(expected.slash, emptyChars.slash);
            Assert.AreEqual(expected.newLine, emptyChars.newLine);
            Assert.AreEqual(expected.tab, emptyChars.tab);
            Assert.AreEqual(expected.carriageReturn, emptyChars.carriageReturn);
            yield return(null);
        }
        public IEnumerator TestDataSerialization_BasicVariableUsage_DataSerializeCorrectly()
        {
            var sampleObject = new SampleObject()
            {
                Active       = true,
                AgentName    = "Backtrace-unity",
                IntNumber    = 1,
                FloatNumber  = 12.123f,
                DoubleNumber = 555.432d,
                LongNumber   = 999
            };

            var jObject = new BacktraceJObject();

            jObject.Add("AgentName", sampleObject.AgentName);
            jObject.Add("Active", sampleObject.Active);
            jObject.Add("IntNumber", sampleObject.IntNumber);
            jObject.Add("FloatNumber", sampleObject.FloatNumber);
            jObject.Add("DoubleNumber", sampleObject.DoubleNumber);
            jObject.Add("LongNumber", sampleObject.LongNumber);


            var json = jObject.ToJson();

            var jsonObject = JsonUtility.FromJson <SampleObject>(json);

            Assert.AreEqual(sampleObject.AgentName, jsonObject.AgentName);
            Assert.AreEqual(sampleObject.Active, jsonObject.Active);
            Assert.AreEqual(sampleObject.IntNumber, jsonObject.IntNumber);
            Assert.AreEqual(sampleObject.FloatNumber, jsonObject.FloatNumber);
            Assert.AreEqual(sampleObject.DoubleNumber, jsonObject.DoubleNumber);
            Assert.AreEqual(sampleObject.LongNumber, jsonObject.LongNumber);
            yield return(null);
        }
        public override IEnumerable <JToken> ExecuteFilter(IEnumerable <JToken> current, bool errorWhenNoMatch)
        {
            foreach (JToken t in current)
            {
                BacktraceJObject o = t as BacktraceJObject;
                if (o != null)
                {
                    foreach (string name in Names)
                    {
                        JToken v = o[name];

                        if (v != null)
                        {
                            yield return(v);
                        }

                        if (errorWhenNoMatch)
                        {
                            throw new JsonException("Property '{0}' does not exist on JObject.".FormatWith(CultureInfo.InvariantCulture, name));
                        }
                    }
                }
                else
                {
                    if (errorWhenNoMatch)
                    {
                        throw new JsonException("Properties {0} not valid on {1}.".FormatWith(CultureInfo.InvariantCulture, string.Join(", ", Names.Select(n => "'" + n + "'").ToArray()), t.GetType().Name));
                    }
                }
            }
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (reader.TokenType == JsonToken.Null)
            {
                return(new Matrix4x4());
            }

            var obj = BacktraceJObject.Load(reader);

            return(new Matrix4x4
            {
                m00 = (float)obj["m00"],
                m01 = (float)obj["m01"],
                m02 = (float)obj["m02"],
                m03 = (float)obj["m03"],
                m20 = (float)obj["m20"],
                m21 = (float)obj["m21"],
                m22 = (float)obj["m22"],
                m23 = (float)obj["m23"],
                m30 = (float)obj["m30"],
                m31 = (float)obj["m31"],
                m32 = (float)obj["m32"],
                m33 = (float)obj["m33"]
            });
        }
        private BacktraceJObject CreatePayloadMetadata()
        {
            var payload = new BacktraceJObject();

            payload.Add("dropped_events", _numberOfDroppedRequests);
            return(payload);
        }
Esempio n. 11
0
        public string ToJson()
        {
            var reportStackTrace = new JArray();

            foreach (var diagnosticFrame in DiagnosticStack)
            {
                reportStackTrace.Add(diagnosticFrame.ToJson());
            }

            var attributes = new BacktraceJObject();

            foreach (var value in Attributes)
            {
                attributes[value.Key] = value.Value.ToString();
            }

            var report = new BacktraceJObject()
            {
                ["Fingerprint"]         = Fingerprint,
                ["Factor"]              = Factor,
                ["Uuid"]                = Uuid.ToString(),
                ["Timestamp"]           = Timestamp,
                ["ExceptionTypeReport"] = ExceptionTypeReport,
                ["Classifier"]          = Classifier,
                ["message"]             = Message,
                ["minidumpFile"]        = MinidumpFile,
                ["attachmentPaths"]     = new JArray(AttachmentPaths),
                ["diagnosticStack"]     = reportStackTrace,
                ["attributes"]          = attributes
            };

            return(report.ToString());
        }
        public IEnumerator TestDataSerialization_WithOnlyJObject_DataSerializeCorrectly()
        {
            // this test should validate if we can start analysing new data type without previous data types
            var sampleObject = new BaseJObject()
            {
                InnerObject = new SampleObject()
                {
                    Active = true
                }
            };

            var sampleJObject = new BacktraceJObject();
            var innerJObject  = new BacktraceJObject();

            innerJObject.Add("Active", sampleObject.InnerObject.Active);
            sampleJObject.Add("InnerObject", innerJObject);


            var json       = sampleJObject.ToJson();
            var jsonObject = JsonUtility.FromJson <BaseJObject>(json);

            Assert.IsNotNull(jsonObject);
            Assert.IsNotNull(jsonObject.InnerObject);
            Assert.IsTrue(jsonObject.InnerObject.Active);
            yield return(null);
        }
        public IEnumerator TestStringEscapingInSerialization_WithJObject_DataSerializeCorrectly()
        {
            // this test should validate if we can escape correctly strings from user predefined values

            var sampleObject = new BaseJObject()
            {
                InnerObject = new SampleObject()
                {
                    AgentName  = "\"\\!@#$%^&*()+_=-{}{[]:\\\n\r\f\r ",
                    TestString = "\b\t\\\n\"''"
                }
            };
            var jObject      = new BacktraceJObject();
            var innerJObject = new BacktraceJObject();

            innerJObject.Add("AgentName", sampleObject.InnerObject.AgentName);
            innerJObject.Add("TestString", sampleObject.InnerObject.TestString);
            jObject.Add("InnerObject", innerJObject);


            var json       = jObject.ToJson();
            var jsonObject = JsonUtility.FromJson <BaseJObject>(json);

            Assert.IsNotNull(jsonObject);
            Assert.AreEqual(sampleObject.InnerObject.AgentName, jsonObject.InnerObject.AgentName);
            Assert.AreEqual(sampleObject.InnerObject.TestString, jsonObject.InnerObject.TestString);
            yield return(null);
        }
        public BacktraceJObject ToJson()
        {
            var stackFrame = new BacktraceJObject(new Dictionary<string, string>()
            {
                ["funcName"] = FunctionName,
                ["path"] = FileName,
                ["metadata_token"] = MemberInfo,
                ["assembly"] = Assembly
            });

            stackFrame.Add("address", ILOffset);
            if (!string.IsNullOrEmpty(Library) && !(Library.StartsWith("<") && Library.EndsWith(">")))
            {
                stackFrame.Add("library", Library);
            }

            if (Line != 0)
            {
                stackFrame.Add("line", Line);
            }

            if (Column != 0)
            {
                stackFrame.Add("column", Column);
            }

            if (!string.IsNullOrEmpty(SourceCode))
            {
                stackFrame.Add("sourceCode", SourceCode);
            }

            return stackFrame;
        }
        public IEnumerator TestDataSerialization_WithInnerJObjectAndComplexArray_DataSerializeCorrectly()
        {
            // this test should validate if we can start analysing new data type without previous data types
            var sampleObject = new BaseJObject()
            {
                InnerObject = new SampleObject()
                {
                    NumberArray = new int[] { 1, 2, 3, 4 }
                }
            };

            var sampleJObject = new BacktraceJObject();
            var innerJObject  = new BacktraceJObject();

            innerJObject.Add("NumberArray", sampleObject.InnerObject.NumberArray);
            sampleJObject.Add("InnerObject", innerJObject);


            var json       = sampleJObject.ToJson();
            var jsonObject = JsonUtility.FromJson <BaseJObject>(json);

            Assert.IsNotNull(jsonObject);
            Assert.IsNotNull(jsonObject.InnerObject);
            // validate number array
            for (int i = 0; i < jsonObject.InnerObject.NumberArray.Length; i++)
            {
                Assert.AreEqual(jsonObject.InnerObject.NumberArray[i], jsonObject.InnerObject.NumberArray[i]);
            }
            yield return(null);
        }
Esempio n. 16
0
        public BacktraceJObject ToJson()
        {
            var annotations = new BacktraceJObject();

            annotations.Add("Environment Variables", new BacktraceJObject(EnvironmentVariables));

            if (Exception != null)
            {
                annotations.Add("Exception properties", new BacktraceJObject(new Dictionary <string, string>()
                {
                    { "message", Exception.Message },
                    { "stackTrace", Exception.StackTrace },
                    { "type", Exception.GetType().FullName },
                    { "source", Exception.Source },
                }));
            }
            if (_gameObjectDepth > -1)
            {
                var activeScene = SceneManager.GetActiveScene();
                var gameObjects = new List <BacktraceJObject>();
                var rootObjects = new List <GameObject>();
                activeScene.GetRootGameObjects(rootObjects);
                foreach (var gameObject in rootObjects)
                {
                    gameObjects.Add(ConvertGameObject(gameObject));
                }
                annotations.Add("Game objects", gameObjects);
            }
            return(annotations);
        }
Esempio n. 17
0
        internal BacktraceJObject ToBaseObject(IDictionary <string, string> attributes)
        {
            var jObject = new BacktraceJObject();

            jObject.Add(TimestampName, Timestamp);
            jObject.Add(AttributesName, new BacktraceJObject(attributes));
            return(jObject);
        }
        internal virtual BacktraceJObject CreateJsonPayload(ICollection <T> events)
        {
            var jsonData = new BacktraceJObject();

            jsonData.Add("application", _applicationName);
            jsonData.Add("appversion", _applicationVersion);
            jsonData.Add("metadata", CreatePayloadMetadata());
            jsonData.Add(_name, GetEventsPayload(events));
            return(jsonData);
        }
        public BacktraceJObject ToJson()
        {
            var attr = new BacktraceJObject();

            foreach (var attribute in Attributes)
            {
                attr[attribute.Key] = attribute.Value.ToString();
            }
            return(attr);
        }
Esempio n. 20
0
        public BacktraceJObject ToJson()
        {
            var threadData = new BacktraceJObject();

            foreach (var threadInfo in ThreadInformations)
            {
                threadData[threadInfo.Key] = threadInfo.Value.ToJson();
            }
            return(threadData);
        }
        public IEnumerator TestDataSerialization_EmptyJson_ShouldCreateEmptyJson()
        {
            var jObject        = new BacktraceJObject();
            var json           = jObject.ToJson();
            var expectedResult = "{}";

            Assert.IsNotEmpty(json);
            Assert.AreEqual(expectedResult, json);

            yield return(null);
        }
 internal static BacktraceStackFrame Deserialize(BacktraceJObject frame)
 {
     return(new BacktraceStackFrame()
     {
         FunctionName = frame.Value <string>("funcName"),
         Line = frame.Value <int>("line"),
         Il = frame.Value <int?>("il"),
         MemberInfo = frame.Value <int?>("metadata_token"),
         Column = frame.Value <int>("column"),
         ILOffset = frame.Value <int?>("address"),
     });
 }
        internal BacktraceJObject ToJson()
        {
            var annotations  = new BacktraceJObject();
            var envVariables = new BacktraceJObject();

            foreach (var envVariable in EnvironmentVariables)
            {
                envVariables[envVariable.Key] = envVariable.Value?.ToString() ?? string.Empty;
            }
            annotations["Environment Variables"] = envVariables;
            return(annotations);
        }
        internal JsonSchema Read(JsonReader reader)
        {
            JToken schemaToken = JToken.ReadFrom(reader);

            _rootSchema = schemaToken as BacktraceJObject;

            JsonSchema schema = BuildSchema(schemaToken);

            ResolveReferences(schema);

            return(schema);
        }
Esempio n. 25
0
        private BacktraceJObject GetJObject(Component gameObject, string parentName = "")
        {
            var o = new BacktraceJObject();

            o["name"] = gameObject.name;
            o["transform.position"] = gameObject.transform.position.ToString() ?? "";
            o["transform.rotation"] = gameObject.transform.rotation.ToString() ?? "";
            o["tag"]        = gameObject.tag;
            o["hideFlags"]  = (int)gameObject.hideFlags;
            o["instanceId"] = gameObject.GetInstanceID();
            o["parnetName"] = string.IsNullOrEmpty(parentName) ? "root object" : parentName;
            return(o);
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var obj = BacktraceJObject.Load(reader);

            var result = new Resolution
            {
                height      = (int)obj["height"],
                width       = (int)obj["width"],
                refreshRate = (int)obj["refreshRate"]
            };

            return(result);
        }
        private static Vector2 PopulateVector2(JsonReader reader)
        {
            var result = new Vector2();

            if (reader.TokenType != JsonToken.Null)
            {
                var jo = BacktraceJObject.Load(reader);
                result.x = jo["x"].Value <float>();
                result.y = jo["y"].Value <float>();
            }

            return(result);
        }
        public IEnumerator TestDataSerialization_WithComplexValues_DataSerializeCorrectly()
        {
            var sampleObject = new SampleObject()
            {
                Active      = true,
                AgentName   = "Backtrace-unity",
                LongNumber  = 999,
                NumberArray = new int[] { 1, 2, 3, 4 },
                StringArray = new string[] { string.Empty, null, "foo", "bar" },
                StringList  = new List <string> {
                    string.Empty, null, "foo", "bar"
                }
            };

            var jObject = new BacktraceJObject();

            jObject.Add("AgentName", sampleObject.AgentName);
            jObject.Add("Active", sampleObject.Active);
            jObject.Add("LongNumber", sampleObject.LongNumber);
            jObject.Add("NumberArray", sampleObject.NumberArray);
            jObject.Add("StringArray", sampleObject.StringArray);
            jObject.Add("StringList", sampleObject.StringList);


            var json = jObject.ToJson();

            var jsonObject = JsonUtility.FromJson <SampleObject>(json);

            Assert.AreEqual(sampleObject.AgentName, jsonObject.AgentName);
            // validate number array
            for (int i = 0; i < sampleObject.NumberArray.Length; i++)
            {
                Assert.AreEqual(jsonObject.NumberArray[i], sampleObject.NumberArray[i]);
            }
            // validate string array
            for (int i = 0; i < sampleObject.StringArray.Length; i++)
            {
                // handle empty strings
                var expectedValue = string.IsNullOrEmpty(sampleObject.StringArray[i]) ? string.Empty : sampleObject.StringArray[i];
                Assert.AreEqual(jsonObject.StringArray[i], expectedValue);
            }

            // validate string list
            for (int i = 0; i < sampleObject.StringList.Count; i++)
            {
                var expectedValue = string.IsNullOrEmpty(sampleObject.StringList[i]) ? string.Empty : sampleObject.StringList[i];
                Assert.AreEqual(jsonObject.StringList[i], expectedValue);
            }

            yield return(null);
        }
Esempio n. 29
0
        public static BacktraceResult FromJson(string json)
        {
            var @object = BacktraceJObject.Parse(json);

            return(new BacktraceResult()
            {
                Object = @object.Value <string>("object"),
                Message = @object.Value <string>("message"),
                RxId = @object.Value <string>("_rxid"),
                Status = @object.Value <string>("response") == "ok"
                    ? BacktraceResultStatus.Ok
                    : BacktraceResultStatus.ServerError
            });
        }
Esempio n. 30
0
        /// <summary>
        /// Convert Source code integration into JSON object
        /// </summary>
        /// <returns>Source code BacktraceJObject</returns>
        internal BacktraceJObject ToJson()
        {
            var json       = new BacktraceJObject();
            var sourceCode = new BacktraceJObject();

            sourceCode["id"]            = Id;
            sourceCode["type"]          = Type;
            sourceCode["title"]         = Title;
            sourceCode["highlightLine"] = HighlightLine;
            sourceCode["text"]          = Text;

            json[Id.ToString()] = sourceCode;
            return(json);
        }