Skip to content

Commit 6a5c319

Browse files
authored
Merge pull request #57 from RoushTech/release/0.6.0
Release/0.6.0
2 parents 7437b1a + 07711fa commit 6a5c319

File tree

13 files changed

+308
-195
lines changed

13 files changed

+308
-195
lines changed

CHANGELOG.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
1-
# 0.5.2
1+
# 0.6.0
2+
3+
## Features
4+
<sup>Released: 2017/8/20</sup>
5+
6+
- Upgrade to VS2017/CSProj.
7+
- Add trace frame support.
8+
- Also target NetStandard2.0
9+
10+
# 0.5.2
211
<sup>Released: 2017/4/21</sup>
312

413
## Features

RollbarDotNet.sln

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
3-
# Visual Studio 14
4-
VisualStudioVersion = 14.0.25420.1
3+
# Visual Studio 15
4+
VisualStudioVersion = 15.0.26730.3
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{FBE55ED6-5E60-41F8-B5C0-7C97D04A1A6C}"
77
EndProject
88
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{04899B07-3768-4373-9CB8-1A0DBA28C035}"
99
ProjectSection(SolutionItems) = preProject
1010
CHANGELOG.md = CHANGELOG.md
11-
global.json = global.json
1211
LICENSE.txt = LICENSE.txt
1312
Readme.md = Readme.md
1413
EndProjectSection
1514
EndProject
16-
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "RollbarDotNet", "src\RollbarDotNet\RollbarDotNet.xproj", "{6CF5EF94-87E9-4436-AA9B-072C86B7E572}"
15+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RollbarDotNet", "src\RollbarDotNet\RollbarDotNet.csproj", "{6CF5EF94-87E9-4436-AA9B-072C86B7E572}"
1716
EndProject
18-
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "RollbarDotNet.Tests", "test\RollbarDotNet.Tests\RollbarDotNet.Tests.xproj", "{14F85500-0E09-4DEA-A0D6-DE7B8D4BDED7}"
17+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RollbarDotNet.Tests", "test\RollbarDotNet.Tests\RollbarDotNet.Tests.csproj", "{14F85500-0E09-4DEA-A0D6-DE7B8D4BDED7}"
18+
EndProject
19+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{A7291A6A-8F50-4A1E-BCAC-51A9A88AFDEB}"
1920
EndProject
2021
Global
2122
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -37,6 +38,9 @@ Global
3738
EndGlobalSection
3839
GlobalSection(NestedProjects) = preSolution
3940
{6CF5EF94-87E9-4436-AA9B-072C86B7E572} = {FBE55ED6-5E60-41F8-B5C0-7C97D04A1A6C}
40-
{14F85500-0E09-4DEA-A0D6-DE7B8D4BDED7} = {FBE55ED6-5E60-41F8-B5C0-7C97D04A1A6C}
41+
{14F85500-0E09-4DEA-A0D6-DE7B8D4BDED7} = {A7291A6A-8F50-4A1E-BCAC-51A9A88AFDEB}
42+
EndGlobalSection
43+
GlobalSection(ExtensibilityGlobals) = postSolution
44+
SolutionGuid = {71533B28-842E-4D02-A21A-6BC3B665CAB6}
4145
EndGlobalSection
4246
EndGlobal

global.json

