cli graph graphs
Some checks failed
cicd / ci (push) Failing after 51s

This commit is contained in:
Bel LaPointe
2025-05-07 15:34:31 -06:00
parent 2f8dba4e23
commit 58462fb5a4
403 changed files with 226724 additions and 4 deletions

View File

@@ -13,6 +13,9 @@ import (
"gogs.inhome.blapointe.com/ana-ledger/src/ana"
"gogs.inhome.blapointe.com/ana-ledger/src/ledger"
"github.com/guptarohit/asciigraph"
"golang.org/x/crypto/ssh/terminal"
)
func Main() {
@@ -135,6 +138,86 @@ func Main() {
Nonzero().
Normalize(cpiNormalizer, "9")
FPrintBalances(w, "", balances, nil, config.Query.USDOnly, config.Query.Normalize, time.Now().Format("2006-01-02"), false, maxAccW)
case "gra":
deltas = deltas.Group(ledger.GroupDate("^[0-9]{4}-[0-9]{2}"))
transactions := deltas.Transactions()
cumulative := make(ledger.Balances)
data := map[string][]float64{}
pushData := func() {
soFar := 0
for _, v := range data {
soFar = len(v)
}
for k, balance := range cumulative {
for curr, v := range balance {
if curr != ledger.USD {
continue
}
if _, ok := data[k]; !ok {
data[k] = make([]float64, soFar)
}
data[k] = append(data[k], v)
}
}
}
for i, transaction := range transactions {
if i > 0 && transactions[i-1][0].Date != transaction[0].Date {
pushData()
}
balances := ledger.Deltas(transaction).
Like(q).
Group(group).
Balances().
WithBPIsAt(bpis, transaction[0].Date).
Nonzero().
Normalize(cpiNormalizer, transaction[0].Date)
cumulative.PushAll(balances)
}
pushData()
labels := []string{}
for k := range data {
labels = append(labels, k)
}
slices.Sort(labels)
points := [][]float64{}
for _, k := range labels {
points = append(points, data[k])
}
pointsMax := func() float64 {
var max float64
for _, vs := range points {
for _, v := range vs {
if max < v {
max = v
}
}
}
return max
}
for pointsMax() > 100 {
for i := range points {
for j := range points[i] {
points[i][j] /= 10.0
}
}
}
options := []asciigraph.Option{asciigraph.Precision(0)}
if _, h, err := terminal.GetSize(0); err == nil && h > 4 {
options = append(options, asciigraph.Height(h-4))
}
if len(labels) < 256 {
seriesColors := make([]asciigraph.AnsiColor, len(labels))
for i := range seriesColors {
seriesColors[i] = asciigraph.AnsiColor(i)
}
options = append(options, asciigraph.SeriesLegends(labels...))
options = append(options, asciigraph.SeriesColors(seriesColors...))
}
fmt.Println(asciigraph.PlotMany(points, options...))
case "reg":
transactions := deltas.Transactions()
cumulative := make(ledger.Balances)

View File

@@ -2,7 +2,7 @@
cmd="bal"
case "$1" in
bal|reg )
bal|reg|gra|graph )
cmd="$1"
shift
;;