Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ws #8

Merged
merged 3 commits into from
Sep 19, 2021
Merged

Ws #8

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,12 @@ services:
- 15672:15672

app:
# build:
# context: .
image: maxwelldps/trunk-player:latest
build:
context: .
#image: maxwelldps/trunk-player:latest
ports:
- "8080:8080"
- ""
- "8443:8443"
volumes:
#- .:/app/trunkplayer
- audio:/app/trunkplayer/audio_files
Expand Down
6 changes: 4 additions & 2 deletions radio/consumers.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
from os import system
import re
import json
import logging
from asgiref.sync import async_to_sync
from channels.generic.websocket import WebsocketConsumer
from .models import ScanList, TalkGroup
from .models import ScanList, TalkGroup, System


logging.basicConfig(format='%(asctime)s %(message)s')
log = logging.getLogger(__name__)
Expand Down Expand Up @@ -73,4 +75,4 @@ def radio_message(self, event):
message = event['text']

# Send message to WebSocket
self.send(text_data=(message))
self.send(text_data=(message))
19 changes: 19 additions & 0 deletions radio/migrations/0004_system_recorder_uuid.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Generated by Django 3.2.7 on 2021-09-19 16:52

from django.db import migrations, models
import uuid


class Migration(migrations.Migration):

dependencies = [
('radio', '0003_defaultagenecy'),
]

operations = [
migrations.AddField(
model_name='system',
name='recorder_uuid',
field=models.UUIDField(default=uuid.uuid4),
),
]
1 change: 1 addition & 0 deletions radio/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ def save(self, *args, **kwargs):
class System(models.Model):
name = models.CharField(max_length=100, db_index=True, unique=True)
system_id = models.CharField(max_length=20, blank=True, null=True)
recorder_uuid = models.UUIDField(default=uuid.uuid4)

def __str__(self):
return self.name
Expand Down
20 changes: 20 additions & 0 deletions telemetry/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import logging

from django.utils.version import get_version
from subprocess import check_output, CalledProcessError

logger = logging.getLogger(__name__)


VERSION = (0, 0, 7, 'beta', 1)

__version__ = get_version(VERSION)

try:
__git_hash__ = check_output(['git', 'rev-parse', '--short', 'HEAD']).strip().decode()
except (FileNotFoundError, CalledProcessError):
__git_hash__ = '0'

__fullversion__ = '{} #{}'.format(__version__,__git_hash__)

logger.info('Trunk-Player Version ' + __fullversion__)
12 changes: 12 additions & 0 deletions telemetry/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from django.contrib import admin
from django import forms
from django.contrib.admin.widgets import FilteredSelectMultiple
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User

from .models import *

admin.site.register(Call)
admin.site.register(Freq)
admin.site.register(Source)
admin.site.register(SystemStatus)
9 changes: 9 additions & 0 deletions telemetry/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from importlib import import_module
from django.db.models.signals import post_migrate

from django.apps import AppConfig

class TelemetryConfig(AppConfig):
name = 'telemetry'


60 changes: 60 additions & 0 deletions telemetry/consumers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
from os import system
import re
import json
import logging
from asgiref.sync import async_to_sync
from channels.generic.websocket import WebsocketConsumer
from radio.models import System
from .telemetry import handleMessage

logging.basicConfig(format='%(asctime)s %(message)s')
log = logging.getLogger(__name__)

class TelemetryConsumer(WebsocketConsumer):
def connect(self):
try:
recorder_uuid = self.scope['url_route']["kwargs"]["recorder_uuid"]
except:
# setup fake channel so the javascript does not try and reconnect
recorder_uuid = None
self.close()

# log.error('user %s connect %s=%s client=%s:%s',
# message.user, tg_type, label, message['client'][0], message['client'][1])


self.accept()
self.recorder_uuid=recorder_uuid

def disconnect(self, close_code):
try:
async_to_sync(self.channel_layer.group_discard)(
self.recorder_uuid,
self.channel_name
)
except (KeyError, System.DoesNotExist):
pass


# Leave room group


# Receive message from WebSocket
def receive(self, text_data):
message = json.loads(text_data)
tx_type = message["type"]
try:
System.objects.get(recorder_uuid=self.recorder_uuid)
except KeyError:
log.error('no valid system found')
return


# conform to the expected message format.
#try:
log.error(f"Got {tx_type} Message")
handleMessage(message, tx_type, self.recorder_uuid)
#except ValueError:
# log.error("ws message isn't json text=%s", text_data)
# return

Empty file.
Empty file.
87 changes: 87 additions & 0 deletions telemetry/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# Generated by Django 3.2.7 on 2021-09-19 19:06

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

initial = True

dependencies = [
('radio', '0004_system_recorder_uuid'),
]

