Skip to content

Commit 2fb7ddb

Browse files
committed
Add oittuser and human output formats
Oittuser is for printing user CPU time, while the second one is human-readable.
1 parent 23c4025 commit 2fb7ddb

10 files changed

+114
-1
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: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
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+
KillReason reason = killReason_;
12+
if (reason == KillReason::NONE) {
13+
if (killSignal_ > 0 || exitStatus_ > 0) {
14+
reason = KillReason::RE;
15+
}
16+
}
17+
18+
std::stringstream ss;
19+
auto reasonName = killReasonName(reason);
20+
// This is inspired by the oiejq script
21+
ss << std::endl << "-------------------------" << std::endl << "Result: ";
22+
dumpStatus(ss);
23+
ss << std::endl
24+
<< "Time used: " << milliSecondsElapsed_ / 1000 << "."
25+
<< milliSecondsElapsed_ % 1000 << "s" << std::endl;
26+
ss << "Memory used: " << memoryPeakKb_ / 1024 << "MiB" << std::endl;
27+
return ss.str();
28+
}
29+
30+
} // namespace printer
31+
} // 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/OITimeToolOutputBuilder.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class OITimeToolOutputBuilder : public OIModelOutputBuilder {
1111

1212
const static std::string FORMAT_NAME;
1313

14-
private:
14+
protected:
1515
int encodeStatusCode() const;
1616
};
1717

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#include "OITimeToolUserOutputBuilder.h"
2+
#include "common/Exception.h"
3+
4+
#include <sstream>
5+
6+
namespace s2j {
7+
namespace printer {
8+
9+
const std::string OITimeToolUserOutputBuilder::FORMAT_NAME = "oittuser";
10+
11+
std::string OITimeToolUserOutputBuilder::dump() const {
12+
std::stringstream ss;
13+
ss << "__RESULT__ " << encodeStatusCode() << " " << userMilliSecondsElapsed_
14+
<< " " << 0ULL << " " << memoryPeakKb_ << " " << syscallsCounter_
15+
<< std::endl;
16+
dumpStatus(ss);
17+
ss << std::endl;
18+
return ss.str();
19+
}
20+
21+
} // namespace printer
22+
} // 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 "OITimeToolOutputBuilder.h"
4+
5+
namespace s2j {
6+
namespace printer {
7+
8+
class OITimeToolUserOutputBuilder : public OITimeToolOutputBuilder {
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/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
}

src/s2japp/ApplicationSettings.cc

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

55
#include "common/Utils.h"
66
#include "printer/AugmentedOIOutputBuilder.h"
7+
#include "printer/HumanReadableOIOutputBuilder.h"
78
#include "printer/OITimeToolOutputBuilder.h"
9+
#include "printer/OITimeToolUserOutputBuilder.h"
810
#include "printer/RealTimeOIOutputBuilder.h"
911
#include "seccomp/policy/DefaultPolicy.h"
1012
#include "seccomp/policy/PermissivePolicy.h"
@@ -91,6 +93,10 @@ const FactoryMap<s2j::printer::OutputBuilder>
9193
ApplicationSettings::OUTPUT_FORMATS(
9294
{{"oitt",
9395
std::make_shared<s2j::printer::OITimeToolOutputBuilder>},
96+
{"oittuser",
97+
std::make_shared<s2j::printer::OITimeToolUserOutputBuilder>},
98+
{"human",
99+
std::make_shared<s2j::printer::HumanReadableOIOutputBuilder>},
94100
{"oiaug",
95101
std::make_shared<s2j::printer::AugmentedOIOutputBuilder>},
96102
{"oireal",

0 commit comments

Comments
 (0)