Compare commits
12 Commits
ea0a34258b
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
27dc99b6ba
|
|||
|
12bf0a1838
|
|||
|
00599905c2
|
|||
|
fb9b974e0d
|
|||
|
c7fcf0ecd5
|
|||
|
eda39bd47e
|
|||
|
4e417871a8
|
|||
|
3fae41e34f
|
|||
|
1c9c1d40df
|
|||
|
259ac9c652
|
|||
|
07bcf0073e
|
|||
|
edd3693fb6
|
@@ -25,9 +25,11 @@ RUN mkdir -p /var/www && mkdir -p /var/www/data/speed
|
||||
WORKDIR /var/www
|
||||
|
||||
# Copy web assets and scripts
|
||||
COPY index.html /var/www/index.html
|
||||
COPY run_speed_test.sh /usr/local/bin/run_speed_test.sh
|
||||
COPY start.sh /usr/local/bin/start.sh
|
||||
COPY src/index.html /var/www/index.html
|
||||
COPY src/nw.ico /var/www/favicon.ico
|
||||
COPY src/nw.png /var/www/icon.png
|
||||
COPY src/run_speed_test.sh /usr/local/bin/run_speed_test.sh
|
||||
COPY src/start.sh /usr/local/bin/start.sh
|
||||
|
||||
# Ensure scripts are executable
|
||||
RUN chmod +x /usr/local/bin/run_speed_test.sh /usr/local/bin/start.sh
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
<p align="center">
|
||||
<img src="https://git.heshapps.com/asolkar/speed-data-docker/raw/branch/main/src/nw.png" />
|
||||
</p>
|
||||
|
||||
# speed-data-docker
|
||||
|
||||
Debian-based Docker image that runs hourly network speed tests (using speedtest-cli) and serves a simple web UI.
|
||||
@@ -47,7 +51,9 @@ docker run -d --name speed-data -e PORT=8080 -p 8080:8080 --restart unless-stopp
|
||||
Alternatively, run with a host bind mount (for direct access to files on the host):
|
||||
|
||||
```bash
|
||||
docker rm -f speed-data || true \
|
||||
docker build -t speed-data-app .
|
||||
|
||||
docker rm -f $(docker ps -a -q --filter name=speed\-data --filter status=running) || true \
|
||||
&& docker volume create speed-data-volume && \
|
||||
docker run -d --name speed-data -e CRON_MINUTE=18 -e PORT=8080 -p 8585:8080 --restart unless-stopped \
|
||||
-v ~/docker-data/speed-data-app/data:/var/www/data/speed speed-data-app
|
||||
|
||||
BIN
media/gem_nw_light.xcf
Normal file
BIN
media/gem_nw_light.xcf
Normal file
Binary file not shown.
566
media/nw.svg
Normal file
566
media/nw.svg
Normal file
@@ -0,0 +1,566 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="450mm"
|
||||
height="450mm"
|
||||
viewBox="0 0 450 450"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="nw.svg"
|
||||
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
||||
inkscape:export-filename="nw1.png"
|
||||
inkscape:export-xdpi="14.45"
|
||||
inkscape:export-ydpi="14.45"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:zoom="0.68"
|
||||
inkscape:cx="731.61765"
|
||||
inkscape:cy="825"
|
||||
inkscape:window-width="2540"
|
||||
inkscape:window-height="1395"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="layer5"
|
||||
showgrid="false"
|
||||
showguides="true">
|
||||
<inkscape:grid
|
||||
id="grid1"
|
||||
units="mm"
|
||||
originx="-100.99998"
|
||||
originy="-121.38361"
|
||||
spacingx="0.99999997"
|
||||
spacingy="0.99999997"
|
||||
empcolor="#0099e5"
|
||||
empopacity="0.30196078"
|
||||
color="#0099e5"
|
||||
opacity="0.14901961"
|
||||
empspacing="5"
|
||||
enabled="true"
|
||||
visible="false" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs1">
|
||||
<linearGradient
|
||||
id="linearGradient52"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
style="stop-color:#2e0c09;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop51" />
|
||||
<stop
|
||||
style="stop-color:#8b241b;stop-opacity:1;"
|
||||
offset="0.99782109"
|
||||
id="stop52" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient50"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
style="stop-color:#1a822c;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop49" />
|
||||
<stop
|
||||
style="stop-color:#8b241b;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop50" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient47"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
style="stop-color:#2f0d09;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop47" />
|
||||
<stop
|
||||
style="stop-color:#8b241b;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop48" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient32"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
style="stop-color:#092f10;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop32" />
|
||||
<stop
|
||||
style="stop-color:#1a822c;stop-opacity:1;"
|
||||
offset="0.99782109"
|
||||
id="stop33" />
|
||||
</linearGradient>
|
||||
<inkscape:path-effect
|
||||
effect="bend_path"
|
||||
id="path-effect31"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
bendpath="M 60.698526,224.11767 C -49.826516,125.67758 37.505631,109.51717 347.02539,195.71387"
|
||||
prop_scale="1"
|
||||
scale_y_rel="true"
|
||||
vertical="false"
|
||||
hide_knot="false"
|
||||
bendpath-nodetypes="cc" />
|
||||
<inkscape:path-effect
|
||||
effect="bend_path"
|
||||
id="path-effect1"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
bendpath="M 60.698526,224.11767 C -49.826516,125.67758 37.505631,109.51717 347.02539,195.71387"
|
||||
prop_scale="1"
|
||||
scale_y_rel="true"
|
||||
vertical="false"
|
||||
hide_knot="false"
|
||||
bendpath-nodetypes="cc" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient52"
|
||||
id="linearGradient33"
|
||||
x1="164.61549"
|
||||
y1="197.49998"
|
||||
x2="252.30768"
|
||||
y2="160.90909"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.68421151,0,0,0.95652186,47.368176,-3.9130596)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient32"
|
||||
id="linearGradient46"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.68421151,0,0,0.95652186,47.368176,-3.9130596)"
|
||||
x1="164.61549"
|
||||
y1="197.49998"
|
||||
x2="252.30768"
|
||||
y2="160.90909" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient50"
|
||||
id="radialGradient49"
|
||||
cx="267.5"
|
||||
cy="227.49998"
|
||||
fx="267.5"
|
||||
fy="227.49998"
|
||||
r="117.5"
|
||||
gradientTransform="matrix(1,0,0,0.48936172,0,116.1702)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient47"
|
||||
id="radialGradient51"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,1.3749948,0,-69.374048)"
|
||||
cx="189.99985"
|
||||
cy="185"
|
||||
fx="189.99985"
|
||||
fy="185"
|
||||
r="40.000153" />
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB"
|
||||
inkscape:label="Drop Shadow"
|
||||
id="filter76"
|
||||
x="-0.10212766"
|
||||
y="-0.20869565"
|
||||
width="1.2042553"
|
||||
height="1.4173913">
|
||||
<feFlood
|
||||
result="flood"
|
||||
in="SourceGraphic"
|
||||
flood-opacity="0.960784"
|
||||
flood-color="rgb(89,89,89)"
|
||||
id="feFlood75" />
|
||||
<feGaussianBlur
|
||||
result="blur"
|
||||
in="SourceGraphic"
|
||||
stdDeviation="10.000000"
|
||||
id="feGaussianBlur75" />
|
||||
<feOffset
|
||||
result="offset"
|
||||
in="blur"
|
||||
dx="0.000000"
|
||||
dy="0.000000"
|
||||
id="feOffset75" />
|
||||
<feComposite
|
||||
result="comp1"
|
||||
operator="in"
|
||||
in="flood"
|
||||
in2="offset"
|
||||
id="feComposite75" />
|
||||
<feComposite
|
||||
result="comp2"
|
||||
operator="over"
|
||||
in="SourceGraphic"
|
||||
in2="comp1"
|
||||
id="feComposite76" />
|
||||
</filter>
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB"
|
||||
inkscape:label="Drop Shadow"
|
||||
id="filter78"
|
||||
x="-0.29999885"
|
||||
y="-0.2181818"
|
||||
width="1.5999977"
|
||||
height="1.4363636">
|
||||
<feFlood
|
||||
result="flood"
|
||||
in="SourceGraphic"
|
||||
flood-opacity="0.960784"
|
||||
flood-color="rgb(89,89,89)"
|
||||
id="feFlood76" />
|
||||
<feGaussianBlur
|
||||
result="blur"
|
||||
in="SourceGraphic"
|
||||
stdDeviation="10.000000"
|
||||
id="feGaussianBlur76" />
|
||||
<feOffset
|
||||
result="offset"
|
||||
in="blur"
|
||||
dx="0.000000"
|
||||
dy="0.000000"
|
||||
id="feOffset76" />
|
||||
<feComposite
|
||||
result="comp1"
|
||||
operator="in"
|
||||
in="flood"
|
||||
in2="offset"
|
||||
id="feComposite77" />
|
||||
<feComposite
|
||||
result="comp2"
|
||||
operator="over"
|
||||
in="SourceGraphic"
|
||||
in2="comp1"
|
||||
id="feComposite78" />
|
||||
</filter>
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB"
|
||||
inkscape:label="Drop Shadow"
|
||||
id="filter80"
|
||||
x="-0.10212766"
|
||||
y="-0.20869565"
|
||||
width="1.2042553"
|
||||
height="1.4173913">
|
||||
<feFlood
|
||||
result="flood"
|
||||
in="SourceGraphic"
|
||||
flood-opacity="0.960784"
|
||||
flood-color="rgb(89,89,89)"
|
||||
id="feFlood78" />
|
||||
<feGaussianBlur
|
||||
result="blur"
|
||||
in="SourceGraphic"
|
||||
stdDeviation="10.000000"
|
||||
id="feGaussianBlur78" />
|
||||
<feOffset
|
||||
result="offset"
|
||||
in="blur"
|
||||
dx="0.000000"
|
||||
dy="0.000000"
|
||||
id="feOffset78" />
|
||||
<feComposite
|
||||
result="comp1"
|
||||
operator="in"
|
||||
in="flood"
|
||||
in2="offset"
|
||||
id="feComposite79" />
|
||||
<feComposite
|
||||
result="comp2"
|
||||
operator="over"
|
||||
in="SourceGraphic"
|
||||
in2="comp1"
|
||||
id="feComposite80" />
|
||||
</filter>
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB"
|
||||
inkscape:label="Drop Shadow"
|
||||
id="filter82"
|
||||
x="-0.29999885"
|
||||
y="-0.2181818"
|
||||
width="1.5999977"
|
||||
height="1.4363636">
|
||||
<feFlood
|
||||
result="flood"
|
||||
in="SourceGraphic"
|
||||
flood-opacity="0.960784"
|
||||
flood-color="rgb(89,89,89)"
|
||||
id="feFlood80" />
|
||||
<feGaussianBlur
|
||||
result="blur"
|
||||
in="SourceGraphic"
|
||||
stdDeviation="10.000000"
|
||||
id="feGaussianBlur80" />
|
||||
<feOffset
|
||||
result="offset"
|
||||
in="blur"
|
||||
dx="0.000000"
|
||||
dy="0.000000"
|
||||
id="feOffset80" />
|
||||
<feComposite
|
||||
result="comp1"
|
||||
operator="in"
|
||||
in="flood"
|
||||
in2="offset"
|
||||
id="feComposite81" />
|
||||
<feComposite
|
||||
result="comp2"
|
||||
operator="over"
|
||||
in="SourceGraphic"
|
||||
in2="comp1"
|
||||
id="feComposite82" />
|
||||
</filter>
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB"
|
||||
inkscape:label="Drop Shadow"
|
||||
id="filter101"
|
||||
x="-0.026976746"
|
||||
y="-0.070578056"
|
||||
width="1.0539535"
|
||||
height="1.1411566">
|
||||
<feFlood
|
||||
result="flood"
|
||||
in="SourceGraphic"
|
||||
flood-opacity="0.960784"
|
||||
flood-color="rgb(250,253,206)"
|
||||
id="feFlood100" />
|
||||
<feGaussianBlur
|
||||
result="blur"
|
||||
in="SourceGraphic"
|
||||
stdDeviation="4.000000"
|
||||
id="feGaussianBlur100" />
|
||||
<feOffset
|
||||
result="offset"
|
||||
in="blur"
|
||||
dx="0.000000"
|
||||
dy="0.000000"
|
||||
id="feOffset100" />
|
||||
<feComposite
|
||||
result="comp1"
|
||||
operator="in"
|
||||
in="flood"
|
||||
in2="offset"
|
||||
id="feComposite100" />
|
||||
<feComposite
|
||||
result="comp2"
|
||||
operator="over"
|
||||
in="SourceGraphic"
|
||||
in2="comp1"
|
||||
id="feComposite101" />
|
||||
</filter>
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB"
|
||||
inkscape:label="Drop Shadow"
|
||||
id="filter107"
|
||||
x="-0.069565224"
|
||||
y="-0.06760564"
|
||||
width="1.1391304"
|
||||
height="1.1352113">
|
||||
<feFlood
|
||||
result="flood"
|
||||
in="SourceGraphic"
|
||||
flood-opacity="0.749020"
|
||||
flood-color="rgb(0,0,0)"
|
||||
id="feFlood106" />
|
||||
<feGaussianBlur
|
||||
result="blur"
|
||||
in="SourceGraphic"
|
||||
stdDeviation="10.000000"
|
||||
id="feGaussianBlur106" />
|
||||
<feOffset
|
||||
result="offset"
|
||||
in="blur"
|
||||
dx="0.000000"
|
||||
dy="0.000000"
|
||||
id="feOffset106" />
|
||||
<feComposite
|
||||
result="comp1"
|
||||
operator="in"
|
||||
in="flood"
|
||||
in2="offset"
|
||||
id="feComposite106" />
|
||||
<feComposite
|
||||
result="comp2"
|
||||
operator="over"
|
||||
in="SourceGraphic"
|
||||
in2="comp1"
|
||||
id="feComposite107" />
|
||||
</filter>
|
||||
</defs>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer5"
|
||||
inkscape:label="Background"
|
||||
style="display:none"
|
||||
transform="translate(-26.289094,23.383632)">
|
||||
<ellipse
|
||||
style="display:inline;opacity:0.2;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter107)"
|
||||
id="path101"
|
||||
cx="222.78908"
|
||||
cy="177.73274"
|
||||
rx="172.49998"
|
||||
ry="177.49998"
|
||||
transform="matrix(0.99999998,0,0,0.98401627,25.857481,26.724446)" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:label="UploadArrow1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="rotate(-57.140648,1.4224849,162.99487)"
|
||||
style="display:none">
|
||||
<g
|
||||
id="path1"
|
||||
style="opacity:1;stroke-width:0;stroke-dasharray:none"
|
||||
inkscape:path-effect="#path-effect1"
|
||||
transform="matrix(0.78481774,0.06012365,0.06331305,0.88357438,32.802361,69.837343)">
|
||||
<path
|
||||
style="baseline-shift:baseline;display:inline;overflow:visible;fill:#c73737;fill-opacity:0.86377;stroke-width:0;stroke-dasharray:none;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||
d="m 15.692336,167.93203 c -0.157091,-0.62929 -0.294268,-1.26371 -0.409246,-1.90327 -0.566161,-3.1492 -0.534957,-6.4552 0.506649,-9.4806 1.002541,-2.91193 2.942129,-5.45064 5.32214,-7.40511 2.97109,-2.43987 6.529023,-4.07553 10.173259,-5.30021 4.870866,-1.63691 9.957618,-2.55737 15.060015,-3.16591 4e-6,0 9e-6,0 1.4e-5,0 14.892859,-1.77618 29.976768,-1.06295 44.922847,0.18875 21.775046,1.8236 43.397236,5.17842 64.897576,9.07887 l 2e-5,1e-5 c 28.56458,5.18199 56.92509,11.44225 85.1574,18.20428 10.17669,2.43746 20.33662,4.94364 30.48151,7.50959"
|
||||
id="path6"
|
||||
inkscape:original-d="M 89.880513,195.71384 H 290.65257" />
|
||||
<path
|
||||
style="baseline-shift:baseline;display:inline;overflow:visible;fill:#d51806;stroke-width:0;stroke-dasharray:none;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||
d="m -19.629274,176.74842 70.643057,-17.63373 c 0.03533,0.11587 0.09029,0.26933 0.167178,0.46038 0.625449,1.39039 0.186257,4.19339 -0.904536,8.84641 -1.944211,4.48654 -3.784415,7.38574 -6.017239,8.90861 -2.115336,1.27178 -2.400266,1.76487 -1.35533,1.08604 1e-6,0 2e-6,0 3e-6,0 1.480673,-0.61533 4.134306,-0.98799 7.760658,-1.52248 10.856976,-1.46645 23.486473,-0.71007 37.55961,0.31817 20.071133,1.6535 40.537783,4.85549 61.430973,8.62035 l 1e-5,0 c 27.66146,5.01107 55.36027,11.13218 83.1723,17.78683 10.01692,2.39849 20.02748,4.86769 30.03338,7.39867 l 17.88683,-70.71858 c -10.28367,-2.60086 -20.59277,-5.14395 -30.92902,-7.62034 -28.65259,-6.86942 -57.67481,-13.26882 -87.14252,-18.62174 l -1e-5,0 c -22.10749,-4.03604 -44.88521,-7.54371 -68.364175,-9.53741 -15.819028,-1.47514 -33.357354,-2.14524 -52.286098,-0.0593 -6.578439,0.68257 -14.098306,2.15084 -22.359358,4.80932 -7e-6,0 -1.5e-5,0 -2.2e-5,1e-5 -6.243523,1.77053 -13.644303,5.53493 -21.7018013,11.68644 -1.05e-5,0 -2.1e-5,1e-5 -3.14e-5,2e-5 -6.9928218,5.43181 -12.7121853,13.40841 -16.6614663,23.71878 -3.174001,10.70381 -3.675599,20.11881 -1.917832,27.80758 0.306787,1.46985 0.636028,2.89185 0.98544,4.26598 z"
|
||||
id="path7"
|
||||
inkscape:original-d="m 89.880859,169.25586 v 52.91601 H 290.65234 v -52.91601 z" />
|
||||
<g
|
||||
id="g2"
|
||||
style="stroke-width:0;stroke-dasharray:none">
|
||||
<path
|
||||
style="baseline-shift:baseline;display:inline;overflow:visible;fill:#d51806;stroke-width:0;stroke-dasharray:none;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||
d="m 51.014158,159.11451 c -0.188329,-0.6178 0.181693,-0.167 0.763963,1.35025 l 1e-6,0 c 1.074291,2.19137 3.035609,4.86546 5.521685,8.1585 0,0 10e-7,0 10e-7,0 7.240685,9.45826 16.956566,18.58061 27.753965,28.3448 -16.596577,1.38253 -33.088911,2.77779 -50.231421,1.65792 -1.119873,17.14251 0.162473,35.27396 1.726774,52.82471 -12.23825,-10.74393 -24.936668,-23.0435 -36.70157631,-37.87648 l -2.8e-6,0 C -4.3589352,208.31342 -8.6507233,202.04947 -12.665548,194.64609 l -3e-6,-10e-6 c -2.664059,-4.60321 -5.100738,-10.56944 -6.963934,-17.89653 5.943335,-2.94537 12.0096919,-5.54035 18.2009291,-7.71638 5.3722756,-1.93235 10.8855774,-3.51864 16.4695639,-4.68788 5.704944,-0.0403 11.381157,-0.5027 16.953727,-1.32094 6.421195,-0.89692 12.761906,-2.22305 19.019423,-3.90984 z"
|
||||
sodipodi:nodetypes="sssssscsss"
|
||||
id="path2"
|
||||
inkscape:original-d="M 89.880513,222.17217 H 36.963845 L 63.422179,195.71384 36.963845,169.25551 h 52.916668 l 2.645833,26.45833 z" />
|
||||
<g
|
||||
id="path3"
|
||||
style="opacity:1;stroke-width:0;stroke-dasharray:none">
|
||||
<path
|
||||
style="baseline-shift:baseline;display:inline;overflow:visible;fill:#d51806;fill-rule:evenodd;stroke-width:0;stroke-dasharray:none;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||
d="m 332.84378,191.79217 c -35.20792,9.22301 -70.08276,18.94612 -104.24819,29.49518 -0.0433,0.0134 -0.0867,0.0267 -0.13002,0.0401 l 25.48189,-106.41302 c 0.0343,0.032 0.0686,0.0639 0.10298,0.0959 27.12099,25.22801 53.2286,50.87614 78.79334,76.78183 z"
|
||||
id="path4"
|
||||
inkscape:original-d="m 336.45195,195.71384 -68.65938,39.6875 v -79.375 z" />
|
||||
<path
|
||||
style="baseline-shift:baseline;display:inline;overflow:visible;fill:#d51806;fill-rule:evenodd;stroke-width:0;stroke-dasharray:none;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||
d="M 249.5887,100.88036 218.628,231.98529 c 2.66171,-0.84028 5.33029,-1.675 8.00518,-2.50462 39.30541,-12.20725 79.58489,-23.30861 120.25977,-33.80508 -29.39669,-30.00702 -59.4489,-59.70987 -90.88008,-88.85866 -2.13301,-1.98111 -4.27417,-3.96006 -6.42417,-5.93657 z m 8.63215,28.06962 c 20.68149,19.45154 40.79635,39.14728 60.55931,59.01304 -27.07806,7.20949 -53.9372,14.74272 -80.40567,22.7484 z"
|
||||
id="path5"
|
||||
inkscape:original-d="m 262.5,146.85547 v 97.7168 l 84.52539,-48.85938 z m 10.58398,18.3418 52.79493,30.51757 -52.79493,30.51563 z" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:label="DownloadArrow1"
|
||||
inkscape:groupmode="layer"
|
||||
id="g30"
|
||||
transform="rotate(122.85935,208.87637,161.24652)"
|
||||
style="display:none;fill:#1a822c;fill-opacity:1;stroke:#1a822c;stroke-opacity:1">
|
||||
<g
|
||||
id="g29"
|
||||
style="opacity:1;fill:#1a822c;fill-opacity:1;stroke:#1a822c;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:path-effect="#path-effect31"
|
||||
transform="matrix(0.78481774,0.06012365,0.06331305,0.88357438,131.20116,22.110416)">
|
||||
<path
|
||||
style="baseline-shift:baseline;display:inline;overflow:visible;fill:#1a822c;fill-opacity:1;stroke:#1a822c;stroke-width:0;stroke-dasharray:none;stroke-opacity:1;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||
d="m 15.692336,167.93203 c -0.157091,-0.62929 -0.294268,-1.26371 -0.409246,-1.90327 -0.566161,-3.1492 -0.534957,-6.4552 0.506649,-9.4806 1.002541,-2.91193 2.942129,-5.45064 5.32214,-7.40511 2.97109,-2.43987 6.529023,-4.07553 10.173259,-5.30021 4.870866,-1.63691 9.957618,-2.55737 15.060015,-3.16591 4e-6,0 9e-6,0 1.4e-5,0 14.892859,-1.77618 29.976768,-1.06295 44.922847,0.18875 21.775046,1.8236 43.397236,5.17842 64.897576,9.07887 l 2e-5,1e-5 c 28.56458,5.18199 56.92509,11.44225 85.1574,18.20428 10.17669,2.43746 20.33662,4.94364 30.48151,7.50959"
|
||||
id="path23"
|
||||
inkscape:original-d="M 89.880513,195.71384 H 290.65257" />
|
||||
<path
|
||||
style="baseline-shift:baseline;display:inline;overflow:visible;fill:#1a822c;fill-opacity:1;stroke:#1a822c;stroke-width:0;stroke-dasharray:none;stroke-opacity:1;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||
d="m -19.629274,176.74842 70.643057,-17.63373 c 0.03533,0.11587 0.09029,0.26933 0.167178,0.46038 0.625449,1.39039 0.186257,4.19339 -0.904536,8.84641 -1.944211,4.48654 -3.784415,7.38574 -6.017239,8.90861 -2.115336,1.27178 -2.400266,1.76487 -1.35533,1.08604 1e-6,0 2e-6,0 3e-6,0 1.480673,-0.61533 4.134306,-0.98799 7.760658,-1.52248 10.856976,-1.46645 23.486473,-0.71007 37.55961,0.31817 20.071133,1.6535 40.537783,4.85549 61.430973,8.62035 l 1e-5,0 c 27.66146,5.01107 55.36027,11.13218 83.1723,17.78683 10.01692,2.39849 20.02748,4.86769 30.03338,7.39867 l 17.88683,-70.71858 c -10.28367,-2.60086 -20.59277,-5.14395 -30.92902,-7.62034 -28.65259,-6.86942 -57.67481,-13.26882 -87.14252,-18.62174 l -1e-5,0 c -22.10749,-4.03604 -44.88521,-7.54371 -68.364175,-9.53741 -15.819028,-1.47514 -33.357354,-2.14524 -52.286098,-0.0593 -6.578439,0.68257 -14.098306,2.15084 -22.359358,4.80932 -7e-6,0 -1.5e-5,0 -2.2e-5,1e-5 -6.243523,1.77053 -13.644303,5.53493 -21.7018013,11.68644 -1.05e-5,0 -2.1e-5,1e-5 -3.14e-5,2e-5 -6.9928218,5.43181 -12.7121853,13.40841 -16.6614663,23.71878 -3.174001,10.70381 -3.675599,20.11881 -1.917832,27.80758 0.306787,1.46985 0.636028,2.89185 0.98544,4.26598 z"
|
||||
id="path24"
|
||||
inkscape:original-d="m 89.880859,169.25586 v 52.91601 H 290.65234 v -52.91601 z" />
|
||||
<g
|
||||
id="g28"
|
||||
style="fill:#1a822c;fill-opacity:1;stroke:#1a822c;stroke-width:0;stroke-dasharray:none;stroke-opacity:1">
|
||||
<path
|
||||
style="baseline-shift:baseline;display:inline;overflow:visible;fill:#1a822c;fill-opacity:1;stroke:#1a822c;stroke-width:0;stroke-dasharray:none;stroke-opacity:1;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||
d="m 51.014158,159.11451 c -0.188329,-0.6178 0.181693,-0.167 0.763963,1.35025 l 1e-6,0 c 1.074291,2.19137 3.035609,4.86546 5.521685,8.1585 0,0 10e-7,0 10e-7,0 7.240685,9.45826 16.956566,18.58061 27.753965,28.3448 -16.596577,1.38253 -33.088911,2.77779 -50.231421,1.65792 -1.119873,17.14251 0.162473,35.27396 1.726774,52.82471 -12.23825,-10.74393 -24.936668,-23.0435 -36.70157631,-37.87648 l -2.8e-6,0 C -4.3589352,208.31342 -8.6507233,202.04947 -12.665548,194.64609 l -3e-6,-10e-6 c -2.664059,-4.60321 -5.100738,-10.56944 -6.963934,-17.89653 5.943335,-2.94537 12.0096919,-5.54035 18.2009291,-7.71638 5.3722756,-1.93235 10.8855774,-3.51864 16.4695639,-4.68788 5.704944,-0.0403 11.381157,-0.5027 16.953727,-1.32094 6.421195,-0.89692 12.761906,-2.22305 19.019423,-3.90984 z"
|
||||
sodipodi:nodetypes="sssssscsss"
|
||||
id="path25"
|
||||
inkscape:original-d="M 89.880513,222.17217 H 36.963845 L 63.422179,195.71384 36.963845,169.25551 h 52.916668 l 2.645833,26.45833 z" />
|
||||
<g
|
||||
id="g27"
|
||||
style="opacity:1;fill:#1a822c;fill-opacity:1;stroke:#1a822c;stroke-width:0;stroke-dasharray:none;stroke-opacity:1">
|
||||
<path
|
||||
style="baseline-shift:baseline;display:inline;overflow:visible;fill:#1a822c;fill-opacity:1;fill-rule:evenodd;stroke:#1a822c;stroke-width:0;stroke-dasharray:none;stroke-opacity:1;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||
d="m 332.84378,191.79217 c -35.20792,9.22301 -70.08276,18.94612 -104.24819,29.49518 -0.0433,0.0134 -0.0867,0.0267 -0.13002,0.0401 l 25.48189,-106.41302 c 0.0343,0.032 0.0686,0.0639 0.10298,0.0959 27.12099,25.22801 53.2286,50.87614 78.79334,76.78183 z"
|
||||
id="path26"
|
||||
inkscape:original-d="m 336.45195,195.71384 -68.65938,39.6875 v -79.375 z" />
|
||||
<path
|
||||
style="baseline-shift:baseline;display:inline;overflow:visible;fill:#1a822c;fill-opacity:1;fill-rule:evenodd;stroke:#1a822c;stroke-width:0;stroke-dasharray:none;stroke-opacity:1;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||
d="M 249.5887,100.88036 218.628,231.98529 c 2.66171,-0.84028 5.33029,-1.675 8.00518,-2.50462 39.30541,-12.20725 79.58489,-23.30861 120.25977,-33.80508 -29.39669,-30.00702 -59.4489,-59.70987 -90.88008,-88.85866 -2.13301,-1.98111 -4.27417,-3.96006 -6.42417,-5.93657 z m 8.63215,28.06962 c 20.68149,19.45154 40.79635,39.14728 60.55931,59.01304 -27.07806,7.20949 -53.9372,14.74272 -80.40567,22.7484 z"
|
||||
id="path27"
|
||||
inkscape:original-d="m 262.5,146.85547 v 97.7168 l 84.52539,-48.85938 z m 10.58398,18.3418 52.79493,30.51757 -52.79493,30.51563 z" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer3"
|
||||
inkscape:label="DownloadArrow2"
|
||||
style="display:inline"
|
||||
transform="translate(-100.99998,-121.38363)">
|
||||
<g
|
||||
id="g43"
|
||||
inkscape:label="FullAarrow"
|
||||
transform="rotate(121.01816,225.0864,274.29121)"
|
||||
style="display:inline;opacity:1">
|
||||
<path
|
||||
id="rect32"
|
||||
style="fill:url(#linearGradient33);fill-opacity:1;stroke:url(#radialGradient51);stroke-width:0;filter:url(#filter78)"
|
||||
d="m 149.9999,177.82609 c 0,0 -0.14211,-16.46209 6.84211,-23.91306 C 163.68412,146.61368 204.99999,130 204.99999,130 l -10,34.99999 35,15 c 0,0 -66.31587,28.6637 -73.15798,36.08696 -5.6977,6.18165 -6.84211,23.91306 -6.84211,23.91306 z"
|
||||
sodipodi:nodetypes="cscccscc" />
|
||||
<path
|
||||
id="rect31"
|
||||
style="fill:#8b241b;fill-opacity:1;stroke:url(#radialGradient49);stroke-width:0;filter:url(#filter76)"
|
||||
d="m 150,179.99999 c 0,15 14.99999,15 19.99999,15 h 158.80435 v -25 l 56.19565,55 -56.19565,60 v -25 H 169.99999 c -19.99999,0 -19.99999,-20 -19.99999,-20 z"
|
||||
sodipodi:nodetypes="zzccccczcz" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="g46"
|
||||
inkscape:label="UploadArrow2"
|
||||
transform="translate(-100.99998,-121.38363)"
|
||||
style="display:inline">
|
||||
<g
|
||||
id="g45"
|
||||
inkscape:label="FullAarrow"
|
||||
style="display:inline;opacity:1"
|
||||
transform="rotate(-53.102663,465.93508,159.34701)">
|
||||
<path
|
||||
id="path44"
|
||||
style="fill:url(#linearGradient46);fill-opacity:1;stroke:#1a822c;stroke-width:0;filter:url(#filter82)"
|
||||
d="m 149.9999,177.82609 c 0,0 -0.14211,-16.46209 6.84211,-23.91306 C 163.68412,146.61368 204.99999,130 204.99999,130 l -10,34.99999 35,15 c 0,0 -66.31587,28.6637 -73.15798,36.08696 -5.6977,6.18165 -6.84211,23.91306 -6.84211,23.91306 z"
|
||||
sodipodi:nodetypes="cscccscc" />
|
||||
<path
|
||||
id="path45"
|
||||
style="fill:#1a822c;stroke:#1a822c;stroke-width:0;filter:url(#filter80)"
|
||||
d="m 150,179.99999 c 0,15 14.99999,15 19.99999,15 5,0 158.80435,0 158.80435,0 v -25 l 56.19565,55 -56.19565,60 v -25 H 169.99999 c -19.99999,0 -19.99999,-20 -19.99999,-20 0,0 0,-75 0,-60 z"
|
||||
sodipodi:nodetypes="zzccccczcz" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer4"
|
||||
inkscape:label="Wave"
|
||||
style="display:inline;opacity:0.7"
|
||||
transform="matrix(0.9705873,0,0,1.0011851,-19.708142,23.179527)">
|
||||
<path
|
||||
style="fill:none;fill-opacity:1;stroke:#f3fda7;stroke-width:4;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter101)"
|
||||
d="m 36.930169,241.92184 c 0,0 15.28605,11.51136 24.999998,9.76744 10.804479,-1.9397 24.999998,-15.23256 28.749998,-21.01744 4.80234,-7.40826 15.250365,-23.0694 26.249995,-25.49419 11.33386,-2.49847 25,9.76744 27.5,14.24419 7.23609,12.95767 11.32345,37.98339 27.5,34.24418 15.71955,-3.63356 20,-24.18604 25,-45.23255 1.71499,-7.21889 0.0898,-85.0188 30,-91.27907 29.99999,-6.27907 25.00001,68.5871 25,79.76744 0,10 -1.62279,90.33965 29.99999,83.72093 20,-4.18604 22.42531,-84.09614 23.75,-94.97093 1.25,-10.26163 10.30287,-41.98472 26.25,-45.49418 16.17947,-3.56059 25,24.76744 27.5,34.24418 2.5,9.47675 15.11244,21.98062 27.49999,19.24419 12.08252,-2.66905 18.29306,-19.73514 26.25,-30.49419 8.75,-11.83139 15.16019,-13.17306 23.75,-14.97093 20,-4.18604 30,3.72093 30,3.72093"
|
||||
id="path82"
|
||||
sodipodi:nodetypes="casasasssssasassc" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 26 KiB |
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
VERSION=0.2.0
|
||||
VERSION=0.5.0
|
||||
|
||||
docker image build --no-cache -t asolkar/speed-data-docker:${VERSION} . && \
|
||||
docker push asolkar/speed-data-docker:${VERSION}
|
||||
@@ -58,6 +58,7 @@ body {
|
||||
}
|
||||
h1, h2, h5 {
|
||||
text-align: center;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
/* Recent boxes */
|
||||
@@ -149,8 +150,12 @@ h1, h2, h5 {
|
||||
font-size: 0.7em;
|
||||
}
|
||||
|
||||
/* Responsive */
|
||||
/* Responsive: Small screen, mobile, etc. */
|
||||
@media only screen and (max-width: 1100px) {
|
||||
#hd-cont img#app-icon {
|
||||
width: 2em;
|
||||
height: 2em;
|
||||
}
|
||||
#recent #recent_1 .recent_dn, #recent #recent_1 .recent_up {
|
||||
font-size: 2em;
|
||||
}
|
||||
@@ -198,7 +203,13 @@ h1, h2, h5 {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* Responsive: Larger screen, desktop, etc. */
|
||||
@media only screen and (min-width: 1100px) {
|
||||
#hd-cont img#app-icon {
|
||||
width: 4em;
|
||||
height: 4em;
|
||||
}
|
||||
#recent #recent_1 .recent_dn, #recent #recent_1 .recent_up {
|
||||
font-size: 3em;
|
||||
}
|
||||
@@ -233,6 +244,50 @@ h1, h2, h5 {
|
||||
float: left;
|
||||
margin: 5px;
|
||||
}
|
||||
}
|
||||
h1 {
|
||||
height: 1.5em;
|
||||
valign: center;
|
||||
}
|
||||
#hd-cont {
|
||||
width: max-content;
|
||||
font-size: 1.5em;
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
padding-top: 0.25em;
|
||||
padding-bottom: 0.25em;
|
||||
}
|
||||
#hd-cont .hd-txt {
|
||||
font-size: 1.5em;
|
||||
font-weight: bold;
|
||||
display: inline;
|
||||
vertical-align: middle;
|
||||
}
|
||||
#hd-cont img#app-icon {
|
||||
padding-right: 0.25em;
|
||||
display: inline;
|
||||
vertical-align: middle;
|
||||
}
|
||||
#app-advt {
|
||||
display: block;
|
||||
width: max-content;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
padding-bottom: 0.5em;
|
||||
font-size: 0.5em;
|
||||
}
|
||||
#app-advt img {
|
||||
padding-right: 0.5em;
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
}
|
||||
/* #app-advt img:hover {
|
||||
width: 128px;
|
||||
height: 128px;
|
||||
}*/
|
||||
#app-advt a {
|
||||
text-decoration: none;
|
||||
color: grey;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
@@ -458,7 +513,11 @@ function show_content() {
|
||||
$("#spinner")
|
||||
.after("<h2>Most recent samples</h2>")
|
||||
.after("<h5>(ISP: " + isp + ")</h5>")
|
||||
.after("<h1>Network Speed Data</h1>")
|
||||
.after("<div id=\"app-advt\"><a href=\"https://git.heshapps.com/asolkar/speed-data-docker\">Presented by Heshapps.com - speed-data-docker</a></div>")
|
||||
.after($('<div id="hd-cont"></div>').append(
|
||||
$('<img id="app-icon" src="icon.png" />'),
|
||||
$('<div class="hd-txt">Network Speed</div>')
|
||||
))
|
||||
.hide();
|
||||
console.timeEnd("speedtest");
|
||||
}
|
||||
BIN
src/nw.ico
Normal file
BIN
src/nw.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 40 KiB |
BIN
src/nw.png
Normal file
BIN
src/nw.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 40 KiB |
@@ -29,14 +29,14 @@ service cron start || cron || true
|
||||
|
||||
# Run the initial speed test once (in background) to populate files if possible
|
||||
# We run it in background so server starts promptly. The cron will run hourly.
|
||||
/usr/local/bin/run_speed_test.sh >> /var/log/cron.log 2>&1 || true &
|
||||
/usr/local/bin/run_speed_test.sh >> /var/log/cron.log 2>&1 || true &
|
||||
|
||||
# Start busybox httpd serving /var/www on configured port in foreground
|
||||
if command -v busybox >/dev/null 2>&1; then
|
||||
echo "starting busybox httpd on port ${PORT} serving /var/www"
|
||||
busybox httpd -f -p ${PORT} -h /var/www
|
||||
busybox httpd -f -p ${PORT} -h /var/www
|
||||
else
|
||||
echo "warning: busybox httpd not found; container will keep running with cron only" >&2
|
||||
# keep the script running so container doesn't exit
|
||||
tail -f /var/log/cron.log
|
||||
echo "warning: busybox httpd not found; container will keep running with cron only" >&2
|
||||
# keep the script running so container doesn't exit
|
||||
tail -f /var/log/cron.log
|
||||
fi
|
||||
Reference in New Issue
Block a user