Redfish TelemetryService schema implementation

Now user is able to communicate with Telemetry service using Redfish.
Added TelemetryService, MetricReports, MetricReportCollection,
MetricReportDefinition and MetricReportDefinitionCollection nodes
with GET method support. Added TelemetryService URI to root service.
Implemented communication with backend - Telemetry:
https://github.com/openbmc/telemetry

Added schemes attributes that are supported by Telemetry service
design, ref.:
https://github.com/openbmc/docs/blob/master/designs/telemetry.md

Change introduces function that converts decimal value into
duration format that is described by ISO 8601 and Redfish
specification.

Tested:
 - Tested using romulus and s2600wf images on QEMU
 - Verified DBus method calls to Telemetry service from bmcweb
 - Verified bmcweb responses from new nodes in different cases:
   - Report collection is empty
   - Report collection is filled with artificial data
   - Telemetry service is disabled
 - Verified time_utils::toDurationString() output
 - Passed RedfishServiceValidator.py

Signed-off-by: Wludzik, Jozef <jozef.wludzik@intel.com>
Signed-off-by: Adrian Ambrożewicz <adrian.ambrozewicz@linux.intel.com>
Signed-off-by: Krzysztof Grobelny <krzysztof.grobelny@intel.com>
Change-Id: Ie6b0b49f4ef5eeaef07d1209b6c349270c04d570
diff --git a/redfish-core/include/redfish.hpp b/redfish-core/include/redfish.hpp
index 5d5eb7b..e94c0f3 100644
--- a/redfish-core/include/redfish.hpp
+++ b/redfish-core/include/redfish.hpp
@@ -25,6 +25,8 @@
 #include "../lib/managers.hpp"
 #include "../lib/memory.hpp"
 #include "../lib/message_registries.hpp"
+#include "../lib/metric_report.hpp"
+#include "../lib/metric_report_definition.hpp"
 #include "../lib/network_protocol.hpp"
 #include "../lib/pcie.hpp"
 #include "../lib/power.hpp"
@@ -36,6 +38,7 @@
 #include "../lib/storage.hpp"
 #include "../lib/systems.hpp"
 #include "../lib/task.hpp"
+#include "../lib/telemetry_service.hpp"
 #include "../lib/thermal.hpp"
 #include "../lib/update_service.hpp"
 #ifdef BMCWEB_ENABLE_VM_NBDPROXY
@@ -209,6 +212,13 @@
         nodes.emplace_back(std::make_unique<HypervisorInterface>(app));
         nodes.emplace_back(std::make_unique<HypervisorSystem>(app));
 
+        nodes.emplace_back(std::make_unique<TelemetryService>(app));
+        nodes.emplace_back(
+            std::make_unique<MetricReportDefinitionCollection>(app));
+        nodes.emplace_back(std::make_unique<MetricReportDefinition>(app));
+        nodes.emplace_back(std::make_unique<MetricReportCollection>(app));
+        nodes.emplace_back(std::make_unique<MetricReport>(app));
+
         for (const auto& node : nodes)
         {
             node->initPrivileges();