README, History box css

This commit is contained in:
aceberg 2024-08-30 22:34:14 +07:00
parent 6b77b66d4e
commit 3aa63fef82
12 changed files with 129 additions and 47 deletions

2
.github/FUNDING.yml vendored
View file

@ -1,3 +1,3 @@
# These are supported funding model platforms
custom: ['https://boosty.to/aceberg/donate', 'https://aceberg.github.io/MyDocs/sponsor']
custom: ['https://boosty.to/aceberg/donate', 'https://github.com/aceberg#donate']

View file

@ -14,10 +14,10 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Build and Push Docker Image to docker.io
uses: mr-smithers-excellent/docker-build-push@v5
uses: mr-smithers-excellent/docker-build-push@v6
with:
image: ${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }}
tags: ${{ env.TAGS }}

View file

@ -17,41 +17,41 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Get version tag from env file
uses: c-py/action-dotenv-to-setenv@v2
uses: c-py/action-dotenv-to-setenv@v5
with:
env-file: .version
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v2
uses: docker/setup-buildx-action@v3
- name: Login to GHCR
uses: docker/login-action@v2
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to Docker Hub
uses: docker/login-action@v2
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push
uses: docker/build-push-action@v3
uses: docker/build-push-action@v6
with:
context: .
platforms: linux/amd64,linux/arm/v7,linux/arm64
push: true
tags: |
${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }}:latest
${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }}:v2
${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }}:${{ env.VERSION }}
ghcr.io/${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }}:latest
ghcr.io/${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }}:v2
ghcr.io/${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }}:${{ env.VERSION }}

View file

@ -16,7 +16,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Sync README.md to DockerHub
uses: ms-jpq/sync-dockerhub-readme@v1

View file

@ -1,6 +1,16 @@
# Change Log
All notable changes to this project will be documented in this file.
## [v2.0.0] - 2024-08-
### Changed
## [v2.0.0] - 2024-08-30
### Added
- API
- Arguments for `arp-scan` option
- `InfluxDB` export
- `PostgreSQL` or `SQLite` DB options
- Names from DNS
### Changed
- Better UI with JS
- Switched to `gin` web framework
- Reworked DB schema and config variables

View file

