2525#include < boost/property_tree/ptree.hpp>
2626#include < boost/property_tree/json_parser.hpp>
2727
28+ #include < Monitoring/MonitoringFactory.h>
29+ using namespace o2 ::monitoring;
30+
2831using namespace AliceO2 ::roc::CommandLineUtilities;
2932using namespace AliceO2 ::roc;
3033using namespace AliceO2 ::InfoLogger;
@@ -37,7 +40,9 @@ class ProgramMetrics : public Program
3740 virtual Description getDescription ()
3841 {
3942 return { " Metrics" , " Return current RoC parameters" ,
40- " roc-metrics \n " };
43+ " roc-metrics \n "
44+ " roc-metrics --json \n "
45+ " roc-metrics --monitoring\n " };
4146 }
4247
4348 virtual void addOptions (boost::program_options::options_description& options)
@@ -48,6 +53,9 @@ class ProgramMetrics : public Program
4853 options.add_options ()(" csv-out" ,
4954 po::bool_switch (&mOptions .csvOut ),
5055 " Toggle csv-formatted output" );
56+ options.add_options ()(" monitoring" ,
57+ po::bool_switch (&mOptions .monitoring ),
58+ " Toggle monitoring metrics sending" );
5159 }
5260
5361 virtual void run (const boost::program_options::variables_map& /* map*/ )
@@ -69,6 +77,14 @@ class ProgramMetrics : public Program
6977
7078 auto cardsFound = AliceO2::roc::RocPciDevice::findSystemDevices ();
7179
80+ // Monitoring instance to send metrics
81+ std::unique_ptr<Monitoring> monitoring;
82+ if (mOptions .monitoring ) {
83+ monitoring = MonitoringFactory::Get (" stdout://" );
84+ monitoring->addGlobalTag (tags::Key::Subsystem, tags::Value::CRU);
85+ }
86+
87+ // Used for the JSON output
7288 pt::ptree root;
7389 int i = 0 ;
7490 for (const auto & card : cardsFound) {
@@ -87,7 +103,17 @@ class ProgramMetrics : public Program
87103 float localClock = bar2->getLocalClock () / 1e6 ;
88104 uint32_t totalPacketsPerSecond = bar2->getTotalPacketsPerSecond (0 );
89105
90- if (mOptions .jsonOut ) {
106+ if (mOptions .monitoring ) {
107+ monitoring->send (Metric{ std::to_string (i), " card" }
108+ .addValue (CardType::toString (card.cardType ), " type" )
109+ .addValue (card.pciAddress .toString (), " pciAddress" )
110+ .addValue (temperature, " temperature" )
111+ .addValue (dropped, " droppedPackets" )
112+ .addValue (ctpClock, " ctpClock" )
113+ .addValue (localClock, " localClock" )
114+ .addValue ((int )totalPacketsPerSecond, " totalPacketsPerSecond" ));
115+
116+ } else if (mOptions .jsonOut ) {
91117 pt::ptree cardNode;
92118
93119 // add kv pairs for this card
@@ -116,7 +142,7 @@ class ProgramMetrics : public Program
116142
117143 if (mOptions .jsonOut ) {
118144 pt::write_json (std::cout, root);
119- } else if (!mOptions .csvOut ) {
145+ } else if (!mOptions .csvOut && ! mOptions . monitoring ) {
120146 auto lineFat = std::string (header.length (), ' =' ) + ' \n ' ;
121147 table << lineFat;
122148 std::cout << table.str ();
@@ -127,6 +153,7 @@ class ProgramMetrics : public Program
127153 struct OptionsStruct {
128154 bool jsonOut = false ;
129155 bool csvOut = false ;
156+ bool monitoring = false ;
130157 } mOptions ;
131158};
132159
0 commit comments