18 Commits

Author SHA1 Message Date
5303b31bd7 Merge branch 'release-2.0' 2021-12-06 13:32:34 +01:00
94846a48e1 Fix data-fields not getting added as tags 2021-12-06 13:32:21 +01:00
f00db16269 Merge branch 'dev' into release-2.0 2021-12-06 13:11:02 +01:00
1bffd22735 Commented hostname-tag as it could be misleading 2021-12-06 13:10:34 +01:00
41b2caecb3 Merge branch 'release-2.0' into dev 2021-12-06 13:02:40 +01:00
c3cd6393d4 Merge branch 'release-2.0' 2021-12-06 13:01:31 +01:00
8eef17fd4c Fix wrong default-tag setting 2021-12-06 13:01:10 +01:00
c97137f4a7 Merge branch 'release-2' 2021-12-06 12:47:14 +01:00
39350932a4 Changed metric- and tag-names to match best-practise naminc-convention 2021-12-06 12:46:04 +01:00
1e37f35e38 Moved creation of writeApi to main and set default-tag hostname 2021-12-06 12:44:26 +01:00
d0be44c1af Fix coding-style 2021-12-06 12:42:34 +01:00
a13d81e9c0 Merge branch 'release-1.1' 2021-12-03 10:53:35 +01:00
059c02e243 Merge branch 'dev' into release-1.1 2021-12-03 10:53:13 +01:00
57cf6fb0a7 Add npm prune (wont do much here) 2021-12-03 10:50:50 +01:00
298a96bf16 apk-install on 1 line and delete cache when done 2021-12-03 10:48:28 +01:00
b98dff947d Refactored packet to use new code-style (for got last time :/) 2021-12-02 14:54:32 +01:00
a610f209d5 Merge branch 'release-1.1' 2021-12-02 14:08:54 +01:00
6e05a0b45c Merge branch 'release-1.0' 2021-11-29 15:55:27 +01:00
5 changed files with 53 additions and 45 deletions

View File

