Skip to content

Commit fb869c1

Browse files
committed
[metrics/status] CSV output to stdout
1 parent 3061b0c commit fb869c1

File tree

2 files changed

+48
-85
lines changed

2 files changed

+48
-85
lines changed

src/CommandLineUtilities/ProgramMetrics.cxx

Lines changed: 23 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
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;
2827
using namespace AliceO2::InfoLogger;
2928
namespace 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

143122
int main(int argc, char** argv)

src/CommandLineUtilities/ProgramStatus.cxx

Lines changed: 25 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
///
1414
/// \author Kostas Alexopoulos ([email protected])
1515

16-
#include <fstream>
1716
#include <iostream>
1817
#include "Cru/Common.h"
1918
#include "Cru/Constants.h"
@@ -28,30 +27,28 @@ using namespace AliceO2::roc;
2827
using namespace AliceO2::InfoLogger;
2928
namespace po = boost::program_options;
3029

31-
class ProgramStatus: public Program
30+
class ProgramStatus : public Program
3231
{
33-
public:
34-
32+
public:
3533
virtual Description getDescription()
3634
{
37-
return {"Status", "Return current RoC configuration status",
38-
"roc-status --id 42:00.0\n"};
35+
return { "Status", "Return current RoC configuration status",
36+
"roc-status --id 42:00.0\n" };
3937
}
4038

4139
virtual void addOptions(boost::program_options::options_description& options)
4240
{
4341
Options::addOptionCardId(options);
44-
options.add_options()
45-
("csv-out",
46-
po::value<std::string>(&mOptions.csvOut),
47-
"Target CSV file to write output to");
42+
options.add_options()("csv-out",
43+
po::bool_switch(&mOptions.csvOut),
44+
"Toggle csv-formatted output");
4845
}
4946

50-
virtual void run(const boost::program_options::variables_map& map)
47+
virtual void run(const boost::program_options::variables_map& map)
5148
{
5249

5350
auto cardId = Options::getOptionCardId(map);
54-
auto params = Parameters::makeParameters(cardId, 2); //status available on BAR2
51+
auto params = Parameters::makeParameters(cardId, 2); //status available on BAR2
5552
// We care for all of the links
5653
//params.setLinkMask(Parameters::linkMaskFromString("0-23"));
5754
auto bar2 = ChannelFactory().getBar(params);
@@ -69,30 +66,23 @@ class ProgramStatus: public Program
6966

7067
Cru::ReportInfo reportInfo = cruBar2->report();
7168

72-
if (mOptions.csvOut != "") {
73-
mOutputToCsv = true;
74-
}
75-
76-
std::ofstream csvOut;
77-
7869
std::ostringstream table;
7970
auto formatHeader = " %-9s %-16s %-10s %-14s %-15s %-10s %-14s %-14s %-8s %-19s\n";
8071
auto formatRow = " %-9s %-16s %-10s %-14s %-15s %-10s %-14.2f %-14.2f %-8s %-19.1f\n";
81-
auto header = (boost::format(formatHeader)
82-
% "Link ID" % "GBT Mode Tx/Rx" % "Loopback" % "GBT MUX" % "Datapath Mode" % "Datapath" % "RX freq(MHz)" % "TX freq(MHz)" % "Status" % "Optical power(uW)").str();
72+
auto header = (boost::format(formatHeader) % "Link ID" % "GBT Mode Tx/Rx" % "Loopback" % "GBT MUX" % "Datapath Mode" % "Datapath" % "RX freq(MHz)" % "TX freq(MHz)" % "Status" % "Optical power(uW)").str();
8373
auto lineFat = std::string(header.length(), '=') + '\n';
8474
auto lineThin = std::string(header.length(), '-') + '\n';
8575

86-
if (mOutputToCsv) {
87-
csvOut.open(mOptions.csvOut);
88-
auto csvHeader = "Link ID,GBT Mode,Loopback,GBT Mux,Datapath Mode,Datapath,RX Freq(MHz),TX Freq(MHz),Status,Optical Power(uW)\n";
89-
csvOut << csvHeader;
76+
if (mOptions.csvOut) {
77+
auto csvHeader = "Link ID,GBT Mode,Loopback,GBT Mux,Datapath Mode,Datapath,RX Freq(MHz),TX Freq(MHz),Status,Optical Power(uW)\n";
78+
std::cout << csvHeader;
9079
} else {
9180
table << lineFat << header << lineThin;
9281
}
9382

94-
if (!mOutputToCsv) {
95-
std::string clock = (reportInfo.ttcClock == 0 ? "TTC" : "Local");;
83+
if (!mOptions.csvOut) {
84+
std::string clock = (reportInfo.ttcClock == 0 ? "TTC" : "Local");
85+
;
9686
std::cout << "------------" << std::endl;
9787
std::cout << clock << " clock" << std::endl;
9888
std::cout << "------------" << std::endl;
@@ -120,9 +110,9 @@ class ProgramStatus: public Program
120110
gbtMux += ":" + downstreamData;
121111
}
122112

123-
std::string datapathMode = DatapathMode::toString(link.datapathMode);
113+
std::string datapathMode = DatapathMode::toString(link.datapathMode);
124114

125-
std::string enabled = (link.enabled) ? "Enabled" : "Disabled" ;
115+
std::string enabled = (link.enabled) ? "Enabled" : "Disabled";
126116

127117
float rxFreq = link.rxFreq;
128118
float txFreq = link.txFreq;
@@ -138,33 +128,27 @@ class ProgramStatus: public Program
138128

139129
float opticalPower = link.opticalPower;
140130

141-
if (mOutputToCsv) {
142-
auto csvLine = std::to_string(globalId) + "," + gbtTxRxMode + "," + loopback + "," + gbtMux + "," + datapathMode + "," + enabled + "," +
143-
std::to_string(rxFreq) + "," + std::to_string(txFreq) + "," + linkStatus + "," + std::to_string(opticalPower) + "\n";
144-
csvOut << csvLine;
131+
if (mOptions.csvOut) {
132+
auto csvLine = std::to_string(globalId) + "," + gbtTxRxMode + "," + loopback + "," + gbtMux + "," + datapathMode + "," + enabled + "," +
133+
std::to_string(rxFreq) + "," + std::to_string(txFreq) + "," + linkStatus + "," + std::to_string(opticalPower) + "\n";
134+
std::cout << csvLine;
145135
} else {
146136
auto format = boost::format(formatRow) % globalId % gbtTxRxMode % loopback % gbtMux % datapathMode % enabled % rxFreq % txFreq % linkStatus % opticalPower;
147137
table << format;
148138
}
149-
150139
}
151140

152-
if (mOutputToCsv) {
153-
csvOut.close();
154-
} else {
141+
if (!mOptions.csvOut) {
155142
auto lineFat = std::string(header.length(), '=') + '\n';
156143
table << lineFat;
157144
std::cout << table.str();
158145
}
159146
}
160147

161-
private:
162-
148+
private:
163149
struct OptionsStruct {
164-
std::string csvOut = "";
150+
bool csvOut = false;
165151
} mOptions;
166-
167-
bool mOutputToCsv = false;
168152
};
169153

170154
int main(int argc, char** argv)

0 commit comments

Comments
 (0)