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