support public listing on rx.kiwisdr.com

This commit is contained in:
jks-prv
2020-06-08 10:52:48 +12:00
parent 81465d69cc
commit a57b112417
6 changed files with 116 additions and 2 deletions

View File

@ -9,6 +9,7 @@ from owrx.config import Config
from owrx.feature import FeatureDetector
from owrx.sdr import SdrService
from socketserver import ThreadingMixIn
from owrx.listing import ListingUpdater
from owrx.service import Services
from owrx.websocket import WebSocketConnection
from owrx.pskreporter import PskReporter
@ -57,6 +58,10 @@ Support and info: https://groups.io/g/openwebrx
# Get error messages about unknown / unavailable features as soon as possible
SdrService.loadProps()
if "listing_key" in pm and pm["public_listing"]:
updater = ListingUpdater()
updater.start()
Services.start()

View File

@ -244,6 +244,18 @@ class GeneralSettingsController(AdminController):
infotext="This callsign will be used to send spots to pskreporter.info",
),
),
Section(
"rx.kiwisdr.com",
TextInput(
"listing_key",
"rx.kiwisdr.com key",
infotext='Please obtain your listing key via email from support@kiwisdr.com',
),
CheckboxInput(
"public_listing", "List on rx.kiwisdr.com", "List my receiver publicly on rx.kiwisdr.com"
),
TextInput("server_hostname", "Hostname"),
),
]
def render_sections(self):

View File

@ -27,7 +27,7 @@ class StatusController(Controller):
def indexAction(self):
pm = Config.get()
avatar_path = pkg_resources.resource_filename("htdocs", "gfx/openwebrx-avatar.png")
status = {
"receiver": {
"name": pm["receiver_name"],
@ -36,8 +36,10 @@ class StatusController(Controller):
"asl": pm["receiver_asl"],
"location": pm["receiver_location"],
},
"clients": ClientRegistry.getSharedInstance().clientCount(),
"max_clients": pm["max_clients"],
"version": openwebrx_version,
"sw_version": openwebrx_version,
"avatar_mtime": os.path.getmtime(avatar_path),
"sdrs": [self.getReceiverStats(r) for r in SdrService.getSources().values()]
}
self.send_response(json.dumps(status), content_type="application/json")

43
owrx/listing.py Normal file
View File

@ -0,0 +1,43 @@
import threading
import time
from owrx.config import Config
from urllib import request, parse
import logging
logger = logging.getLogger(__name__)
class ListingUpdater(threading.Thread):
def __init__(self):
self.doRun = True
super().__init__(daemon=True)
def update(self):
pm = Config.get().filter("server_hostname", "web_port", "listing_key")
data = parse.urlencode({
"url": "http://{server_hostname}:{web_port}".format(**pm.__dict__()),
"key": pm["listing_key"]
}).encode()
res = request.urlopen("http://kiwisdr.com/php/update.php", data=data)
if res.getcode() < 200 or res.getcode() >= 300:
logger.warning('rx.kiwisdr.com update failed with error code %i', res.getcode())
return 2
returned = res.read().decode("utf-8")
if "UPDATE:" not in returned:
logger.warning("Update failed, your receiver cannot be listed on rx.kiwisdr.com!")
return 2
value = returned.split("UPDATE:")[1].split("\n", 1)[0]
if value.startswith("SUCCESS"):
logger.info("Update succeeded!")
else:
logger.warning("Update failed, your receiver cannot be listed on rx.kiwisdr.com! Reason: %s", value)
return 20
def run(self):
while self.doRun:
retrytime_mins = self.update()
time.sleep(60 * retrytime_mins)