Skip to content

Commit 76a3c6d

Browse files
authored
Merge pull request #35 from A-dead-pixel/oittuser-PR
Add new output formats
2 parents c1a8669 + 3e31cba commit 76a3c6d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+188
-54
lines changed

src/common/Exception.cc

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include "logger/Logger.h"
44

5+
#include <cstdint>
56
#include <cstring>
67

78
namespace s2j {

src/common/Exception.h

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#pragma once
22

3+
#include <cstdint>
34
#include <string>
45

56
namespace s2j {

src/common/ProcFS.cc

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "ProcFS.h"
22

3+
#include <cstdint>
34
#include <fstream>
45
#include <functional>
56
#include <map>

src/limits/MemoryLimitListener.cc

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include <sys/time.h>
1313

1414
#include <csignal>
15+
#include <cstdint>
1516
#include <fstream>
1617
#include <iostream>
1718

src/limits/MemoryLimitListener.h

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
#include "seccomp/policy/SyscallPolicy.h"
66
#include "tracer/TraceEventListener.h"
77

8+
#include <cstdint>
9+
810
namespace s2j {
911
namespace limits {
1012

src/limits/OutputLimitListener.cc

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include "seccomp/filter/LibSeccompFilter.h"
99

1010
#include <csignal>
11+
#include <cstdint>
1112
#include <sys/resource.h>
1213
#include <sys/time.h>
1314

src/limits/OutputLimitListener.h

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
#include "printer/OutputSource.h"
55
#include "seccomp/policy/SyscallPolicy.h"
66

7+
#include <cstdint>
8+
79
namespace s2j {
810
namespace limits {
911

src/limits/ThreadsLimitListener.cc

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
#include "seccomp/action/ActionKill.h"
88
#include "seccomp/filter/LibSeccompFilter.h"
99

10+
#include <cstdint>
11+
1012
namespace s2j {
1113
namespace limits {
1214

src/limits/TimeLimitListener.cc

+3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <algorithm>
99
#include <chrono>
1010
#include <csignal>
11+
#include <cstdint>
1112
#include <ctime>
1213
#include <fstream>
1314
#include <limits>
@@ -96,6 +97,8 @@ void TimeLimitListener::onPostExecute() {
9697
// TODO: run this just after child exit
9798
auto time = getTimeUsage();
9899
outputBuilder_->setRealTimeMicroseconds(time->realTimeUs);
100+
outputBuilder_->setUserTimeMicroseconds(time->processTimeUs.uTimeUs);
101+
outputBuilder_->setSysTimeMicroseconds(time->processTimeUs.sTimeUs);
99102
verifyTimeUsage(move(time));
100103
}
101104

src/limits/TimeLimitListener.h

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include "printer/OutputSource.h"
55

66
#include <chrono>
7+
#include <cstdint>
78

89
namespace s2j {
910
namespace limits {

src/ns/MountNamespaceListener.cc

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "common/WithErrnoCheck.h"
77
#include "logger/Logger.h"
88

9+
#include <cstdint>
910
#include <fcntl.h>
1011
#include <linux/sched.h>
1112
#include <sys/mount.h>

src/ns/MountNamespaceListener.h

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
#include <tclap/CmdLine.h>
1111

12+
#include <cstdint>
1213
#include <string>
1314

1415
namespace s2j {

src/perf/PerfListener.cc

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include <sys/mman.h>
1212

1313
#include <csignal>
14+
#include <cstdint>
1415
#include <cstdlib>
1516
#include <cstring>
1617

src/perf/PerfListener.h

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
#include "executor/ExecuteEventListener.h"
55
#include "printer/OutputSource.h"
66

7+
#include <cstdint>
8+
79
namespace s2j {
810
namespace perf {
911

src/printer/AugmentedOIOutputBuilder.cc

-15
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,5 @@ std::string AugmentedOIOutputBuilder::dump() const {
2424
return ss.str();
2525
}
2626

27-
void AugmentedOIOutputBuilder::dumpStatus(std::ostream& ss) const {
28-
if (killReason_ != KillReason::NONE) {
29-
ss << killReasonComment_;
30-
}
31-
else if (killSignal_ > 0) {
32-
ss << "process exited due to signal " << killSignal_;
33-
}
34-
else if (exitStatus_ > 0) {
35-
ss << "runtime error " << exitStatus_;
36-
}
37-
else {
38-
ss << "ok";
39-
}
40-
}
41-
4227
} // namespace printer
4328
} // namespace s2j

src/printer/AugmentedOIOutputBuilder.h

-4
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,6 @@ class AugmentedOIOutputBuilder : public OIModelOutputBuilder {
1010
std::string dump() const override;
1111

1212
const static std::string FORMAT_NAME;
13-
14-
private:
15-
void dumpStatus(std::ostream& ss) const;
16-
int encodeStatusCode() const;
1713
};
1814

1915
} // namespace printer
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
+16
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

+28
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
#include "OIModelOutputBuilder.h"
22

3+
#include <cstdint>
4+
#include <sstream>
5+
36
namespace s2j {
47
namespace printer {
58

@@ -21,6 +24,16 @@ OutputBuilder& OIModelOutputBuilder::setRealTimeMicroseconds(uint64_t time) {
2124
return *this;
2225
}
2326

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+
2437
OutputBuilder& OIModelOutputBuilder::setMemoryPeak(uint64_t memoryPeakKb) {
2538
memoryPeakKb_ = memoryPeakKb;
2639
return *this;
@@ -53,5 +66,20 @@ OutputBuilder& OIModelOutputBuilder::setKillReason(
5366
return *this;
5467
}
5568

69+
void OIModelOutputBuilder::dumpStatus(std::ostream& ss) const {
70+
if (killReason_ != KillReason::NONE) {
71+
ss << killReasonComment_;
72+
}
73+
else if (killSignal_ > 0) {
74+
ss << "process exited due to signal " << killSignal_;
75+
}
76+
else if (exitStatus_ > 0) {
77+
ss << "runtime error " << exitStatus_;
78+
}
79+
else {
80+
ss << "ok";
81+
}
82+
}
83+
5684
} // namespace printer
5785
} // namespace s2j

src/printer/OIModelOutputBuilder.h

+8
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
#include "OutputBuilder.h"
44

5+
#include <cstdint>
6+
57
namespace s2j {
68
namespace printer {
79

@@ -11,6 +13,8 @@ class OIModelOutputBuilder : public OutputBuilder {
1113

1214
OutputBuilder& setCyclesUsed(uint64_t cyclesUsed) override;
1315
OutputBuilder& setRealTimeMicroseconds(uint64_t time) override;
16+
OutputBuilder& setUserTimeMicroseconds(uint64_t time) override;
17+
OutputBuilder& setSysTimeMicroseconds(uint64_t time) override;
1418
OutputBuilder& setMemoryPeak(uint64_t memoryPeakKb) override;
1519
OutputBuilder& setExitStatus(uint32_t exitStatus) override;
1620
OutputBuilder& setKillSignal(uint32_t killSignal) override;
@@ -22,13 +26,17 @@ class OIModelOutputBuilder : public OutputBuilder {
2226

2327
uint64_t milliSecondsElapsed_;
2428
uint64_t realMilliSecondsElapsed_;
29+
uint64_t userMilliSecondsElapsed_;
30+
uint64_t sysMilliSecondsElapsed_;
2531
uint64_t memoryPeakKb_;
2632
uint64_t syscallsCounter_;
2733
uint32_t exitStatus_;
2834
uint32_t killSignal_;
2935

3036
KillReason killReason_ = KillReason::NONE;
3137
std::string killReasonComment_;
38+
39+
void dumpStatus(std::ostream& ss) const;
3240
};
3341

3442
} // namespace printer

src/printer/OITimeToolOutputBuilder.cc

-15
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,6 @@ std::string OITimeToolOutputBuilder::dump() const {
1919
return ss.str();
2020
}
2121

22-
void OITimeToolOutputBuilder::dumpStatus(std::ostream& ss) const {
23-
if (killReason_ != KillReason::NONE) {
24-
ss << killReasonComment_;
25-
}
26-
else if (killSignal_ > 0) {
27-
ss << "process exited due to signal " << killSignal_;
28-
}
29-
else if (exitStatus_ > 0) {
30-
ss << "runtime error " << exitStatus_;
31-
}
32-
else {
33-
ss << "ok";
34-
}
35-
}
36-
3722
int OITimeToolOutputBuilder::encodeStatusCode() const {
3823
static const int CODE_SIG_BASE = 0;
3924
static const int CODE_RE_BASE = 200;

src/printer/OITimeToolOutputBuilder.h

-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ class OITimeToolOutputBuilder : public OIModelOutputBuilder {
1212
const static std::string FORMAT_NAME;
1313

1414
private:
15-
void dumpStatus(std::ostream& ss) const;
1615
int encodeStatusCode() const;
1716
};
1817

src/printer/OutputBuilder.h

+7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#pragma once
22

3+
#include <cstdint>
34
#include <string>
45

56
namespace s2j {
@@ -35,6 +36,12 @@ class OutputBuilder {
3536
virtual OutputBuilder& setRealTimeMicroseconds(uint64_t time) {
3637
return *this;
3738
}
39+
virtual OutputBuilder& setUserTimeMicroseconds(uint64_t time) {
40+
return *this;
41+
}
42+
virtual OutputBuilder& setSysTimeMicroseconds(uint64_t time) {
43+
return *this;
44+
}
3845
virtual OutputBuilder& setMemoryPeak(uint64_t memoryPeakKb) {
3946
return *this;
4047
}

src/printer/RealTimeOIOutputBuilder.cc

-15
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,5 @@ std::string RealTimeOIOutputBuilder::dump() const {
2424
return ss.str();
2525
}
2626

27-
void RealTimeOIOutputBuilder::dumpStatus(std::ostream& ss) const {
28-
if (killReason_ != KillReason::NONE) {
29-
ss << killReasonComment_;
30-
}
31-
else if (killSignal_ > 0) {
32-
ss << "process exited due to signal " << killSignal_;
33-
}
34-
else if (exitStatus_ > 0) {
35-
ss << "runtime error " << exitStatus_;
36-
}
37-
else {
38-
ss << "ok";
39-
}
40-
}
41-
4227
} // namespace printer
4328
} // namespace s2j

src/printer/RealTimeOIOutputBuilder.h

-4
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,6 @@ class RealTimeOIOutputBuilder : public OIModelOutputBuilder {
1010
std::string dump() const override;
1111

1212
const static std::string FORMAT_NAME;
13-
14-
private:
15-
void dumpStatus(std::ostream& ss) const;
16-
int encodeStatusCode() const;
1713
};
1814

1915
} // namespace printer
+29
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

0 commit comments

Comments
 (0)