ex_segment.c
#include <float.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "common.h"
#include "libnewrelic.h"
int main(void) {
newrelic_app_t* app = 0;
newrelic_txn_t* txn = 0;
newrelic_app_config_t* config = 0;
newrelic_segment_t* seg_a = 0;
newrelic_segment_t* seg_c = 0;
newrelic_segment_t* seg_d = 0;
example_init();
char* app_name = get_app_name();
if (NULL == app_name)
return -1;
char* license_key = get_license_key();
if (NULL == license_key)
return -1;
config = newrelic_create_app_config(app_name, license_key);
customize_config(&config);
/* Change the transaction tracer threshold to ensure a trace is generated */
/* Wait up to 10 seconds for the SDK to connect to the daemon */
app = newrelic_create_app(config, 10000);
/* Start a web transaction */
txn = newrelic_start_web_transaction(app, "ExampleWebTransaction");
/* Manually retime the transaction with a duration of 5.5 seconds */
newrelic_set_transaction_timing(txn, now_us(), 5500000);
/* Create custom segments */
seg = newrelic_start_segment(txn, NULL, NULL);
sleep(1);
/* Set up a nested structure of segments, and reparent one of them.
*
* A is the parent of B, which by default is the parent of C. However, we
* will reparent C to be the direct child of A.
*
* Note that this means that seg_a must outlive (at least) the call to
* newrelic_set_segment_parent() for seg_c.
*/
seg_a = newrelic_start_segment(txn, "A", "Parented by SDK");
sleep(1);
seg = newrelic_start_segment(txn, "B", "Parented by SDK");
sleep(1);
seg_c = newrelic_start_segment(txn, "C", "Manually reparented");
/* Instead of sleeping, we'll just manually time seg_c and immediately end
* it. seg_c starts 10 us after the start of the transaction and lasts
* half a second. */
newrelic_set_segment_timing(seg_c, 10, 500000);
newrelic_end_segment(txn, &seg_c);
/* Create a new segment to be manually re-parented by the top-level segment
* of the transaction */
seg_d = newrelic_start_segment(txn, "D", "Manually reparented");
sleep(1);
newrelic_end_segment(txn, &seg_d);
newrelic_end_segment(txn, &seg_a);
/* End web transaction */
return 0;
}
newrelic_transaction_tracer_threshold_t threshold
Whether to consider transactions for trace generation based on the apdex configuration or a specific ...
Definition: libnewrelic.h:209
struct _newrelic_txn_t newrelic_txn_t
A New Relic transaction.
Definition: libnewrelic.h:106
Definition: libnewrelic.h:191
newrelic_txn_t * newrelic_start_web_transaction(newrelic_app_t *app, const char *name)
Start a web based transaction.
Configuration used to describe application name, license key, as well as optional transaction tracer ...
Definition: libnewrelic.h:347
struct _nr_app_and_info_t newrelic_app_t
A New Relic application. Once an application configuration is created with newrelic_create_app_config...
Definition: libnewrelic.h:95
bool newrelic_set_segment_timing(newrelic_segment_t *segment, newrelic_time_us_t start_time, newrelic_time_us_t duration)
Override the timing for the given segment.
bool newrelic_end_segment(newrelic_txn_t *transaction, newrelic_segment_t **segment_ptr)
Record the completion of a segment in a transaction.
newrelic_transaction_tracer_config_t transaction_tracer
Optional. The transaction tracer configuration.
Definition: libnewrelic.h:390
newrelic_app_config_t * newrelic_create_app_config(const char *app_name, const char *license_key)
Create a populated application configuration.
newrelic_app_t * newrelic_create_app(const newrelic_app_config_t *config, unsigned short timeout_ms)
Create an application.
newrelic_time_us_t duration_us
If the SDK configuration threshold is set to NEWRELIC_THRESHOLD_IS_OVER_DURATION, this field specifie...
Definition: libnewrelic.h:218
bool newrelic_set_segment_parent_root(newrelic_segment_t *segment)
Set the transaction's root as the parent for the given segment.
bool newrelic_set_transaction_timing(newrelic_txn_t *transaction, newrelic_time_us_t start_time, newrelic_time_us_t duration)
Override the timing for the given transaction.
bool newrelic_destroy_app_config(newrelic_app_config_t **config)
Destroy the application configuration.
newrelic_segment_t * newrelic_start_segment(newrelic_txn_t *transaction, const char *name, const char *category)
Record the start of a custom segment in a transaction.
struct _newrelic_segment_t newrelic_segment_t
A segment within a transaction.
Definition: libnewrelic.h:840
bool newrelic_end_transaction(newrelic_txn_t **transaction_ptr)
End a transaction.
This is the New Relic C SDK! If your application does not use other New Relic APM agent languages,...
bool newrelic_set_segment_parent(newrelic_segment_t *segment, newrelic_segment_t *parent)
Set the parent for the given segment.
bool newrelic_destroy_app(newrelic_app_t **app)
Destroy the application.