Lines changed: 0 additions & 6 deletions
This file was deleted.
Lines changed: 56 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,74 @@
11
namespace RollbarDotNet.Builder
22
{
33
using System.Collections.Generic;
4+
using System.Diagnostics;
45
using Payloads;
6+
using Trace = Payloads.Trace;
57

68
public class ExceptionBuilder : IExceptionBuilder
79
{
810
public void Execute(Payload payload, System.Exception exception)
911
{
10-
payload.Data.Body.Trace = new Trace();
11-
this.BuildException(payload.Data.Body.Trace.Exception, exception);
12-
this.BuildFrames(payload.Data.Body.Trace.Frames, exception);
12+
if(payload == null)
13+
{
14+
throw new System.ArgumentNullException(nameof(payload));
15+
}
16+
17+
if(exception == null)
18+
{
19+
throw new System.ArgumentNullException(nameof(exception));
20+
}
21+
22+
var traceChain = new List<Trace>();
23+
this.BuildTraceList(exception, traceChain);
24+
if(traceChain.Count > 0)
25+
{
26+
payload.Data.Body.TraceChain = traceChain;
27+
}
1328
}
1429

15-
private void BuildFrames(List<Frame> frames, System.Exception exception)
30+
protected void BuildTraceList(System.Exception exception, List<Trace> traceList)
1631
{
17-
// Frames not supported by .NET Core yet
18-
// https://github.com/dotnet/corefx/issues/1797
32+
var trace = new Trace();
33+
trace.Exception = this.BuildException(exception);
34+
trace.Frames = this.BuildFrames(exception);
35+
traceList.Add(trace);
36+
if (exception.InnerException != null)
37+
{
38+
this.BuildTraceList(exception.InnerException, traceList);
39+
}
40+
}
41+
42+
protected List<Frame> BuildFrames(System.Exception exception)
43+
{
44+
var frames = new List<Frame>();
45+
var stacktrace = new StackTrace(exception, true);
46+
foreach (var stackTraceFrame in stacktrace.GetFrames())
47+
{
48+
var frame = new Frame
49+
{
50+
Filename = stackTraceFrame.GetFileName(),
51+
ColumnNumber = stackTraceFrame.GetFileColumnNumber(),
52+
LineNumber = stackTraceFrame.GetFileLineNumber(),
53+
Method = stackTraceFrame.GetMethod()?.ToString()
54+
};
55+
frames.Add(frame);
56+
}
57+
58+
if (exception.InnerException != null)
59+
{
60+
frames.AddRange(this.BuildFrames(exception.InnerException));
61+
}
62+
63+
return frames;
1964
}
2065

21-
protected void BuildException(Exception payload, System.Exception exception)
66+
protected Exception BuildException(System.Exception exception)
2267
{
23-
payload.Class = exception.GetType().Name;
24-
payload.Message = exception.Message;
25-
payload.Description = exception.StackTrace;
68+
var payloadException = new Exception();
69+
payloadException.Class = exception.GetType().Name;
70+
payloadException.Message = exception.Message;
71+
return payloadException;
2672
}
2773
}
2874
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<Description>Rollbar Integration for .NET Core</Description>
5+
<Copyright>William Roush 2016-2017</Copyright>
6+
<AssemblyTitle>RollbarDotNet</AssemblyTitle>
7+
<VersionPrefix>0.6.0</VersionPrefix>
8+
<Authors>William Roush</Authors>
9+
<AssemblyName>RollbarDotNet</AssemblyName>
10+
<PackageId>RollbarDotNet</PackageId>
11+
<PackageTags>Rollbar;dotnet;Core;Error</PackageTags>
12+
<PackageProjectUrl>https://github.com/RoushTech/RollbarDotNet</PackageProjectUrl>
13+
<PackageLicenseUrl>https://github.com/RoushTech/RollbarDotNet/blob/master/LICENSE.txt</PackageLicenseUrl>
14+
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
15+
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
16+
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
17+
<TargetFrameworks>netstandard1.5;netstandard2.0</TargetFrameworks>
18+
</PropertyGroup>
19+
20+
<ItemGroup>
21+
<PackageReference Include="Newtonsoft.Json" Version="9.0.1" />
22+
<PackageReference Include="System.Diagnostics.FileVersionInfo" Version="4.3.0" />
23+
<PackageReference Include="System.Runtime" Version="4.3.0" />
24+
<PackageReference Include="System.Text.RegularExpressions" Version="4.3.0" />
25+
<PackageReference Include="System.Net.Http" Version="4.3.0" />
26+
<PackageReference Include="System.Diagnostics.StackTrace" Version="4.3.0" />
27+
</ItemGroup>
28+
29+
<PropertyGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
30+
<DefineConstants>$(DefineConstants);NETSTANDARD2</DefineConstants>
31+
</PropertyGroup>
32+
33+
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard1.5' ">
34+
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="1.1.2" />
35+
<PackageReference Include="Microsoft.AspNetCore.Http" Version="1.1.2" />
36+
<PackageReference Include="Microsoft.AspNetCore.Hosting" Version="1.1.2" />
37+
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="1.1.2" />
38+
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="1.1.1" />
39+
<PackageReference Include="Microsoft.Extensions.Options" Version="1.1.2" />
40+
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="1.1.2" />
41+
</ItemGroup>
42+
43+
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
44+
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.0.0" />
45+
<PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.0.0" />
46+
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="2.0.0" />
47+
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.0.0" />
48+
<PackageReference Include="Microsoft.Extensions.Options" Version="2.0.0" />
49+
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="2.0.0" />
50+
51+
</ItemGroup>
52+
53+
</Project>

src/RollbarDotNet/RollbarDotNet.xproj

Lines changed: 0 additions & 21 deletions
This file was deleted.

src/RollbarDotNet/project.json

Lines changed: 0 additions & 45 deletions
This file was deleted.

test/RollbarDotNet.Tests/Builder/ExceptionBuilderTests.cs

Lines changed: 82 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,100 @@
22
{
33
using Payloads;
44
using RollbarDotNet.Builder;
5+
using System;
6+
using System.Diagnostics;
7+
using System.Linq;
58
using Xunit;
69

710
public class ExceptionBuilderTests
811
{
12+
public ExceptionBuilderTests()
13+
{
14+
this.ExceptionBuilder = new ExceptionBuilder();
15+
this.Payload = new Payload();
16+
}
17+
18+
protected ExceptionBuilder ExceptionBuilder { get; set; }
19+
20+
protected Payload Payload { get; set; }
21+
922
[Fact]
1023
public void SetsPayload()
1124
{
12-
var exceptionBuilder = new ExceptionBuilder();
13-
var payload = new Payload();
1425
try
1526
{
1627
throw new System.Exception("test exception");
1728
}
18-
catch(System.Exception exception)
29+
catch (System.Exception exception)
1930
{
20-
exceptionBuilder.Execute(payload, exception);
21-
var payloadException = payload.Data?.Body?.Trace?.Exception;
22-
Assert.Equal("Exception", payloadException?.Class);
23-
Assert.Equal("test exception", payloadException?.Message);
24-
Assert.Equal(exception.StackTrace, payloadException?.Description);
31+
this.ExceptionBuilder.Execute(this.Payload, exception);
32+
var payload = this.Payload.Data?.Body?.TraceChain?.FirstOrDefault();
33+
Assert.Equal("Exception", payload?.Exception?.Class);
34+
Assert.Equal("test exception", payload?.Exception ?.Message);
35+
Assert.True(payload?.Frames?.Count == 1);
36+
var frame = payload?.Frames?.FirstOrDefault();
37+
Assert.Equal("Void SetsPayload()", frame?.Method);
38+
var stackTrace = new StackTrace(exception, true);
39+
var stackTraceFrame = stackTrace.GetFrames().FirstOrDefault();
40+
Assert.Equal(stackTraceFrame.GetFileColumnNumber(), frame?.ColumnNumber);
41+
Assert.Equal(stackTraceFrame.GetFileLineNumber(), frame?.LineNumber);
42+
Assert.Equal(stackTraceFrame.GetFileName(), frame?.Filename);
43+
}
44+
}
45+
46+
[Fact]
47+
public void PayloadCannotBeNull()
48+
{
49+
try
50+
{
51+
throw new System.Exception("Test exception");
52+
}
53+
catch (System.Exception exception)
54+
{
55+
Assert.Throws<ArgumentNullException>(() => this.ExceptionBuilder.Execute(null, exception));
56+
}
57+
}
58+
59+
[Fact]
60+
public void ExceptionCannotBeNull()
61+
{
62+
Assert.Throws<ArgumentNullException>(() => this.ExceptionBuilder.Execute(this.Payload, null));
63+
}
64+
65+
66+
[Fact]
67+
public void BuildsInnerException()
68+
{
69+
try
70+
{
71+
try
72+
{
73+
try
74+
{
75+
throw new InvalidOperationException("inner exception2");
76+
}
77+
catch (System.Exception inner2)
78+
{
79+
throw new InvalidCastException("inner exception", inner2);
80+
}
81+
}
82+
catch (System.Exception inner)
83+
{
84+
throw new System.Exception("test exception", inner);
85+
}
86+
}
87+
catch (System.Exception exception)
88+
{
89+
this.ExceptionBuilder.Execute(this.Payload, exception);
90+
var body = this.Payload.Data?.Body;
91+
Assert.NotNull(body?.TraceChain);
92+
var first = body.TraceChain.First();
93+
Assert.Equal("Exception", first.Exception?.Class);
94+
Assert.Equal("test exception", first.Exception?.Message);
95+
96+
var second = body.TraceChain.Skip(1).First();
97+
Assert.Equal("InvalidCastException", second.Exception?.Class);
98+
Assert.Equal("inner exception", second.Exception?.Message);
2599
}
26100
}
27101
}

0 commit comments

Comments
 (0)