1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
|
diff --git a/vnfs/VES5.0/evel/evel-library/code/evel_library/evel.h b/vnfs/VES5.0/evel/evel-library/code/evel_library/evel.h
index 0ae1713..be3ae6c 100644
--- a/vnfs/VES5.0/evel/evel-library/code/evel_library/evel.h
+++ b/vnfs/VES5.0/evel/evel-library/code/evel_library/evel.h
@@ -1715,13 +1715,14 @@ void evel_fault_type_set(EVENT_FAULT * fault, const char * const type);
* @param measurement_interval
* @param event_name Unique Event Name
* @param event_id A universal identifier of the event for analysis etc
+ * @param event_source_name Optional override of the source name
*
* @returns pointer to the newly manufactured ::EVENT_MEASUREMENT. If the
* event is not used (i.e. posted) it must be released using
* ::evel_free_event.
* @retval NULL Failed to create the event.
*****************************************************************************/
-EVENT_MEASUREMENT * evel_new_measurement(double measurement_interval,const char* ev_name, const char *ev_id);
+EVENT_MEASUREMENT * evel_new_measurement(double measurement_interval,const char* ev_name, const char *ev_id, const char *ev_source_name);
/**************************************************************************//**
* Free a Measurement.
diff --git a/vnfs/VES5.0/evel/evel-library/code/evel_library/evel_event.c b/vnfs/VES5.0/evel/evel-library/code/evel_library/evel_event.c
index 4de49bc..de6b362 100644
--- a/vnfs/VES5.0/evel/evel-library/code/evel_library/evel_event.c
+++ b/vnfs/VES5.0/evel/evel-library/code/evel_library/evel_event.c
@@ -167,7 +167,8 @@ void evel_init_header(EVENT_HEADER * const header,const char *const eventname)
header->last_epoch_microsec = tv.tv_usec + 1000000 * tv.tv_sec;
header->priority = EVEL_PRIORITY_NORMAL;
header->reporting_entity_name = strdup(openstack_vm_name());
- header->source_name = strdup(openstack_vm_name());
+ /* header->source_name = strdup(openstack_vm_name()); */
+ header->source_name = strdup(openstack_vnf_id()); /* vCPE quick hack */
header->sequence = event_sequence;
header->start_epoch_microsec = header->last_epoch_microsec;
header->major_version = EVEL_HEADER_MAJOR_VERSION;
@@ -181,7 +182,8 @@ void evel_init_header(EVENT_HEADER * const header,const char *const eventname)
evel_init_option_string(&header->nfcnaming_code);
evel_init_option_string(&header->nfnaming_code);
evel_force_option_string(&header->reporting_entity_id, openstack_vm_uuid());
- evel_force_option_string(&header->source_id, openstack_vm_uuid());
+ /* evel_force_option_string(&header->source_id, openstack_vm_uuid()); */
+ evel_force_option_string(&header->source_id, openstack_vnf_id()); /* vCPE quick hack */
evel_init_option_intheader(&header->internal_field);
EVEL_EXIT();
@@ -216,7 +218,8 @@ void evel_init_header_nameid(EVENT_HEADER * const header,const char *const event
header->last_epoch_microsec = tv.tv_usec + 1000000 * tv.tv_sec;
header->priority = EVEL_PRIORITY_NORMAL;
header->reporting_entity_name = strdup(openstack_vm_name());
- header->source_name = strdup(openstack_vm_name());
+ /* header->source_name = strdup(openstack_vm_name()); */
+ header->source_name = strdup(openstack_vnf_id()); /* vCPE quick hack */
header->sequence = event_sequence;
header->start_epoch_microsec = header->last_epoch_microsec;
header->major_version = EVEL_HEADER_MAJOR_VERSION;
@@ -230,7 +233,63 @@ void evel_init_header_nameid(EVENT_HEADER * const header,const char *const event
evel_init_option_string(&header->nfcnaming_code);
evel_init_option_string(&header->nfnaming_code);
evel_force_option_string(&header->reporting_entity_id, openstack_vm_uuid());
- evel_force_option_string(&header->source_id, openstack_vm_uuid());
+ /* evel_force_option_string(&header->source_id, openstack_vm_uuid()); */
+ evel_force_option_string(&header->source_id, openstack_vnf_id()); /* vCPE quick hack */
+ evel_init_option_intheader(&header->internal_field);
+
+ EVEL_EXIT();
+}
+
+/**************************************************************************//**
+ * Initialize a newly created event header.
+ *
+ * @param header Pointer to the header being initialized.
+ *****************************************************************************/
+void evel_init_header_source_name(EVENT_HEADER * const header,const char *const eventname, const char *eventid, const char *eventsrcname)
+{
+ struct timeval tv;
+
+ EVEL_ENTER();
+
+ assert(header != NULL);
+ assert(eventname != NULL);
+ assert(eventid != NULL);
+
+ gettimeofday(&tv, NULL);
+
+ /***************************************************************************/
+ /* Initialize the header. Get a new event sequence number. Note that if */
+ /* any memory allocation fails in here we will fail gracefully because */
+ /* everything downstream can cope with NULLs. */
+ /***************************************************************************/
+ header->event_domain = EVEL_DOMAIN_HEARTBEAT;
+ header->event_id = strdup(eventid);
+ header->event_name = strdup(eventname);
+ header->last_epoch_microsec = tv.tv_usec + 1000000 * tv.tv_sec;
+ header->priority = EVEL_PRIORITY_NORMAL;
+ header->reporting_entity_name = strdup(openstack_vm_name());
+ /* header->source_name = strdup(openstack_vm_name()); */
+ /* vCPE quck hack */
+ if (strlen(eventsrcname)) {
+ header->source_name = strdup(eventsrcname);
+ } else {
+ header->source_name = strdup(openstack_vnf_id());
+ }
+ header->sequence = event_sequence;
+ header->start_epoch_microsec = header->last_epoch_microsec;
+ header->major_version = EVEL_HEADER_MAJOR_VERSION;
+ header->minor_version = EVEL_HEADER_MINOR_VERSION;
+ event_sequence++;
+
+ /***************************************************************************/
+ /* Optional parameters. */
+ /***************************************************************************/
+ evel_init_option_string(&header->event_type);
+ evel_init_option_string(&header->nfcnaming_code);
+ evel_init_option_string(&header->nfnaming_code);
+ evel_force_option_string(&header->reporting_entity_id, openstack_vm_uuid());
+ /* evel_force_option_string(&header->source_id, openstack_vm_uuid()); */
+ evel_force_option_string(&header->source_id, openstack_vnf_id()); /* vCPE quick hack */
evel_init_option_intheader(&header->internal_field);
EVEL_EXIT();
diff --git a/vnfs/VES5.0/evel/evel-library/code/evel_library/evel_scaling_measurement.c b/vnfs/VES5.0/evel/evel-library/code/evel_library/evel_scaling_measurement.c
index b73eb97..2446e02 100644
--- a/vnfs/VES5.0/evel/evel-library/code/evel_library/evel_scaling_measurement.c
+++ b/vnfs/VES5.0/evel/evel-library/code/evel_library/evel_scaling_measurement.c
@@ -40,13 +40,14 @@
* @param measurement_interval
* @param event_name Unique Event Name confirming Domain AsdcModel Description
* @param event_id A universal identifier of the event for: troubleshooting correlation, analysis, etc
+ * @param event_source_name Optional override of the source name
*
* @returns pointer to the newly manufactured ::EVENT_MEASUREMENT. If the
* event is not used (i.e. posted) it must be released using
* ::evel_free_event.
* @retval NULL Failed to create the event.
*****************************************************************************/
-EVENT_MEASUREMENT * evel_new_measurement(double measurement_interval, const char* ev_name, const char *ev_id)
+EVENT_MEASUREMENT * evel_new_measurement(double measurement_interval, const char* ev_name, const char *ev_id, const char *ev_source_name)
{
EVENT_MEASUREMENT * measurement = NULL;
@@ -72,7 +73,7 @@ EVENT_MEASUREMENT * evel_new_measurement(double measurement_interval, const char
/***************************************************************************/
/* Initialize the header & the measurement fields. */
/***************************************************************************/
- evel_init_header_nameid(&measurement->header,ev_name,ev_id);
+ evel_init_header_source_name(&measurement->header,ev_name,ev_id,ev_source_name);
measurement->header.event_domain = EVEL_DOMAIN_MEASUREMENT;
measurement->measurement_interval = measurement_interval;
dlist_initialize(&measurement->additional_info);
diff --git a/vnfs/VES5.0/evel/evel-library/code/evel_library/metadata.c b/vnfs/VES5.0/evel/evel-library/code/evel_library/metadata.c
index 62ea6b5..6c322db 100644
--- a/vnfs/VES5.0/evel/evel-library/code/evel_library/metadata.c
+++ b/vnfs/VES5.0/evel/evel-library/code/evel_library/metadata.c
@@ -60,6 +60,11 @@ static char vm_uuid[MAX_METADATA_STRING+1] = {0};
static char vm_name[MAX_METADATA_STRING+1] = {0};
/**************************************************************************//**
+ * ID of the VNF extracted from the OpenStack metadata service.
+ *****************************************************************************/
+static char vnf_id[MAX_METADATA_STRING+1] = {0};
+
+/**************************************************************************//**
* How many metadata elements we allow for in the retrieved JSON.
*****************************************************************************/
static const int MAX_METADATA_TOKENS = 128;
@@ -290,6 +295,19 @@ EVEL_ERR_CODES openstack_metadata(int verbosity)
{
EVEL_DEBUG("VM Name: %s", vm_name);
}
+ if (json_get_string(rx_chunk.memory,
+ tokens,
+ json_token_count,
+ "vnf_id",
+ vnf_id) != EVEL_SUCCESS)
+ {
+ rc = EVEL_BAD_METADATA;
+ EVEL_ERROR("Failed to extract VNF ID from OpenStack metadata");
+ }
+ else
+ {
+ EVEL_DEBUG("VNF Id: %s", vnf_id);
+ }
}
exit_label:
@@ -319,6 +337,9 @@ void openstack_metadata_initialize()
strncpy(vm_name,
"Dummy VM name - No Metadata available",
MAX_METADATA_STRING);
+ strncpy(vnf_id,
+ "Dummy VNF ID - No Metadata available",
+ MAX_METADATA_STRING);
}
/**************************************************************************//**
@@ -591,3 +612,13 @@ const char *openstack_vm_uuid()
{
return vm_uuid;
}
+
+/**************************************************************************//**
+ * Get the VM UUID provided by the metadata service.
+ *
+ * @returns VM UUID
+ *****************************************************************************/
+const char *openstack_vnf_id()
+{
+ return vnf_id;
+}
diff --git a/vnfs/VES5.0/evel/evel-library/code/evel_library/metadata.h b/vnfs/VES5.0/evel/evel-library/code/evel_library/metadata.h
index 1ee4409..b9ed21c 100644
--- a/vnfs/VES5.0/evel/evel-library/code/evel_library/metadata.h
+++ b/vnfs/VES5.0/evel/evel-library/code/evel_library/metadata.h
@@ -55,4 +55,11 @@ const char *openstack_vm_name();
*****************************************************************************/
const char *openstack_vm_uuid();
+/**************************************************************************//**
+ * Get the VNF ID provided by the metadata service.
+ *
+ * @returns VNF ID
+ *****************************************************************************/
+const char *openstack_vnf_id();
+
#endif
|