// 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 #include #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": "", "generator" "", "timestamp": double, "data": [ { "id": "", "type": "", "value": double },... ] } */ class Metrics { private: std::shared_ptr 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 msg ); // builders Metrics( std::shared_ptr msg, std::string msource ); // allow xapp to supply metric source Metrics( std::shared_ptr 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