1313// /
1414// / \author Kostas Alexopoulos ([email protected] )1515
16- #include < fstream>
1716#include < iostream>
1817#include " Cru/Constants.h"
1918#include " ReadoutCard/ChannelFactory.h"
@@ -28,27 +27,25 @@ using namespace AliceO2::roc;
2827using namespace AliceO2 ::InfoLogger;
2928namespace po = boost::program_options;
3029
31- class ProgramMetrics : public Program
30+ class ProgramMetrics : public Program
3231{
33- public:
34-
32+ public:
3533 virtual Description getDescription ()
3634 {
37- return {" Metrics" , " Return current RoC parameters" ,
38- " roc-metrics --id -1\n "
39- " roc-metrics --id 42:00.0\n " };
35+ return { " Metrics" , " Return current RoC parameters" ,
36+ " roc-metrics --id -1\n "
37+ " roc-metrics --id 42:00.0\n " };
4038 }
4139
4240 virtual void addOptions (boost::program_options::options_description& options)
4341 {
4442 Options::addOptionCardId (options);
45- options.add_options ()
46- (" csv-out" ,
47- po::value<std::string>(&mOptions .csvOut ),
48- " Target CSV file to write output to" );
43+ options.add_options ()(" csv-out" ,
44+ po::bool_switch (&mOptions .csvOut ),
45+ " Toggle csv-formatted output" );
4946 }
5047
51- virtual void run (const boost::program_options::variables_map& map)
48+ virtual void run (const boost::program_options::variables_map& map)
5249 {
5350
5451 auto cardId = Options::getOptionCardId (map);
@@ -62,32 +59,23 @@ class ProgramMetrics: public Program
6259 cardsFound = RocPciDevice::findSystemDevices (*serial);
6360 }
6461 } else if (auto pciAddress = boost::get<PciAddress>(&cardId)) {
65- cardsFound = RocPciDevice::findSystemDevices (*pciAddress);
62+ cardsFound = RocPciDevice::findSystemDevices (*pciAddress);
6663 } else if (auto pciSequenceNumber = boost::get<PciSequenceNumber>(&cardId)) {
6764 cardsFound = RocPciDevice::findSystemDevices (*pciSequenceNumber);
6865 } else {
6966 std::cout << " Something went wrong parsing the card id" << std::endl;
7067 }
7168
72- if (mOptions .csvOut != " " ) {
73- mOutputToCsv = true ;
74- }
75-
76- std::ofstream csvOut;
77-
7869 std::ostringstream table;
7970 auto formatHeader = " %-3s %-6s %-10s %-10s %-19s %-20s %-19s %-8s %-17s %-17s\n " ;
8071 auto formatRow = " %-3s %-6s %-10s %-10s %-19s %-20s %-19s %-8s %-17s %-17s\n " ;
81- auto header = (boost::format (formatHeader)
82- % " #" % " Type" % " PCI Addr" % " Temp (C)" % " #Dropped Packets" % " CTP Clock (MHz)" % " Local Clock (MHz)"
83- % " #links" % " #Wrapper 0 links" % " #Wrapper 1 links" ).str ();
72+ auto header = (boost::format (formatHeader) % " #" % " Type" % " PCI Addr" % " Temp (C)" % " #Dropped Packets" % " CTP Clock (MHz)" % " Local Clock (MHz)" % " #links" % " #Wrapper 0 links" % " #Wrapper 1 links" ).str ();
8473 auto lineFat = std::string (header.length (), ' =' ) + ' \n ' ;
8574 auto lineThin = std::string (header.length (), ' -' ) + ' \n ' ;
8675
87- if (mOutputToCsv ) {
88- csvOut.open (mOptions .csvOut );
89- auto csvHeader = " #,Type,PCI Addr,Temp (C),#Dropped Packets,CTP Clock (MHz),Local Clock (MHz),#links,#Wrapper 0 links, #Wrapper 1 links\n " ;
90- csvOut << csvHeader;
76+ if (mOptions .csvOut ) {
77+ auto csvHeader = " #,Type,PCI Addr,Temp (C),#Dropped Packets,CTP Clock (MHz),Local Clock (MHz),#links,#Wrapper 0 links, #Wrapper 1 links\n " ;
78+ std::cout << csvHeader;
9179 } else {
9280 table << lineFat << header << lineThin;
9381 }
@@ -101,43 +89,34 @@ class ProgramMetrics: public Program
10189
10290 float temperature = bar2->getTemperature ().value_or (0 );
10391 int32_t dropped = bar2->getDroppedPackets (bar0->getEndpointNumber ());
104- float ctp_clock = bar2->getCTPClock ()/ 1e6 ;
105- float local_clock = bar2->getLocalClock ()/ 1e6 ;
92+ float ctp_clock = bar2->getCTPClock () / 1e6 ;
93+ float local_clock = bar2->getLocalClock () / 1e6 ;
10694 int32_t links = bar2->getLinks ();
10795 uint32_t links0 = bar2->getLinksPerWrapper (0 );
10896 uint32_t links1 = bar2->getLinksPerWrapper (1 );
10997
110- if (mOutputToCsv ) {
111- auto csvLine = std::to_string (i) + " ," + CardType::toString (card.cardType ) + " ," + card.pciAddress .toString () + " ," + std::to_string (temperature)
112- + " ," + std::to_string (dropped) + " ," + std::to_string (ctp_clock) + " ," + std::to_string (local_clock) + " ," + std::to_string (links) + " ,"
113- + std::to_string (links0) + " ," + std::to_string (links1) + " \n " ;
114- csvOut << csvLine;
98+ if (mOptions .csvOut ) {
99+ auto csvLine = std::to_string (i) + " ," + CardType::toString (card.cardType ) + " ," + card.pciAddress .toString () + " ," + std::to_string (temperature) + " ," + std::to_string (dropped) + " ," + std::to_string (ctp_clock) + " ," + std::to_string (local_clock) + " ," + std::to_string (links) + " ," + std::to_string (links0) + " ," + std::to_string (links1) + " \n " ;
100+ std::cout << csvLine;
115101 } else {
116- auto format = boost::format (formatRow) % i % CardType::toString (card.cardType ) % card.pciAddress .toString ()
117- % temperature % dropped % ctp_clock % local_clock % links % links0 % links1;
102+ auto format = boost::format (formatRow) % i % CardType::toString (card.cardType ) % card.pciAddress .toString () % temperature % dropped % ctp_clock % local_clock % links % links0 % links1;
118103
119104 table << format;
120105 }
121106 i++;
122107 }
123108
124- if (mOutputToCsv ) {
125- csvOut.close ();
126- } else {
109+ if (!mOptions .csvOut ) {
127110 auto lineFat = std::string (header.length (), ' =' ) + ' \n ' ;
128111 table << lineFat;
129112 std::cout << table.str ();
130113 }
131114 }
132-
133- private:
134115
116+ private:
135117 struct OptionsStruct {
136- std::string csvOut = " " ;
118+ bool csvOut = false ;
137119 } mOptions ;
138-
139- bool mOutputToCsv = false ;
140-
141120};
142121
143122int main (int argc, char ** argv)
0 commit comments