Skip to content

Commit 17fd2a3

Browse files
committed
Add timestamps to split parts
Signed-off-by: Viktor Kopp <vifactor@gmail.com>
1 parent 6648591 commit 17fd2a3

File tree

2 files changed

+40
-10
lines changed

2 files changed

+40
-10
lines changed

commander/dltfileexporter.cpp

+39-9
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "dltfileexporter.h"
22
#include "qdltmsg.h"
33

4+
#include <ctime>
45
#include <cstddef>
56
#include <qdltfilterlist.h>
67
#include <qdltfile.h>
@@ -10,7 +11,6 @@
1011
#include <QFileInfo>
1112
#include <QDir>
1213
#include <stdexcept>
13-
#include <variant>
1414

1515
namespace {
1616

@@ -36,7 +36,7 @@ class SimpleWriter {
3636
m_output.setFileName(outputPath);
3737
}
3838

39-
void write(const QByteArray& buf) {
39+
void write(const QByteArray& buf, const time_t&) {
4040
m_output.write(buf);
4141
}
4242

@@ -49,26 +49,56 @@ class SplitWriter {
4949
SplitWriter(const QString& basePath, std::size_t maxOutputSize)
5050
: m_basePath(basePath), m_bytesWritten{maxOutputSize}, m_maxOutputSize{maxOutputSize} {}
5151

52-
void write(const QByteArray& buf) {
52+
~SplitWriter() {
53+
if (m_output.isOpen()) {
54+
// rename very last file
55+
m_output.rename(nextFileName());
56+
}
57+
}
58+
59+
void write(const QByteArray& buf, const time_t& ts) {
5360
if (m_bytesWritten >= m_maxOutputSize) {
54-
m_output.close();
55-
m_output.setFileName(m_basePath + QString::number(m_fileCounter) + ".dlt");
61+
if (m_output.isOpen()) {
62+
m_output.rename(nextFileName());
63+
m_output.close();
64+
}
65+
66+
m_output.setFileName(m_basePath + "_tmp.dlt");
5667
if (!m_output.open(QIODevice::WriteOnly)) {
5768
qDebug() << "Couldn't open output file: " << m_output.fileName();
5869
throw std::runtime_error("File couldn't be opened for writing");
5970
}
6071
m_bytesWritten = 0;
6172
++m_fileCounter;
73+
m_timestampBegin = formatTimestamp(ts);
6274
}
6375
m_output.write(buf);
6476
m_bytesWritten += buf.size();
77+
m_timestampEnd = formatTimestamp(ts);
6578
}
6679
private:
6780
QFile m_output;
6881
QString m_basePath;
6982
std::size_t m_bytesWritten;
70-
std::size_t m_fileCounter{1};
83+
std::size_t m_fileCounter{0};
7184
std::size_t m_maxOutputSize;
85+
86+
QString m_timestampBegin;
87+
QString m_timestampEnd;
88+
89+
QString nextFileName() {
90+
return m_basePath + "_" + m_timestampBegin + "-" + m_timestampEnd + "_" +
91+
QString::number(m_fileCounter) + ".dlt";
92+
}
93+
94+
QString formatTimestamp(const time_t& timestamp) {
95+
char strtime[256];
96+
struct tm *timeTm;
97+
timeTm = localtime(&timestamp);
98+
if(timeTm)
99+
strftime(strtime, 256, "%Y-%m-%d_%H-%M-%S", timeTm);
100+
return QString(strtime);
101+
}
72102
};
73103

74104
template <typename Writer>
@@ -80,7 +110,7 @@ void processMessages(const QDltFile& m_input, QDltFilterList& filterList, Writer
80110
}
81111
auto [msg, buf] = *res;
82112
if (filterList.isEmpty() || filterList.checkFilter(msg)) {
83-
writer.write(buf);
113+
writer.write(buf, msg.getTime());
84114
}
85115
}
86116
}
@@ -117,7 +147,7 @@ void DltFileExporter::exportMessages(const QString& outputName)
117147

118148
const QFileInfo filterInfo(filterFilepath);
119149
if (m_maxOutputSize) {
120-
SplitWriter writer(outputDir + "/" + filterInfo.baseName() + "_", *m_maxOutputSize);
150+
SplitWriter writer(outputDir + "/" + filterInfo.baseName(), *m_maxOutputSize);
121151
processMessages(m_input, filterList, writer);
122152
} else {
123153
SimpleWriter writer(outputDir + "/" + filterInfo.baseName() + ".dlt");
@@ -134,7 +164,7 @@ void DltFileExporter::exportMessages(const QString& outputName)
134164

135165
const QFileInfo info(outputName);
136166
if (m_maxOutputSize) {
137-
SplitWriter writer(info.absolutePath() + "/" + info.baseName() + "_", *m_maxOutputSize);
167+
SplitWriter writer(info.absolutePath() + "/" + info.baseName(), *m_maxOutputSize);
138168
processMessages(m_input, filterList, writer);
139169
} else {
140170
SimpleWriter writer(outputName);

commander/optmanager.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ void OptManager::printUsage()
134134
qDebug().noquote() << executable << "input.pcap output.dlt";
135135
qDebug().noquote() << executable << "-c output.txt input.pcap";
136136
qDebug().noquote() << executable << "-c output.txt input1.mf4 input2.mf4";
137-
qDebug().noquote() << executable << "-split 100K c:\\trace\\trace.dlt\n";
137+
qDebug().noquote() << executable << "-d -split 100K c:\\trace\\trace.dlt\n -c output.dlt";
138138
}
139139

140140
void OptManager::parse(QStringList *opt)

0 commit comments

Comments
 (0)