event.c
Go to the documentation of this file.
1 
10 #include "event.h"
11 #include "mcl_core/mcl_memory.h"
12 #include "mcl_core/mcl_random.h"
14 
15 #define MCL_EVENT_PARAMETER_DESCRIPTION_MAXIMUM_LENGTH 256
16 
17 const char *mcl_event_versions[MCL_EVENT_VERSION_END] = { "1.0", "2.0" };
18 
20 {
21  { 1, 2, 3 },
22  { 20, 30, 40 }
23 };
24 
26 {
27  mcl_error_t code;
28 
29  MCL_DEBUG_ENTRY("E_MCL_EVENT_VERSION version = <%d>, mcl_event_t **event = <%p>", version, event);
30 
31  // Null check.
32  MCL_ASSERT_NOT_NULL(event, code);
33 
34  // Check meta version parameter.
35  MCL_ASSERT_CODE_MESSAGE(MCL_EVENT_VERSION_1_0 <= version && MCL_EVENT_VERSION_END > version, MCL_INVALID_PARAMETER,
36  "Invalid meta payload version parameter.");
37 
38  // Allocate memory for event.
39  if (MCL_NULL != MCL_NEW(*event))
40  {
41  // Set base parameters for event.
42  (*event)->item_base.preamble = MCL_ITEM_PREAMBLE;
43  (*event)->item_base.type = MCL_ITEM_TYPE_EVENT;
44  (*event)->item_base.version = (mcl_uint32_t) version;
45 
46  // Allocate memory for event payload.
47  MCL_NEW((*event)->payload);
48  }
49 
50  if ((MCL_NULL != (*event)) && (MCL_NULL != (*event)->payload))
51  {
52  // Event payload.
53  (*event)->payload->id = MCL_NULL;
54  (*event)->payload->correlation_id = MCL_NULL;
55  (*event)->payload->description = MCL_NULL;
56  (*event)->payload->type = MCL_NULL;
57  (*event)->payload->version = MCL_NULL;
58  (*event)->payload->details = MCL_NULL;
59  (*event)->payload->severity = _event_severity_values[version][MCL_EVENT_SEVERITY_INFORMATION];
60 
61  // Set payload id (Unique identifier of the event).
62  code = mcl_random_generate_guid(&(*event)->payload->id);
63  }
64  else
65  {
66  code = MCL_OUT_OF_MEMORY;
67  }
68 
69  // Error check.
70  if (MCL_OK != code)
71  {
72  mcl_event_destroy(event);
73  }
74 
76  MCL_DEBUG_LEAVE("retVal = <%d>", code);
77  return code;
78 }
79 
81 {
82  mcl_error_t code;
83  mcl_size_t description_length;
84 
85  MCL_DEBUG_ENTRY("mcl_event_t *event = <%p>, E_MCL_EVENT_PARAMETER parameter = <%d>, const void *value = <%p>", event, parameter, value);
86 
87  // Null check.
88  MCL_ASSERT_NOT_NULL(event, code);
89  MCL_ASSERT_NOT_NULL(value, code);
90 
91  switch (parameter)
92  {
94  code = mcl_string_util_reset(value, &event->payload->type);
95  break;
96 
98  code = mcl_string_util_reset(value, &event->payload->version);
99  break;
100 
102 
103  // Validate payload severity parameter.
105  MCL_EVENT_SEVERITY_END > *(mcl_int32_t *) (value), MCL_INVALID_PARAMETER, "Invalid severity value.");
106 
107  event->payload->severity = _event_severity_values[event->item_base.version][*((E_MCL_EVENT_SEVERITY*) value)];
108  code = MCL_OK;
109  break;
110 
112 
113  // Validate payload timestamp parameter.
115  {
116  mcl_string_util_memcpy(event->payload->timestamp, value, MCL_TIMESTAMP_LENGTH);
117  code = MCL_OK;
118  }
119  else
120  {
121  code = MCL_INVALID_PARAMETER;
122  }
123 
124  break;
125 
127  code = mcl_time_util_convert_to_iso_8601_format((const time_t *) value, event->payload->timestamp);
128  break;
129 
131 
132  // Check length of description value. Max 255 is allowed.
133  description_length = mcl_string_util_strlen(value);
135  "Length of description is not less than 256 characters." );
136 
137  code = mcl_string_util_reset(value, &event->payload->description);
138  break;
139 
141  code = mcl_string_util_reset(value, &event->payload->correlation_id);
142  break;
143 
145  mcl_json_util_destroy(&event->payload->details);
146  code = mcl_json_util_duplicate((const mcl_json_t *) value, &event->payload->details);
147  break;
148 
149  default:
150  code = MCL_INVALID_PARAMETER;
151  }
152 
154  MCL_DEBUG_LEAVE("retVal = <%d>", code);
155  return code;
156 }
157 
159 {
160  mcl_error_t code;
161 
162  MCL_DEBUG_ENTRY("event_t *event = <%p>", event);
163 
164  // Event validation checks.
166  {
167  code = MCL_INVALID_PARAMETER;
168  }
169  else if (MCL_NULL == event->payload->type)
170  {
171  code = MCL_INVALID_PARAMETER;
172  }
173  else if (MCL_NULL == event->payload->version)
174  {
175  code = MCL_INVALID_PARAMETER;
176  }
177  else
178  {
179  code = MCL_OK;
180  }
181 
182  MCL_DEBUG_LEAVE("retVal = <%d>", code);
183  return code;
184 }
185 
187 {
188  MCL_DEBUG_ENTRY("mcl_event_t **event = <%p>", event);
189 
190  // Destroys the event data structure.
191  if ((MCL_NULL != event) && (MCL_NULL != *event))
192  {
193  if (MCL_NULL != (*event)->payload)
194  {
195  // Destroy payload.
196  MCL_FREE((*event)->payload->id);
197  MCL_FREE((*event)->payload->correlation_id);
198  MCL_FREE((*event)->payload->description);
199  MCL_FREE((*event)->payload->type);
200  MCL_FREE((*event)->payload->version);
201  mcl_json_util_destroy(&((*event)->payload->details));
202  MCL_FREE((*event)->payload);
203  }
204 
205  MCL_FREE(*event);
206  }
207 
208  MCL_DEBUG_LEAVE("retVal = void");
209 }
#define MCL_TIMESTAMP_LENGTH
#define MCL_FUNCTION_LEAVE_LABEL
mcl_error_t event_validate(event_t *event)
Definition: event.c:158
size_t mcl_size_t
int32_t mcl_int32_t
MCL_OK
Event payload timestamp parameter as time_t*.
Definition: mcl_event.h:66
char * version
Version of the event/alarm type.
Definition: event.h:29
void mcl_json_t
static mcl_int32_t _event_severity_values[MCL_EVENT_VERSION_END][MCL_EVENT_SEVERITY_END]
Definition: event.c:19
MCL_CORE_EXPORT mcl_error_t mcl_string_util_reset(const void *value, char **target)
mcl_int32_t mcl_error_t
MCL_CORE_EXPORT mcl_error_t mcl_time_util_convert_to_iso_8601_format(const time_t *time_value, char *iso8601_formatted_time)
#define MCL_DEBUG_ENTRY(...)
uint32_t mcl_uint32_t
MCL_CORE_EXPORT mcl_error_t mcl_random_generate_guid(char **guid)
struct mcl_event_t mcl_event_t
Definition: mcl_event.h:34
MCL_CORE_EXPORT mcl_size_t mcl_string_util_strlen(const char *buffer)
MCL_CORE_EXPORT void mcl_json_util_destroy(mcl_json_t **root)
E_MCL_EVENT_VERSION
Definition: mcl_event.h:39
event_payload_t * payload
Payload of event.
Definition: event.h:39
#define MCL_ASSERT_CODE_MESSAGE(condition, return_code,...)
Event payload description parameter as char* (optional).
Definition: mcl_event.h:67
#define MCL_NEW(p)
#define MCL_NULL
Event module interface header file.
Event payload severity parameter as E_MCL_EVENT_SEVERITY.
Definition: mcl_event.h:64
Severity level of event is ERROR.
Definition: mcl_event.h:51
MCL_CORE_EXPORT mcl_bool_t mcl_time_util_validate_timestamp(const char *timestamp)
#define MCL_EVENT_PARAMETER_DESCRIPTION_MAXIMUM_LENGTH
Definition: event.c:15
Event payload details parameter as mcl_json_t* (optional).
Definition: mcl_event.h:69
Event payload correlation id parameter as char* (optional).
Definition: mcl_event.h:68
#define MCL_FREE(p)
mcl_error_t mcl_event_set_parameter(mcl_event_t *event, E_MCL_EVENT_PARAMETER parameter, const void *value)
Definition: event.c:80
mcl_error_t mcl_event_initialize(E_MCL_EVENT_VERSION version, mcl_event_t **event)
Definition: event.c:25
Event payload version parameter as char*.
Definition: mcl_event.h:63
char * type
Type of the event.
Definition: event.h:28
#define MCL_ASSERT_NOT_NULL(argument, return_variable)
MCL_CORE_EXPORT void mcl_string_util_memcpy(void *destination, const void *source, mcl_size_t count)
Item type event.
Definition: item.h:25
#define MCL_ITEM_PREAMBLE
Definition: item.h:17
MCL_CORE_EXPORT mcl_error_t mcl_json_util_duplicate(const mcl_json_t *source_json, mcl_json_t **duplicated_json)
Event module header file.
Severity level of event is INFORMATION.
Definition: mcl_event.h:53
Event payload type parameter as char*.
Definition: mcl_event.h:62
MCL_OUT_OF_MEMORY
void mcl_event_destroy(mcl_event_t **event)
Definition: event.c:186
Definition: event.h:36
MCL_INVALID_PARAMETER
E_MCL_EVENT_SEVERITY
Definition: mcl_event.h:49
#define MCL_DEBUG_LEAVE(...)
#define MCL_TRUE
const char * mcl_event_versions[MCL_EVENT_VERSION_END]
Definition: event.c:17
char timestamp[MCL_TIMESTAMP_LENGTH]
Creation time of the event in ISO format.
Definition: event.h:25
End of event version enumeration.
Definition: mcl_event.h:43
E_MCL_EVENT_PARAMETER
Definition: mcl_event.h:60
Event payload timestamp parameter as char* (which is in yyyy-MM-ddTHH:mm:ss.SSSZ format).
Definition: mcl_event.h:65