AppDynamics IoT C++ SDK
AppDynamics IoT C++ library contains code that facilitates capturing availability, usage, network performance and errors of an IoT Application.
network_event.cpp File Reference
#include "custom_event.hpp"
#include "appd_iot_interface.h"
#include "log.hpp"
#include "config.hpp"

Functions

static bool appd_iot_is_valid_http_resp_code (int resp_code)
 checks if http response code is valid More...
 
appd_iot_error_code_t appd_iot_copy_response_headers_data (data_t *dest_respheader, appd_iot_data_t *src_respheader, int src_respheadercount)
 Copies User Defined Response Header Data to SDK Defined Structure. More...
 
appd_iot_error_code_t appd_iot_add_network_request_event (appd_iot_network_request_event_t network_request_event)
 converts network event data to beacon format and adds to beacon More...
 

Function Documentation

◆ appd_iot_is_valid_http_resp_code()

static bool appd_iot_is_valid_http_resp_code ( int  resp_code)
static

checks if http response code is valid

Returns
true if http response code is valid
27 {
28  return (resp_code >= 100 && resp_code < 600);
29 }

◆ appd_iot_copy_response_headers_data()

appd_iot_error_code_t appd_iot_copy_response_headers_data ( data_t dest_respheader,
appd_iot_data_t src_respheader,
int  src_respheadercount 
)

Copies User Defined Response Header Data to SDK Defined Structure.

Parameters
dest_respheaderto which response header data is copied to
src_respheadercontains response header data to be copied from
src_respheadercountcontains number of key-value pairs in response header data
Returns
appd_iot_error_code_t indicating function execution status
40 {
41  if (dest_respheader == NULL)
42  {
43  appd_iot_log(APPD_IOT_LOG_ERROR, "Response Header Destination Data Pointer in NULL");
44  return APPD_IOT_ERR_INTERNAL;
45  }
46 
47  for (int i = 0; i < src_respheadercount; i++)
48  {
49  if (src_respheader[i].key == NULL)
50  {
51  appd_iot_log(APPD_IOT_LOG_ERROR, "Response Header <Key> at Index:%d is NULL", i);
52  return APPD_IOT_ERR_NULL_PTR;
53  }
54 
55  std::string key = src_respheader[i].key;
56 
57  //skip if it's not a adrum header
58  if ((key.compare(0, 5, "ADRUM")) &&
59  (key.compare(0, 5, "adrum")))
60  {
61  continue;
62  }
63 
64  //Expect only string data in response headers
65  if (src_respheader[i].value_type != APPD_IOT_STRING)
66  {
67  appd_iot_log(APPD_IOT_LOG_ERROR, "ADRUM Header Value is expected \
68  to be of string data type but found data type:%d", src_respheader[i].value_type);
69  continue;
70  }
71 
72  //Remove any leading space in the header value
73  int idx = 0;
74 
75  while (isspace(src_respheader[i].strval[idx]))
76  {
77  idx++;
78  }
79 
80  dest_respheader->stringmap[key] = (src_respheader[i].strval + idx);
81 
82  appd_iot_log(APPD_IOT_LOG_INFO, "Added Response Header Key :%s with value :%s",
83  src_respheader[i].key,
84  src_respheader[i].strval);
85  }
86 
87  return APPD_IOT_SUCCESS;
88 }
Definition: appd_iot_def.h:44
void appd_iot_log(appd_iot_log_level_t log_level, const char *format,...)
Reads log message, appends log header and triggers log write callback function.
Definition: log.cpp:89
Definition: appd_iot_def.h:192
const char * key
Definition: appd_iot_def.h:206
std::map< std::string, std::string > stringmap
Definition: beacon.hpp:31
Definition: appd_iot_def.h:103
const char * strval
Definition: appd_iot_def.h:209
Definition: appd_iot_def.h:30
Definition: appd_iot_def.h:99
Definition: appd_iot_def.h:46

◆ appd_iot_add_network_request_event()

appd_iot_error_code_t appd_iot_add_network_request_event ( appd_iot_network_request_event_t  network_request_event)

converts network event data to beacon format and adds to beacon

This method adds event data
Each call to add event will create a new event.

