diff --git a/collector.go b/collector.go index aee6b5a..130f92b 100644 --- a/collector.go +++ b/collector.go @@ -2,8 +2,10 @@ package main import ( "bytes" + "encoding/json" "github.com/sirupsen/logrus" "github.com/yitsushi/go-misskey/services/notes/timeline" + "io" "net/http" "time" ) @@ -78,6 +80,39 @@ func collectStats() { } } +type OnlineUsers struct { + Count int `json:"count"` +} + +func collectOnlineUsers() { + for { + time.Sleep(1 * time.Minute) + response, err := http.Get("https://" + endpoint + "/api/get-online-users-count") + if err != nil { + logrus.Warning(err) + continue + } + if err != nil { + logrus.Warning(err) + continue + } + var onlineUsers OnlineUsers + + all, err := io.ReadAll(response.Body) + err = response.Body.Close() + if err != nil { + logrus.Warning(err) + continue + } + + err = json.Unmarshal(all, &onlineUsers) + if err != nil { + logrus.Warning(err) + } + misskeyOnlineUsers.Set(float64(onlineUsers.Count)) + } +} + func collectTimeline() { for { time.Sleep(30 * time.Second) @@ -92,7 +127,6 @@ func collectTimeline() { misskeyGlobalTimelineResponseTimeRaw.Set(float64(time.Since(start).Milliseconds()) / 1000) if len(global) != 0 { misskeyGlobalTimelineLastNotePublished.Set(float64(global[0].CreatedAt.UnixMilli())) - } }() go func() { @@ -106,7 +140,6 @@ func collectTimeline() { misskeyLocalTimelineResponseTimeRaw.Set(float64(time.Since(start).Milliseconds()) / 1000) if len(global) != 0 { misskeyLocalTimelineLastNotePublished.Set(float64(global[0].CreatedAt.UnixMilli())) - } }() diff --git a/main.go b/main.go index 17241d2..fb8f5fb 100644 --- a/main.go +++ b/main.go @@ -100,20 +100,27 @@ var ( Name: "misskey_local_timeline_response_time_raw", Help: "Response Time for misskey Local Timeline", }) + misskeyOnlineUsers = prometheus.NewGauge( + prometheus.GaugeOpts{ + Name: "misskey_online_users", + Help: "Online Users", + }) ) func main() { options, err := misskey.NewClientWithOptions( misskey.WithAPIToken(apiKey), misskey.WithBaseURL("https", endpoint, ""), - misskey.WithLogLevel(logrus.DebugLevel), + misskey.WithLogLevel(logrus.InfoLevel), ) client = options if err != nil { + logrus.Error(err) return } stats, err := client.Admin().Queue().Stats() if err != nil { + logrus.Error(err) return } fmt.Println(stats) @@ -132,6 +139,7 @@ func main() { prometheus.MustRegister(misskeyLocalTimelineLastNotePublished) prometheus.MustRegister(misskeyGlobalTimelineResponseTimeRaw) prometheus.MustRegister(misskeyLocalTimelineResponseTimeRaw) + prometheus.MustRegister(misskeyOnlineUsers) handler := promhttp.Handler() @@ -145,6 +153,7 @@ func main() { go collectPing() go collectStats() go collectTimeline() + go collectOnlineUsers() }() logrus.Error(server.ListenAndServe())