Add metrics to the framework
[ric-plt/xapp-frame-cpp.git] / src / metrics / metrics.hpp
diff --git a/src/metrics/metrics.hpp b/src/metrics/metrics.hpp
new file mode 100644 (file)
index 0000000..77f258c
--- /dev/null
@@ -0,0 +1,102 @@
+// 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