summaryrefslogtreecommitdiff
path: root/webircgateway/plugins/stats/plugin.go
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-10-24 00:11:55 +0800
committerMistivia <i@mistivia.com>2025-10-24 00:11:55 +0800
commitffa71fb8b2e5521f93d8599279af2b28a0795a66 (patch)
treeacd96fd3e03cb39c8a648c6298b96b9c847e716f /webircgateway/plugins/stats/plugin.go
parent5c71d2a538a93fd4a4fc06cb7941231cc5c0b104 (diff)
add web irc
Diffstat (limited to 'webircgateway/plugins/stats/plugin.go')
-rw-r--r--webircgateway/plugins/stats/plugin.go52
1 files changed, 52 insertions, 0 deletions
diff --git a/webircgateway/plugins/stats/plugin.go b/webircgateway/plugins/stats/plugin.go
new file mode 100644
index 0000000..bdafc41
--- /dev/null
+++ b/webircgateway/plugins/stats/plugin.go
@@ -0,0 +1,52 @@
+package main
+
+import (
+ "fmt"
+ "math"
+ "os"
+ "runtime"
+ "sync"
+ "time"
+
+ "github.com/kiwiirc/webircgateway/pkg/webircgateway"
+)
+
+func Start(gateway *webircgateway.Gateway, pluginsQuit *sync.WaitGroup) {
+ gateway.Log(2, "Stats reporting plugin loading")
+ go reportUsage(gateway)
+
+ pluginsQuit.Done()
+}
+
+func reportUsage(gateway *webircgateway.Gateway) {
+ started := time.Now()
+
+ out := func(line string) {
+ file, _ := os.OpenFile("stats_"+fmt.Sprintf("%v", started.Unix())+".csv",
+ os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
+ file.WriteString(line)
+ file.Close()
+ }
+
+ out("time,rss,heapinuse,heapalloc,numroutines,numclients\n")
+
+ for {
+ time.Sleep(time.Second * 5)
+
+ numClients := gateway.Clients.Count()
+ mem := &runtime.MemStats{}
+ runtime.ReadMemStats(mem)
+
+ line := fmt.Sprintf(
+ "%v,%v,%v,%v,%v,%v\n",
+ math.Round(time.Now().Sub(started).Seconds()),
+ mem.Sys/1024,
+ mem.HeapInuse/1024,
+ mem.HeapAlloc/1024,
+ runtime.NumGoroutine(),
+ numClients,
+ )
+
+ out(line)
+ }
+}