summaryrefslogtreecommitdiffstats
path: root/VES5.0/evel/evel-library/code/evel_library/quickstart.md
diff options
context:
space:
mode:
Diffstat (limited to 'VES5.0/evel/evel-library/code/evel_library/quickstart.md')
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/quickstart.md445
1 files changed, 0 insertions, 445 deletions
diff --git a/VES5.0/evel/evel-library/code/evel_library/quickstart.md b/VES5.0/evel/evel-library/code/evel_library/quickstart.md
deleted file mode 100644
index 1c735cc4..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/quickstart.md
+++ /dev/null
@@ -1,445 +0,0 @@
-# Quick Start Guide {#quickstart}
-
-# Introduction {#qs_intro}
-
-This Quick-Start section describes how to:
-
- * Install and compile the supplied library code
- * Integrate an existing project to use the EVEL library
-
-# Installation {#qs_install}
-
-The library is supplied as a source-code compressed-tar file. It is
-straightforward to install and build to integrate with an existing or new
-development project.
-
-## Unpack the Source Code {#qs_unpack}
-
-The file should unpacked into your development environment:
-```
-$ mkdir evel
-$ cd evel
-$ tar zxvf evel-library-package.tgz
-```
-### Satisfy Dependencies {#qs_depend}
-
-Note that all commands in this section are based on CentOS package management
-tools and you may need to substitute the appropriate tools/packages for your
-distribution, for example `apt-get` for Ubuntu.
-
-Ensure that GCC development tools are available.
-
-```
-$ sudo yum install gcc
-```
-Additionally, the library has a dependency on the cURL library, so you'll need
-the development tools for libCurl installed. (At runtime, only the runtime
-library is required, of course.)
-
-```
-$ sudo yum install libcurl-devel
-```
-If you wish to make the project documentation, then Doxygen and Graphviz are
-required. (Again, this is only in the development environment, not the runtime
-environment!)
-
-```
-$ sudo yum install doxygen graphviz
-```
-
-Note that some distributions have quite old versions of Doxygen by default and
-it may be necessary to install a later version to use all the features.
-
-If you want to build PDFs from the LaTeX you will need a texlive install.
-
-```
-$ sudo yum install texlive
-```
-
-### Test Build {#qs_build}
-Make sure that the library makes cleanly:
-
-```
-$ cd bldjobs
-$ make
-Making dependency file evel_unit.d for evel_unit.c
-Making dependency file evel_test_control.d for evel_test_control.c
-Making dependency file evel_demo.d for evel_demo.c
-Making dependency file jsmn.d for jsmn.c
-Making dependency file evel_logging.d for evel_logging.c
-Making dependency file evel_event_mgr.d for evel_event_mgr.c
-Making dependency file evel_internal_event.d for evel_internal_event.c
-Making dependency file evel_throttle.d for evel_throttle.c
-Making dependency file evel_syslog.d for evel_syslog.c
-Making dependency file evel_strings.d for evel_strings.c
-Making dependency file evel_state_change.d for evel_state_change.c
-Making dependency file evel_scaling_measurement.d for evel_scaling_measurement.c
-Making dependency file evel_signaling.d for evel_signaling.c
-Making dependency file evel_service.d for evel_service.c
-Making dependency file evel_reporting_measurement.d for evel_reporting_measurement.c
-Making dependency file evel_json_buffer.d for evel_json_buffer.c
-Making dependency file evel_other.d for evel_other.c
-Making dependency file evel_option.d for evel_option.c
-Making dependency file evel_mobile_flow.d for evel_mobile_flow.c
-Making dependency file evel_fault.d for evel_fault.c
-Making dependency file evel_event.d for evel_event.c
-Making dependency file double_list.d for double_list.c
-Making dependency file ring_buffer.d for ring_buffer.c
-Making dependency file metadata.d for metadata.c
-Making dependency file evel.d for evel.c
-Making evel.o from evel.c
-Making metadata.o from metadata.c
-Making ring_buffer.o from ring_buffer.c
-Making double_list.o from double_list.c
-Making evel_event.o from evel_event.c
-Making evel_fault.o from evel_fault.c
-Making evel_mobile_flow.o from evel_mobile_flow.c
-Making evel_option.o from evel_option.c
-Making evel_other.o from evel_other.c
-Making evel_json_buffer.o from evel_json_buffer.c
-Making evel_reporting_measurement.o from evel_reporting_measurement.c
-Making evel_service.o from evel_service.c
-Making evel_signaling.o from evel_signaling.c
-Making evel_scaling_measurement.o from evel_scaling_measurement.c
-Making evel_state_change.o from evel_state_change.c
-Making evel_strings.o from evel_strings.c
-Making evel_syslog.o from evel_syslog.c
-Making evel_throttle.o from evel_throttle.c
-Making evel_internal_event.o from evel_internal_event.c
-Making evel_event_mgr.o from evel_event_mgr.c
-Making evel_logging.o from evel_logging.c
-Making jsmn.o from jsmn.c
-Linking API Shared Library
-Linking API Static Library
-Making evel_demo.o from evel_demo.c
-Making evel_test_control.o from evel_test_control.c
-Linking EVEL demo
-Making EVEL training
-$
-```
-You should now be able to run the demo CLI application. Since it will want to
-dynamically link to the library that you've just made, you will need to set
-your `LD_LIBRARY_PATH` appropriately first. Make sure that you specify
-your actual directory paths correctly in the following:
-
-```
-$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/centos/evel/libs/x86_64
-$ ../output/x86_64/evel_demo
-evel_demo [--help]
- --fqdn <domain>
- --port <port_number>
- [--path <path>]
- [--topic <topic>]
- [--username <username>]
- [--password <password>]
- [--https]
- [--cycles <cycles>]
- [--nothrott]
-
-Demonstrate use of the ECOMP Vendor Event Listener API.
-
- -h Display this usage message.
- --help
-
- -f The FQDN or IP address to the RESTful API.
- --fqdn
-
- -n The port number the RESTful API.
- --port
-
- -p The optional path prefix to the RESTful API.
- --path
-
- -t The optional topic part of the RESTful API.
- --topic
-
- -u The optional username for basic authentication of requests.
- --username
-
- -w The optional password for basic authentication of requests.
- --password
-
- -s Use HTTPS rather than HTTP for the transport.
- --https
-
- -c Loop <cycles> times round the main loop. Default = 1.
- --cycles
-
- -v Generate much chattier logs.
- --verbose
-
- -x Exclude throttling commands from demonstration.
- --nothrott
-
-$
-```
-Assuming that all worked as expected, you are ready to start integrating with
-your application. It probably makes sense to make the LD_LIBRARY_PATH change
-above permanent by incorporating it into your `.bash_profile` file.
-
-### Project Documentation {#qs_build_docs}
-
-The source comes with its own documentation included. The documentation can be
-built using the `docs` target in the Makefile. By default this builds HTML
-and LaTeX documentation, the latter being used to prepare PDFs.
-
-To make the documentation:
-```
-$ cd bldjobs
-$ make docs
-Cleaning docs...
-Making Doxygen documentation
-$
-```
-
-There is a make target that is intended to install the documentation on a
-"team server" - it will need adaptation for your team's environment - see the
-`docs_install` target in the Makefile:
-
-```
-$ make docs_install
-Cleaning docs...
-Making Doxygen documentation
-Copying docs to team web-server...
-Enter passphrase for key '/data/home/.ssh/id_rsa':
-annotated.html 100% 8088 7.9KB/s 00:00
-arrowdown.png 100% 246 0.2KB/s 00:00
-arrowright.png 100% 229 0.2KB/s 00:00
- ...
-$
-```
-
-# Project Integration {#qs_integrate}
-
-There are two key steps to the integration which have to be undertaken:
-
- * Initialization/Termination of the library.
- * Creation & posting of individual events.
-
-Additionally, it may be necessary to consider changes to the EVEL library's
-source code if assumptions made by the library are either not satisfied or
-inconvenient. In particular:
-
- * If the project already uses libcurl then the global initialization of the
- library should be removed from the _EVEL Library_.
- * The _EVEL Library_ uses `syslog` for event logging. If the project uses a
- different event logging process, then EVEL's event logging macros should be
- rewritten appropriately.
-
-These steps are considered in the [Normal Use](@ref qs_normal_use) and
-[EVEL Adaptation](@ref qs_adaptation) sections below.
-
-## Normal Use {#qs_normal_use}
-
-The _EVEL Library_ should be integrated with your project at a per-process
-level: each process is an independent client of the ECOMP Vendor Event Listener
-API.
-
-### Initialization {#qs_initialize}
-
-The _EVEL Library_ should be initialized before the process becomes
-multi-threaded. This constraint arises from the use of libcurl which imposes
-the constraint that initialization occurs before the system is multi-threaded.
-This is described in more detail in the libcurl documentation for the
-[curl_global_init](https://curl.haxx.se/libcurl/c/curl_global_init.html)
-function.
-
-Initialization stores configuration of the Vendor Event Listener API's details,
-such as the FQDN or IP address of the service, so the initializing process must
-have either extracted this information from its configuration or have this
-information "hard-wired" into the application, so that it is available at the
-point the `evel_initialize()` function is called:
-
-```C
- #include "evel.h"
- ...
- if (evel_initialize(api_fqdn,
- api_port,
- api_path,
- api_topic,
- api_secure,
- "Alice",
- "This isn't very secure!",
- EVEL_SOURCE_VIRTUAL_MACHINE,
- "EVEL demo client",
- verbose_mode))
- {
- fprintf(stderr, "Failed to initialize the EVEL library!!!");
- exit(-1);
- }
- ...
-```
-Once initialization has occurred successfully, the application may raise events
-and may also use the logging functions such as EVEL_INFO().
-
-Initialization is entirely local (there is no interaction with the service) so
-it is very unlikely to fail, unless the application environment is seriously
-degraded.
-
-### Event Generation {#qs_generate}
-
-Generating events is a two stage process:
-
- 1. Firstly, the _EVEL Library_ is called to allocate an event of the correct
- type.
- * If this is successful, the caller is given a pointer to the event.
- * All mandatory fields on the event are provided to this factory function
- and are thereafter immutable.
- * The application may add any necessary optional fields to the event, using
- the pointer previously returned.
- 2. The event is sent to the JSON API using the evel_post_event() function.
- * At this point, the application relinquishes all responsibility for the
- event:
- * It will be posted to the JSON API, if possible.
- * Whether or not the posting is successful, the memory used will be
- freed.
-
-In practice this looks like:
-
-```C
- #include "evel.h"
- ...
-
- /***************************************************************************/
- /* Create a new Fault object, setting mandatory fields as we do so... */
- /***************************************************************************/
- fault = evel_new_fault("My alarm condition",
- "It broke very badly",
- EVEL_PRIORITY_NORMAL,
- EVEL_SEVERITY_MAJOR);
- if (fault != NULL)
- {
- /*************************************************************************/
- /* We have a Fault object - add some optional fields to it... */
- /*************************************************************************/
- 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");
-
- /*************************************************************************/
- /* Finally, post the Fault. In practice this will only ever fail if */
- /* local ring-buffer is full because of event overload. */
- /*************************************************************************/
- evel_rc = evel_post_event((EVENT_HEADER *)fault);
- if (evel_rc != EVEL_SUCCESS)
- {
- EVEL_ERROR("Post failed %d (%s)", evel_rc, evel_error_string());
- }
- }
- ...
-```
-### Event Types {#qs_event_types}
-
-The _EVEL Library_ supports the following types of events:
-
- 1. Faults
-
- These represent the **fault** domain in the event schema.
-
- 2. Measurements
-
- These represent the **measurementsForVfScaling** domain in the event
- schema.
-
- 3. Reports
-
- This is an experimental type, designed to allow VNFs to report
- application-level statistics unencumbered with platform measurements.
- The formal AT&T schema has been updated to include this experimental
- type as **measurementsForVfReporting**.
-
- 4. Mobile Flow
-
- These represent the **mobileFlow** domain in the event schema.
-
- 5. Other
-
- These represent the **other** domain in the event schema.
-
- 6. Service Events
-
- These represent the **serviceEvents** domain in the event schema.
-
- 7. Signaling
-
- These represent the **signaling** domain in the event schema.
-
- 8. State Change
-
- These represent the **stateChange** domain in the event schema.
-
- 9. Syslog
-
- These represent the **syslog** domain in the event schema.
-
-### Throttling {#qs_throttling}
-
-The _EVEL library_ supports the following command types as defined in the JSON API:
-
- 1. commandType: throttlingSpecification
-
- This is handled internally by the EVEL library, which stores the provided
- throttling specification internally and applies it to all subsequent events.
-
- 2. commandType: provideThrottlingState
-
- This is handled internally by the EVEL library, which returns the current
- throttling specification for each domain.
-
- 3. commandType: measurementIntervalChange
-
- This is handled by the EVEL library, which makes the latest measurement
- interval available via the ::evel_get_measurement_interval function.
- The application is responsible for checking and adhering to the latest
- provided interval.
-
-### Termination {#qs_termination}
-
-Termination of the _EVEL Library_ is swift and brutal! Events in the buffer
-at the time are "dropped on the floor" rather than waiting for the buffer to
-deplete first.
-
-```C
- #include "evel.h"
- ...
-
- /***************************************************************************/
- /* Shutdown the library. */
- /***************************************************************************/
- evel_terminate();
-
- ...
-```
-
-## EVEL Adaptation {#qs_adaptation}
-
-The _EVEL Library_ is relatively simple and should be easy to adapt into other
-project environments.
-
-### LibcURL Lifecycle
-
-There are two circumstances where initialization of libcurl may be required:
-
- 1. If libcurl is used by the project already, and therefore already takes
- responsibility of its initialization, then the libcurl initialization and
- termination functions should be removed from evel_initialize() and
- evel_terminate() respectively.
- 2. If the project is unable to satisfy the constraint that libcurl
- initialization takes place in a single-threaded environment at the point
- that the _EVEL Library_ can be initialized (for example, if MT code is
- necessary to read the configuration parameters required for
- _EVEL Library_ initialization) then it may be necessary to extract the
- libcurl functions and call them separately, earlier in the program's
- operation.
-
-### Event Logging
-
-The _EVEL Library_ uses `syslog` for logging. If this is inappropriate then
-the log_debug() and log_initialize() functions should be rewritten accordingly.
-
-**Note**: it would be a really bad idea to use the _EVEL Library_ itself for this
-logging function.
-[Turtles all the way down...](https://en.wikipedia.org/wiki/Turtles_all_the_way_down)
-
- \ No newline at end of file