--- /dev/null
+// vi: ts=4 sw=4 noet:
+/*
+==================================================================================
+ Copyright (c) 2020 Nokia
+ Copyright (c) 2020 AT&T Intellectual Property.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+==================================================================================
+*/
+
+/*
+ Mnemonic: metrics.hpp
+ Abstract: Headers for the metrics class.
+ This class provides a simple interface for an xAPP to compose and
+ send metrics. The class allows the xAPP to name the metric and to
+ provide one or more key/value pairs which are sent to the metrics
+ gateway (munchkin) when Send() is invoked. The class hides the
+ true message structure that the munchkin desires from the xAPP.
+
+ The munchkin endpoint is assumed to be a routable target and thus
+ normal RMR messages (with appropriate type) are sent.
+
+ Date: 20 July 2020
+ Author: E. Scott Daniels
+*/
+
+#ifndef _XAPP_METRICS_HPP
+#define _XAPP_METRICS_HPP
+
+
+#include <iostream>
+#include <string>
+
+#include "msg_component.hpp"
+
+namespace xapp {
+
+// ------------------------------------------------------------------------
+
+/*
+This class is loosely tied to the json expected by the munchkin. See the munchkin
+documentation for explicit information, but this will help to understand a bit:
+ {
+ "reporter": "<string>",
+ "generator" "<string>",
+ "timestamp": double,
+ "data": [
+ {
+ "id": "<string>",
+ "type": "<string>",
+ "value": double
+ },...
+ ]
+ }
+*/
+
+class Metrics {
+ private:
+ std::shared_ptr<Message> msg; // message to send
+
+ // data for the payload
+ std::string reporter; // this application as it's reporting the metrics
+ std::string source; // source of the measurement if not the reporter
+ std::string data; // key/value/type tuples "pushed" waiting for send
+
+
+ int build_payload( xapp::Msg_component payload, int payload_len );
+
+ public:
+
+ Metrics( std::shared_ptr<Message> msg ); // builders
+ Metrics( std::shared_ptr<Message> msg, std::string msource ); // allow xapp to supply metric source
+ Metrics( std::shared_ptr<Message> msg, std::string reporter, std::string msource ); // allow xapp to supply all
+
+ Metrics( const Metrics& soi ); // copy to newly created instance
+ Metrics& operator=( const Metrics& soi ); // copy operator
+ Metrics( Metrics&& soi ); // mover
+ Metrics& operator=( Metrics&& soi ); // move operator
+ ~Metrics(); // destroyer
+
+
+ void Set_source( std::string new_source );
+ void Set_reporter( std::string new_reporter );
+ void Push_data( std::string key, double value );
+
+
+ bool Send( );
+};
+
+} // namespace
+
+#endif