shajen / rtl-sdr-scanner-cpp

GNU General Public License v3.0
604 stars 61 forks source link

sdr monitor reader - missing spectrogram start fail #60

Open upya4ko opened 1 year ago

upya4ko commented 1 year ago

Have some problems when running server couple weeks, in last days it stop recording, i look output and found error:

rtl-sdr-scanner-cpp-sdr-broker-1          | 1677834164: New connection from 172.18.0.5:45259 on port 1883.
rtl-sdr-scanner-cpp-sdr-broker-1          | 1677834164: New client connected from 172.18.0.5:45259 as auto-333333333-4444444-55555-666666-88888888888C63 (p2, c1, k60, u'admin').
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  | Traceback (most recent call last):
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/src/sdr-panel/manage.py", line 10, in <module>
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  | Exception while running run() in 'scripts.mqtt_reader'
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     execute_from_command_line(sys.argv)
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/local/lib/python3.10/dist-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     utility.execute()
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/local/lib/python3.10/dist-packages/django/core/management/__init__.py", line 413, in execute
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     self.fetch_command(subcommand).run_from_argv(self.argv)
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/local/lib/python3.10/dist-packages/django_extensions/management/email_notifications.py", line 65, in run_from_argv
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     super().run_from_argv(argv)
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/local/lib/python3.10/dist-packages/django/core/management/base.py", line 354, in run_from_argv
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     self.execute(*args, **cmd_options)
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/local/lib/python3.10/dist-packages/django_extensions/management/email_notifications.py", line 77, in execute
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     super().execute(*args, **options)
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/local/lib/python3.10/dist-packages/django/core/management/base.py", line 398, in execute
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     output = self.handle(*args, **options)
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/local/lib/python3.10/dist-packages/django_extensions/management/utils.py", line 62, in inner
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     ret = func(self, *args, **kwargs)
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/local/lib/python3.10/dist-packages/django_extensions/management/commands/runscript.py", line 281, in handle
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     run_script(script_mod, *script_args)
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/local/lib/python3.10/dist-packages/django_extensions/management/commands/runscript.py", line 159, in run_script
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     exit_code = mod.run(*script_args)
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/src/sdr-panel/scripts/mqtt_reader.py", line 499, in run
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     paho.mqtt.subscribe.callback(
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/local/lib/python3.10/dist-packages/paho/mqtt/subscribe.py", line 183, in callback
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     client.loop_forever()
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/local/lib/python3.10/dist-packages/paho/mqtt/client.py", line 1756, in loop_forever
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     rc = self._loop(timeout)
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/local/lib/python3.10/dist-packages/paho/mqtt/client.py", line 1164, in _loop
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     rc = self.loop_read()
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/local/lib/python3.10/dist-packages/paho/mqtt/client.py", line 1556, in loop_read
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     rc = self._packet_read()
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/local/lib/python3.10/dist-packages/paho/mqtt/client.py", line 2439, in _packet_read
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     rc = self._packet_handle()
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/local/lib/python3.10/dist-packages/paho/mqtt/client.py", line 3033, in _packet_handle
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     return self._handle_publish()
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/local/lib/python3.10/dist-packages/paho/mqtt/client.py", line 3327, in _handle_publish
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     self._handle_on_message(message)
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/local/lib/python3.10/dist-packages/paho/mqtt/client.py", line 3570, in _handle_on_message
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     on_message(self, self._userdata, message)
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/local/lib/python3.10/dist-packages/paho/mqtt/subscribe.py", line 45, in _on_message_callback
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     userdata['callback'](client, userdata['userdata'], message)
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/src/sdr-panel/scripts/mqtt_reader.py", line 456, in on_message
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     cleaner.clear()
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/src/sdr-panel/scripts/mqtt_reader.py", line 415, in clear
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     self.__remove_spectrograms()
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/src/sdr-panel/scripts/mqtt_reader.py", line 424, in __remove_spectrograms
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     total_size += s.data_file.size
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/local/lib/python3.10/dist-packages/django/db/models/fields/files.py", line 71, in size
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     return self.storage.size(self.name)
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/local/lib/python3.10/dist-packages/django/core/files/storage.py", line 341, in size
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     return os.path.getsize(self.path(name))
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |   File "/usr/lib/python3.10/genericpath.py", line 50, in getsize
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  |     return os.stat(filename).st_size
rtl-sdr-scanner-cpp-sdr-monitor-reader-1  | FileNotFoundError: [Errno 2] No such file or directory: '/usr/src/sdr-panel/public/media/device_2/spectrogram/2023-01-20/00_00_00_435000000.bin'
rtl-sdr-scanner-cpp-sdr-broker-1          | 1677834165: Client auto-D4C8AF75-39EB-55E5-3A1D-3F0F8189FC63 closed its connection.

Ok, server have power loss, i try just give script what it need to start:

sudo touch /srv/docker/volumes/rtl-sdr-scanner-cpp_monitor_data/_data/device_2/spectrogram/2023-01-20/00_00_00_427000000.bin

restart service in foreground and after night server "stop" again on same error

My docker-compose.yml

version: '3.7'
services:
  sdr-broker:
    image: eclipse-mosquitto:latest
    restart: on-failure
    command:
      - /bin/sh
      - -c
      - |
        echo "listener 1883" > /mosquitto/config/mosquitto.conf
        echo "allow_anonymous false" >> /mosquitto/config/mosquitto.conf
        echo "password_file /mosquitto/config/password.txt" >> /mosquitto/config/mosquitto.conf
        echo "admin:password" > /mosquitto/config/password.txt
        mosquitto_passwd -U /mosquitto/config/password.txt
        mosquitto -c /mosquitto/config/mosquitto.conf
  sdr-scanner:
    image: shajen/sdr-scanner:latest
    restart: on-failure
    depends_on:
      - sdr-broker
    volumes:
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
      - ./config.json:/config.json
    devices:
      - /dev/bus/usb:/dev/bus/usb
  sdr-monitor-setup:
    image: shajen/sdr-monitor:latest
    restart: on-failure
    depends_on:
      - sdr-broker
    volumes:
      - "/etc/timezone:/etc/timezone:ro"
      - "/etc/localtime:/etc/localtime:ro"
      - "monitor_db:/usr/src/sdr-panel/db"
      - "monitor_data:/usr/src/sdr-panel/public/media"
    command: bash -c "python3 manage.py migrate && DJANGO_SUPERUSER_PASSWORD=password python3 manage.py createsuperuser --noinput --username admin --email admin@local.local || true"
  sdr-monitor-server:
    image: shajen/sdr-monitor:latest
    restart: on-failure
    depends_on:
      sdr-monitor-setup:
        condition: service_completed_successfully
    volumes:
      - "/etc/timezone:/etc/timezone:ro"
      - "/etc/localtime:/etc/localtime:ro"
      - "monitor_db:/usr/src/sdr-panel/db"
      - "monitor_data:/usr/src/sdr-panel/public/media"
    command: python3 manage.py runserver 0.0.0.0:8000
    ports:
      - 8000:8000
  sdr-monitor-reader:
    image: shajen/sdr-monitor:latest
    restart: on-failure
    depends_on:
      sdr-monitor-setup:
        condition: service_completed_successfully
    volumes:
      - "/etc/timezone:/etc/timezone:ro"
      - "/etc/localtime:/etc/localtime:ro"
      - "monitor_db:/usr/src/sdr-panel/db"
      - "monitor_data:/usr/src/sdr-panel/public/media"
    command: python3 manage.py runscript mqtt_reader

volumes:
  monitor_db:
  monitor_data:

My config.json

{
  "scanner_frequencies_ranges": [
    {
      "device_serial": "auto",
      "ranges": [
        {
          "start": 440000000,
          "stop": 441000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 441000000,
          "stop": 442000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 442000000,
          "stop": 443000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 443000000,
          "stop": 444000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 444000000,
          "stop": 445000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 445000000,
          "stop": 446000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 446000000,
          "stop": 447000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 447000000,
          "stop": 448000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 448000000,
          "stop": 449000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 449000000,
          "stop": 450000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 450000000,
          "stop": 451000000,
          "step": 1000,
          "sample_rate": 2048000
        }
        ,
        {
          "start": 451000000,
          "stop": 452000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 452000000,
          "stop": 453000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 453000000,
          "stop": 454000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 454000000,
          "stop": 455000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 455000000,
          "stop": 456000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 456000000,
          "stop": 457000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 457000000,
          "stop": 458000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 458000000,
          "stop": 459000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 459000000,
          "stop": 460000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 460000000,
          "stop": 461000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 461000000,
          "stop": 462000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 462000000,
          "stop": 463000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 463000000,
          "stop": 464000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 464000000,
          "stop": 465000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 465000000,
          "stop": 466000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 466000000,
          "stop": 467000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 467000000,
          "stop": 468000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 468000000,
          "stop": 469000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 469000000,
          "stop": 470000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 470000000,
          "stop": 471000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 471000000,
          "stop": 472000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 472000000,
          "stop": 473000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 473000000,
          "stop": 474000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 474000000,
          "stop": 475000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 475000000,
          "stop": 476000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 476000000,
          "stop": 477000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 477000000,
          "stop": 478000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 478000000,
          "stop": 479000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 479000000,
          "stop": 480000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 481000000,
          "stop": 482000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 482000000,
          "stop": 483000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 483000000,
          "stop": 484000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 484000000,
          "stop": 485000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 485000000,
          "stop": 486000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 486000000,
          "stop": 487000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 487000000,
          "stop": 488000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 488000000,
          "stop": 489000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 489000000,
          "stop": 490000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 491000000,
          "stop": 492000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 492000000,
          "stop": 493000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 493000000,
          "stop": 494000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 494000000,
          "stop": 495000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 495000000,
          "stop": 496000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 496000000,
          "stop": 497000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 497000000,
          "stop": 498000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 498000000,
          "stop": 499000000,
          "step": 1000,
          "sample_rate": 2048000
        },
        {
          "start": 499000000,
          "stop": 500000000,
          "step": 1000,
          "sample_rate": 2048000
        }

      ]
    }
  ],
  "ignored_frequencies_ranges": [
    {
      "comments": "Digital repeating strobe",
      "start": 442233000,
      "stop": 442241000
    },
    {
      "comments": "Digital repeating strobe",
      "start": 442333000,
      "stop": 442341000
    },
    {
      "start": 446133000,
      "stop": 446135000
    },
    {
      "start": 446133000,
      "stop": 446135000
    },
    {
      "start": 446175000,
      "stop": 446178000
    },
    {
      "start": 446021000,
      "stop": 446024000
    }

  ],
  "devices": {
    "rtl_sdr": {
      "ppm_error": -2.429,
      "tuner_gain": 49.9,
      "offset": 0
    },
    "hack_rf": {
      "lna_gain": 0,
      "vga_gain": 0,
      "offset": 0
    }
  },
  "recording": {
    "max_noise_time_ms": 500,
    "min_time_ms": 2000,
    "min_sample_rate": 16000
  },
  "detection": {
    "frequency_grouping_size": 12500,
    "frequency_range_scanning_time_ms": 64,
    "noise_learning_time_seconds": 30,
    "noise_detection_margin": 10,
    "torn_transmission_learning_time_seconds": 60
  },
  "output": {
    "logs": "sdr/logs",
    "file_log_level": "info",
    "console_log_level": "info"
  },
  "cores": 4,
  "memory_limit_mb": 0,
  "mqtt": {
    "hostname": "sdr-broker",
    "port": 1883,
    "username": "admin",
    "password": "password"
  }
}

Maybe need add additional check "If file absent" in my opinion error appears when monitor-reader try access deleted spectrogramm (it over 10GB of default limit already and date of missing file is older than 30 days)

Thanks for work!