commit c53eb509bbef333627ffd64bd7da717ee953ba5d
parent e949a12df2d45237d9374bcf1c3c905c2437022c
Author: Natasha Kerensikova <natgh@instinctive.eu>
Date: Sat, 5 Jul 2025 18:58:49 +0000
Stats are included in the status command output
Diffstat:
2 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/go.mod b/go.mod
@@ -5,6 +5,7 @@ go 1.23.0
toolchain go1.23.9
require (
+ github.com/dustin/go-humanize v1.0.1
github.com/glebarez/go-sqlite v1.22.0
github.com/nats-io/nats.go v1.42.0
github.com/pelletier/go-toml/v2 v2.2.4
@@ -12,7 +13,6 @@ require (
)
require (
- github.com/dustin/go-humanize v1.0.1 // indirect
github.com/google/uuid v1.5.0 // indirect
github.com/klauspost/compress v1.18.0 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
diff --git a/main.go b/main.go
@@ -30,6 +30,7 @@ import (
"sync/atomic"
"time"
+ "github.com/dustin/go-humanize"
_ "github.com/glebarez/go-sqlite"
"github.com/nats-io/nats.go"
"github.com/pelletier/go-toml/v2"
@@ -328,7 +329,7 @@ func (natsim *NatsIM) doCommands() {
buf.WriteString(rtt.String())
}
- buf.WriteString(fmt.Sprintf(", %d subscriptions", natsim.nc.NumSubscriptions()))
+ buf.WriteString(fmt.Sprintf(", %d subscriptions\n%s", natsim.nc.NumSubscriptions(), natsim.natsStats()))
natsim.ircSend(buf.String())
case "subscribe":
@@ -623,6 +624,16 @@ func (natsim *NatsIM) natsReconnectErr(c *nats.Conn, err error) {
natsim.ircSendError("Reconnect", err)
}
+func (natsim *NatsIM) natsStats() string {
+ stats := natsim.nc.Stats()
+ return fmt.Sprintf("%d reconnections, %s / %s msg in, %s / %s msg out",
+ stats.Reconnects,
+ humanize.IBytes(stats.InBytes),
+ humanizeNum(stats.InMsgs),
+ humanize.IBytes(stats.OutBytes),
+ humanizeNum(stats.OutMsgs))
+}
+
/**************** Log to Database ****************/
//go:embed init.sql
@@ -868,6 +879,14 @@ func (af *antiflood) UnmarshalText(text []byte) error {
return nil
}
+func humanizeNum(n uint64) string {
+ num, unit, found := strings.Cut(humanize.Bytes(n), " ")
+ if !found || unit == "" || unit[len(unit)-1:] != "B" {
+ panic("Unexpected huamized result")
+ }
+ return num + unit[:len(unit)-1]
+}
+
func packMark(mark LineMark, name, arg string) string {
return mark.Start + name + mark.Mid + arg + mark.End
}