From 690c0562643cb8b839bbd8833ee46d6c4ea01146 Mon Sep 17 00:00:00 2001 From: Eric Taylor Date: Tue, 30 Sep 2025 10:55:34 -0400 Subject: [PATCH] modified to for multi user tracking --- .gitignore | 2 + chart_asset_data.sh | 238 ++++++++++++++++++++++++-------------------- extract_assets.sh | 76 ++++++++------ snippet.md | 3 + user_ids.conf | 3 + 5 files changed, 183 insertions(+), 139 deletions(-) create mode 100644 .gitignore create mode 100644 snippet.md create mode 100755 user_ids.conf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..80a85ad --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.csv +*.png diff --git a/chart_asset_data.sh b/chart_asset_data.sh index 705d91f..e5d7f8b 100755 --- a/chart_asset_data.sh +++ b/chart_asset_data.sh @@ -1,126 +1,144 @@ #!/bin/bash -# Define input CSV file and temporary file for formatted data -input_file="assets_data.csv" -temp_file="total_asset_data_for_plot.txt" -temp_file2="cash_data_for_plot.txt" -output_png="total_assets.png" -output_png2="diamonds_on_hand.png" +# Source the configuration file +source ./user_ids.conf +# Directory where CSV files are stored +INPUT_DIR="/home/eric/asset_tracker" -# Extract date (without time) and total_assets columns for gnuplot -awk -F, 'NR > 1 { print substr($1, 1, 10), $4 }' "$input_file" > "$temp_file" +# 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" -# Extract date (without time) and diamonds columns for gnuplot -awk -F, 'NR > 1 { print substr($1, 1, 10), $3 }' "$input_file" > "$temp_file2" +# 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" -# Debugging Step: Print the first few lines of the temporary file to verify the output -# echo "Sample data from $temp_file2:" -# head -n 5 "$temp_file2" + # 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 -# Plot with gnuplot in ASCII mode -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" - 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_file" using 1:2 with lines notitle + 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 with gnuplot in ASCII mode -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" - 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_file2" using 1:2 with lines notitle + # 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 rgb "#FFFFFF" -# set xlabel "Date" font ",12" textcolor rgb "#FFFFFF" #white -# set ylabel "Total Assets" font ",12" textcolor rgb "#FFFFFF" #white -# 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 800,600 enhanced font 'Arial,10' background rgb "black" # PNG output with black background -# set output "$output_png" -# set style line 1 linecolor rgb "#FE6A00" linetype 1 linewidth 2 # Orange plot curve (#FE6A00) -# set autoscale xfixmin -# set autoscale xfixmax -# plot "$temp_file" using 1:2 with lines ls 1 -#EOF - -# Plot with gnuplot in PNG format (transparent 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 "$output_png" - set style line 1 linecolor rgb "#FE6A00" linetype 1 linewidth 2 # Orange plot curve (#FE6A00) - set autoscale xfixmin - set autoscale xfixmax - plot "$temp_file" using 1:2 with lines notitle ls 1 + # 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 - -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 "$output_png2" - set style line 1 linecolor rgb "#2CB9CF" linetype 1 linewidth 2 # teal plot curve - set autoscale xfixmin - set autoscale xfixmax - plot "$temp_file2" using 1:2 with lines notitle ls 1 + # 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 -# Copy the generated PNG file to the webserver via SSH -scp "$output_png" "$output_png2" root@taylors.life:/var/www/taylors/img/silver-dragon/ + # Clean up temporary files + rm -f "$temp_total_assets" + rm -f "$temp_diamonds_on_hand" -# Clean up temporary file -rm "$temp_file" -rm "$temp_file2" + 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." diff --git a/extract_assets.sh b/extract_assets.sh index 889be9b..5ed4aba 100755 --- a/extract_assets.sh +++ b/extract_assets.sh @@ -1,39 +1,57 @@ #!/bin/bash -# User ID (can be changed easily) -USER_ID="667" +# Source the configuration file +source ./user_ids.conf -# URL of the webpage to extract the data from -URL="https://www.prismatic-imperium.com/user_page.php?user=$USER_ID" +# URL template for the webpage to extract the data from +URL_TEMPLATE="https://www.prismatic-imperium.com/user_page.php?user=" -# CSV file to store the extracted data -CSV_FILE="/home/eric/assets_data.csv" +# Directory where CSV files will be stored +OUTPUT_DIR="/home/eric/asset_tracker" -# Check if the CSV file exists, if not, create it with headers -if [ ! -f "$CSV_FILE" ]; then - echo "CSV file does not exist. Creating it with headers." - echo "date,rank,diamonds,total_assets" > "$CSV_FILE" -fi +# Create output directory if it doesn't exist +mkdir -p "$OUTPUT_DIR" -# Fetch the webpage content and extract all the values within the user_assets_number span -values=$(curl -s "$URL" | grep -oP '(?<=)[^<]+') +# Function to process a single user ID +process_user() { + local USER_ID="$1" + local URL="${URL_TEMPLATE}${USER_ID}" + local CSV_FILE="${OUTPUT_DIR}/assets_data_${USER_ID}.csv" -# Convert values to an array (this splits the values by newline) -IFS=$'\n' read -r -d '' -a value_array <<< "$values" + # Check if the CSV file exists, if not, create it with headers + if [ ! -f "$CSV_FILE" ]; then + echo "CSV file does not exist. Creating it with headers." + echo "date,rank,diamonds,total_assets" > "$CSV_FILE" + fi -# Remove commas from each value -user_rank=$(echo "${value_array[0]}" | tr -d ',') -liquid_assets=$(echo "${value_array[1]}" | tr -d ',') -total_assets=$(echo "${value_array[2]}" | tr -d ',') + # Fetch the webpage content and extract all the values within the user_assets_number span + values=$(curl -s "$URL" | grep -oP '(?<=)[^<]+') -# Get the current date and time -current_datetime=$(date "+%Y-%m-%d %H:%M:%S") + # Convert values to an array (this splits the values by newline) + IFS=$'\n' read -r -d '' -a value_array <<< "$values" -# Check if we have exactly 3 values (rank, diamonds, total_assets) -if [ ${#value_array[@]} -eq 3 ]; then - # Append the values to the CSV file - echo "$current_datetime,$user_rank,$liquid_assets,$total_assets" >> "$CSV_FILE" -else - # Error handling: print a message if values were not extracted properly - echo "Error: Could not extract all values or incorrect number of values." >&2 -fi + # Remove commas from each value + user_rank=$(echo "${value_array[0]}" | tr -d ',') + liquid_assets=$(echo "${value_array[1]}" | tr -d ',') + total_assets=$(echo "${value_array[2]}" | tr -d ',') + + # Get the current date and time + current_datetime=$(date "+%Y-%m-%d %H:%M:%S") + + # Check if we have exactly 3 values (rank, diamonds, total_assets) + if [ ${#value_array[@]} -eq 3 ]; then + # Append the values to the CSV file + echo "$current_datetime,$user_rank,$liquid_assets,$total_assets" >> "$CSV_FILE" + else + # Error handling: print a message if values were not extracted properly + echo "Error: Could not extract all values or incorrect number of values for user $USER_ID." >&2 + fi +} + +# Process each user ID in the array +for USER_ID in "${USER_IDS[@]}"; do + echo "Processing user ID: $USER_ID" + process_user "$USER_ID" +done + +echo "All users processed." diff --git a/snippet.md b/snippet.md new file mode 100644 index 0000000..119f8bc --- /dev/null +++ b/snippet.md @@ -0,0 +1,3 @@ + +![Total Assets Over Time](https://erictaylor.me/img/asset_tracker/total_assets_667.png) +![On Hand Diamonds Over Time](https://erictaylor.me/img/asset_tracker/diamonds_on_hand_667.png) diff --git a/user_ids.conf b/user_ids.conf new file mode 100755 index 0000000..4cc4916 --- /dev/null +++ b/user_ids.conf @@ -0,0 +1,3 @@ +#!/bin/bash +# User IDs configuration file +USER_IDS=("667" "31" "744")