Parameters
network_request_eventcontains network event data
Returns
appd_iot_error_code_t indicating function execution status
98 {
99  appd_iot_error_code_t retcode;
100  appd_iot_sdk_state_t sdk_state;
102 
103  if ((sdk_state = appd_iot_get_sdk_state()) != APPD_IOT_SDK_ENABLED)
104  {
105  appd_iot_log(APPD_IOT_LOG_ERROR, "Add Network Event Failed. SDK Not in Enabled State:%s",
106  appd_iot_sdk_state_to_str(sdk_state));
107 
109  }
110 
111  if (network_request_event.url == NULL)
112  {
113  appd_iot_log(APPD_IOT_LOG_ERROR, "URL field cannot be NULL");
115  }
116 
117  if (network_request_event.error == NULL &&
118  !appd_iot_is_valid_http_resp_code(network_request_event.resp_code))
119  {
120  appd_iot_log(APPD_IOT_LOG_WARN, "Network Error or valid Response Code needs to be populated");
121  }
122 
123  if (strncmp(network_request_event.url,
125  strlen(network_request_event.url)) == 0)
126  {
127  appd_iot_log(APPD_IOT_LOG_WARN, "Skip Adding Network Event with Event URL same as APPD EUM Collector URL:%s",
128  network_request_event.url);
130  }
131 
132  retcode = APPD_IOT_SUCCESS;
133  event.url = network_request_event.url;
134 
135  if (network_request_event.error != NULL)
136  {
137  event.error = network_request_event.error;
138  }
139 
140  if (appd_iot_is_valid_http_resp_code(network_request_event.resp_code))
141  {
142  event.resp_code = network_request_event.resp_code;
143  }
144  else
145  {
146  event.resp_code = 0;
147  }
148 
149  event.req_content_length = network_request_event.req_content_length;
150  event.resp_content_length = network_request_event.resp_content_length;
151  event.timestamp_ms = network_request_event.timestamp_ms;
152  event.duration_ms = network_request_event.duration_ms;
153 
154  if (network_request_event.resp_headers_count > 0)
155  {
157  network_request_event.resp_headers,
158  network_request_event.resp_headers_count);
159 
160  if (retcode != APPD_IOT_SUCCESS)
161  {
162  appd_iot_log(APPD_IOT_LOG_ERROR, "Failed to parse network event response headers, error:%s",
163  appd_iot_error_code_to_str(retcode));
164 
166  }
167  }
168 
169  if (network_request_event.data_count > 0)
170  {
171  retcode = appd_iot_copy_event_data(&event.data, network_request_event.data,
172  network_request_event.data_count);
173 
174  if (retcode != APPD_IOT_SUCCESS)
175  {
176  appd_iot_log(APPD_IOT_LOG_WARN, "Failed to parse Network event data, error:%s",
177  appd_iot_error_code_to_str(retcode));
178 
180  }
181  }
182 
183  appd_iot_log(APPD_IOT_LOG_INFO, "Adding Network Event with URL:%s", event.url.c_str());
184 
186 
187  return retcode;
188 }
Definition: appd_iot_def.h:50
appd_iot_sdk_state_t
Enums for SDK State.
Definition: appd_iot_def.h:59
void appd_iot_log(appd_iot_log_level_t log_level, const char *format,...)
Reads log message, appends log header and triggers log write callback function.
Definition: log.cpp:89
int64_t timestamp_ms
Definition: appd_iot_def.h:263
Definition: appd_iot_def.h:101
appd_iot_error_code_t appd_iot_copy_event_data(data_t *destdata, appd_iot_data_t *srcdata, int srcdata_count)
Copies User Defined Event Data to SDK Defined Event Data.
Definition: custom_event.cpp:110
appd_iot_error_code_t appd_iot_add_network_request_event_to_beacon(network_request_event_t event)
Adds Network Request Event to Beacon.
Definition: beacon.cpp:115
appd_iot_sdk_state_t appd_iot_get_sdk_state(void)
Get Current SDK State.
Definition: config.cpp:236
Definition: appd_iot_def.h:48
int resp_content_length
Definition: appd_iot_def.h:255
const char * appd_iot_error_code_to_str(appd_iot_error_code_t error_code) __APPD_IOT_API
Convert error code to string.
Definition: log.cpp:193
Definition: appd_iot_def.h:64
appd_iot_error_code_t
Error Code Enums for SDK log.
Definition: appd_iot_def.h:27
int data_count
Definition: appd_iot_def.h:265
int resp_code
Definition: appd_iot_def.h:257
appd_iot_error_code_t appd_iot_copy_response_headers_data(data_t *dest_respheader, appd_iot_data_t *src_respheader, int src_respheadercount)
Copies User Defined Response Header Data to SDK Defined Structure.
Definition: network_event.cpp:39
Definition: appd_iot_def.h:103
int req_content_length
Definition: appd_iot_def.h:253
const char * url
Definition: appd_iot_def.h:247
appd_iot_data_t * resp_headers
Definition: appd_iot_def.h:261
appd_iot_data_t * data
Definition: appd_iot_def.h:267
data_t resp_headers
Definition: beacon.hpp:56
Definition: appd_iot_def.h:32
const char * error
Definition: appd_iot_def.h:249
int resp_headers_count
Definition: appd_iot_def.h:259
Definition: appd_iot_def.h:30
Definition: appd_iot_def.h:99
const char * appd_iot_get_eum_collector_url(void)
Get Configured EUM Collector URL.
Definition: config.cpp:193
data_t data
Definition: beacon.hpp:57
Definition: beacon.hpp:47
int duration_ms
Definition: appd_iot_def.h:251
std::string url
Definition: beacon.hpp:49
const char * appd_iot_sdk_state_to_str(appd_iot_sdk_state_t sdk_state) __APPD_IOT_API
Convert sdk state to string.
Definition: log.cpp:203
static bool appd_iot_is_valid_http_resp_code(int resp_code)
checks if http response code is valid
Definition: network_event.cpp:26
appd_iot_error_code_t appd_iot_clear_event_data(data_t *data)
Clear event data.
Definition: custom_event.cpp:91