Compare commits

..

4 commits

Author SHA1 Message Date
95ec066e85 formatting and styles 2024-06-28 08:52:11 -07:00
811cda558e rem pct symb 2024-06-28 08:51:47 -07:00
7ef8d17972 formatting 2024-06-28 08:39:38 -07:00
97c61442ca code cleanup 2024-06-28 08:30:15 -07:00
2 changed files with 133 additions and 57 deletions

View file

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# current dir # current dir
dir="$(dirname $(realpath $0))" dir="$(dirname "$(realpath "$0")")"
# get files # get files
wallet="${dir}/wallet.json" wallet="${dir}/wallet.json"
@ -22,7 +22,10 @@ portfolio=$(jq -s '[ .[0] + .[1] | group_by(.token)[] | add ]' \
<(echo "$(jq '.tokens' $wallet)") <(echo "$prices")) <(echo "$(jq '.tokens' $wallet)") <(echo "$prices"))
# calculate value # calculate value
calc=$(jq '[.[] | .["value"] = .balance * .price | .["margin"] = .value - .investment | .["movement"] = .margin / .investment]' \ calc=$(jq '[.[]
| .["value"] = .balance * .price
| .["margin"] = .value - .investment
| .["movement"] = .margin / .investment]' \
<(echo "$portfolio")) <(echo "$portfolio"))
# create rows # create rows
@ -32,13 +35,29 @@ for t in "${tokens[@]}"; do
tok=$(echo $t | jq '.token' | tr -d '"'); tok=$(echo $t | jq '.token' | tr -d '"');
bal=$(echo $t | jq '.balance|tonumber'); bal=$(echo $t | jq '.balance|tonumber');
prc=$(echo $t | jq '.price|tonumber'); prc=$(echo $t | jq '.price|tonumber');
inv=$(echo $t | jq '.investment|tonumber');
val=$(echo $t | jq '.value|tonumber');
mar=$(echo $t | jq '.margin|tonumber');
mov=$(echo $t | jq '.movement|tonumber');
row=$(echo "${row}<tr><td class=\"left\">${tok}</td><td>${bal}</td><td>"$(printf "$%.2f\n" $prc)"</td><td>"$(printf "$%.2f\n" $inv)"</td><td>"$(printf "$%.2f\n" $val)"</td><td>"$(printf "$%.2f\n" $mar)"</td><td>"$(printf "%.3f\n" $mov)"</td></tr>"); if [[ -n "$prc" ]]; then
csv=$(echo "${csv}"$(echo -n $(date +",['"%F"','"%T"','"%:::z"'"))",'${tok}','${bal}','${prc}','${inv}','${val}','${mar}','${mov}']"); inv=$(echo $t | jq '.investment|tonumber');
val=$(echo $t | jq '.value|tonumber');
mar=$(echo $t | jq '.margin|tonumber');
mov=$(echo $t | jq '.movement|tonumber');
else
read -r inv val mar mov <<<$(echo 0 0 0 0);
fi
row=$(
echo "${row}<tr><td class=\"left\">${tok}</td><td>${bal}</td><td>" \
$(printf "$%.2f\n" $prc)"</td><td>" \
$(printf "$%.2f\n" $inv)"</td><td>" \
$(printf "$%.2f\n" $val)"</td><td>" \
$(printf "$%.2f\n" $mar)"</td><td>" \
$(printf "%.3f\n" $mov)"</td></tr>" \
);
csv=$(
echo "${csv}"\
$(echo -n $(date +"['"%F"','"%T"','"%:::z"'")) \
",'${tok}','${bal}','${prc}','${inv}','${val}','${mar}','${mov}']" \
);
# Sum up # Sum up
tot_inv=$(echo "${tot_inv:-0}+$inv" | bc); tot_inv=$(echo "${tot_inv:-0}+$inv" | bc);
@ -48,21 +67,31 @@ for t in "${tokens[@]}"; do
done done
# format array # format array
csv=$(echo $csv | sed 's|^,||g') csv=$(echo $csv | sed 's|\] \[|\],\[|g')
# calculate movement # calculate movement
tot_mov=$(echo "scale=3 ; $tot_mar / $tot_inv" | bc) tot_mov=$(echo "scale=3 ; $tot_mar / $tot_inv" | bc)
# fill template # fill template
page=$(cat $template | sed "s|%row%|$row|g;s|%inv%|"$(printf "$%.2f\n" $tot_inv)"|g;s|%val%|"$(printf "$%.2f\n" $tot_val)"|g;s|%mar%|"$(printf "$%.2f\n" $tot_mar)"|g;s|%mov%|"$(printf "%.4f\n" $tot_mov)"|g;s|%dts%|$dts|g;s|%csv_data%|$csv|g;s|%dts_fln%|"$(echo -n $(date '+%F_%T%:::z'))"|g") page=$(cat $template | \
sed "s|%row%|$row|g" | \
sed "s|%inv%|"$(printf "$%.2f\n" $tot_inv)"|g" | \
sed "s|%val%|"$(printf "$%.2f\n" $tot_val)"|g" | \
sed "s|%mar%|"$(printf "$%.2f\n" $tot_mar)"|g" | \
sed "s|%mov%|"$(printf "%.4f\n" $tot_mov)"|g" | \
sed "s|%dts%|$dts|g" | \
sed "s|%csv_data%|$csv|g" | \
sed "s|%dts_fln%|"$(echo -n $(date '+%F_%T%:::z'))"|g")
# encode link # encode link
itty=$(echo -n $page | lzma -9 | base64 -w0 | xargs -0 printf "https://itty.bitty.site/#Portfolio/%s\n") itty=$(echo -n $page | lzma -9 | base64 -w0 | xargs -0 printf "https://itty.bitty.site/#Portfolio/%s\n")
# send signal # get ntfy
ntfy=$(jq -r '.ntfy | "\(.server)/\(.topic)"' $wallet) ntfy=$(jq -r '.ntfy | "\(.server)/\(.topic)"' $wallet)
# send report
curl \ curl \
-H "title: Portfolio Update" \ -H "title: Portfolio Update" \
-H "tags: coin" -H "click: ${itty}" \ -H "tags: coin" \
-H "click: ${itty}" \
-d "Click Here" $ntfy -d "Click Here" $ntfy

View file

@ -1,60 +1,107 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<title>Crypto Portfolio</title> <title>Crypto Portfolio</title>
<style> <style>
table { table.crypto {
border-style: solid; font-family: "Lucida Console", Monaco, monospace;
border-width: 3px; border: 2px solid #4F7849;
} background-color: #EEEEEE;
width: 100%;
td, th { text-align: right;
border-style: solid; border-collapse: collapse;
border-width: 2px; }
} table.crypto td, table.crypto th {
td { border: 1px solid #4F7849;
text-align: right; padding: 2px 2px;
} }
td.left { table.crypto tbody td {
text-align: left; font-size: 16px;
} font-weight: bold;
</style> color: #4F7849;
}
table.crypto tr:nth-child(even) {
background: #CEE0CC;
}
table.crypto thead {
background: #4F7849;
}
table.crypto thead th {
font-size: 18px;
color: #FFFFFF;
text-align: center;
}
table.crypto tfoot {
font-size: 20px;
font-weight: bold;
color: #FFFFFF;
background: #4F7849;
background: -moz-linear-gradient(top, #7b9a76 0%, #60855b 66%, #4F7849 100%);
background: -webkit-linear-gradient(top, #7b9a76 0%, #60855b 66%, #4F7849 100%);
background: linear-gradient(to bottom, #7b9a76 0%, #60855b 66%, #4F7849 100%);
border-top: 4px solid #444444;
}
table.crypto tfoot td {
font-size: 20px;
}
td.left {
text-align: left;
}
</style>
</head> </head>
<body> <body>
<table> <table class="crypto">
<tr> <thead>
<th>Token</th><th>Balance</th><th>Price</th><th>Investment</th><th>Value</th><th>Margin</th><th>Movement</th> <tr>
</tr> <th>Token</th>
%row% <th>Balance</th>
<tr> <th>Price</th>
<td class="left"><b>Total</b></td><td></td><td></td><td><b>%inv%</b></td><td><b>%val%</b></td><td><b>%mar%</b></td><td><b>%mov%</b></td> <th>Investment</th>
</tr> <th>Value</th>
</table> <th>Margin</th>
<p><i>%dts%</i></p> <th>Movement</th>
<button onclick="download_csv_file()"> Download CSV </button> </tr>
</thead>
<tbody>
%row%
</tbody>
<tfoot>
<tr>
<td class="left">Total</td>
<td></td>
<td></td>
<td>%inv%</td>
<td>%val%</td>
<td>%mar%</td>
<td>%mov%</td>
</tr>
</tfoot>
</table>
<p><i>%dts%</i></p>
<button onclick="download_csv_file()"> Download CSV </button>
</body> </body>
<script> <script>
var csvFileData = [ var csvFileData = [
%csv_data% %csv_data%
]; ];
function download_csv_file() { function download_csv_file() {
var csv = 'Date,Time,Zone,Token,Balance,Price,Investment,Value,Margin,Movement\n'; var csv = 'Date,Time,Zone,Token,Balance,Price,Investment,Value,Margin,Movement\n';
csvFileData.forEach(function(row) { csvFileData.forEach(function(row) {
csv += row.join(','); csv += row.join(',');
csv += "\n"; csv += "\n";
}); });
document.write(csv); document.write(csv);
var hiddenElement = document.createElement('a'); var hiddenElement = document.createElement('a');
hiddenElement.href = 'data:text/csv;charset=utf-8,' + encodeURI(csv); hiddenElement.href = 'data:text/csv;charset=utf-8,' + encodeURI(csv);
hiddenElement.target = '_blank'; hiddenElement.target = '_blank';
hiddenElement.download = 'CSV_Portfolio_%dts_fln%.csv'; hiddenElement.download = 'CSV_Portfolio_%dts_fln%.csv';
hiddenElement.click(); hiddenElement.click();
} }
</script> </script>
</html> </html>