Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
168 commits
Select commit Hold shift + click to select a range
c62ed23
can data
haoruizhou Apr 29, 2025
3c181f4
readme for server listener format
haoruizhou May 19, 2025
5465e80
adding message receive notification to docker
haoruizhou May 19, 2025
ce8d440
slackbot now can provide download w/ --d flag
haoruizhou May 21, 2025
6229fb0
zipping function did not work so removed
haoruizhou May 21, 2025
b85316a
add docker logger md
haoruizhou May 30, 2025
47859df
lappy on duty message
haoruizhou May 31, 2025
bf4d12f
functional listener for local testing
haoruizhou Jun 3, 2025
33f16ec
added packet size calculator
haoruizhou Jun 3, 2025
d55364e
correct whispering logic
haoruizhou Jun 3, 2025
92fba15
fallen_once flag
haoruizhou Jun 3, 2025
69bf93c
new flag and new sender
haoruizhou Jun 3, 2025
e494f19
data-ingest work in progress
haoruizhou Jun 4, 2025
5e5c1f4
Update README.md
haoruizhou Sep 5, 2025
371c870
Add DBC, checklist, and installer files
haoruizhou Sep 5, 2025
ee8b198
Merge branch 'main' of https://github.com/Western-Formula-Racing/daq-…
haoruizhou Sep 5, 2025
e03c887
docker-compose to spawn all server components
haoruizhou Sep 7, 2025
df53f31
removed old data loader, added ubuntu bootstrap
haoruizhou Sep 7, 2025
c71ffc5
Fixed data uploader, added new no slack variant
haoruizhou Sep 7, 2025
7f2efcf
Fixed grafana dashboard data source and time range
haoruizhou Sep 7, 2025
1da86e1
Update README.md
haoruizhou Sep 7, 2025
0ee9696
Add file uploader service with Flask and InfluxDB integration
numcap Sep 7, 2025
f32b426
Add drag-n-drop file uploader service to docker-compose
numcap Sep 7, 2025
e90e30b
fixed indentation
haoruizhou Sep 7, 2025
2474013
Rename drag-n-drop service to file-uploader and update startup script…
numcap Sep 7, 2025
83fcced
Fix service list syntax in start-daq-system.sh
haoruizhou Sep 8, 2025
b95bebb
Add CI/CD pipeline with GitHub Actions
haoruizhou Sep 8, 2025
167e7f4
Clean up moved car-to-influx files from root directory
haoruizhou Sep 8, 2025
3c2df79
adding deploy branch to action
haoruizhou Sep 8, 2025
1e5d036
adding - to docker-compose
haoruizhou Sep 8, 2025
537aede
Update docker-build.yml
haoruizhou Sep 8, 2025
6d1f0fd
Refactor GitHub Actions to use workflow_dispatch inputs
haoruizhou Sep 8, 2025
eea3634
Revert "Refactor GitHub Actions to use workflow_dispatch inputs"
haoruizhou Sep 8, 2025
3a12cd1
only build docker images if in "deploy" branch
haoruizhou Sep 8, 2025
640aec9
Merge pull request #1 from Western-Formula-Racing/deploy
haoruizhou Sep 8, 2025
d9c9785
Update docker-build.yml
haoruizhou Sep 8, 2025
81d3da2
Replace hardcoded secrets with environment variables
haoruizhou Sep 8, 2025
9ec5e98
Replace hardcoded passwords in QRH checklist
haoruizhou Sep 8, 2025
9627a86
.env set up
haoruizhou Sep 8, 2025
d7360ea
Update helper.py
haoruizhou Sep 10, 2025
7e4ae1f
replacing hard coded with env var
haoruizhou Sep 12, 2025
6843012
reduce 8085 logging info to avoid crash
haoruizhou Sep 12, 2025
92f7c58
Merge pull request #2 from Western-Formula-Racing/optimizing-file-upl…
haoruizhou Sep 12, 2025
b4b1295
Update .gitignore
haoruizhou Sep 12, 2025
1ba38ee
optimized listener, updated dashboard live-ish, remove resource limit
haoruizhou Sep 13, 2025
8a482d9
reducing flush interval from 500 to 100ms
haoruizhou Sep 13, 2025
f1fdc75
Add initial CAN viewer Flask/Dash app and assets
haoruizhou Sep 13, 2025
9cdd87e
timezone handling
haoruizhou Sep 14, 2025
ca9355c
Switch CAN message input to named pipe and add thread safety
haoruizhou Sep 14, 2025
1bf0e50
Improve timestamp handling and clean up debug prints
haoruizhou Sep 14, 2025
2e9face
Add timestamp pipeline documentation and Werkzeug dependency
haoruizhou Sep 14, 2025
7b2c46d
Remove peacan folder after moving to daq-radio
haoruizhou Sep 14, 2025
2a4dcca
Update docker-compose.yml
haoruizhou Sep 15, 2025
66d680f
rn env get erased so password are default in compose
haoruizhou Sep 15, 2025
dab39f3
Update installer/scripts/start-daq-system.sh
haoruizhou Sep 23, 2025
9a5a721
Update extract-influx-token.sh
haoruizhou Sep 23, 2025
3a2d2ee
Merge pull request #3 from Western-Formula-Racing/linux
haoruizhou Sep 23, 2025
3400082
Update docker-compose.yml
Ellaharding1 Sep 23, 2025
97f65c3
fixing start up
haoruizhou Sep 28, 2025
afeb96e
Update Vehicle Overview.json
haoruizhou Sep 28, 2025
95137c0
template directory
haoruizhou Sep 28, 2025
c766b99
Remove Docker-based InfluxDB token extraction script
haoruizhou Sep 28, 2025
6ac2ee8
.env backup with Slack tokens
haoruizhou Sep 30, 2025
54a976a
Create Mac Dependencies.md
haoruizhou Sep 30, 2025
8902117
Merge branch 'main' into linux-functional
haoruizhou Sep 30, 2025
06c8119
Merge pull request #4 from Western-Formula-Racing/linux-functional
haoruizhou Sep 30, 2025
cfd823c
commented out influxdb3 from docker compose
haoruizhou Sep 30, 2025
4f35bc8
async write, memory optimization for file uploader
haoruizhou Sep 30, 2025
f0a024a
Add disk-based large file upload for file-uploader
haoruizhou Sep 30, 2025
d5d3790
removed the need of starter script
haoruizhou Oct 1, 2025
dd99d59
removed unused parts
haoruizhou Oct 1, 2025
da88d5a
Merge branch 'main' into linux-functional
haoruizhou Oct 1, 2025
27e4dcc
Merge pull request #5 from Western-Formula-Racing/linux-functional
haoruizhou Oct 1, 2025
558b0e2
Update README.md
haoruizhou Oct 1, 2025
016df34
change data in start up data loader
haoruizhou Oct 2, 2025
96de40a
allow multiple csv upload, purge temp directory 6h
haoruizhou Oct 2, 2025
8520a7a
updated lappy tokens
haoruizhou Oct 2, 2025
9cae941
removed old slack bot folder
haoruizhou Oct 3, 2025
f48aee4
influxdb3 gui
haoruizhou Oct 3, 2025
60b4999
influxdb3 token provisioning
haoruizhou Oct 3, 2025
c3ee397
correct config for telegraf
haoruizhou Oct 3, 2025
9a55cf2
keeping the legacy influxdb2 loader, added telegraf for influxdb3
haoruizhou Oct 3, 2025
1064d22
only run the new telegraf script to influxdb3
haoruizhou Oct 3, 2025
229585d
start up logic correction
haoruizhou Oct 3, 2025
6ad40ee
Simplify Telegraf and startup-data-loader service configs
haoruizhou Oct 3, 2025
7de0514
pre-configured influxdb connection in gui
haoruizhou Oct 3, 2025
3108db9
removing unneeded fields
haoruizhou Oct 3, 2025
2a74303
sample data
haoruizhou Oct 3, 2025
a9177b9
Add InfluxDB backfill mode to data loader
haoruizhou Oct 3, 2025
ba2cb77
Create sql.ipynb
haoruizhou Oct 3, 2025
ea81bed
more sql queries
haoruizhou Oct 3, 2025
b18c3e3
add todos, cloudflared setting
haoruizhou Oct 4, 2025
3ec5ba0
added learn-sql folder
haoruizhou Oct 10, 2025
1366baa
Revert "added learn-sql folder"
haoruizhou Oct 10, 2025
f5a87dd
Update .gitignore
haoruizhou Oct 10, 2025
6fe0804
add sql.ipynb and server compose back
haoruizhou Oct 10, 2025
fa028d2
modified so it can be ran locally too
haoruizhou Oct 10, 2025
110cdc4
fixed healthcheck
haoruizhou Oct 10, 2025
e050a2b
updated sql ipynb
haoruizhou Oct 10, 2025
ca50f24
Merge pull request #6 from Western-Formula-Racing/local-deployment
haoruizhou Oct 10, 2025
003a49f
modified sql tutorial, removed unused docs
haoruizhou Oct 10, 2025
541dc24
Update README.md
haoruizhou Oct 11, 2025
b244e79
haorui fixed .env
shark1Martin Oct 15, 2025
322fda1
Update sql.ipynb
haoruizhou Oct 16, 2025
3c0c8ab
Fix InfluxDB3 WAL persistence by lowering snapshot threshold
Ellaharding1 Oct 29, 2025
e1b05df
removed data-ingest container
haoruizhou Oct 31, 2025
94c8e63
removed car-to-influx
haoruizhou Oct 31, 2025
a64bc72
remove unused scripts
haoruizhou Nov 12, 2025
e2d8909
temp upload
haoruizhou Nov 12, 2025
52790db
functional downloader
haoruizhou Nov 12, 2025
be24cbb
fixed timestamp issue
haoruizhou Nov 12, 2025
03c67e4
added query limit adjustment
haoruizhou Nov 12, 2025
78fd890
moved helper files into backend folder
haoruizhou Nov 12, 2025
ccdc200
rechart -> plotlyjs
haoruizhou Nov 12, 2025
7817e58
clickable past run, sensor, banner
haoruizhou Nov 12, 2025
b27cc23
proper banner behavior
haoruizhou Nov 12, 2025
27d8c3c
manual edits to the inputs now stick
haoruizhou Nov 12, 2025
487dc5b
removed influxdb2 from docker-compose script
haoruizhou Nov 12, 2025
9668e24
Refactor slackbot for agent command and cleanup
haoruizhou Nov 13, 2025
00bfa27
Create README.md
haoruizhou Nov 13, 2025
e19f97f
wfr-sandbox code moved from wfr-sandbox
haoruizhou Nov 13, 2025
2632708
Wrap sample CAN data in markdown and ignore CSV files
haoruizhou Nov 13, 2025
f11294f
removed irrelevant components for general public
haoruizhou Nov 13, 2025
495a38a
removed load_data_telegraf
haoruizhou Nov 13, 2025
29411c6
Update docker-build.yml
haoruizhou Nov 13, 2025
7af2b2d
Update InfluxDB admin token value and references
haoruizhou Nov 13, 2025
bdf5cbb
Add CAN data generator and update InfluxDB token
haoruizhou Nov 13, 2025
d632e3a
Merge pull request #9 from Western-Formula-Racing/codex/draft-public-…
haoruizhou Nov 13, 2025
49e21a2
Note preservation
haoruizhou Nov 13, 2025
6d49cdc
Merge pull request #7 from Western-Formula-Racing/dev-data-downloader
haoruizhou Nov 13, 2025
1ae5f57
Update README.md
haoruizhou Nov 13, 2025
c756cd5
Renamed lap.py to lap-detector
haoruizhou Nov 13, 2025
db1aa1d
Update .gitignore
haoruizhou Nov 13, 2025
2fd7682
docker compose stack ci
haoruizhou Nov 13, 2025
7ceca8f
Update stack-smoke-test.sh
haoruizhou Nov 13, 2025
9224e23
updated workflow
haoruizhou Nov 13, 2025
f6893b0
Example data and dbc
haoruizhou Nov 13, 2025
d923a31
Create LICENSE
haoruizhou Nov 13, 2025
e7a3077
corrected .env, added data-downloader into compose
haoruizhou Nov 14, 2025
944286d
Update .env.example
haoruizhou Nov 14, 2025
55b979a
Fixed CI exit
haoruizhou Nov 14, 2025
dad1834
Fixed slackbot gating
haoruizhou Nov 14, 2025
eabf48e
Stop tracking installer/data-downloader/data/*.json (keep local files)
haoruizhou Nov 14, 2025
b2192f0
removed sensor fallback range (#10)
haoruizhou Nov 14, 2025
a8d6c67
Add CSV_RESTART_INTERVAL to data loader
haoruizhou Nov 14, 2025
56f51c8
Merge branch 'main' of https://github.com/Western-Formula-Racing/daq-…
haoruizhou Nov 14, 2025
a5ba38d
Refine Docker setup for startup-data-loader
haoruizhou Nov 14, 2025
34b6daa
Refactor DBC file handling and path resolution (#11)
haoruizhou Nov 14, 2025
f2cdea6
Nginx for data uploader, timezone correction (#12)
haoruizhou Nov 14, 2025
4b2d77d
cleaned up for release
haoruizhou Nov 14, 2025
e1f6ced
Update sensor config and service dependencies
haoruizhou Nov 14, 2025
65182e9
Update README.md
haoruizhou Nov 14, 2025
f1c33c6
Fix file permissions for generated JSON files (#15)
Ellaharding1 Nov 20, 2025
4014a8a
A more diverse fake data generator and example.dbc
haoruizhou Nov 24, 2025
2a3a914
Add AI code generation and sandbox services
haoruizhou Dec 10, 2025
eed50a5
prompt guide mounting change
wfr-data-acquisition Dec 10, 2025
de8ca09
refactor: remove telegraf service and switch to direct influxdb write…
haoruizhou Dec 31, 2025
a66cba5
Update stack smoke test services and container inspection
haoruizhou Dec 31, 2025
220dc49
Sandbox agent (#18)
haoruizhou Feb 14, 2026
c011f75
updated configs
wfr-data-acquisition Feb 14, 2026
6052d4e
Merge remote-tracking branch 'origin/sandbox-agent'
haoruizhou Feb 14, 2026
da4a43b
Add slicks-based sandbox CI and docs
haoruizhou Feb 14, 2026
9bb20fb
Added system architecture
haoruizhou Feb 14, 2026
ae47c5f
Data Downloader updates
haoruizhou Feb 14, 2026
08b92a6
Update README.md
haoruizhou Feb 16, 2026
77d6a8a
gitignore: untrack generated CSV data and binary images
haoruizhou Feb 17, 2026
2111985
Use slicks for scanning and discovery (#20)
haoruizhou Feb 18, 2026
21a113f
Add Cloudflare Zero Trust SSO to Grafana via auth proxy
wfr-data-acquisition Mar 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
installer/startup-data-loader/data/*.csv binary
48 changes: 48 additions & 0 deletions .github/workflows/code-quality.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Code Quality Checks

on:
push:
branches: [ main, deploy ]
pull_request:
branches: [ main, deploy ]

jobs:
lint-docker:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Install Hadolint
run: |
sudo wget -O /usr/local/bin/hadolint https://github.com/hadolint/hadolint/releases/latest/download/hadolint-Linux-x86_64
sudo chmod +x /usr/local/bin/hadolint

- name: Lint Dockerfiles
run: |
find . -name "Dockerfile" -exec hadolint {} \;

check-dependencies:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Check for security vulnerabilities in Python dependencies
run: |
find . -name "requirements.txt" -exec safety check --file {} \; || true

validate-shell-scripts:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Install ShellCheck
run: |
sudo apt-get update
sudo apt-get install -y shellcheck

- name: Check shell scripts
run: |
find . -name "*.sh" -exec shellcheck {} \;
35 changes: 35 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: Deploy to Staging

on:
workflow_dispatch:
inputs:
environment:
description: 'Environment to deploy to'
required: true
default: 'staging'
type: choice
options:
- staging
- production

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}

jobs:
deploy:
runs-on: ubuntu-latest
environment: ${{ inputs.environment }}
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Deploy to ${{ inputs.environment }}
run: |
echo "Deploying to ${{ inputs.environment }} environment"
# Add your deployment commands here
# For example:
# - SSH to your server
# - Pull latest images
# - Run docker compose up
# - Run health checks
134 changes: 134 additions & 0 deletions .github/workflows/docker-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
name: Build and Test DAQ System

on:
push:
branches: [ deploy ]
pull_request:
branches: [ main, deploy ]

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}

jobs:
validate-compose:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Prepare environment file for CI
run: |
if [ ! -f installer/.env ]; then
cp installer/.env.example installer/.env
echo "Created .env file from .env.example"
fi

- name: Validate docker-compose files
run: |
cd installer
docker compose config
docker compose -f docker-compose.yml config

build-and-push:
runs-on: ubuntu-latest
needs: validate-compose
permissions:
contents: read
packages: write

strategy:
matrix:
service: [slackbot, lap-detector, startup-data-loader, file-uploader]

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Convert repository name to lowercase
run: |
echo "IMAGE_NAME_LOWER=$(echo ${{ github.repository }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV

- name: Log in to Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata
id: meta
run: |
echo "tags<<EOF" >> $GITHUB_OUTPUT
echo "${{ env.REGISTRY }}/${IMAGE_NAME_LOWER}/${{ matrix.service }}:latest" >> $GITHUB_OUTPUT
echo "${{ env.REGISTRY }}/${IMAGE_NAME_LOWER}/${{ matrix.service }}:${{ github.sha }}" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT

- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: ./installer/${{ matrix.service }}
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: |
org.opencontainers.image.title=${{ github.event.repository.name }}
org.opencontainers.image.description=WFR DAQ System - ${{ matrix.service }}
org.opencontainers.image.url=${{ github.event.repository.html_url }}
org.opencontainers.image.source=${{ github.event.repository.html_url }}
org.opencontainers.image.version=${{ github.sha }}
org.opencontainers.image.created=${{ steps.meta.outputs.created }}
org.opencontainers.image.revision=${{ github.sha }}

test-compose:
runs-on: ubuntu-latest
needs: build-and-push
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Create .env file for testing
run: |
cd installer
cp .env.example .env

- name: Pull pre-built images
run: |
docker pull influxdb:3.5.0-core
docker pull influxdata/influxdb3-ui:1.3.0
docker pull grafana/grafana
docker pull telegraf:1.30
docker pull nginx:alpine

- name: Build test images
run: |
cd installer
docker compose build --parallel

- name: Validate compose configuration
run: |
cd installer
docker compose config --quiet

- name: Test container startup (quick smoke test)
run: |
cd installer
# Start core monitoring stack to ensure compose wiring is valid
timeout 60s docker compose up influxdb3 influxdb3-explorer grafana frontend || true
# Check if containers started (even if they exit quickly)
docker compose ps

cleanup:
runs-on: ubuntu-latest
needs: [validate-compose, build-and-push, test-compose]
if: always()
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Clean up Docker resources
run: |
docker system prune -f
docker image prune -f
32 changes: 32 additions & 0 deletions .github/workflows/sandbox-integration.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Sandbox Integration Test

on:
push:
branches: [main, deploy]
pull_request:
branches: [main, deploy]
workflow_dispatch:

jobs:
slicks-sensor-check:
runs-on: ubuntu-latest
timeout-minutes: 10

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Python 3.11
uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Install slicks
run: pip install slicks

- name: Discover sensors for June 2025
env:
INFLUX_URL: ${{ secrets.INFLUX_URL }}
INFLUX_TOKEN: ${{ secrets.INFLUX_TOKEN }}
INFLUX_DB: ${{ secrets.INFLUX_DB }}
run: python dev-utils/ci/slicks-sensor-check.py
45 changes: 45 additions & 0 deletions .github/workflows/stack-smoke-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: Installer Stack Smoke Test

on:
push:
branches: [ main, deploy ]
pull_request:
branches: [ main, deploy ]
workflow_dispatch:

jobs:
stack-smoke-test:
runs-on: ubuntu-latest
timeout-minutes: 45
permissions:
contents: read

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Show Docker versions
run: |
docker version
docker compose version

- name: Ensure CI script is executable
run: chmod +x ./dev-utils/ci/stack-smoke-test.sh

- name: Prepare environment file for CI
run: |
if [ ! -f installer/.env ]; then
cp installer/.env.example installer/.env
echo "Created .env file from .env.example"
fi
ls -la installer/.env

- name: Run installer smoke test
env:
CI: "true"
DOCKER_BUILDKIT: "1"
COMPOSE_DOCKER_CLI_BUILD: "1"
run: ./dev-utils/ci/stack-smoke-test.sh
40 changes: 40 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -175,3 +175,43 @@ cython_debug/
.DS_Store

.idea
car-to-influx/testing_data/cleaned_can.csv

/.vscode

# Ignore everything inside the data folder
installer/startup-data-loader/data/*

# keep README.md
!installer/startup-data-loader/data/README.md

# Keep only the specific CSVs (example files)
!installer/startup-data-loader/data/2025-01-01-00-00-00.csv
!installer/startup-data-loader/data/2025-01-01-00-07-00.csv
!installer/startup-data-loader/data/2025-01-02-00-05-00.csv
!installer/startup-data-loader/data/2025-01-03-00-13-00.csv

!/installer/startup-data-loader/data/README.md
installer/startup-data-loader/can_metrics.out
installer/startup-data-loader/load_data_progress.json
installer/data-downloader/data/scanner_status.json
installer/data-downloader/data/runs.json
installer/data-downloader/data/sensors.json

installer/*.dbc
# Keep example.dbc
!installer/example.dbc

installer/slackbot/logs/*

installer/sandbox/prompt-guide.txt

wfr-telemetry
/installer/data-downloader/data
installer/slackbot/*.png
!installer/slackbot/lappy_test_image.png
installer/slackbot/*.jpg
installer/slackbot/*.jpeg

# Generated CSV data files
generated-days/
Loading