
This decouples the build and packaging of guest-server, guest-agent from mtce, by splitting guest component into stx-nfv repo. This leaves existing C++ code, scripts, and resource files untouched, so there is no functional change. Code refactoring is beyond the scope of this update. Makefiles were modified to include devel headers directories /usr/include/mtce-common and /usr/include/mtce-daemon. This ensures there is no contamination with other system headers. The cgts-mtce-common package is renamed and split into: - repo stx-metal: mtce-common, mtce-common-dev - repo stx-metal: mtce - repo stx-nfv: mtce-guest - repo stx-ha: updates package dependencies to mtce-pmon for service-mgmt, sm, and sm-api mtce-common: - contains common and daemon shared source utility code mtce-common-dev: - based on mtce-common, contains devel package required to build mtce-guest and mtce - contains common library archives and headers mtce: - contains components: alarm, fsmon, fsync, heartbeat, hostw, hwmon, maintenance, mtclog, pmon, public, rmon mtce-guest: - contains guest component guest-server, guest-agent Story: 2002829 Task: 22748 Change-Id: I9c7a9b846fd69fd566b31aa3f12a043c08f19f1f Signed-off-by: Jim Gauld <james.gauld@windriver.com>
162 lines
6.0 KiB
C++
162 lines
6.0 KiB
C++
#ifndef __INCLUDE_rmonHTTPUTIL_H__
|
|
#define __INCLUDE_rmonHTTPUTIL_H__
|
|
/*
|
|
* Copyright (c) 2013, 2017 Wind River Systems, Inc.
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*
|
|
*/
|
|
|
|
/**
|
|
* @file
|
|
* Wind River CGTS Platform rmon
|
|
*
|
|
* libevent HTTP support utilities and control structure support header
|
|
*/
|
|
|
|
#include <iostream> /* for ... string */
|
|
#include <evhttp.h> /* for ... http libevent client */
|
|
|
|
using namespace std;
|
|
|
|
/** Maximum libevent response message size in bytes. */
|
|
#define MAX_EVENT_LEN (16384)
|
|
|
|
#define HTTP_VSWITCH_TIMEOUT (10)
|
|
#define HTTP_REMOTELOGGING_TIMEOUT (10)
|
|
#define HTTP_CEILOMETER_TIMEOUT (10)
|
|
|
|
#define VSWITCH_EVENT_SIG "vswitchEvent"
|
|
#define REMOTE_LOGGING_EVENT_SIG "remoteLoggingEvent"
|
|
#define CEILOMETER_EVENT_SIG "ceilometerEvent"
|
|
|
|
/** Request Type Enums for the common rmonHttpUtil_request utility */
|
|
typedef enum {
|
|
RMON_SERVICE_NONE,
|
|
VSWITCH_REQUEST,
|
|
REMOTE_LOGGING_REQUEST,
|
|
CEILOMETER_SAMPLE_CREATE
|
|
} rmon_libEvent_enum ;
|
|
|
|
/** Local event control structure for REST API services
|
|
*
|
|
* Keystone and Inventory
|
|
*
|
|
*/
|
|
typedef struct
|
|
{
|
|
/** Execution Controls */
|
|
bool mutex ; /**< single operation at a time */
|
|
bool active ; /**< true if waiting on response */
|
|
int stuck ; /**< Count mutex active stuck state */
|
|
int status ; /**< Execution Status */
|
|
string result ; /**< Command specific result str */
|
|
bool found ; /**< true if query was found */
|
|
int timeout ; /**< Request timeout */
|
|
int count ; /**< retry recover counter */
|
|
int fails ; /**< fail counter */
|
|
int retries ; /**< retry counter ; for receive */
|
|
string service ; /**< Service being executed */
|
|
string hostname ; /**< Target hostname */
|
|
string uuid ; /**< The UUID for this request */
|
|
string ip ; /**< Server IP address */
|
|
rmon_libEvent_enum request ;
|
|
int port ; /**< Server port number */
|
|
string user_agent ; /**< set the User-Agent header */
|
|
|
|
enum evhttp_cmd_type type; /**< HTTP Request Type ; PUT/GET */
|
|
struct event_base *base; /**< libEvent API service base */
|
|
struct evhttp_connection *conn; /**< HTTP connection ptr */
|
|
struct evhttp_request *req ; /**< HTTP request ptr */
|
|
struct evbuffer *buf ; /**< HTTP output buffer ptr */
|
|
struct evbuffer_ptr evp ; /**< HTTP output buffer ptr */
|
|
|
|
/** Timestamps used to measure the responsiveness of REST API */
|
|
struct timespec start_ts ; /**< Request Dispatch Timestamp */
|
|
struct timespec stop_ts ; /**< Response Handler Timestamp */
|
|
|
|
string entity_path ; /**< HTTP entity request string */
|
|
string entity_path_next ; /**< next entity request string */
|
|
|
|
/** Result Info */
|
|
node_inv_type * inv_info_ptr ; /**< Inventory data pointer */
|
|
string address ; /**< http url address */
|
|
string payload ; /**< the request's payload */
|
|
size_t response_len ; /**< the json response length */
|
|
string response ; /**< the json response string */
|
|
} libEvent_type;
|
|
|
|
int rmonHttpUtil_libEvent_init ( libEvent_type * ptr ,
|
|
string service,
|
|
string ip,
|
|
int port );
|
|
|
|
void rmonHttpUtil_start_timer ( libEvent_type & event );
|
|
void rmonHttpUtil_stop_timer ( libEvent_type & event );
|
|
void rmonHttpUtil_log_time ( libEvent_type & event );
|
|
|
|
|
|
/** Maximum number of headers that can be added to an HTTP message. */
|
|
#define MAX_HEADERS (10)
|
|
|
|
#if 0
|
|
/** A header entry type. */
|
|
typedef struct
|
|
{
|
|
string key ; /**< the header label. */
|
|
string value ; /**< the header value. */
|
|
} http_header_entry_type;
|
|
|
|
/** The header entry table. */
|
|
typedef struct
|
|
{
|
|
int entries ; /**< Number of entries in the header table. */
|
|
http_header_entry_type entry[MAX_HEADERS]; /**< entry array. */
|
|
} http_headers_type ;
|
|
#endif
|
|
|
|
/** Add payload to the HTTP message body. */
|
|
int rmonHttpUtil_payload_add ( libEvent_type & event );
|
|
|
|
/** Add all headers in header table to the HTTP connection message. */
|
|
int rmonHttpUtil_header_add ( libEvent_type * ptr, http_headers_type * hdrs_ptr );
|
|
|
|
/** Create an HTTP request. */
|
|
int rmonHttpUtil_request_make ( libEvent_type * ptr, enum evhttp_cmd_type type, string path );
|
|
|
|
/** Open a connection to an HTTP server. */
|
|
int rmonHttpUtil_connect_new ( libEvent_type & event );
|
|
|
|
/** Get a new HTTP request pointer. */
|
|
int rmonHttpUtil_request_new ( libEvent_type & event,
|
|
void(*hdlr)(struct evhttp_request *, void *));
|
|
|
|
/** Common REST API Request Utility */
|
|
int rmonHttpUtil_api_request ( rmon_libEvent_enum request,
|
|
libEvent_type & event,
|
|
string command_path );
|
|
|
|
/** Common REST API Request Utility */
|
|
int rmonHttpUtil_request ( libEvent_type & event , bool block,
|
|
void(*hdlr)(struct evhttp_request *, void *));
|
|
|
|
/** Common REST API Receive Utility for non-blocking requests */
|
|
int rmonHttpUtil_receive ( libEvent_type & event );
|
|
|
|
/** HTTP response status checker */
|
|
int rmonHttpUtil_status ( libEvent_type & event );
|
|
|
|
/** TODO: FIXME: Get the payload string length. */
|
|
string rmonHttpUtil_payload_len ( libEvent_type * ptr );
|
|
|
|
/** Get the length of the json response */
|
|
int rmonHttpUtil_get_length ( libEvent_type & event );
|
|
|
|
/** Load the json response into the event struct */
|
|
int rmonHttpUtil_get_response ( libEvent_type & event );
|
|
|
|
/** print event filtered event */
|
|
void rmonHttpUtil_log_event ( libEvent_type & event );
|
|
|
|
#endif /* __INCLUDE_rmonHTTPUTIL_H__ */
|