package main
import (
"fmt"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/sirupsen/logrus"
"github.com/yitsushi/go-misskey"
"net/http"
"os"
)
//TIP
To run your code, right-click the code and select Run.
Alternatively, click
// the icon in the gutter and select the Run menu item from here.
//var now = time.Now()
var client *misskey.Client
var endpoint = os.Getenv("MISSKEY_ENDPOINT")
var apiKey = os.Getenv("MISSKEY_API_TOKEN")
var (
misskeyJobQueueJobsCount = prometheus.NewGaugeVec(
prometheus.GaugeOpts{
Name: "misskey_jobqueue_jobs",
Help: "misskey job queue jobs",
},
[]string{"type", "status"},
)
misskeyNotesCount = prometheus.NewGauge(
prometheus.GaugeOpts{
Name: "misskey_notes_count",
Help: "Notes Coount",
},
)
misskeyUsersCount = prometheus.NewGauge(
prometheus.GaugeOpts{
Name: "misskey_users_count",
Help: "Users Coount",
},
)
misskeyOriginalNotesCount = prometheus.NewGauge(
prometheus.GaugeOpts{
Name: "misskey_original_notes_count",
Help: "Original Notes Coount",
},
)
misskeyOriginalUsersCount = prometheus.NewGauge(
prometheus.GaugeOpts{
Name: "misskey_original_users_count",
Help: "Original Users Coount",
},
)
misskeyPingResponseTimeRaw = prometheus.NewGauge(
prometheus.GaugeOpts{
Name: "misskey_ping_response_time_raw",
Help: "Response Time for misskey Ping",
},
)
misskeyPingResponseTime = prometheus.NewHistogram(
prometheus.HistogramOpts{
Name: "misskey_ping_response_time",
Help: "Response Time for misskey Ping",
Buckets: prometheus.DefBuckets,
},
)
misskeyPingResponseCode = prometheus.NewGauge(
prometheus.GaugeOpts{
Name: "misskey_ping_response_code",
Help: "Response Code for misskey Ping",
},
)
misskeyGlobalTimelineResponseTime = prometheus.NewHistogram(
prometheus.HistogramOpts{
Name: "misskey_global_timeline_response_time",
Help: "Response Time for misskey Global Timeline",
})
misskeyLocalTimelineResponseTime = prometheus.NewHistogram(
prometheus.HistogramOpts{
Name: "misskey_local_timeline_response_time",
Help: "Response Time for misskey Local Timeline",
})
misskeyGlobalTimelineLastNotePublished = prometheus.NewGauge(
prometheus.GaugeOpts{
Name: "misskey_global_timeline_last_note_published",
Help: "Last Note Published on Global Timeline",
})
misskeyLocalTimelineLastNotePublished = prometheus.NewGauge(
prometheus.GaugeOpts{
Name: "misskey_local_timeline_last_note_published",
Help: "Last Note Published on Local Timeline",
})
misskeyGlobalTimelineResponseTimeRaw = prometheus.NewGauge(
prometheus.GaugeOpts{
Name: "misskey_global_timeline_response_time_raw",
Help: "Response Time for misskey Global Timeline",
})
misskeyLocalTimelineResponseTimeRaw = prometheus.NewGauge(
prometheus.GaugeOpts{
Name: "misskey_local_timeline_response_time_raw",
Help: "Response Time for misskey Local Timeline",
})
)
func main() {
options, err := misskey.NewClientWithOptions(
misskey.WithAPIToken(apiKey),
misskey.WithBaseURL("https", endpoint, ""),
misskey.WithLogLevel(logrus.DebugLevel),
)
client = options
if err != nil {
return
}
stats, err := client.Admin().Queue().Stats()
if err != nil {
return
}
fmt.Println(stats)
prometheus.MustRegister(misskeyJobQueueJobsCount)
prometheus.MustRegister(misskeyNotesCount)
prometheus.MustRegister(misskeyUsersCount)
prometheus.MustRegister(misskeyOriginalNotesCount)
prometheus.MustRegister(misskeyOriginalUsersCount)
prometheus.MustRegister(misskeyPingResponseTime)
prometheus.MustRegister(misskeyPingResponseTimeRaw)
prometheus.MustRegister(misskeyPingResponseCode)
prometheus.MustRegister(misskeyGlobalTimelineResponseTime)
prometheus.MustRegister(misskeyLocalTimelineResponseTime)
prometheus.MustRegister(misskeyGlobalTimelineLastNotePublished)
prometheus.MustRegister(misskeyLocalTimelineLastNotePublished)
prometheus.MustRegister(misskeyGlobalTimelineResponseTimeRaw)
prometheus.MustRegister(misskeyLocalTimelineResponseTimeRaw)
handler := promhttp.Handler()
server := http.Server{
Addr: ":8080",
Handler: handler,
}
go func() {
go collectJobqueue()
go collectPing()
go collectStats()
go collectTimeline()
}()
logrus.Error(server.ListenAndServe())
}