add some basic framework for the featurereport

This commit is contained in:
Jakob Ketterl 2019-07-05 19:30:24 +02:00
parent f5f23e6fbc
commit e61c0dcc12
5 changed files with 33 additions and 9 deletions

6
htdocs/features.html Normal file
View File

@ -0,0 +1,6 @@
<HTML><HEAD>
<TITLE>OpenWebRX Feature report</TITLE>
<script src="static/jquery-3.2.1.min.js"></script>
<script src="static/features.js"></script>
</HEAD><BODY>
</BODY></HTML>

5
htdocs/features.js Normal file
View File

@ -0,0 +1,5 @@
$(function(){
$.ajax('/api/features').done(function(data){
$('body').html(JSON.stringify(data));
});
});

View File

@ -1,11 +1,13 @@
import os import os
import mimetypes import mimetypes
import json
from datetime import datetime from datetime import datetime
from owrx.websocket import WebSocketConnection from owrx.websocket import WebSocketConnection
from owrx.config import PropertyManager from owrx.config import PropertyManager
from owrx.source import ClientRegistry from owrx.source import ClientRegistry
from owrx.connection import WebSocketMessageHandler from owrx.connection import WebSocketMessageHandler
from owrx.version import openwebrx_version from owrx.version import openwebrx_version
from owrx.feature import FeatureDetector
import logging import logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -26,12 +28,7 @@ class Controller(object):
if (type(content) == str): if (type(content) == str):
content = content.encode() content = content.encode()
self.handler.wfile.write(content) self.handler.wfile.write(content)
def render_template(self, template, **variables):
f = open('htdocs/' + template)
data = f.read()
f.close()
self.send_response(data)
class StatusController(Controller): class StatusController(Controller):
def handle_request(self): def handle_request(self):
@ -77,12 +74,21 @@ class AssetsController(Controller):
class IndexController(AssetsController): class IndexController(AssetsController):
def handle_request(self): def handle_request(self):
self.serve_file("index.html", content_type = "text/html") self.serve_file("index.html")
class MapController(AssetsController): class MapController(AssetsController):
def handle_request(self): def handle_request(self):
#TODO check if we have a google maps api key first? #TODO check if we have a google maps api key first?
self.serve_file("map.html", content_type = "text/html") self.serve_file("map.html")
class FeatureController(AssetsController):
def handle_request(self):
self.serve_file("features.html")
class ApiController(Controller):
def handle_request(self):
data = json.dumps(FeatureDetector().feature_report())
self.send_response(data, content_type = "application/json")
class WebSocketController(Controller): class WebSocketController(Controller):
def handle_request(self): def handle_request(self):

View File

@ -26,6 +26,11 @@ class FeatureDetector(object):
def feature_availability(self): def feature_availability(self):
return {name: self.is_available(name) for name in FeatureDetector.features} return {name: self.is_available(name) for name in FeatureDetector.features}
def feature_report(self):
def feature_details(name):
return self.get_requirements(name)
return {name: feature_details(name) for name in FeatureDetector.features}
def is_available(self, feature): def is_available(self, feature):
return self.has_requirements(self.get_requirements(feature)) return self.has_requirements(self.get_requirements(feature))

View File

@ -1,4 +1,4 @@
from owrx.controllers import StatusController, IndexController, AssetsController, WebSocketController, MapController from owrx.controllers import StatusController, IndexController, AssetsController, WebSocketController, MapController, FeatureController, ApiController
from http.server import BaseHTTPRequestHandler from http.server import BaseHTTPRequestHandler
import re import re
@ -21,7 +21,9 @@ class Router(object):
{"regex": "(/favicon.ico)", "controller": AssetsController}, {"regex": "(/favicon.ico)", "controller": AssetsController},
# backwards compatibility for the sdr.hu portal # backwards compatibility for the sdr.hu portal
{"regex": "/(gfx/openwebrx-avatar.png)", "controller": AssetsController}, {"regex": "/(gfx/openwebrx-avatar.png)", "controller": AssetsController},
{"route": "/map", "controller": MapController} {"route": "/map", "controller": MapController},
{"route": "/features", "controller": FeatureController},
{"route": "/api/features", "controller": ApiController}
] ]
def find_controller(self, path): def find_controller(self, path):
for m in Router.mappings: for m in Router.mappings: