ECOMP Vendor Event Listener Library

This project contains a C library that supports interfacing to AT&T's ECOMP Vendor Event Listener. For an overview of ECOMP, see the ECOMP White Paper.

Developed in 2016 for AT&T by:

Current Maintainers:

#The description about important directories are given here

evel - This contains the code for VES library for VES5.4.1, sample agents

VESreporting_vFW - This is the sample virtual firewall agent

VESreporting_vLB - This is the sample virtual load balancer agent

evel/evel-library/code/evel_library - Code for VES library 'evel'

evel/evel-library/code/VESreporting_HB - Sample json based heartbeat event generated periodically

evel/evel-library/code/VESreporting_fault - Sample json based fault event based on low byte/packet count on interface.

evel/evel-library/code/VESreporting_syslog - Sample json based syslog event based on pattern being logged into any file

evel/evel-library/code/VESreporting_vFW - Sample json based Firewall application that generates measurement event periodically.

Info on evel Library

This library supports following events. The corresponding factory functions to generate that event is also mentioned against it

  • Faults - ::evel_new_fault
  • Heartbeat - ::evel_new_heartbeat
  • Measurements - ::evel_new_measurement
  • State Change - ::evel_new_state_change
  • Syslog - ::evel_new_syslog
  • Other - ::evel_new_other
  • Mobile Flow - ::evel_new_mobile_flow
  • Sipsingnaling - ::evel_new_signaling
  • Threshold Crossing Alert - ::evel_new_threshold_cross
  • Voice Quality - ::evel_new_voice_quality

Setting the environment

Install gcc, libcurl3-dev packages as below

sudo apt-get install gcc sudo apt-get install libcurl3-dev

Clone the code from demo repository

#Compile VES library Go to evel/evel-library/bldjobs directory and run the below commands make all ==> to create the VES library make package ==> to create the VES package if needed

FYI - 'make install' can also be given to make a package and install the package in another machine - see evel/evel-library/bldjobs/Makefile for more details

After compilation VES libraries are generated and are available at below location evel/evel-library/libs/x86_64

#Loading VES the library Go to evel/evel-library/libs/x86_64 directory and run below commands sudo cp libevel.so /usr/lib sudo ldconfig

#Compiling agent code After successful compiling of VES library and loading the library, go to agent directory and run 'make all' For json heartbeat agent

cd evel/evel-library/VESreporting_HB make all

For all other jason based agents (VESreporting_fault, VESreporting_syslog and VESreporting_vFW) also, the compilation to be carried out in the same manner as mentioned above.

But for agents in VESreporting_vFW5.0 and VESreporting_vLB5.0, special care to be taken as below

  • Copy the contents of the directory into evel/evel-library/VESreporting directory
  • run 'make all' to create an executable (alternatively, this agent gets compiled during compilation of evel library when VESreporting directory has the agent code.

#Run the agent

  • run the application using go-client.sh command in the agent directory as below

    sudo chmod +x go-client.sh sudo ./go-client.sh

Agent building guide

Each application that wants to send events would call evel_initialize() function to initialize the parameter with evel library. For more details about the parameters passed, see the evel/evel-library/code/evel_library/evel.h file. The public APIs to the library are defined in evel.h

EVEL_ERR_CODES evel_initialize(const char * const fqdn, int port, const char * const bakup_fqdn, int bakup_port, const char * const path, const char * const topic, int ring_buf_size, int secure, const char * const cert_file_path, const char * const key_file_path, const char * const ca_info, const char * const ca_file_path, long verify_peer, long verify_host, const char * const username, const char * const password, const char * const bakup_username, const char * const bakup_password, const char * const source_ip, const char * const bakup_source_ip, EVEL_SOURCE_TYPES source_type, const char * const role, int verbosity ) { fprintf(stderr, "Failed to initialize the EVEL library!!!"); exit(-1); }

After successful running of evel_initialize() API, call the APIs to generate the events.

For fault event generation, below APIs would be called. For other events see the APIs listed in evel/evel-library/code/evel_library/evel.h

EVENT_FAULT * fault = evel_new_fault("Fault_vFW-ATT-LinkdownError", "fault0001", "My alarm condition", "It broke very badly", EVEL_PRIORITY_NORMAL, EVEL_SEVERITY_MAJOR, EVEL_SOURCE_HOST, EVEL_VF_STATUS_PREP_TERMINATE); if (fault != NULL) { evel_fault_type_set(fault, "Bad things happen..."); evel_fault_interface_set(fault, "My Interface Card"); evel_fault_addl_info_add(fault, "name1", "value1"); evel_fault_addl_info_add(fault, "name2", "value2"); evel_rc = evel_post_event((EVENT_HEADER *)fault); if (evel_rc != EVEL_SUCCESS) { EVEL_ERROR("Post failed %d (%s)", evel_rc, evel_error_string()); } }