From 465e9739ce6e2fb856e1338a6ca784620eb918e4 Mon Sep 17 00:00:00 2001 From: Alexandre <44178713+alexbelgium@users.noreply.github.com> Date: Wed, 23 Apr 2025 18:41:59 +0200 Subject: [PATCH] New feat : Disk usage summary (#318) * Disk usage summary * Explain why there is more files than the max specified * Update advanced.php * Update advanced.php * Few improvements * Improve alerts * Define HOME * Use single alert * Shorten message for single alert * Add execute permission to scripts/disk_species_count.sh * Removed MAX_FILE_SPECIES * Update advanced.php * Improve message * Update scripts/advanced.php Co-authored-by: Nachtzuster * Clean * Update scripts/advanced.php Co-authored-by: Nachtzuster * Typo --------- Co-authored-by: root Co-authored-by: Nachtzuster --- scripts/advanced.php | 16 ++++++-- scripts/disk_species_count.sh | 75 +++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+), 3 deletions(-) create mode 100755 scripts/disk_species_count.sh diff --git a/scripts/advanced.php b/scripts/advanced.php index 7a077af..dab6339 100644 --- a/scripts/advanced.php +++ b/scripts/advanced.php @@ -5,9 +5,18 @@ error_reporting(E_ERROR); require_once "scripts/common.php"; $home = get_home(); $config = get_config(); +$user = get_user(); ensure_authenticated(); +if (isset($_GET['run_species_count'])) { + echo ""; + } + if(isset($_GET['submit'])) { $contents = file_get_contents('/etc/birdnet/birdnet.conf'); $restart_livestream = false; @@ -307,14 +316,15 @@ $newconfig = get_config();

Defines how full the disk should be before the purge operations occur.
Note: This variable is still active if Keep is set. This means that the servies will be stopped at the purge threshold.


- + - If different than 0 (keep all), defines the maximum number of files to be kept for each species, with priority give to files with highest confidence. - This value does not take into account the last 7 days (protected by default). + If different than 0 (keep all), defines the number of files to keep for each species, with priority given to files with higher confidence. This value does not include files from the last 7 days, these new files are protected against auto-deletion. Note only the spectrogram and audio files are deleted, the obsevation data remains in the database. The files protected through the "lock" icon are also not affected. +
+
diff --git a/scripts/disk_species_count.sh b/scripts/disk_species_count.sh new file mode 100755 index 0000000..2f15a7d --- /dev/null +++ b/scripts/disk_species_count.sh @@ -0,0 +1,75 @@ +#!/bin/bash + +# Get default values +source /etc/birdnet/birdnet.conf +base_dir="$(readlink -f "$HOME/BirdSongs/Extracted/By_Date")" +cd "$base_dir" || exit 1 + +# Function to format numbers to k if ≥1000 +format_k() { + local value=$1 + if [ "$value" -ge 1000 ]; then + awk -v v="$value" 'BEGIN { printf "%.1fk", v/1000 }' + else + echo "$value" + fi +} + +# Get bird names from the database +bird_names=$(sqlite3 -readonly "$HOME"/BirdNET-Pi/scripts/birds.db </dev/null | wc -l) + total_file_count=$((total_file_count + total)) + + # Format total + total_display=$(format_k "$total") + + # Clean species name for display + species_display=$(echo "$species" | tr '_' ' ') + + # Save padded sort key + display line + printf "%05d %s : %s\n" "$total" "$total_display" "$species_display" >> "$data_file" +done <<<"$sanitized_names" + +# Avoid TERM error if not running in a terminal +[ -t 1 ] && clear + +# Build final output +{ + echo "BirdSongs stored on your drive" + echo " " + echo "Location : $base_dir: " + echo "Free space : $(df -h "$base_dir" | awk 'NR==2 {print $4}' | sed 's/G/ GB/; s/M/ MB/; s/K/ KB/')" + echo "Total species : $species_count" + echo "Total files : $(format_k "$total_file_count")" + echo "Total size : $(du -sh . | sed 's/G/ GB/; s/M/ MB/; s/K/ KB/' | cut -f1)" + echo " " + sort -r "$data_file" | sed 's/^[0-9]* //' +} > "$output_file" + +# Show results +cat "$output_file" + +# Clean up +rm -f "$data_file" "$output_file"