operations = [
migrations.CreateModel(
name='Call',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('call_id', models.CharField(max_length=255, unique=True)),
('freq', models.IntegerField()),
('sysNum', models.IntegerField()),
('shortName', models.CharField(max_length=255)),
('talkgroup', models.IntegerField()),
('talkgrouptag', models.CharField(max_length=255)),
('elasped', models.IntegerField()),
('length', models.IntegerField()),
('state', models.IntegerField()),
('recNum', models.IntegerField()),
('srcNum', models.IntegerField()),
('recState', models.IntegerField()),
('sigmffilename', models.TextField()),
('debugfilename', models.TextField()),
('filename', models.TextField()),
('statusfilename', models.TextField()),
('startTime', models.DateTimeField()),
('stopTime', models.DateTimeField()),
('phase2', models.BooleanField(default=False)),
('conventional', models.BooleanField(default=False)),
('encrypted', models.BooleanField(default=False)),
('emergency', models.BooleanField(default=False)),
('analog', models.BooleanField(default=False)),
],
),
migrations.CreateModel(
name='Freq',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('freq', models.IntegerField()),
('spikes', models.IntegerField()),
('time', models.DateTimeField()),
('errors', models.IntegerField()),
('position', models.IntegerField()),
('length', models.IntegerField()),
],
),
migrations.CreateModel(
name='Source',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('source', models.IntegerField()),
('position', models.IntegerField()),
('time', models.DateTimeField()),
('signal_system', models.CharField(max_length=50)),
('emergency', models.BooleanField(default=False)),
],
),
migrations.CreateModel(
name='SystemStatus',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('decoderate', models.IntegerField(blank=True, null=True)),
('activeCalls', models.ManyToManyField(to='telemetry.Call')),
('system', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='radio.system', unique=True)),
],
),
migrations.AddField(
model_name='call',
name='freqList',
field=models.ManyToManyField(to='telemetry.Freq'),
),
migrations.AddField(
model_name='call',
name='sourceList',
field=models.ManyToManyField(to='telemetry.Source'),
),
]
21 changes: 21 additions & 0 deletions telemetry/migrations/0002_auto_20210919_1300.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Generated by Django 3.2.7 on 2021-09-19 20:00

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('telemetry', '0001_initial'),
]

operations = [
migrations.RemoveField(
model_name='source',
name='position',
),
migrations.RemoveField(
model_name='source',
name='time',
),
]
33 changes: 33 additions & 0 deletions telemetry/migrations/0003_auto_20210919_1305.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Generated by Django 3.2.7 on 2021-09-19 20:05

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('telemetry', '0002_auto_20210919_1300'),
]

operations = [
migrations.RemoveField(
model_name='freq',
name='errors',
),
migrations.RemoveField(
model_name='freq',
name='length',
),
migrations.RemoveField(
model_name='freq',
name='position',
),
migrations.RemoveField(
model_name='freq',
name='spikes',
),
migrations.RemoveField(
model_name='freq',
name='time',
),
]
Empty file.
79 changes: 79 additions & 0 deletions telemetry/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import json
import logging
import uuid
import urllib.parse

from django.db import models
from datetime import timedelta
from django.db.models.deletion import CASCADE
from django.db.models.fields import DateField
from django.utils import timezone
from django.utils.text import slugify
from django.conf import settings
from asgiref.sync import async_to_sync
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User
from django.core.mail import send_mail
from django.db.utils import OperationalError

from radio.models import System

log = logging.getLogger(__name__)


class Source(models.Model):
source = models.IntegerField()
signal_system = models.CharField(max_length=50)
emergency = models.BooleanField(default=False)

def __str__(self):
return f"[{self.signal_system}] {str(self.source)}"

class Freq(models.Model):
freq = models.IntegerField()

def __str__(self):
return str(self.freq/1000000)

class Call(models.Model):
call_id = models.CharField(unique=True, max_length=255)
freq = models.IntegerField()
sysNum = models.IntegerField()
shortName = models.CharField(max_length=255)
talkgroup = models.IntegerField()
talkgrouptag = models.CharField(max_length=255)
elasped = models.IntegerField()
length = models.IntegerField()
state = models.IntegerField()
recNum = models.IntegerField()
srcNum = models.IntegerField()
recState = models.IntegerField()
sigmffilename = models.TextField()
debugfilename = models.TextField()
filename = models.TextField()
statusfilename = models.TextField()
startTime = models.DateTimeField()
stopTime = models.DateTimeField()
phase2 = models.BooleanField(default=False)
conventional = models.BooleanField(default=False)
encrypted = models.BooleanField(default=False)
emergency = models.BooleanField(default=False)
analog = models.BooleanField(default=False)


sourceList = models.ManyToManyField(Source)
freqList = models.ManyToManyField(Freq)

def __str__(self):
return f"[{self.call_id}] {self.talkgrouptag}"

class SystemStatus(models.Model):
system = models.ForeignKey(System, unique=True, on_delete=CASCADE)

activeCalls = models.ManyToManyField(Call)
decoderate = models.IntegerField(null=True, blank=True)


def __str__(self):
return str(self.system)
Loading