Skip to content

Commit 3e31cba

Browse files
committed
Add oiuser and human output formats
Oiuser is for printing user CPU time, while the second one is human-readable.
1 parent 23c4025 commit 3e31cba

9 files changed

+112
-0
lines changed

src/limits/TimeLimitListener.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ void TimeLimitListener::onPostExecute() {
9797
// TODO: run this just after child exit
9898
auto time = getTimeUsage();
9999
outputBuilder_->setRealTimeMicroseconds(time->realTimeUs);
100+
outputBuilder_->setUserTimeMicroseconds(time->processTimeUs.uTimeUs);
101+
outputBuilder_->setSysTimeMicroseconds(time->processTimeUs.sTimeUs);
100102
verifyTimeUsage(move(time));
101103
}
102104

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#include "HumanReadableOIOutputBuilder.h"
2+
3+
#include <sstream>
4+
5+
namespace s2j {
6+
namespace printer {
7+
8+
const std::string HumanReadableOIOutputBuilder::FORMAT_NAME = "human";
9+
10+
std::string HumanReadableOIOutputBuilder::dump() const {
11+
// This is inspired by the oiejq script
12+
std::stringstream ss;
13+
ss << std::endl << "-------------------------" << std::endl << "Result: ";
14+
dumpStatus(ss);
15+
ss << std::endl
16+
<< "Time used: " << static_cast<float>(milliSecondsElapsed_) / 1000
17+
<< "s" << std::endl
18+
<< "Memory used: " << memoryPeakKb_ / 1024 << "MiB" << std::endl;
19+
return ss.str();
20+
}
21+
22+
} // namespace printer
23+
} // namespace s2j
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#pragma once
2+
3+
#include "OIModelOutputBuilder.h"
4+
5+
namespace s2j {
6+
namespace printer {
7+
8+
class HumanReadableOIOutputBuilder : public OIModelOutputBuilder {
9+
public:
10+
std::string dump() const override;
11+
12+
const static std::string FORMAT_NAME;
13+
};
14+
15+
} // namespace printer
16+
} // namespace s2j

src/printer/OIModelOutputBuilder.cc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,16 @@ OutputBuilder& OIModelOutputBuilder::setRealTimeMicroseconds(uint64_t time) {
2424
return *this;
2525
}
2626

27+
OutputBuilder& OIModelOutputBuilder::setUserTimeMicroseconds(uint64_t time) {
28+
userMilliSecondsElapsed_ = time / 1000;
29+
return *this;
30+
}
31+
32+
OutputBuilder& OIModelOutputBuilder::setSysTimeMicroseconds(uint64_t time) {
33+
sysMilliSecondsElapsed_ = time / 1000;
34+
return *this;
35+
}
36+
2737
OutputBuilder& OIModelOutputBuilder::setMemoryPeak(uint64_t memoryPeakKb) {
2838
memoryPeakKb_ = memoryPeakKb;
2939
return *this;

src/printer/OIModelOutputBuilder.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ class OIModelOutputBuilder : public OutputBuilder {
1313

1414
OutputBuilder& setCyclesUsed(uint64_t cyclesUsed) override;
1515
OutputBuilder& setRealTimeMicroseconds(uint64_t time) override;
16+
OutputBuilder& setUserTimeMicroseconds(uint64_t time) override;
17+
OutputBuilder& setSysTimeMicroseconds(uint64_t time) override;
1618
OutputBuilder& setMemoryPeak(uint64_t memoryPeakKb) override;
1719
OutputBuilder& setExitStatus(uint32_t exitStatus) override;
1820
OutputBuilder& setKillSignal(uint32_t killSignal) override;
@@ -24,6 +26,8 @@ class OIModelOutputBuilder : public OutputBuilder {
2426

2527
uint64_t milliSecondsElapsed_;
2628
uint64_t realMilliSecondsElapsed_;
29+
uint64_t userMilliSecondsElapsed_;
30+
uint64_t sysMilliSecondsElapsed_;
2731
uint64_t memoryPeakKb_;
2832
uint64_t syscallsCounter_;
2933
uint32_t exitStatus_;

src/printer/OutputBuilder.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ class OutputBuilder {
3636
virtual OutputBuilder& setRealTimeMicroseconds(uint64_t time) {
3737
return *this;
3838
}
39+
virtual OutputBuilder& setUserTimeMicroseconds(uint64_t time) {
40+
return *this;
41+
}
42+
virtual OutputBuilder& setSysTimeMicroseconds(uint64_t time) {
43+
return *this;
44+
}
3945
virtual OutputBuilder& setMemoryPeak(uint64_t memoryPeakKb) {
4046
return *this;
4147
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#include "UserTimeOIOutputBuilder.h"
2+
#include "common/Exception.h"
3+
4+
#include <sstream>
5+
6+
namespace s2j {
7+
namespace printer {
8+
9+
const std::string UserTimeOIOutputBuilder::FORMAT_NAME = "oiuser";
10+
11+
std::string UserTimeOIOutputBuilder::dump() const {
12+
KillReason reason = killReason_;
13+
if (reason == KillReason::NONE) {
14+
if (killSignal_ > 0 || exitStatus_ > 0) {
15+
reason = KillReason::RE;
16+
}
17+
}
18+
19+
std::stringstream ss;
20+
ss << killReasonName(reason) << " " << exitStatus_ << " "
21+
<< userMilliSecondsElapsed_ << " " << 0ULL << " " << memoryPeakKb_ << " "
22+
<< syscallsCounter_ << std::endl;
23+
dumpStatus(ss);
24+
ss << std::endl;
25+
return ss.str();
26+
}
27+
28+
} // namespace printer
29+
} // namespace s2j

src/printer/UserTimeOIOutputBuilder.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#pragma once
2+
3+
#include "OIModelOutputBuilder.h"
4+
5+
namespace s2j {
6+
namespace printer {
7+
8+
class UserTimeOIOutputBuilder : public OIModelOutputBuilder {
9+
public:
10+
std::string dump() const override;
11+
12+
const static std::string FORMAT_NAME;
13+
};
14+
15+
} // namespace printer
16+
} // namespace s2j

src/s2japp/ApplicationSettings.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44

55
#include "common/Utils.h"
66
#include "printer/AugmentedOIOutputBuilder.h"
7+
#include "printer/HumanReadableOIOutputBuilder.h"
78
#include "printer/OITimeToolOutputBuilder.h"
89
#include "printer/RealTimeOIOutputBuilder.h"
10+
#include "printer/UserTimeOIOutputBuilder.h"
911
#include "seccomp/policy/DefaultPolicy.h"
1012
#include "seccomp/policy/PermissivePolicy.h"
1113

@@ -91,8 +93,12 @@ const FactoryMap<s2j::printer::OutputBuilder>
9193
ApplicationSettings::OUTPUT_FORMATS(
9294
{{"oitt",
9395
std::make_shared<s2j::printer::OITimeToolOutputBuilder>},
96+
{"human",
97+
std::make_shared<s2j::printer::HumanReadableOIOutputBuilder>},
9498
{"oiaug",
9599
std::make_shared<s2j::printer::AugmentedOIOutputBuilder>},
100+
{"oiuser",
101+
std::make_shared<s2j::printer::UserTimeOIOutputBuilder>},
96102
{"oireal",
97103
std::make_shared<s2j::printer::RealTimeOIOutputBuilder>}});
98104
const std::string ApplicationSettings::DEFAULT_OUTPUT_FORMAT = "oitt";

0 commit comments

Comments
 (0)