radiobert: add dump1090-influxdb
This commit is contained in:
parent
79b2b259bc
commit
162ab421a7
|
@ -127,11 +127,11 @@
|
|||
},
|
||||
"secrets": {
|
||||
"locked": {
|
||||
"lastModified": 1634253091,
|
||||
"narHash": "sha256-aEKQ8bzsK/0RwNXcBcch1J9M369C83QpzU7PWuaCW6w=",
|
||||
"lastModified": 1634253643,
|
||||
"narHash": "sha256-uX2zviwxBDWPnacMfLWpmsddJR5zLKfhqdxs04+UakM=",
|
||||
"ref": "master",
|
||||
"rev": "4b502a1f949417f0c9c9bba57837041cf6d06e9e",
|
||||
"revCount": 102,
|
||||
"rev": "3b337a981efaca600fc268d31a553522a578d7dd",
|
||||
"revCount": 103,
|
||||
"type": "git",
|
||||
"url": "ssh://gitea@gitea.c3d2.de/c3d2-admins/secrets.git"
|
||||
},
|
||||
|
|
|
@ -435,7 +435,7 @@
|
|||
modules = [
|
||||
({ ... }: {
|
||||
nixpkgs.overlays = with secrets.overlays; [
|
||||
# bind
|
||||
bind
|
||||
];
|
||||
})
|
||||
./lib/lxc-container.nix
|
||||
|
|
|
@ -61,18 +61,7 @@ in
|
|||
|
||||
# Build script
|
||||
systemd.services.deploy-c3d2-dns = let
|
||||
# inherit (pkgs.bind-secrets) giteaToken sshPrivkey;
|
||||
giteaToken = "8bcab04863519d239a0b42d4fd3c02dce144b0c0";
|
||||
|
||||
sshPrivkey = ''
|
||||
-----BEGIN OPENSSH PRIVATE KEY-----
|
||||
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
|
||||
QyNTUxOQAAACCbHM7kAahk7NZQ4bMwEVJv3d2RzLJB5Tdsgi6aaUEQYwAAAJDq6piE6uqY
|
||||
hAAAAAtzc2gtZWQyNTUxOQAAACCbHM7kAahk7NZQ4bMwEVJv3d2RzLJB5Tdsgi6aaUEQYw
|
||||
AAAEAs34c89xB1x4ZHPQywNuIIcbDqiuVtYWC9NhFwVQGo2JsczuQBqGTs1lDhszARUm/d
|
||||
3ZHMskHlN2yCLpppQRBjAAAADXN0ZXBoYW5AYmxhemU=
|
||||
-----END OPENSSH PRIVATE KEY-----
|
||||
'';
|
||||
inherit (pkgs.bind-secrets) giteaToken sshPrivkey;
|
||||
in {
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
before = [ "bind.service" ];
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
];
|
||||
users.users.dump1090 = {
|
||||
isSystemUser = true;
|
||||
group = "dump10190";
|
||||
group = "dump1090";
|
||||
};
|
||||
users.groups.dump1090 = {};
|
||||
systemd.tmpfiles.rules = [
|
||||
|
@ -44,6 +44,25 @@
|
|||
Exec "${config.services.collectd.user}" "${pkgs.ruby}/bin/ruby" "-I${libDir}" "${./collectd-adsb.rb}"
|
||||
</Plugin>
|
||||
'';
|
||||
systemd.services.collectd.requires = [ "dump1090.service" ];
|
||||
|
||||
users.users.dump1090-influxdb = {
|
||||
isSystemUser = true;
|
||||
group = "dump1090";
|
||||
};
|
||||
systemd.services.dump1090-influxdb = {
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
requires = [ "dump1090.services" ];
|
||||
serviceConfig = {
|
||||
ExecStart = "${pkgs.dump1090-influxdb}/bin/dump1090-influxdb";
|
||||
User = "dump1090-influxdb";
|
||||
Group = "dump1090";
|
||||
ProtectSystem = "full";
|
||||
ProtectHome = true;
|
||||
Restart = "always";
|
||||
RestartSec = "10s";
|
||||
};
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
dump1090_sdrplus
|
||||
|
|
|
@ -12,4 +12,6 @@ final: prev:
|
|||
pi-sensors = prev.callPackage ./pi-sensors { };
|
||||
|
||||
hackrf = import ./hackrf.nix prev;
|
||||
|
||||
dump1090-influxdb = import ./dump1090-influxdb { pkgs = prev; };
|
||||
}
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
source "https://rubygems.org"
|
||||
|
||||
gem "influxdb", "~> 0.8"
|
||||
gem "gis-distance", "~> 1.1"
|
|
@ -0,0 +1,15 @@
|
|||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
gis-distance (1.1.0)
|
||||
influxdb (0.8.1)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
gis-distance (~> 1.1)
|
||||
influxdb (~> 0.8)
|
||||
|
||||
BUNDLED WITH
|
||||
2.1.4
|
|
@ -0,0 +1,17 @@
|
|||
{ pkgs ? import <nixpkgs> {} }:
|
||||
|
||||
with pkgs;
|
||||
let
|
||||
gems = bundlerEnv {
|
||||
name = "dump1090-influxdb-gems";
|
||||
gemdir = ./.;
|
||||
};
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
name = "dump1090-influxdb";
|
||||
buildInputs = [ gems.wrappedRuby ];
|
||||
buildCommand = ''
|
||||
install -D -m755 ${./main.rb} $out/bin/${name}
|
||||
patchShebangs $out/bin/${name}
|
||||
'';
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
gis-distance = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1kgv1scv25b65d9xfricj1ayd2iry7imgk7qw4mryd91mhriibaf";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.1.0";
|
||||
};
|
||||
influxdb = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1l2sjf8kaw3adjjg3l7zg1j735yxdfldf04gl9kjc3hbpdcd7d4w";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.8.1";
|
||||
};
|
||||
}
|
|
@ -0,0 +1,75 @@
|
|||
#!/usr/bin/env ruby
|
||||
|
||||
require 'socket'
|
||||
require 'influxdb'
|
||||
require 'gis/distance'
|
||||
|
||||
HOSTNAME = IO::readlines("/proc/sys/kernel/hostname").join.chomp
|
||||
INTERVAL = 1
|
||||
SERIES = 'adsb'
|
||||
POS = [ 51.08102, 13.72806 ]
|
||||
|
||||
db = InfluxDB::Client.new(url: "http://grafana.serv.zentralwerk.org:8086/adsb")
|
||||
msg_type_count = {}
|
||||
|
||||
sock = TCPSocket.new "radiobert.serv.zentralwerk.org", 30003
|
||||
STDERR.puts "Connected to dump1090"
|
||||
|
||||
while line = sock.gets
|
||||
begin
|
||||
fields = line.chomp.split(/,/)
|
||||
msg_type = fields[1].to_i
|
||||
msg_type_count[msg_type] = 0 unless msg_type_count[msg_type]
|
||||
aircraft = fields[4]
|
||||
points = [ { series: SERIES,
|
||||
tags: {
|
||||
data: "msg_type",
|
||||
msg_type: msg_type,
|
||||
},
|
||||
values: {
|
||||
count: msg_type_count[msg_type] += 1,
|
||||
},
|
||||
} ]
|
||||
|
||||
case msg_type
|
||||
when 3
|
||||
values = {}
|
||||
unless fields[14].empty? or fields[15].empty?
|
||||
values[:lat] = fields[14].to_f
|
||||
values[:lon] = fields[15].to_f
|
||||
values[:dist] = GIS::Distance::new(POS[0], POS[1], values[:lat], values[:lon]).distance
|
||||
end
|
||||
unless fields[11].empty?
|
||||
values[:alt] = fields[11].to_i
|
||||
end
|
||||
|
||||
points.push({ series: SERIES,
|
||||
tags: {
|
||||
data: "pos",
|
||||
aircraft: aircraft,
|
||||
},
|
||||
values: values,
|
||||
})
|
||||
when 4
|
||||
values = {}
|
||||
unless fields[12].empty?
|
||||
values[:ground_speed] = fields[12].to_i
|
||||
end
|
||||
unless fields[13].empty?
|
||||
values[:track] = fields[13].to_i
|
||||
end
|
||||
points.push({ series: SERIES,
|
||||
tags: {
|
||||
data: "velocity",
|
||||
aircraft: aircraft,
|
||||
},
|
||||
values: values,
|
||||
})
|
||||
end
|
||||
|
||||
db.write_points points, 'm'
|
||||
|
||||
rescue
|
||||
STDERR.puts $!
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue