#!/bin/bash # Source the configuration file source ./user_ids.conf # Directory where CSV files are stored INPUT_DIR="/home/eric/asset_tracker" # Create output directory for charts if it doesn't exist #OUTPUT_DIR="/var/www/taylors/img/silver-dragon" OUTPUT_DIR="/home/eric/asset_tracker" mkdir -p "$OUTPUT_DIR" # Process each user ID for USER_ID in "${USER_IDS[@]}"; do # Define input CSV file and temporary files for formatted data for this user input_file="${INPUT_DIR}/assets_data_${USER_ID}.csv" # Skip if the user's CSV file doesn't exist if [ ! -f "$input_file" ]; then echo "Warning: CSV file for user $USER_ID not found. Skipping..." continue fi temp_total_assets="${INPUT_DIR}/total_asset_data_for_plot_${USER_ID}.txt" temp_diamonds_on_hand="${INPUT_DIR}/cash_data_for_plot_${USER_ID}.txt" png_total_assets="${OUTPUT_DIR}/total_assets_${USER_ID}.png" png_diamonds_on_hand="${OUTPUT_DIR}/diamonds_on_hand_${USER_ID}.png" # Extract date (without time) and total_assets columns for gnuplot awk -F, 'NR > 1 { print substr($1, 1, 10), $4 }' "$input_file" > "$temp_total_assets" # Extract date (without time) and diamonds columns for gnuplot awk -F, 'NR > 1 { print substr($1, 1, 10), $3 }' "$input_file" > "$temp_diamonds_on_hand" # Plot with gnuplot in ASCII mode (for debugging) echo "Generating charts for user ID: $USER_ID" # Plot total assets chart gnuplot <<- EOF set datafile separator " " set xdata time set timefmt "%Y-%m-%d" set format x "%m-%d" # Display only month and day on x-axis set format y "%.0f" # Display y-axis as plain numbers, no scientific notation set title "Total Assets Over Time for User $USER_ID" set xlabel "Date" set ylabel "Total Assets" set grid set terminal dumb size 80,20 # ASCII output, size 80x20 set autoscale xfixmin set autoscale xfixmax plot "$temp_total_assets" using 1:2 with lines notitle EOF # Plot diamonds chart gnuplot <<- EOF set datafile separator " " set xdata time set timefmt "%Y-%m-%d" set format x "%m-%d" # Display only month and day on x-axis set format y "%.0f" # Display y-axis as plain numbers, no scientific notation set title "On Hand Diamonds Over Time for User $USER_ID" set xlabel "Date" set ylabel "Diamonds" set grid set terminal dumb size 80,20 # ASCII output, size 80x20 set autoscale xfixmin set autoscale xfixmax plot "$temp_diamonds_on_hand" using 1:2 with lines notitle EOF # Plot with gnuplot in PNG format (black background, white text, orange plot line) gnuplot <<- EOF set datafile separator " " set xdata time set timefmt "%Y-%m-%d" set format x "%m-%d" # Display only month and day on x-axis set format y "%.0f" # Display y-axis as plain numbers, no scientific notation set title "Total Assets Over Time" font ",14" textcolor "#FFFFFF" set xlabel "Date" font ",12" textcolor "#FFFFFF" set ylabel "Total Assets" font ",12" textcolor "#FFFFFF" set grid linecolor rgb "#FFFFFF" # White grid lines set xtics textcolor rgb "#FFFFFF" # White x-axis labels set ytics textcolor rgb "#FFFFFF" # White y-axis labels set border linecolor rgb "#FFFFFF" # White border set terminal pngcairo size 400,300 enhanced font 'Arial,10' background rgb "black" # BLACK background set output "$png_total_assets" set style line 1 linecolor rgb "#FE6A00" linetype 1 linewidth 2 # Orange plot curve (#FE6A00) set autoscale xfixmin set autoscale xfixmax plot "$temp_total_assets" using 1:2 with lines notitle ls 1 EOF # Plot diamonds chart in PNG format gnuplot <<- EOF set datafile separator " " set xdata time set timefmt "%Y-%m-%d" set format x "%m-%d" # Display only month and day on x-axis set format y "%.0f" # Display y-axis as plain numbers, no scientific notation set title "Diamonds On Hand Over Time" font ",14" textcolor "#FFFFFF" set xlabel "Date" font ",12" textcolor "#FFFFFF" set ylabel "Diamonds" font ",12" textcolor "#FFFFFF" set grid linecolor rgb "#FFFFFF" # White grid lines set xtics textcolor rgb "#FFFFFF" # White x-axis labels set ytics textcolor rgb "#FFFFFF" # White y-axis labels set border linecolor rgb "#FFFFFF" # White border set terminal pngcairo size 400,300 enhanced font 'Arial,10' background rgb "black" # BLACK background set output "$png_diamonds_on_hand" set style line 1 linecolor rgb "#2CB9CF" linetype 1 linewidth 2 # teal plot curve set autoscale xfixmin set autoscale xfixmax plot "$temp_diamonds_on_hand" using 1:2 with lines notitle ls 1 EOF # Clean up temporary files rm -f "$temp_total_assets" rm -f "$temp_diamonds_on_hand" echo "Charts generated for user ID: $USER_ID" done # Copy the generated PNG files to the webserver via SSH echo "Copying charts to web server..." # Change to output directory cd "$OUTPUT_DIR" # Get list of files matching patterns total_files=$(ls total_assets_*.png 2>/dev/null) diamonds_files=$(ls diamonds_on_hand_*.png 2>/dev/null) # Copy total assets files if they exist if [ -n "$total_files" ]; then scp $total_files root@taylors.life:/var/www/erictaylor/img/asset_tracker/ fi # Copy diamonds files if they exist if [ -n "$diamonds_files" ]; then scp $diamonds_files root@taylors.life:/var/www/erictaylor/img/asset_tracker/ fi echo "All charts processed and copied."