Skip to content

Commit 1ab843a

Browse files
Release PR for 2.1.0 (#67)
* Support for response status code and description (#66) * New samples * Adding statusCode as of #48 and refactoring around managing settings for it. * Adding statusCode as of #48 and refactoring around managing settings for it. * Cleanup * Doc * Formatting * Wiping test key (invalidated) * Release 2.1.0 prep
1 parent 6ab01d7 commit 1ab843a

File tree

12 files changed

+205
-44
lines changed

12 files changed

+205
-44
lines changed

CHANGELOG.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ History and Plan
55

66
- Making Raygun4CFML a Coldbox module OR building a Coldbox module wrapper using Raygun4CFML as a dependency.
77
- Add breadcrumbs (#46)
8-
9-
2.0.2 Plan
10-
11-
- Add support for response.statusCode (#48)
128
- Integration and adaptation to Coldbox error reporting, adding CB HMVC app/API samples
139
- Cleanup `legacy` directory
1410

11+
2.1.0 (Jan 21 2025)
12+
13+
- Add support for response.statusCode and statusDescription (#48)
14+
1515
2.0.1 (Jan 13 2025)
1616

1717
- Fixed issue with ACF Content filtering and CGI-Scope

box.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name":"raygun4cfml",
3-
"version":"2.0.1",
4-
"location":"MindscapeHQ/raygun4cfml#2.0.1",
3+
"version":"2.1.0",
4+
"location":"MindscapeHQ/raygun4cfml#2.1.0",
55
"author":"Kai Koenig <kai@ventego-creative.co.nz>",
66
"homepage":"https://github.com/MindscapeHQ/raygun4cfml/",
77
"documentation":"https://github.com/MindscapeHQ/raygun4cfml/blob/master/README.md",
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<cfinclude template="i-am-missing.cfm">

samples/app-cfc-settings/Application.cfc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ component extends="samples.Application" {
4343
.setFullName( "Tester" );
4444

4545
// Increase max payload size to ensure detailed error data is captured
46-
var settings = new com.raygun.environment.RaygunSettings().setRawDataMaxLength( 10000 );
46+
// Set default status code to 418 to indicate that the error responses are from a teapot
47+
var settings = new com.raygun.environment.RaygunSettings().setRawDataMaxLength( 10000 ).setStatusCode( 418 );
4748

4849
var raygun = new com.raygun.RaygunClient(
4950
apiKey = variables.RAYGUNAPIKEY,

server-adobe-2023.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,8 @@
99
"http":{
1010
"port":"9193"
1111
}
12+
},
13+
"scripts":{
14+
"onServerInitialInstall":"cfpm install debugger"
1215
}
1316
}

src/com/raygun/RaygunClient.cfc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,13 +136,13 @@ component accessors="true" {
136136
augmentedIssueData[ "groupingKey" ] = arguments.groupingKey;
137137
}
138138

139-
var message = new message.RaygunMessage();
140139
var raygunSettings = {};
141140
// Only apply settings if they've been properly initialized
142141
if ( isInstanceOf( getSettings(), "RaygunSettings" ) ) {
143142
var raygunSettings = getSettings().getSettings();
144143
}
145-
var messageContent = message.build( augmentedIssueData, raygunSettings );
144+
145+
var messageContent = new message.RaygunMessage( settings = raygunSettings ).build( augmentedIssueData );
146146

147147
// Apply content filtering if configured to protect sensitive data
148148
if (

src/com/raygun/environment/RaygunConfig.cfc

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,11 @@ component {
1111

1212
// Client identifiers used for error tracking and debugging
1313
RAYGUN_CLIENT_NAME = "raygun4cfml";
14-
RAYGUN_CLIENT_VERSION = "2.0.1";
14+
RAYGUN_CLIENT_VERSION = "2.1.0";
1515
RAYGUN_CLIENT_URL = "https://github.com/MindscapeHQ/raygun4cfml";
16+
17+
// New default status code
18+
DEFAULT_STATUS_CODE = 500;
1619
}
1720

1821
/**
@@ -51,4 +54,11 @@ component {
5154
return static.RAYGUN_CLIENT_URL;
5255
}
5356

57+
/**
58+
* Returns the default HTTP status code for error responses.
59+
*/
60+
public static function getDefaultStatusCode() {
61+
return static.DEFAULT_STATUS_CODE;
62+
}
63+
5464
}

src/com/raygun/environment/RaygunSettings.cfc

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,22 @@ component accessors="true" {
88
* This helps prevent memory issues and ensures consistent API payload sizes.
99
*/
1010
property name="rawDataMaxLength" type="numeric";
11+
property name="statusCode" type="numeric";
1112

12-
public RaygunSettings function init( numeric rawDataMaxLength = com.raygun.environment.RaygunConfig::RAW_DATA_MAX_LENGTH_DEFAULT ) {
13+
public RaygunSettings function init(
14+
numeric rawDataMaxLength = com.raygun.environment.RaygunConfig::RAW_DATA_MAX_LENGTH_DEFAULT,
15+
numeric statusCode = com.raygun.environment.RaygunConfig::getDefaultStatusCode()
16+
) {
1317
setRawDataMaxLength( rawDataMaxLength );
18+
setStatusCode( statusCode );
1419
return this;
1520
}
1621

1722
public struct function getSettings() {
18-
return { "rawDataMaxLength" : getRawDataMaxLength() };
23+
return {
24+
"rawDataMaxLength" : getRawDataMaxLength(),
25+
"statusCode" : getStatusCode()
26+
};
1927
}
2028

2129
}

src/com/raygun/message/RaygunMessage.cfc

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,23 @@
66
*/
77
component accessors="true" {
88

9+
property name="settings" type="struct";
10+
911
// Handles the detailed error information including stack traces, request data, etc
1012
property name="raygunMessageDetails" type="RaygunMessageDetails";
1113

12-
public RaygunMessage function init( RaygunMessageDetails raygunMessageDetails = new RaygunMessageDetails() ) {
13-
setRaygunMessageDetails( arguments.raygunMessageDetails );
14+
public RaygunMessage function init(
15+
RaygunMessageDetails raygunMessageDetails,
16+
struct settings = {}
17+
) {
18+
setSettings( arguments.settings );
19+
setRaygunMessageDetails(
20+
!isNull( arguments.raygunMessageDetails ) && isInstanceOf(
21+
arguments.raygunMessageDetails,
22+
"RaygunMessageDetails"
23+
) ? arguments.raygunMessageDetails : new RaygunMessageDetails( settings = getSettings() )
24+
);
25+
1426
return this;
1527
}
1628

@@ -21,21 +33,14 @@ component accessors="true" {
2133
* consistent error chronology across different server timezones.
2234
*
2335
* @issueData The struct containing issue data augmented with Raygun-specific data
24-
* @settings Optional configuration settings that modify message construction
2536
*/
26-
public struct function build(
27-
required struct issueData,
28-
struct settings = {}
29-
) {
37+
public struct function build( required struct issueData ) {
3038
var returnContent = {};
3139
// Convert to UTC for consistent timestamps across different server timezones
3240
var ts = dateConvert( "local2Utc", now() );
3341

3442
returnContent[ "occurredOn" ] = ts.dateFormat( "yyyy-mm-dd" ) & "T" & ts.timeFormat( "HH:mm:ss" ) & "Z";
35-
returnContent[ "details" ] = raygunMessageDetails.build(
36-
arguments.issueData,
37-
arguments.settings
38-
);
43+
returnContent[ "details" ] = raygunMessageDetails.build( arguments.issueData );
3944

4045
return returnContent;
4146
}

src/com/raygun/message/RaygunMessageDetails.cfc

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,58 @@
11
/**
22
* Represents the core message details for a Raygun error report.
33
* This component aggregates all the different aspects of an error report including
4-
* exception details, request information, client data, and environment specifics.
4+
* exception details, request information, client data, environment specifics, and response data.
55
*/
66
component accessors="true" {
77

8+
property name="settings" type="struct";
9+
810
property name="raygunExceptionMessage" type="RaygunExceptionMessage";
911
property name="raygunRequestMessage" type="RaygunRequestMessage";
1012
property name="raygunClientMessage" type="RaygunClientMessage";
1113
property name="raygunEnvironmentMessage" type="RaygunEnvironmentMessage";
14+
property name="raygunResponseMessage" type="RaygunResponseMessage";
1215

1316
public RaygunMessageDetails function init(
14-
RaygunExceptionMessage raygunExceptionMessage = new RaygunExceptionMessage(),
15-
RaygunRequestMessage raygunRequestMessage = new RaygunRequestMessage(),
16-
RaygunClientMessage raygunClientMessage = new RaygunClientMessage(),
17-
RaygunEnvironmentMessage raygunEnvironmentMessage = new RaygunEnvironmentMessage()
17+
RaygunExceptionMessage raygunExceptionMessage,
18+
RaygunRequestMessage raygunRequestMessage,
19+
RaygunClientMessage raygunClientMessage,
20+
RaygunEnvironmentMessage raygunEnvironmentMessage,
21+
RaygunResponseMessage raygunResponseMessage,
22+
struct settings = {}
1823
) {
19-
setRaygunExceptionMessage( arguments.raygunExceptionMessage );
20-
setRaygunRequestMessage( arguments.raygunRequestMessage );
21-
setRaygunClientMessage( arguments.raygunClientMessage );
22-
setRaygunEnvironmentMessage( arguments.raygunEnvironmentMessage );
24+
setSettings( arguments.settings );
25+
setRaygunExceptionMessage(
26+
!isNull( arguments.raygunExceptionMessage ) && isInstanceOf(
27+
arguments.raygunExceptionMessage,
28+
"RaygunExceptionMessage"
29+
) ? arguments.raygunExceptionMessage : new RaygunExceptionMessage()
30+
);
31+
setRaygunRequestMessage(
32+
!isNull( arguments.raygunRequestMessage ) && isInstanceOf(
33+
arguments.raygunRequestMessage,
34+
"RaygunRequestMessage"
35+
) ? arguments.raygunRequestMessage : new RaygunRequestMessage()
36+
);
37+
setRaygunClientMessage(
38+
!isNull( arguments.raygunClientMessage ) && isInstanceOf(
39+
arguments.raygunClientMessage,
40+
"RaygunClientMessage"
41+
) ? arguments.raygunClientMessage : new RaygunClientMessage()
42+
);
43+
setRaygunEnvironmentMessage(
44+
!isNull( arguments.raygunEnvironmentMessage ) && isInstanceOf(
45+
arguments.raygunEnvironmentMessage,
46+
"RaygunEnvironmentMessage"
47+
) ? arguments.raygunEnvironmentMessage : new RaygunEnvironmentMessage()
48+
);
49+
setRaygunResponseMessage(
50+
!isNull( arguments.raygunResponseMessage ) && isInstanceOf(
51+
arguments.raygunResponseMessage,
52+
"RaygunResponseMessage"
53+
) ? arguments.raygunResponseMessage : new RaygunResponseMessage( settings = getSettings() )
54+
);
55+
2356
return this;
2457
}
2558

@@ -29,12 +62,8 @@ component accessors="true" {
2962
* that matches Raygun's API expectations.
3063
*
3164
* @issueData The core error data to be processed
32-
* @settings Optional configuration settings that may affect how the request data is processed
3365
*/
34-
public struct function build(
35-
required struct issueData,
36-
struct settings = {}
37-
) {
66+
public struct function build( required struct issueData ) {
3867
var returnContent = {};
3968

4069
// Grouping key allows for custom error grouping in Raygun's dashboard
@@ -58,9 +87,10 @@ component accessors="true" {
5887

5988
// Build the core components of the error report
6089
returnContent[ "error" ] = raygunExceptionMessage.build( arguments.issueData );
61-
returnContent[ "request" ] = raygunRequestMessage.build( arguments.settings );
90+
returnContent[ "request" ] = raygunRequestMessage.build( getSettings() );
6291
returnContent[ "client" ] = raygunClientMessage.build();
6392
returnContent[ "environment" ] = raygunEnvironmentMessage.build();
93+
returnContent[ "response" ] = raygunResponseMessage.build( arguments.issueData );
6494

6595
// Include any custom data if provided through a builder object
6696
if ( arguments.issueData.keyExists( "userCustomData" ) && isObject( arguments.issueData.userCustomData ) ) {

0 commit comments

Comments
 (0)