aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiovanni Conte <gconte@cisco.com>2019-03-04 15:53:41 +0100
committerkarthik <kmanivannan@maprtech.com>2019-03-08 13:38:17 -0800
commit75ca5238e627e8d8612d56f654da06992837f6af (patch)
tree312b22296ca4f27746281df84d087b4ea1fe051f
parent624634d88ab870e3edb1648743097242522e58d6 (diff)
DRILL-7054: timestamp in milliseconds
closes #1665
-rw-r--r--exec/java-exec/src/main/java/org/apache/drill/exec/store/pcap/PcapRecordReader.java3
-rw-r--r--exec/java-exec/src/main/java/org/apache/drill/exec/store/pcap/decoder/Packet.java14
-rw-r--r--exec/java-exec/src/main/java/org/apache/drill/exec/store/pcap/schema/Schema.java1
-rw-r--r--exec/java-exec/src/test/java/org/apache/drill/exec/store/pcap/TestPcapDecoder.java1
4 files changed, 15 insertions, 4 deletions
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/pcap/PcapRecordReader.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/pcap/PcapRecordReader.java
index aef56a307..08f501f76 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/pcap/PcapRecordReader.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/pcap/PcapRecordReader.java
@@ -242,6 +242,9 @@ public class PcapRecordReader extends AbstractRecordReader {
case "timestamp":
setTimestampColumnValue(packet.getTimestamp(), pci, count);
break;
+ case "timestamp_micro":
+ setLongColumnValue(packet.getTimestampMicro(), pci, count);
+ break;
case "network":
setIntegerColumnValue(networkType, pci, count);
break;
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/pcap/decoder/Packet.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/pcap/decoder/Packet.java
index 01d430e3f..8e6a81b57 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/pcap/decoder/Packet.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/pcap/decoder/Packet.java
@@ -40,6 +40,7 @@ public class Packet {
// guint32 orig_len; // actual length of packet */
// } pcaprec_hdr_t;
private long timestamp;
+ private long timestampMicro;
private int originalLength;
protected byte[] raw;
@@ -161,6 +162,10 @@ public class Packet {
return timestamp;
}
+ public long getTimestampMicro() {
+ return timestampMicro;
+ }
+
public int getPacketLength() {
return packetLength;
}
@@ -384,16 +389,17 @@ public class Packet {
}
private void decodePcapHeader(final byte[] header, final boolean byteOrder, final int maxLength, final int offset) {
- timestamp = getTimestamp(header, byteOrder, offset);
+ timestampMicro = getTimestampMicro(header, byteOrder, offset);
+ timestamp = timestampMicro / 1000L;
originalLength = getIntFileOrder(byteOrder, header, offset + PacketConstants.ORIGINAL_LENGTH_OFFSET);
packetLength = getIntFileOrder(byteOrder, header, offset + PacketConstants.ACTUAL_LENGTH_OFFSET);
Preconditions.checkState(originalLength < maxLength,
"Packet too long (%d bytes)", originalLength);
}
- private long getTimestamp(final byte[] header, final boolean byteOrder, final int offset) {
- return getIntFileOrder(byteOrder, header, offset + PacketConstants.TIMESTAMP_OFFSET) * 1000L +
- getIntFileOrder(byteOrder, header, offset + PacketConstants.TIMESTAMP_MICRO_OFFSET) / 1000L;
+ private long getTimestampMicro(final byte[] header, final boolean byteOrder, final int offset) {
+ return getIntFileOrder(byteOrder, header, offset + PacketConstants.TIMESTAMP_OFFSET) * 1000000L +
+ getIntFileOrder(byteOrder, header, offset + PacketConstants.TIMESTAMP_MICRO_OFFSET);
}
private void decodeEtherPacket() {
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/pcap/schema/Schema.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/pcap/schema/Schema.java
index 6c03f55bf..07ecd4b17 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/pcap/schema/Schema.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/pcap/schema/Schema.java
@@ -35,6 +35,7 @@ public class Schema {
columns.add(new ColumnDto("type", PcapTypes.STRING));
columns.add(new ColumnDto("network", PcapTypes.INTEGER));
columns.add(new ColumnDto("timestamp", PcapTypes.TIMESTAMP));
+ columns.add(new ColumnDto("timestamp_micro", PcapTypes.LONG));
columns.add(new ColumnDto("src_ip", PcapTypes.STRING));
columns.add(new ColumnDto("dst_ip", PcapTypes.STRING));
columns.add(new ColumnDto("src_port", PcapTypes.INTEGER));
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/store/pcap/TestPcapDecoder.java b/exec/java-exec/src/test/java/org/apache/drill/exec/store/pcap/TestPcapDecoder.java
index 63e11ac55..f0e89d9f7 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/store/pcap/TestPcapDecoder.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/store/pcap/TestPcapDecoder.java
@@ -75,6 +75,7 @@ public class TestPcapDecoder extends BaseTestQuery {
assertEquals("/192.168.0.2", p.getDst_ip().toString());
assertEquals(161, p.getSrc_port());
assertEquals(0, p.getDst_port());
+ assertEquals(0, p.getTimestampMicro());
}
private static void writeHeader(DataOutputStream out) throws IOException {