mirror of
https://git.ianrenton.com/ian/spothole.git
synced 2026-09-20 14:27:42 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2a4190ec4a | ||
|
|
c71c0e9d75 | ||
|
|
f2ef6e93fa | ||
|
|
d63897f8ad | ||
|
|
02e2730e47 | ||
|
|
b2719d2cd6 | ||
|
|
b9268dd4ca | ||
|
|
0cce38b0ab | ||
|
|
5a77248dbc |
@@ -346,3 +346,5 @@ web_ui_options:
|
|||||||
# is designed for a "donate/support the server" type button, though you are free to do whatever you want with it.
|
# is designed for a "donate/support the server" type button, though you are free to do whatever you want with it.
|
||||||
# As the server owner you are responsible for the safe usage of this option!
|
# As the server owner you are responsible for the safe usage of this option!
|
||||||
support_button_html: ""
|
support_button_html: ""
|
||||||
|
# CartoDB API key. Required to use the CartoDB layers without watermark. Get one from https://carto.com/basemaps/apikey/.
|
||||||
|
cartodb_api_key: ""
|
||||||
+1
-1
@@ -3,7 +3,7 @@ from data.band import Band
|
|||||||
from data.sig import SIG
|
from data.sig import SIG
|
||||||
|
|
||||||
# General software
|
# General software
|
||||||
SOFTWARE_VERSION = "2.0"
|
SOFTWARE_VERSION = "2.0.3"
|
||||||
|
|
||||||
# HTTP headers used for spot providers that use HTTP
|
# HTTP headers used for spot providers that use HTTP
|
||||||
HTTP_HEADERS = {"User-Agent": f"Spothole v{SOFTWARE_VERSION} (operated by {SERVER_OWNER_CALLSIGN})"}
|
HTTP_HEADERS = {"User-Agent": f"Spothole v{SOFTWARE_VERSION} (operated by {SERVER_OWNER_CALLSIGN})"}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ POLL_INTERVAL = 7200
|
|||||||
# To avoid looking up all stations in the GIRO system and working out which ones are providing live data, this has been
|
# To avoid looking up all stations in the GIRO system and working out which ones are providing live data, this has been
|
||||||
# manually determined and a CSV provided of all the stations that we can query for live data.
|
# manually determined and a CSV provided of all the stations that we can query for live data.
|
||||||
STATIONS_INDEX = "datafiles/didbase-stations.csv"
|
STATIONS_INDEX = "datafiles/didbase-stations.csv"
|
||||||
LGDC_URL = "https://lgdc.uml.edu/common/DIDBGetValues"
|
LGDC_URL = "https://lgdc.uml.edu/fastchar/getbest"
|
||||||
HISTORY_HOURS = 24
|
HISTORY_HOURS = 24
|
||||||
|
|
||||||
|
|
||||||
@@ -140,7 +140,7 @@ class GIROIonosonde(SolarConditionsProvider):
|
|||||||
|
|
||||||
from_str = from_time.strftime("%Y.%m.%d+%H:%M:%S")
|
from_str = from_time.strftime("%Y.%m.%d+%H:%M:%S")
|
||||||
to_str = to_time.strftime("%Y.%m.%d+%H:%M:%S")
|
to_str = to_time.strftime("%Y.%m.%d+%H:%M:%S")
|
||||||
url = f"{LGDC_URL}?ursiCode={ursi}&charName=foF2,MUFD,fmin&DMUF=3000&fromDate={from_str}&toDate={to_str}"
|
url = f"{LGDC_URL}?ursiCode={ursi}&charName=foF2,MUF%28D%29,fmin&DMUF=3000&fromDate={from_str}&toDate={to_str}"
|
||||||
try:
|
try:
|
||||||
http_response = requests.get(url, headers=HTTP_HEADERS, timeout=(5, 15))
|
http_response = requests.get(url, headers=HTTP_HEADERS, timeout=(5, 15))
|
||||||
if not http_response.ok:
|
if not http_response.ok:
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "Spothole"
|
name = "Spothole"
|
||||||
version = "2.0"
|
version = "2.0.3"
|
||||||
authors = [
|
authors = [
|
||||||
{ name="Ian Renton", email="ian@ianrenton.com" },
|
{ name="Ian Renton", email="ian@ianrenton.com" },
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -160,7 +160,6 @@ class WebServer:
|
|||||||
V1APISpotHandler,
|
V1APISpotHandler,
|
||||||
{
|
{
|
||||||
"spots": self._data_store.spots,
|
"spots": self._data_store.spots,
|
||||||
"spot_providers": self._data_providers,
|
|
||||||
**handler_opts,
|
**handler_opts,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|||||||
+6
-2
@@ -394,9 +394,11 @@ function setBasemap(basemapname) {
|
|||||||
}
|
}
|
||||||
// OpenStreetMap.Mapnik.Dark is a synthetic variant that uses Mapnik tiles with a CSS filter applied
|
// OpenStreetMap.Mapnik.Dark is a synthetic variant that uses Mapnik tiles with a CSS filter applied
|
||||||
const providerName = basemapname === "OpenStreetMap.Mapnik.Dark" ? "OpenStreetMap.Mapnik" : basemapname;
|
const providerName = basemapname === "OpenStreetMap.Mapnik.Dark" ? "OpenStreetMap.Mapnik" : basemapname;
|
||||||
|
const isCartoDB = basemapname === "CartoDB.Voyager" || basemapname === "CartoDB.DarkMatter";
|
||||||
backgroundTileLayer = L.tileLayer.provider(providerName, {
|
backgroundTileLayer = L.tileLayer.provider(providerName, {
|
||||||
opacity: parseFloat($("#basemapOpacity").val()),
|
opacity: parseFloat($("#basemapOpacity").val()),
|
||||||
edgeBufferTiles: 1
|
edgeBufferTiles: 1,
|
||||||
|
key: isCartoDB ? CARTODB_API_KEY : null
|
||||||
});
|
});
|
||||||
backgroundTileLayer.addTo(map);
|
backgroundTileLayer.addTo(map);
|
||||||
backgroundTileLayer.bringToBack();
|
backgroundTileLayer.bringToBack();
|
||||||
@@ -529,9 +531,11 @@ function setUpMap() {
|
|||||||
// Add basemap
|
// Add basemap
|
||||||
loadedBasemap = $("#basemap").val();
|
loadedBasemap = $("#basemap").val();
|
||||||
const initialProviderName = loadedBasemap === "OpenStreetMap.Mapnik.Dark" ? "OpenStreetMap.Mapnik" : loadedBasemap;
|
const initialProviderName = loadedBasemap === "OpenStreetMap.Mapnik.Dark" ? "OpenStreetMap.Mapnik" : loadedBasemap;
|
||||||
|
const isCartoDB = loadedBasemap === "CartoDB.Voyager" || loadedBasemap === "CartoDB.DarkMatter";
|
||||||
backgroundTileLayer = L.tileLayer.provider(initialProviderName, {
|
backgroundTileLayer = L.tileLayer.provider(initialProviderName, {
|
||||||
opacity: parseFloat($("#basemapOpacity").val()),
|
opacity: parseFloat($("#basemapOpacity").val()),
|
||||||
edgeBufferTiles: 1
|
edgeBufferTiles: 1,
|
||||||
|
key: isCartoDB ? CARTODB_API_KEY : null
|
||||||
});
|
});
|
||||||
backgroundTileLayer.addTo(map);
|
backgroundTileLayer.addTo(map);
|
||||||
backgroundTileLayer.bringToBack();
|
backgroundTileLayer.bringToBack();
|
||||||
|
|||||||
+3
-2
@@ -801,12 +801,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
CartoDB: {
|
CartoDB: {
|
||||||
url: 'https://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.png',
|
url: 'https://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.png?key={key}',
|
||||||
options: {
|
options: {
|
||||||
attribution: '{attribution.OpenStreetMap} © <a href="https://carto.com/attributions">CARTO</a>',
|
attribution: '{attribution.OpenStreetMap} © <a href="https://carto.com/attributions">CARTO</a>',
|
||||||
subdomains: 'abcd',
|
subdomains: 'abcd',
|
||||||
maxZoom: 20,
|
maxZoom: 20,
|
||||||
variant: 'light_all'
|
variant: 'light_all',
|
||||||
|
key: '<insert your API key here>'
|
||||||
},
|
},
|
||||||
variants: {
|
variants: {
|
||||||
Positron: 'light_all',
|
Positron: 'light_all',
|
||||||
|
|||||||
@@ -76,7 +76,7 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/add-spot.js?v=1787382663"></script>
|
<script src="/static/js/add-spot.js?v=1787950046"></script>
|
||||||
<script>$(document).ready(function () {
|
<script>$(document).ready(function () {
|
||||||
$("#nav-link-add-spot").addClass("active");
|
$("#nav-link-add-spot").addClass("active");
|
||||||
}); <!-- highlight active page in nav --></script>
|
}); <!-- highlight active page in nav --></script>
|
||||||
|
|||||||
@@ -84,7 +84,7 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/alerts.js?v=1787382663"></script>
|
<script src="/static/js/alerts.js?v=1787950046"></script>
|
||||||
<script>$(document).ready(function () {
|
<script>$(document).ready(function () {
|
||||||
$("#nav-link-alerts").addClass("active");
|
$("#nav-link-alerts").addClass("active");
|
||||||
}); <!-- highlight active page in nav --></script>
|
}); <!-- highlight active page in nav --></script>
|
||||||
|
|||||||
@@ -76,8 +76,8 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/spotsbandsandmap.js?v=1787382663"></script>
|
<script src="/static/js/spotsbandsandmap.js?v=1787950046"></script>
|
||||||
<script src="/static/js/bands.js?v=1787382663"></script>
|
<script src="/static/js/bands.js?v=1787950046"></script>
|
||||||
<script>$(document).ready(function () {
|
<script>$(document).ready(function () {
|
||||||
$("#nav-link-bands").addClass("active");
|
$("#nav-link-bands").addClass("active");
|
||||||
}); <!-- highlight active page in nav --></script>
|
}); <!-- highlight active page in nav --></script>
|
||||||
|
|||||||
+5
-5
@@ -1,6 +1,6 @@
|
|||||||
{% extends "skeleton.html" %}
|
{% extends "skeleton.html" %}
|
||||||
{% block head_extra %}
|
{% block head_extra %}
|
||||||
<link rel="stylesheet" href="/static/css/style.css?v=1787382663" type="text/css">
|
<link rel="stylesheet" href="/static/css/style.css?v=1787950046" type="text/css">
|
||||||
<link href="/static/vendor/css/bootstrap-5.3.8.min.css" rel="stylesheet">
|
<link href="/static/vendor/css/bootstrap-5.3.8.min.css" rel="stylesheet">
|
||||||
<link href="/static/vendor/css/fontawesome-6.7.2.min.css" rel="stylesheet">
|
<link href="/static/vendor/css/fontawesome-6.7.2.min.css" rel="stylesheet">
|
||||||
<link href="/static/vendor/css/solid-6.7.2.min.css" rel="stylesheet">
|
<link href="/static/vendor/css/solid-6.7.2.min.css" rel="stylesheet">
|
||||||
@@ -15,10 +15,10 @@
|
|||||||
window.fetchEventSource = fetchEventSource;
|
window.fetchEventSource = fetchEventSource;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script src="/static/js/utils.js?v=1787382663"></script>
|
<script src="/static/js/utils.js?v=1787950046"></script>
|
||||||
<script src="/static/js/ui-ham.js?v=1787382663"></script>
|
<script src="/static/js/ui-ham.js?v=1787950046"></script>
|
||||||
<script src="/static/js/geo.js?v=1787382663"></script>
|
<script src="/static/js/geo.js?v=1787950046"></script>
|
||||||
<script src="/static/js/common.js?v=1787382663"></script>
|
<script src="/static/js/common.js?v=1787950046"></script>
|
||||||
{% end %}
|
{% end %}
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
oninput="filtersUpdated();" style="width: 5em; display: inline-block;">
|
oninput="filtersUpdated();" style="width: 5em; display: inline-block;">
|
||||||
{% for a in web_ui_options["max_spot_age"] %}
|
{% for a in web_ui_options["max_spot_age"] %}
|
||||||
<option value="{{a*60}}" {% if web_ui_options[
|
<option value="{{a*60}}" {% if web_ui_options[
|
||||||
"max_spot_age_default"] == a*60 %}selected{% end %}>{{a}}</option>
|
"max_spot_age_default"] == a %}selected{% end %}>{{a}}</option>
|
||||||
{% end %}
|
{% end %}
|
||||||
</select>
|
</select>
|
||||||
minutes
|
minutes
|
||||||
|
|||||||
@@ -284,7 +284,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/vendor/js/chart-4.4.9.umd.min.js"></script>
|
<script src="/static/vendor/js/chart-4.4.9.umd.min.js"></script>
|
||||||
<script src="/static/js/conditions.js?v=1787382663"></script>
|
<script src="/static/js/conditions.js?v=1787950046"></script>
|
||||||
<script>$(document).ready(function () {
|
<script>$(document).ready(function () {
|
||||||
$("#nav-link-conditions").addClass("active");
|
$("#nav-link-conditions").addClass("active");
|
||||||
}); <!-- highlight active page in nav --></script>
|
}); <!-- highlight active page in nav --></script>
|
||||||
|
|||||||
+6
-2
@@ -109,8 +109,12 @@
|
|||||||
<script src="/static/vendor/js/leaflet-cqzones.js"></script>
|
<script src="/static/vendor/js/leaflet-cqzones.js"></script>
|
||||||
<script src="/static/vendor/js/leaflet-workedallbritainireland.js" type="module"></script>
|
<script src="/static/vendor/js/leaflet-workedallbritainireland.js" type="module"></script>
|
||||||
|
|
||||||
<script src="/static/js/spotsbandsandmap.js?v=1787382663"></script>
|
<script>
|
||||||
<script src="/static/js/map.js?v=1787382663"></script>
|
const CARTODB_API_KEY = "{{ web_ui_options.get('cartodb_api_key', '') }}";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script src="/static/js/spotsbandsandmap.js?v=1787950045"></script>
|
||||||
|
<script src="/static/js/map.js?v=1787950045"></script>
|
||||||
<script>$(document).ready(function () {
|
<script>$(document).ready(function () {
|
||||||
$("#nav-link-map").addClass("active");
|
$("#nav-link-map").addClass("active");
|
||||||
}); <!-- highlight active page in nav --></script>
|
}); <!-- highlight active page in nav --></script>
|
||||||
|
|||||||
@@ -113,8 +113,8 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/spotsbandsandmap.js?v=1787382663"></script>
|
<script src="/static/js/spotsbandsandmap.js?v=1787950045"></script>
|
||||||
<script src="/static/js/spots.js?v=1787382663"></script>
|
<script src="/static/js/spots.js?v=1787950045"></script>
|
||||||
<script>$(document).ready(function () {
|
<script>$(document).ready(function () {
|
||||||
$("#nav-link-spots").addClass("active");
|
$("#nav-link-spots").addClass("active");
|
||||||
}); <!-- highlight active page in nav --></script>
|
}); <!-- highlight active page in nav --></script>
|
||||||
|
|||||||
@@ -86,7 +86,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/status.js?v=1787382663"></script>
|
<script src="/static/js/status.js?v=1787950046"></script>
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
$("#nav-link-status").addClass("active");
|
$("#nav-link-status").addClass("active");
|
||||||
|
|||||||
Reference in New Issue
Block a user