Skip to content

Commit 8b6a0e3

Browse files
hahuja2mfulb
authored andcommitted
chore(axiom): create nr_user_error_t struct
1 parent a47bf1d commit 8b6a0e3

File tree

10 files changed

+126
-182
lines changed

10 files changed

+126
-182
lines changed

agent/php_api.c

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "php_hash.h"
1212
#include "php_user_instrument.h"
1313
#include "fw_drupal_common.h"
14+
#include "nr_errors.h"
1415
#include "nr_rum.h"
1516
#include "util_logging.h"
1617
#include "util_memory.h"
@@ -71,16 +72,17 @@ PHP_FUNCTION(newrelic_notice_error) {
7172
const char* errclass = "NoticedError";
7273
char* errormsgstr = NULL;
7374
nr_string_len_t errormsglen = 0;
74-
zend_long error_number = 0;
75-
char* error_file = NULL;
76-
nr_string_len_t error_file_len = 0;
77-
zend_long error_line = 0;
75+
char* user_error_message = NULL;
76+
nr_string_len_t user_error_message_len = 0;
77+
zend_long user_error_number = 0;
78+
char* user_error_file = NULL;
79+
nr_string_len_t user_error_file_len = 0;
80+
zend_long user_error_line = 0;
7881
zval* exc = NULL;
79-
nr_string_len_t error_context_len = 0;
80-
char* error_context = NULL;
82+
nr_string_len_t user_error_context_len = 0;
83+
char* user_error_context = NULL;
8184
int priority = 0;
82-
zval* ignore = NULL;
83-
bool determine = false;
85+
bool five_params = false;
8486

8587
NR_UNUSED_RETURN_VALUE;
8688
NR_UNUSED_RETURN_VALUE_PTR;
@@ -134,11 +136,11 @@ PHP_FUNCTION(newrelic_notice_error) {
134136
case 2:
135137
if (FAILURE
136138
== zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET,
137-
ZEND_NUM_ARGS() TSRMLS_CC, "zo!", &ignore,
139+
ZEND_NUM_ARGS() TSRMLS_CC, "s!o!", &user_error_message, &user_error_message_len,
138140
&exc)) {
139141
nrl_debug(NRL_API,
140142
"newrelic_notice_error: invalid two arguments: expected "
141-
"exception as second argument");
143+
"string as first argument and exception as second argument");
142144
RETURN_NULL();
143145
}
144146
break;
@@ -147,13 +149,13 @@ PHP_FUNCTION(newrelic_notice_error) {
147149
if (FAILURE
148150
== zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET,
149151
ZEND_NUM_ARGS() TSRMLS_CC, "ls!s!ls!",
150-
&error_number, &errormsgstr, &errormsglen,
151-
&error_file, &error_file_len, &error_line,
152-
&error_context, &error_context_len)) {
152+
&user_error_number, &user_error_message, &user_error_message_len,
153+
&user_error_file, &user_error_file_len, &user_error_line,
154+
&user_error_context, &user_error_context_len)) {
153155
nrl_debug(NRL_API, "newrelic_notice_error: invalid five arguments");
154156
RETURN_NULL();
155157
}
156-
determine = true;
158+
five_params = true;
157159
break;
158160

159161
default:
@@ -172,11 +174,14 @@ PHP_FUNCTION(newrelic_notice_error) {
172174
}
173175
}
174176

175-
if (determine) {
177+
if (five_params) {
178+
nr_user_error_t* user_error = nr_user_error_create(
179+
user_error_message, user_error_number, user_error_file, user_error_line,
180+
user_error_context);
176181
char* stack_json = nr_php_backtrace_to_json(NULL TSRMLS_CC);
177-
nr_txn_record_error_with_additional_attributes(
178-
NRPRG(txn), priority, true, errormsgstr, errclass, error_file,
179-
error_line, error_context, error_number, stack_json);
182+
nr_txn_record_error_with_additional_attributes(NRPRG(txn), priority, true,
183+
user_error_message, errclass,
184+
stack_json, user_error);
180185
nr_free(stack_json);
181186
RETURN_TRUE;
182187
}

axiom/nr_errors.c

Lines changed: 22 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,13 @@ nr_error_t* nr_error_create(int priority,
2323
if (NULL == message || NULL == klass || NULL == stacktrace_json) {
2424
return 0;
2525
}
26-
return nr_error_create_additional_params(priority, message, klass, NULL, 0, NULL, 0,
27-
stacktrace_json, span_id, when);
26+
return nr_error_create_additional_params(priority, message, klass, NULL, stacktrace_json, span_id, when);
2827
}
2928

3029
nr_error_t* nr_error_create_additional_params(int priority,
3130
const char* message,
3231
const char* klass,
33-
const char* error_file,
34-
int error_line,
35-
const char* error_context,
36-
int error_no,
32+
nr_user_error_t* user_error,
3733
const char* stacktrace_json,
3834
const char* span_id,
3935
nrtime_t when) {
@@ -47,63 +43,47 @@ nr_error_t* nr_error_create_additional_params(int priority,
4743
error->when = when;
4844
error->klass = nr_strdup(klass);
4945
error->stacktrace_json = nr_strdup(stacktrace_json);
50-
error->error_line = error_line;
51-
error->error_no = error_no;
46+
error->user_error = user_error;
5247
if (NULL != message) {
5348
error->message = nr_strdup(message);
5449
}
55-
if (NULL != error_file) {
56-
error->error_file = nr_strdup(error_file);
57-
}
58-
if (NULL != error_context) {
59-
error->error_context = nr_strdup(error_context);
60-
}
6150
if (NULL != span_id) {
6251
error->span_id = nr_strdup(span_id);
6352
}
6453
return error;
6554
}
6655

67-
const char* nr_error_get_message(const nr_error_t* error) {
68-
if (NULL == error) {
69-
return NULL;
70-
}
71-
return error->message;
56+
nr_user_error_t* nr_user_error_create(const char* user_error_message, int user_error_number, const char* user_error_file, int user_error_line, const char* user_error_context) {
57+
nr_user_error_t* user_error = (nr_user_error_t*)nr_malloc(sizeof(nr_user_error_t));
58+
user_error->user_error_message = nr_strdup(user_error_message);
59+
user_error->user_error_number = user_error_number;
60+
user_error->user_error_file = nr_strdup(user_error_file);
61+
user_error->user_error_line = user_error_line;
62+
user_error->user_error_context = nr_strdup(user_error_context);
63+
return user_error;
7264
}
7365

74-
const char* nr_error_get_klass(const nr_error_t* error) {
75-
if (NULL == error) {
76-
return NULL;
66+
void nr_user_error_destroy(nr_user_error_t* user_error) {
67+
if (NULL != user_error) {
68+
nr_free(user_error->user_error_message);
69+
nr_free(user_error->user_error_file);
70+
nr_free(user_error->user_error_context);
71+
nr_free(user_error);
7772
}
78-
return error->klass;
7973
}
8074

81-
const char* nr_error_get_file(const nr_error_t* error) {
75+
const char* nr_error_get_message(const nr_error_t* error) {
8276
if (NULL == error) {
8377
return NULL;
8478
}
85-
return error->error_file;
86-
}
87-
88-
int nr_error_get_line(const nr_error_t* error) {
89-
if (NULL == error) {
90-
return 0;
91-
}
92-
return error->error_line;
79+
return error->message;
9380
}
9481

95-
const char* nr_error_get_context(const nr_error_t* error) {
82+
const char* nr_error_get_klass(const nr_error_t* error) {
9683
if (NULL == error) {
9784
return NULL;
9885
}
99-
return error->error_context;
100-
}
101-
102-
int nr_error_get_no(const nr_error_t* error) {
103-
if (NULL == error) {
104-
return 0;
105-
}
106-
return error->error_no;
86+
return error->klass;
10787
}
10888

10989
nrtime_t nr_error_get_time(const nr_error_t* error) {
@@ -141,8 +121,7 @@ void nr_error_destroy(nr_error_t** error_ptr) {
141121
nr_free(error->klass);
142122
nr_free(error->span_id);
143123
nr_free(error->stacktrace_json);
144-
nr_free(error->error_file);
145-
nr_free(error->error_context);
124+
nr_user_error_destroy(error->user_error);
146125
nr_realfree((void**)error_ptr);
147126
}
148127

axiom/nr_errors.h

Lines changed: 17 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@
1717
*/
1818
typedef struct _nr_error_t nr_error_t;
1919

20+
typedef struct _nr_user_error_t {
21+
char* user_error_message; /* User error message */
22+
char* user_error_file; /* User error file */
23+
char* user_error_context; /* User error context */
24+
int user_error_line; /* User error line */
25+
int user_error_number; /* User error number */
26+
} nr_user_error_t;
27+
2028
/*
2129
* Purpose : Create a new error.
2230
*
@@ -38,6 +46,14 @@ extern nr_error_t* nr_error_create(int priority,
3846
const char* span_id,
3947
nrtime_t when);
4048

49+
extern void nr_user_error_destroy(nr_user_error_t* user_error_ptr);
50+
51+
extern nr_user_error_t* nr_user_error_create(const char* user_error_message,
52+
int user_error_number,
53+
const char* user_error_file,
54+
int user_error_line,
55+
const char* user_error_context);
56+
4157
/*
4258
* Purpose : Create a new error for the use case where additional parameters are
4359
* passed in. The following parameters are required and can not be NULL: klass
@@ -64,10 +80,7 @@ extern nr_error_t* nr_error_create_additional_params(
6480
int priority,
6581
const char* message,
6682
const char* klass,
67-
const char* error_file,
68-
int error_line,
69-
const char* error_context,
70-
int error_no,
83+
nr_user_error_t* user_error,
7184
const char* stacktrace_json,
7285
const char* span_id,
7386
nrtime_t when);
@@ -89,34 +102,6 @@ extern const char* nr_error_get_message(const nr_error_t* error);
89102
*/
90103
extern const char* nr_error_get_klass(const nr_error_t* error);
91104

92-
/*
93-
* Purpose : Get the error file of an error.
94-
*
95-
* Returns : The error file of the error or NULL if not defined.
96-
*/
97-
extern const char* nr_error_get_file(const nr_error_t* error);
98-
99-
/*
100-
* Purpose : Get the error line of an error.
101-
*
102-
* Returns : The error line of the error or 0 if not defined.
103-
*/
104-
extern int nr_error_get_line(const nr_error_t* error);
105-
106-
/*
107-
* Purpose : Get the error context of an error.
108-
*
109-
* Returns : The error context of the error or NULL if not defined.
110-
*/
111-
extern const char* nr_error_get_context(const nr_error_t* error);
112-
113-
/*
114-
* Purpose : Get the error number of an error.
115-
*
116-
* Returns : The error number of the error or 0 if not defined.
117-
*/
118-
extern int nr_error_get_no(const nr_error_t* error);
119-
120105
/*
121106
* Purpose : Get the span_id of an error.
122107
*

axiom/nr_errors_private.h

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,10 @@ struct _nr_error_t {
2525
int priority; /* Error priority - lowest to highest */
2626
char* message; /* Error message */
2727
char* klass; /* Error class */
28-
char* error_file; /* User provided error file */
29-
int error_line; /* User provided error line */
30-
char* error_context; /* User provided error context */
31-
int error_no; /* User provided error number */
3228
char* stacktrace_json; /* Stack trace in JSON format */
3329
char* span_id; /* ID of the current executing span at the time the error
3430
occurred */
31+
nr_user_error_t* user_error;
3532
};
3633

3734
#endif /* NR_ERRORS_PRIVATE_HDR */

axiom/nr_segment.c

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1176,17 +1176,13 @@ void nr_segment_set_error(nr_segment_t* segment,
11761176
if ((NULL == segment) || (NULL == error_message && NULL == error_class)) {
11771177
return;
11781178
}
1179-
nr_segment_set_error_with_additional_params(segment, error_message, error_class, NULL, 0,
1180-
NULL, 0);
1179+
nr_segment_set_error_with_additional_params(segment, error_message, error_class, NULL);
11811180
}
11821181

11831182
void nr_segment_set_error_with_additional_params(nr_segment_t* segment,
11841183
const char* error_message,
11851184
const char* error_class,
1186-
const char* error_file,
1187-
int error_line,
1188-
char* error_context,
1189-
int error_no) {
1185+
nr_user_error_t* user_error) {
11901186
if (NULL == segment || NULL == error_class) {
11911187
return;
11921188
}
@@ -1197,21 +1193,13 @@ void nr_segment_set_error_with_additional_params(nr_segment_t* segment,
11971193

11981194
nr_free(segment->error->error_message);
11991195
nr_free(segment->error->error_class);
1200-
nr_free(segment->error->error_file);
1201-
nr_free(segment->error->error_context);
1196+
nr_free(segment->error->user_error);
12021197

1203-
segment->error->error_class = error_class ? nr_strdup(error_class) : NULL;
1204-
segment->error->error_no = error_no;
1205-
segment->error->error_line = error_line;
12061198
if (NULL != error_message) {
12071199
segment->error->error_message = error_message ? nr_strdup(error_message) : NULL;
12081200
}
1209-
if (NULL != error_file) {
1210-
segment->error->error_file = error_file ? nr_strdup(error_file) : NULL;
1211-
}
1212-
if (NULL != error_context) {
1213-
segment->error->error_context = error_context ? nr_strdup(error_context) : NULL;
1214-
}
1201+
segment->error->error_class = error_class ? nr_strdup(error_class) : NULL;
1202+
segment->error->user_error = user_error;
12151203
}
12161204

12171205
bool nr_segment_attributes_user_add(nr_segment_t* segment,

axiom/nr_segment.h

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,7 @@ typedef struct _nr_segment_metric_t {
117117
typedef struct _nr_segment_error_t {
118118
char* error_message; /* The error message that will appear on a span event. */
119119
char* error_class; /* The error class that will appear on a span event. */
120-
char* error_file; /* The error file that will appear on a span event. */
121-
int error_line; /* The error line that will appear on a span event. */
122-
char* error_context; /* The error context that will appear on a span event. */
123-
int error_no; /* The error number that will appear on a span event. */
120+
nr_user_error_t* user_error; /* The user error that will appear on a span event.*/
124121
} nr_segment_error_t;
125122

126123
/*
@@ -668,10 +665,7 @@ extern void nr_segment_set_error_with_additional_params(
668665
nr_segment_t* segment,
669666
const char* error_message,
670667
const char* error_class,
671-
const char* errfile,
672-
int errline,
673-
char* errcontext,
674-
int error_no);
668+
nr_user_error_t* user_error);
675669

676670
/*
677671
* Purpose : Gets the child_ix of a segment.

axiom/nr_segment_private.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
#include "nr_axiom.h"
77

8+
#include "nr_errors.h"
89
#include "nr_segment_private.h"
910
#include "nr_segment.h"
1011
#include "nr_txn.h"
@@ -87,7 +88,6 @@ void nr_segment_error_destroy_fields(nr_segment_error_t* segment_error) {
8788

8889
nr_free(segment_error->error_message);
8990
nr_free(segment_error->error_class);
90-
nr_free(segment_error->error_file);
91-
nr_free(segment_error->error_context);
91+
nr_user_error_destroy(segment_error->user_error);
9292
nr_free(segment_error);
9393
}

0 commit comments

Comments
 (0)