13 Commits
0.2.0 ... 0.5.0

11 changed files with 651 additions and 12 deletions

View File

@@ -25,9 +25,11 @@ RUN mkdir -p /var/www && mkdir -p /var/www/data/speed
WORKDIR /var/www WORKDIR /var/www
# Copy web assets and scripts # Copy web assets and scripts
COPY index.html /var/www/index.html COPY src/index.html /var/www/index.html
COPY run_speed_test.sh /usr/local/bin/run_speed_test.sh COPY src/nw.ico /var/www/favicon.ico
COPY start.sh /usr/local/bin/start.sh 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 # Ensure scripts are executable
RUN chmod +x /usr/local/bin/run_speed_test.sh /usr/local/bin/start.sh RUN chmod +x /usr/local/bin/run_speed_test.sh /usr/local/bin/start.sh

View File

@@ -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 # speed-data-docker
Debian-based Docker image that runs hourly network speed tests (using speedtest-cli) and serves a simple web UI. 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): Alternatively, run with a host bind mount (for direct access to files on the host):
```bash ```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 volume create speed-data-volume && \
docker run -d --name speed-data -e CRON_MINUTE=18 -e PORT=8080 -p 8585:8080 --restart unless-stopped \ 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 -v ~/docker-data/speed-data-app/data:/var/www/data/speed speed-data-app

BIN
media/gem_nw_light.xcf Normal file

Binary file not shown.

566
media/nw.svg Normal file
View 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

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
VERSION=0.2.0 VERSION=0.5.0
docker image build --no-cache -t asolkar/speed-data-docker:${VERSION} . && \ docker image build --no-cache -t asolkar/speed-data-docker:${VERSION} . && \
docker push asolkar/speed-data-docker:${VERSION} docker push asolkar/speed-data-docker:${VERSION}

6
scripts/vscode Executable file
View File

@@ -0,0 +1,6 @@
#!/bin/bash
/opt/vscode/VSCode-linux-x64/code \
--enable-features=UseOzonePlatform,WaylandWindowDecorations \
--ozone-platform-hint=auto \
--unity-launch %F . & disown %1

View File

@@ -58,6 +58,7 @@ body {
} }
h1, h2, h5 { h1, h2, h5 {
text-align: center; text-align: center;
margin-bottom: 0;
} }
/* Recent boxes */ /* Recent boxes */
@@ -149,8 +150,12 @@ h1, h2, h5 {
font-size: 0.7em; font-size: 0.7em;
} }
/* Responsive */ /* Responsive: Small screen, mobile, etc. */
@media only screen and (max-width: 1100px) { @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 { #recent #recent_1 .recent_dn, #recent #recent_1 .recent_up {
font-size: 2em; font-size: 2em;
} }
@@ -198,7 +203,13 @@ h1, h2, h5 {
display: none; display: none;
} }
} }
/* Responsive: Larger screen, desktop, etc. */
@media only screen and (min-width: 1100px) { @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 { #recent #recent_1 .recent_dn, #recent #recent_1 .recent_up {
font-size: 3em; font-size: 3em;
} }
@@ -233,6 +244,50 @@ h1, h2, h5 {
float: left; float: left;
margin: 5px; 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> </style>
</head> </head>
@@ -458,7 +513,11 @@ function show_content() {
$("#spinner") $("#spinner")
.after("<h2>Most recent samples</h2>") .after("<h2>Most recent samples</h2>")
.after("<h5>(ISP: " + isp + ")</h5>") .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(); .hide();
console.timeEnd("speedtest"); console.timeEnd("speedtest");
} }

BIN
src/nw.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
src/nw.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

View File

@@ -29,14 +29,14 @@ service cron start || cron || true
# Run the initial speed test once (in background) to populate files if possible # 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. # 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 # Start busybox httpd serving /var/www on configured port in foreground
if command -v busybox >/dev/null 2>&1; then if command -v busybox >/dev/null 2>&1; then
echo "starting busybox httpd on port ${PORT} serving /var/www" 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 else
echo "warning: busybox httpd not found; container will keep running with cron only" >&2 echo "warning: busybox httpd not found; container will keep running with cron only" >&2
# keep the script running so container doesn't exit # keep the script running so container doesn't exit
tail -f /var/log/cron.log tail -f /var/log/cron.log
fi fi