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