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); }
/// <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); }
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); }
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); }
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); }
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); }
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); }
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 }); }
/// <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); }