@@ -7,8 +7,11 @@ WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
RUN apk update
RUN apk add tcpdump
# remove development dependencies
RUN npm prune --production
# Install required apk-packages & delete cache
RUN apk update && apk add tcpdump && rm -rf /var/cache/apk/*
# Bundle app source
COPY ./src/ .

View File

@@ -1,20 +1,20 @@
const PacketType = {
Beacon: 'Beacon',
ProbeRequest: 'ProbeRequest',
ProbeResponse: 'ProbeResponse',
Data: 'Data',
RequestToSend: 'RequestToSend',
ClearToSend: 'ClearToSend',
Acknowledgment: 'Acknowledgment',
BlockAcknowledgment: 'BlockAcknowledgment',
NoData: 'NoData',
Authentication: 'Authentication',
AssociationRequest: 'AssociationRequest',
AssociationResponse: 'AssociationResponse',
Disassociation: 'Disassociation',
Handshake: 'Handshake',
Unknown: 'Unknown'
}
Beacon: "Beacon",
ProbeRequest: "ProbeRequest",
ProbeResponse: "ProbeResponse",
Data: "Data",
RequestToSend: "RequestToSend",
ClearToSend: "ClearToSend",
Acknowledgment: "Acknowledgment",
BlockAcknowledgment: "BlockAcknowledgment",
NoData: "NoData",
Authentication: "Authentication",
AssociationRequest: "AssociationRequest",
AssociationResponse: "AssociationResponse",
Disassociation: "Disassociation",
Handshake: "Handshake",
Unknown: "Unknown"
};
const FlagType = {
MoreFragments: "MoreFragments",
@@ -23,7 +23,7 @@ const FlagType = {
MoreData: "MoreData",
Protected: "Protected",
Order: "Order"
}
};
class Packet{
timestampMicros;
@@ -58,10 +58,10 @@ class ProbeRequestPacket extends PacketWithSSID{}
class ProbeResponsePacket extends PacketWithSSID{}
const AuthenticationType = {
OpenSystem_1: 'OpenSystem_1',
OpenSystem_2: 'OpenSystem_2',
Unknown: 'Unknown',
}
OpenSystem_1: "OpenSystem_1",
OpenSystem_2: "OpenSystem_2",
Unknown: "Unknown",
};
class AuthenticationPacket extends Packet{
authenticationType;
}
@@ -77,11 +77,11 @@ class DisassociationPacket extends Packet{
const HandshakeStage = {
1: '1',
2: '2',
3: '3',
4: '4'
}
1: "1",
2: "2",
3: "3",
4: "4"
};
class HandshakePacket extends Packet{
handshakeStage;
}

View File

@@ -5,6 +5,7 @@ const logger = logFactory("main");
const { requireEnvVars } = require("./helper/env.js");
const { exit } = require("process");
const { exec } = require("./helper/exec.js");
const Os = require("os");
const { InfluxDB } = require("@influxdata/influxdb-client");
const InfluxChecks = require("./helper/influx-checks.js");
@@ -23,6 +24,7 @@ const env = process.env;
{
env.LOGLEVEL ??= "INFO";
env.WIFI_INTERFACE ??= "wlan0";
env.HOSTNAME ??= Os.hostname();
}
// Required vars
let errorMsg = requireEnvVars([
@@ -56,6 +58,9 @@ if(errorMsg){
exit(1);
});
logger.debug("Get WriteApi & set default-hostname to", `'${env.HOSTNAME}'`);
const influxWriteApi = influxDb.getWriteApi(env.INFLUX_ORG, env.INFLUX_BUCKET, "us");
//influxWriteApi.useDefaultTags({"hostname": env.HOSTNAME});
logger.info("Influx ok");
logger.info("Starting tcpdump..");
@@ -67,7 +72,7 @@ if(errorMsg){
let regexBlockStream = new RegexBlockStream(/^\d{2}:\d{2}:\d{2}.\d{6}.*(\n( {4,8}|\t\t?).*)+\n/gm);
let packetStreamFactory = new PacketStreamFactory();
let packetInfluxPointFactory = new PacketInfluxPointFactory();
let influxPointWriter = new InfluxPointWriter(influxDb, env.INFLUX_ORG, env.INFLUX_BUCKET);
let influxPointWriter = new InfluxPointWriter(influxWriteApi);
proc.stdout
.setEncoding("utf8")
.pipe(regexBlockStream)

View File

@@ -1,6 +1,6 @@
const logger = require.main.require("./helper/logger.js")("InfluxPointWriter");
const { Writable } = require("stream");
const {InfluxDB, Point, HttpError} = require("@influxdata/influxdb-client");
const { WriteApi } = require("@influxdata/influxdb-client");
/**
* Get points and write them into influx
@@ -8,16 +8,13 @@ const {InfluxDB, Point, HttpError} = require("@influxdata/influxdb-client");
class InfluxPointWriter extends Writable{
/**
*
* @param {InfluxDB} influxDb InfluxDb
* @param {string} org Organization to use
* @param {string} bucket Bucket to use
* @param {Partial<WriteOptions>} options Options for WriteApi
* @param {WriteApi} writeApi WriteAPI from InfluxDB instance
*/
constructor(influxDb, org, bucket, options){
constructor(writeApi){
super({
objectMode: true
});
this._api = influxDb.getWriteApi(org, bucket, "us", options);
this._api = writeApi;
}
_write(point, encoding, next){

View File

@@ -14,14 +14,14 @@ const TAG_LIST = [
/** Measurement-name and corresponding field-key */
const MEASUREMENT_MAP = new Map([
["Signal", "signal"],
["PayloadSize", "payloadSize"],
["DataRate", "dataRate"],
["SSID", "ssid"],
["AuthenticationType", "authenticationType"],
["AssociationSuccess", "associationIsSuccessful"],
["DisassociationReason", "disassociationReason"],
["HandshakeStage", "handshakeStage"],
["rfmon_signal_dbm", "signal"],
["rfmon_payloadsize_bytes", "payloadSize"],
["rfmon_datarate_bytes", "dataRate"],
["rfmon_ssid_names", "ssid"],
["rfmon_authenticationtype_info", "authenticationType"],
["rfmon_associationsuccess_bools", "associationIsSuccessful"],
["rfmon_disassociationreason_info", "disassociationReason"],
["rfmon_handshakestage_info", "handshakeStage"],
]);
@@ -66,7 +66,10 @@ function tagObjectRecursively(point, tag, field, suffix = ""){
tagObjectRecursively(point, tag, value, `_${key}${suffix}`);
});
}
else point.tag(tag+suffix, field);
else {
const name = (tag+suffix).toLowerCase();
point.tag(name, field);
}
}
/** Mapping for type -> field-method */