misskey-exporter/collector.go

115 lines
4.6 KiB
Go
Raw Permalink Normal View History

2025-02-01 07:26:12 +00:00
package main
import (
"bytes"
"github.com/sirupsen/logrus"
"github.com/yitsushi/go-misskey/services/notes/timeline"
"net/http"
"time"
)
func collectJobqueue() {
for {
time.Sleep(1 * time.Second)
stats, err := client.Admin().Queue().Stats()
if err != nil {
logrus.Warning(err)
continue
}
misskeyJobQueueJobsCount.WithLabelValues("deliver", "waiting").Set(float64(stats.Deliver.Waiting))
misskeyJobQueueJobsCount.WithLabelValues("deliver", "active").Set(float64(stats.Deliver.Active))
misskeyJobQueueJobsCount.WithLabelValues("deliver", "completed").Set(float64(stats.Deliver.Completed))
misskeyJobQueueJobsCount.WithLabelValues("deliver", "failed").Set(float64(stats.Deliver.Failed))
misskeyJobQueueJobsCount.WithLabelValues("deliver", "delayed").Set(float64(stats.Deliver.Delayed))
misskeyJobQueueJobsCount.WithLabelValues("deliver", "paused").Set(float64(stats.Deliver.Paused))
misskeyJobQueueJobsCount.WithLabelValues("inbox", "waiting").Set(float64(stats.Inbox.Waiting))
misskeyJobQueueJobsCount.WithLabelValues("inbox", "active").Set(float64(stats.Inbox.Active))
misskeyJobQueueJobsCount.WithLabelValues("inbox", "completed").Set(float64(stats.Inbox.Completed))
misskeyJobQueueJobsCount.WithLabelValues("inbox", "failed").Set(float64(stats.Inbox.Failed))
misskeyJobQueueJobsCount.WithLabelValues("inbox", "delayed").Set(float64(stats.Inbox.Delayed))
misskeyJobQueueJobsCount.WithLabelValues("inbox", "paused").Set(float64(stats.Inbox.Paused))
misskeyJobQueueJobsCount.WithLabelValues("db", "waiting").Set(float64(stats.DB.Waiting))
misskeyJobQueueJobsCount.WithLabelValues("db", "active").Set(float64(stats.DB.Active))
misskeyJobQueueJobsCount.WithLabelValues("db", "completed").Set(float64(stats.DB.Completed))
misskeyJobQueueJobsCount.WithLabelValues("db", "failed").Set(float64(stats.DB.Failed))
misskeyJobQueueJobsCount.WithLabelValues("db", "delayed").Set(float64(stats.DB.Delayed))
misskeyJobQueueJobsCount.WithLabelValues("db", "paused").Set(float64(stats.DB.Paused))
misskeyJobQueueJobsCount.WithLabelValues("objectstorage", "waiting").Set(float64(stats.ObjectStorage.Waiting))
misskeyJobQueueJobsCount.WithLabelValues("objectstorage", "active").Set(float64(stats.ObjectStorage.Active))
misskeyJobQueueJobsCount.WithLabelValues("objectstorage", "completed").Set(float64(stats.ObjectStorage.Completed))
misskeyJobQueueJobsCount.WithLabelValues("objectstorage", "failed").Set(float64(stats.ObjectStorage.Failed))
misskeyJobQueueJobsCount.WithLabelValues("objectstorage", "delayed").Set(float64(stats.ObjectStorage.Delayed))
misskeyJobQueueJobsCount.WithLabelValues("objectstorage", "paused").Set(float64(stats.ObjectStorage.Paused))
}
}
func collectPing() {
for {
time.Sleep(5 * time.Second)
var buf = bytes.NewBuffer([]byte(`{}`))
start := time.Now()
resp, err := http.Post("https://"+endpoint+"/api/ping", "application/json", buf)
if err != nil {
logrus.Warning(err)
continue
}
err = resp.Body.Close()
if err != nil {
logrus.Warning(err)
continue
}
misskeyPingResponseCode.Set(float64(resp.StatusCode))
misskeyPingResponseTime.Observe(float64(time.Since(start).Milliseconds()) / 1000)
misskeyPingResponseTimeRaw.Set(float64(time.Since(start).Milliseconds()) / 1000)
}
}
func collectStats() {
for {
time.Sleep(30 * time.Second)
stats, err := client.Meta().Stats()
if err != nil {
continue
}
misskeyNotesCount.Set(float64(stats.NotesCount))
misskeyUsersCount.Set(float64(stats.UsersCount))
misskeyOriginalNotesCount.Set(float64(stats.OriginalNotesCount))
misskeyOriginalUsersCount.Set(float64(stats.OriginalUsersCount))
}
}
func collectTimeline() {
for {
time.Sleep(30 * time.Second)
go func() {
start := time.Now()
global, err := client.Notes().Timeline().Global(timeline.GlobalRequest{Limit: 10})
if err != nil {
logrus.Warning(err)
return
}
misskeyGlobalTimelineResponseTime.Observe(float64(time.Since(start).Milliseconds()) / 1000)
misskeyGlobalTimelineResponseTimeRaw.Set(float64(time.Since(start).Milliseconds()) / 1000)
if len(global) != 0 {
misskeyGlobalTimelineLastNotePublished.Set(float64(global[0].CreatedAt.UnixMilli()))
}
}()
go func() {
start := time.Now()
global, err := client.Notes().Timeline().Local(timeline.LocalRequest{Limit: 10})
if err != nil {
logrus.Warning(err)
return
}
misskeyLocalTimelineResponseTime.Observe(float64(time.Since(start).Milliseconds()) / 1000)
misskeyLocalTimelineResponseTimeRaw.Set(float64(time.Since(start).Milliseconds()) / 1000)
if len(global) != 0 {
misskeyLocalTimelineLastNotePublished.Set(float64(global[0].CreatedAt.UnixMilli()))
}
}()
}
}