@ -11,7 +11,10 @@
Lightweight network IP scanner with web GUI
> [!WARNING]
> This README is about version 2.0, which is going to be released soon. There will be BREAKING CHANGES! Version 1.0 can be found in this brunch: [v1](https://github.com/aceberg/WatchYourLAN/tree/v1)
> This README is about version 2.0. Version 1.0 can be found in this brunch: [v1](https://github.com/aceberg/WatchYourLAN/tree/v1)
> [!BREAKING CHANGES]
> Version 2.0 is not compatible with v1.0. For now v2.0 docker images will be released under `v2` tag. It will be tagged `latest` in a few weeks (probably, in October), to give everyone enough time for a smooth migration.
![Screenshot_1](https://raw.githubusercontent.com/aceberg/WatchYourLAN/main/assets/Screenshot_1.png)
@ -28,7 +31,7 @@ docker run --name wyl \
-e "TZ=$YOURTIMEZONE" \
--network="host" \
-v $DOCKERDATAPATH/wyl:/data/WatchYourLAN \
aceberg/watchyourlan
aceberg/watchyourlan:v2
```
Web GUI should be at http://localhost:8840
@ -38,11 +41,42 @@ Web GUI should be at http://localhost:8840
<details>
<summary>Expand</summary>
Configuration can be done through config file or environment variables
Configuration can be done through config file, GUI or environment variables
### Basic config
| Variable | Description | Default |
| -------- | ----------- | ------- |
| TZ | Set your timezone for correct time | |
| HOST | Listen address | 0.0.0.0 |
| PORT | Port for web GUI | 8840 |
| THEME | Any theme name from https://bootswatch.com in lowcase or [additional](https://github.com/aceberg/aceberg-bootswatch-fork) | sand |
| COLOR | Background color: light or dark | dark |
| NODEPATH | Path to local node modules | |
| SHOUTRRR_URL | Link to any notification service supported by [Shoutrrr](https://github.com/containrrr/shoutrrr) (gotify, email, telegram and others) or [Generic Webhook](https://github.com/containrrr/shoutrrr/blob/main/docs/services/generic.md) | |
### Scan settings
| Variable | Description | Default |
| -------- | ----------- | ------- |
| IFACES | Interfaces to scan. Could be one or more, separated by space. Currently `docker0` is not supported, as `arp-scan` wouldn't work with it correctly | |
| TIMEOUT | Time between scans (seconds) | 120 |
| ARP_ARGS | Arguments for `arp-scan`. See `man arp-scan` for more. Enable `debug` log level to see resulting command. (Example: `-r 1`) | |
| LOG_LEVEL | Log level: `debug`, `info`, `warn` or `error` | info |
| TRIM_HIST | Remove history after (hours) | 48 |
| HIST_IN_DB | Store History in DB - if `false`, the History will be stored only in memory and will be lost on app restart. Though, it will keep the app DB smaller (and InfluxDB is recommended for long term History storage) | false |
| USE_DB | Either `sqlite` or `postgres` | sqlite |
| PG_CONNECT | Address to connect to PostgreSQL. (Example: `postgres://username:password@192.168.0.1:5432/dbname?sslmode=disable`). Full list of URL parameters [here](https://pkg.go.dev/github.com/lib/pq#hdr-Connection_String_Parameters) | |
### InfluxDB2 config
This config matches Grafana's config for InfluxDB data source
| Variable | Description | Default | Example |
| -------- | ----------- | ------- | ------- |
| INFLUX_ENABLE | Enable export to InfluxDB2 | false | true |
| INFLUX_SKIP_TLS | Skip TLS Verify | false | true |
| INFLUX_ADDR | Address:port of InfluxDB2 server | | https://192.168.2.3:8086/ |
| INFLUX_BUCKET | InfluxDB2 bucket | | test |
| INFLUX_ORG | InfluxDB2 org | | home |
| INFLUX_TOKEN | Secret token, generated by InfluxDB2 | | |
</details>
@ -51,6 +85,30 @@ Configuration can be done through config file or environment variables
<details>
<summary>Expand</summary>
Config file name is `config_v2.yaml`. Example:
```yaml
arp_args: ""
color: dark
hist_in_db: false
host: 0.0.0.0
ifaces: enp4s0
influx_addr: ""
influx_bucket: ""
influx_enable: false
influx_org: ""
influx_skip_tls: false
influx_token: ""
log_level: info
nodepath: ""
pg_connect: ""
port: "8840"
shoutrrr_url: "gotify://192.168.0.1:8083/AwQqpAae.rrl5Ob/?title=Unknown host detected&DisableTLS=yes"
theme: sand
timeout: 60
trim_hist: 48
use_db: sqlite
```
</details>
@ -61,8 +119,8 @@ Configuration can be done through config file or environment variables
| Key | Description | Default |
| -------- | ----------- | ------- |
| -c | Path to config file | /data/config.yaml |
| -n | Path to node modules (see below) | "" |
| -d | Path to config dir | /data/WatchYourLAN |
| -n | Path to node modules (see below) | |
</details>
@ -79,11 +137,11 @@ docker run --name node-bootstrap \
```
```sh
docker run --name wyl \
-e "IFACE=$YOURIFACE" \
-e "IFACES=$YOURIFACE" \
-e "TZ=$YOURTIMEZONE" \
--network="host" \
-v $DOCKERDATAPATH/wyl:/data \
aceberg/watchyourlan -n "http://$YOUR_IP:8850"
-v $DOCKERDATAPATH/wyl:/data/WatchYourLAN \
aceberg/watchyourlan:v2 -n "http://$YOUR_IP:8850"
```
Or use [docker-compose](docker-compose-local.yml)

View file

@ -5,7 +5,7 @@ After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/bin/watchyourlan -c /etc/watchyourlan/config.yaml
ExecStart=/usr/bin/watchyourlan -d /etc/watchyourlan/
Restart=on-failure
[Install]

View file

@ -6,21 +6,20 @@ services:
ports:
- 8850:8850
wyl:
image: aceberg/watchyourlan
image: aceberg/watchyourlan:v2
network_mode: "host"
restart: unless-stopped
command: "-n http://YOUR_IP:8850" # put your server IP or DNS name here
depends_on:
- node-bootstrap
volumes:
- ~/.dockerdata/wyl:/data
- ~/.dockerdata/wyl:/data/WatchYourLAN
environment:
TZ: Asia/Novosibirsk # required: needs your TZ for correct time
IFACE: "enp4s0" # required: 1 or more interface
DBPATH: "/data/db.sqlite" # optional, default: /data/db.sqlite
GUIIP: "0.0.0.0" # optional, default: localhost
GUIPORT: "8840" # optional, default: 8840
TIMEOUT: "120" # optional, time in seconds, default: 60
IFACES: "enp4s0 wlxf4ec3892dd51" # required: 1 or more interface
HOST: "0.0.0.0" # optional, default: 0.0.0.0
PORT: "8840" # optional, default: 8840
TIMEOUT: "120" # optional, time in seconds, default: 120
SHOUTRRR_URL: "" # optional, set url to notify
THEME: "darkly" # optional
IGNOREIP: "no" # optional
THEME: "sand" # optional
COLOR: "dark" # optional

View file

@ -1,18 +1,17 @@
version: "3"
services:
wyl:
image: aceberg/watchyourlan
image: aceberg/watchyourlan:v2
network_mode: "host"
restart: unless-stopped
volumes:
- ~/.dockerdata/wyl:/data/WatchYourLAN
environment:
TZ: Asia/Novosibirsk # required: needs your TZ for correct time
IFACE: "virbr-bw wlxf4ec3892dd51" # required: 1 or more interface
DBPATH: "/data/db.sqlite" # optional, default: /data/db.sqlite
GUIIP: "0.0.0.0" # optional, default: localhost
GUIPORT: "8840" # optional, default: 8840
TIMEOUT: "120" # optional, time in seconds, default: 60
IFACES: "enp4s0 wlxf4ec3892dd51" # required: 1 or more interface
HOST: "0.0.0.0" # optional, default: 0.0.0.0
PORT: "8840" # optional, default: 8840
TIMEOUT: "120" # optional, time in seconds, default: 120
SHOUTRRR_URL: "" # optional, set url to notify
THEME: "darkly" # optional
IGNOREIP: "no" # optional
THEME: "sand" # optional
COLOR: "dark" # optional

View file

@ -0,0 +1,2 @@
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="18" fill="currentColor" viewBox="0 0 10 18">
</svg>

After

Width:  |  Height:  |  Size: 110 B

View file

@ -1,3 +1,4 @@
/* Sort button */
.my-btn {
height: 100%;
background-color: #00000000;
@ -8,6 +9,22 @@
background-color: #0000001a;
}
/* History box */
.my-box-on::before, .my-box-off::before {
content: url(/fs/public/box.svg);
border-left: thin solid black;
}
.my-box-on {
background-color: var(--bs-success);
}
.my-box-off {
background-color: var(--bs-gray-500);
}
.my-box-on:hover, .my-box-off:hover {
background-color: #0000001a;
}
.hidden {
display: none;
}

View file

@ -5,16 +5,13 @@ function getHistHTML(hist) {
for (let h of hist) {
if (h.Now != 0) {
col = `fill:var(--bs-success);stroke:var(--bs-primary);`;
col = `my-box-on`;
} else {
col = `fill:var(--bs-gray-500);stroke:var(--bs-primary);`;
col = `my-box-off`;
}
title = `title="Date: ${h.Date}\nIface: ${h.Iface}\nIP: ${h.IP}\nKnown: ${h.Known}"`;
html = html + `<i ${title}><svg width="10" height="20">
<rect width="10" height="20" style="${col}"/>
Sorry, your browser does not support inline SVG.
</svg></i>`;
html = html + `<i ${title} class="${col}"></i>`;
}
return html;
}