diff --git a/README.md b/README.md index 311b492..3cdc5ad 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,69 @@ -## 📖About - +## 📖 About Drive Health is a program written in golang to help with tracking and monitoring of your hardware's temperature. -This tool has been with the purpose of installing it in different servers I own with different configurations to help keep track of the temperature of different hard-disks, ssds, nvme drives, etc... The testing has been very limited to only 4 different computers and not on laptops so expect some mishaps. +This tool had been conceived with the purpose of installing it on different servers I own with different configurations to help keep track of the temperature of hard-disks, ssds, nvme drives, etc... + +### Features +- Disk Listing +- Temperature Graphing +- Disk activity logging +- [API](./lib/web/api.go) ![UI Example](./media/design_v1.webp) -## ❗Disclaimer - +## ❗ Disclaimer I'm not exactly a linux hardware wizard, so I honestly have no clue about a lot of things and I myself can tell there's a lot to improve upon and that there's a lot of other things missing that are a little bit more obscure, I personally don't currently own any m.2 sata drives to test the code on, or many of the other drive types, I have only tested on HDD, SSD and NVMe drives, any issues opened would help me so much! -## ❗Requirements +## ❗ Requirements 1. A linux machine, this will NOT work on macOS or on Windows, it's meant to be ran on servers as a service with which administrators can privately connect to for temperature logging. 2. Please make sure you have the [**drivetemp kernel drive**](https://docs.kernel.org/hwmon/drivetemp.html) you can check this by running `sudo modprobe drivetemp`. The program depends on this to be able to log the temperature of your devices. -## 📖How to use +## 📖 How to use +1. Follow the `Deployment` section instrcutions to launch the program -The program is straight forward to use really, edit the [.env](./.env) file and make the changes you would like applied. +2. Once the program has launched, access it in your browser -### Docker ( Recommended/Hassle free ) +3. Enter the administrative username and password for the simple HTTP Auth + +4. You now have access to the application, you can monitor your disk's temperature over a period of time. + +## 🐦 Deployment +To deploy the application you have multiple choices, the preffered method should be one which runs the binary directly and not containerization, the `docker` image is taking up a wopping `1Gb+` because I have to include sqlite3-dev and musl-dev dependencies, which sucks, so I whole heartedly recommend just installing this on your system as a binary either with `SystemD` or whichever service manager you are using. + +Download binaries from [the releases page](https://github.com/JustKato/drive-health/releases) + +### 🐋 Docker +In the project there's a `docker-compose.prod.yml` which you can deploy on your server, you will notice that there's also a "dev" version, this version simply has a `build` instead of `image` property, so feel free to use either. + +Please do take notice that I have just fed the `environment file` directly to the service via docker-compose, and I recommend you do the same but please feel free to pass in `environment` variables straight to the process as well. + +[Docker Compose File](./docker-compose.prod.yml) +```yaml +version: "3.8" + +services: + drive-health: + # Latest image pull, mention the specific version here please. + image: ghcr.io/justkato/drive-health:latest + # Restart in case of crashing + restart: unless-stopped + # Load environment variables from .env file + env_file: + - .env + # Mount the volume to the local drive + volumes: + - ./data:/data + # Setup application ports + ports: + - 5003:8080 +``` + +### 💾 SystemD +When running with SystemD or any other service manager, please make sure you have a `.env` inside the `WorkingDirectory` of your runner, in the below example I will simply put my env in `/home/daniel/services/drive-health/.env` -### SystemD ```ini [Unit] Description=Drive Health Service @@ -40,18 +80,19 @@ Restart=on-failure WantedBy=multi-user.target ``` -## ❔FAQ +## ❔ FAQ ### How does it work? -Currently the program does not depend on any hardware library as I couldn't find anything that would not require root access while giving me the possibility to interrogate the temperature of the drives, I chose not to depend on `lsblk` either, so how does the program work? Well it looks in `/sys/block` and simply +Currently the program does not depend on any go library for hardware detection as I couldn't find anything that would not require root access while giving me the possibility to interrogate the temperature of the drives. + +I chose not to depend on `lsblk` either, so how does the program work? +The program currently looks in `/sys/block` and then tries to make sense of the devices, I have had limited testing with my hardware specs, any issues being open in regards to different kinds of hardware would be highly appreciated ### Why not just run as root? -I really, really, **really** want to avoid asking people to run **ANY** program I write as root and even try and prevent that from happening since that's how things can go bad, especially because I am runnig actions over hardware items. I think you can see how easy it is for a mistake or a **malicious attack** to easily deal damage +I really, REALLY, **REALLY** want to avoid asking people to run **ANY** program I write as root and even try and prevent that from happening since that's how things can go bad, especially because I am running actions over hardware devices. ## Support & Contribution - For support, bug reports, or feature requests, please open an issue on the [GitHub repository](https://github.com/JustKato/drive-health/issues). Contributions are welcome! Fork the repository, make your changes, and submit a pull request. ## License - This project is licensed under the [Apache License 2.0](./LICENSE). \ No newline at end of file diff --git a/build.sh b/build.sh index fb366c9..0906293 100755 --- a/build.sh +++ b/build.sh @@ -1,19 +1,50 @@ -#!/bin/sh +#!/usr/bin/env bash set -o pipefail set -u +# Function to display messages in color +echo_color() { + color=$1 + text=$2 + case $color in + "green") echo -e "\033[0;32m$text\033[0m" ;; + "yellow") echo -e "\033[0;33m$text\033[0m" ;; + "red") echo -e "\033[0;31m$text\033[0m" ;; + *) echo "$text" ;; + esac +} + +# Getting GIT_VERSION from the most recent tag or commit hash +GIT_VERSION=$(git describe --tags --always) +if [ -z "$GIT_VERSION" ]; then + echo_color red "Error: Unable to determine GIT_VERSION." + exit 1 +fi + APP_NAME="drive-health" DIST_DIR="${DIST_DIR:-dist}" +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +# make sure we are in the source dir +cd $SCRIPT_DIR; # Create the dist directory if it doesn't exist mkdir -p $DIST_DIR # Build the application -echo "Building the application..." +echo_color yellow "[🦝] Building the application..." GOOS=linux CGO_ENABLED=1 GOARCH=amd64 go build -o $DIST_DIR/$APP_NAME -# echo "Copying additional resources..." +# Copying additional resources... cp -r static templates $DIST_DIR/ -echo "Compilation and packaging completed." +echo_color yellow "[🦝] Compilation and packaging completed, archiving..." + +cd $DIST_DIR/ + +zip "drive-health_$GIT_VERSION.zip" -r . + +# TODO: Add reliable method of cleaning up the compiled files optionally + +cd $SCRIPT_DIR; \ No newline at end of file