diff --git a/.gitignore b/.gitignore index 2390b24..98f4d4d 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,6 @@ db.sqlite3 data.csv public/styles/style.css swarm/.env.deploy +swarm/.env.netmon.brent +swarm/.env.netmon.josh +swarm/.env.netmon.shannon diff --git a/README.md b/README.md index d29ad5a..674aba3 100644 --- a/README.md +++ b/README.md @@ -36,3 +36,11 @@ npm install -D tailwindcss@latest postcss@latest autoprefixer@latest postcss-cli npm install tailwindcss postcss autoprefixer postcss-cli ``` + +dev outside the container + +``` +python3 -m http.server 8000 +python3 netmon.py monitor +npm run dev +``` diff --git a/swarm/docker-compose.netmon.yml b/swarm/docker-compose.netmon.yml index b6e94ce..e71baff 100644 --- a/swarm/docker-compose.netmon.yml +++ b/swarm/docker-compose.netmon.yml @@ -7,6 +7,9 @@ networks: volumes: netmon-data: + netmon-data-brent: + netmon-data-shannon: + netmon-data-josh: services: app: @@ -32,3 +35,75 @@ services: - traefik.http.routers.${netmonTraefikGrp? Variable not set}.tls=true - traefik.http.routers.${netmonTraefikGrp? Variable not set}.tls.certresolver=le - traefik.http.services.${netmonTraefikGrp? Variable not set}.loadbalancer.server.port=3000 + + brent: + image: daveplsno/netmon:latest + hostname: netmonBrent + env_file: .env.netmon.brent + volumes: + - netmon-data-brent:/app + networks: + - swarmnet-public + deploy: + restart_policy: + condition: on-failure + placement: + constraints: + - node.labels.${netmonNode? Variable not set} == true + labels: + - traefik.enable=true + - traefik.docker.network=swarmnet-public + - traefik.constraint-label=swarmnet-public + - traefik.http.routers.${netmonBrentTraefikGrp? Variable not set}.rule=Host(`${netmonBrentTraefikUrl? Variable not set}`) + - traefik.http.routers.${netmonBrentTraefikGrp? Variable not set}.entrypoints=websecure + - traefik.http.routers.${netmonBrentTraefikGrp? Variable not set}.tls=true + - traefik.http.routers.${netmonBrentTraefikGrp? Variable not set}.tls.certresolver=le + - traefik.http.services.${netmonBrentTraefikGrp? Variable not set}.loadbalancer.server.port=3000 + + shannon: + image: daveplsno/netmon:latest + hostname: netmonShannon + env_file: .env.netmon.shannon + volumes: + - netmon-data-shannon:/app + networks: + - swarmnet-public + deploy: + restart_policy: + condition: on-failure + placement: + constraints: + - node.labels.${netmonNode? Variable not set} == true + labels: + - traefik.enable=true + - traefik.docker.network=swarmnet-public + - traefik.constraint-label=swarmnet-public + - traefik.http.routers.${netmonShannonTraefikGrp? Variable not set}.rule=Host(`${netmonShannonTraefikUrl? Variable not set}`) + - traefik.http.routers.${netmonShannonTraefikGrp? Variable not set}.entrypoints=websecure + - traefik.http.routers.${netmonShannonTraefikGrp? Variable not set}.tls=true + - traefik.http.routers.${netmonShannonTraefikGrp? Variable not set}.tls.certresolver=le + - traefik.http.services.${netmonShannonTraefikGrp? Variable not set}.loadbalancer.server.port=3000 + + josh: + image: daveplsno/netmon:latest + hostname: netmonJosh + env_file: .env.netmon.josh + volumes: + - netmon-data-josh:/app + networks: + - swarmnet-public + deploy: + restart_policy: + condition: on-failure + placement: + constraints: + - node.labels.${netmonNode? Variable not set} == true + labels: + - traefik.enable=true + - traefik.docker.network=swarmnet-public + - traefik.constraint-label=swarmnet-public + - traefik.http.routers.${netmonJoshTraefikGrp? Variable not set}.rule=Host(`${netmonJoshTraefikUrl? Variable not set}`) + - traefik.http.routers.${netmonJoshTraefikGrp? Variable not set}.entrypoints=websecure + - traefik.http.routers.${netmonJoshTraefikGrp? Variable not set}.tls=true + - traefik.http.routers.${netmonJoshTraefikGrp? Variable not set}.tls.certresolver=le + - traefik.http.services.${netmonJoshTraefikGrp? Variable not set}.loadbalancer.server.port=3000 diff --git a/views/Card.jsx b/views/Card.jsx index d778453..b622c4e 100644 --- a/views/Card.jsx +++ b/views/Card.jsx @@ -1,12 +1,25 @@ const React = require('react'); -import { TimeBetweenRows } from './DiffCard'; +import { TimeDiff } from './TimeDiff'; export const Card = ({ dbdata }) => { return dbdata.reverse().map((row, index) => { const nextRow = dbdata[index + 1]; + const lastRow = dbdata.slice()[0]; + const textStyles = 'flex justify-center items-center py-2 text-sm'; return (