mirror of
https://github.com/idanoo/go-mastodon-stats
synced 2025-07-01 22:02:20 +00:00
Update matrix info
This commit is contained in:
parent
ecfe777efa
commit
b3c829c381
7 changed files with 103 additions and 4 deletions
|
@ -9,3 +9,7 @@ MATRIX_DB_SCHEMA=matrix
|
||||||
MASTODON_DB_SCHEMA=mastodon_production
|
MASTODON_DB_SCHEMA=mastodon_production
|
||||||
MOBILIZON_DB_SCHEMA=mobilizon_prod
|
MOBILIZON_DB_SCHEMA=mobilizon_prod
|
||||||
PEERTUBE_DB_SCHEMA=peertube_prod
|
PEERTUBE_DB_SCHEMA=peertube_prod
|
||||||
|
|
||||||
|
MATRIX_WEBHOOK_URL=""
|
||||||
|
MATRIX_WEBHOOK_API_KEY=""
|
||||||
|
MATRIX_WEBHOOK_CHANNEL=""
|
|
@ -30,7 +30,7 @@ CREATE TABLE IF NOT EXISTS statsdb (
|
||||||
metric_value INT NOT NULL,
|
metric_value INT NOT NULL,
|
||||||
PRIMARY KEY (id)
|
PRIMARY KEY (id)
|
||||||
);
|
);
|
||||||
CREATE INDEX service_lookup ON statsdb USING btree (service,metric_name, metric_time);
|
CREATE UNIQUE INDEX service_lookup ON statsdb USING btree (service,metric_name, metric_time);
|
||||||
|
|
||||||
GRANT ALL ON ALL TABLES IN SCHEMA public TO gomastodonstats;
|
GRANT ALL ON ALL TABLES IN SCHEMA public TO gomastodonstats;
|
||||||
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO gomastodonstats;
|
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO gomastodonstats;
|
||||||
|
|
|
@ -36,6 +36,19 @@ func main() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Load matrix data if exists, else set URL blank
|
||||||
|
gms.MATRIX_WEBHOOK_URL = os.Getenv("MATRIX_WEBHOOK_URL")
|
||||||
|
gms.MATRIX_WEBHOOK_API_KEY = os.Getenv("MATRIX_WEBHOOK_API_KEY")
|
||||||
|
gms.MATRIX_WEBHOOK_CHANNEL = os.Getenv("MATRIX_ACCOUNT_CHANNEL")
|
||||||
|
if gms.MATRIX_WEBHOOK_URL == "" ||
|
||||||
|
gms.MATRIX_WEBHOOK_API_KEY == "" ||
|
||||||
|
gms.MATRIX_WEBHOOK_CHANNEL == "" {
|
||||||
|
log.Println("MATRIX_WEBHOOK info incompelete. Skipping")
|
||||||
|
|
||||||
|
// Set URL empty so we can check this later on
|
||||||
|
gms.MATRIX_WEBHOOK_URL = ""
|
||||||
|
}
|
||||||
|
|
||||||
// Load schemas if set
|
// Load schemas if set
|
||||||
gms.PIXELFED_DB_SCHEMA = os.Getenv("PIXELFED_DB_SCHEMA")
|
gms.PIXELFED_DB_SCHEMA = os.Getenv("PIXELFED_DB_SCHEMA")
|
||||||
gms.MATRIX_DB_SCHEMA = os.Getenv("MATRIX_DB_SCHEMA")
|
gms.MATRIX_DB_SCHEMA = os.Getenv("MATRIX_DB_SCHEMA")
|
||||||
|
|
|
@ -10,6 +10,10 @@ var (
|
||||||
|
|
||||||
TIMEZONE string
|
TIMEZONE string
|
||||||
|
|
||||||
|
MATRIX_WEBHOOK_URL string
|
||||||
|
MATRIX_WEBHOOK_API_KEY string
|
||||||
|
MATRIX_WEBHOOK_CHANNEL string
|
||||||
|
|
||||||
// UserCount metric name
|
// UserCount metric name
|
||||||
METRICNAME_USERCOUNT = "userCount"
|
METRICNAME_USERCOUNT = "userCount"
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ func Run() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write to DB
|
// Write to DB
|
||||||
persistMetrics(metrics)
|
updatedMetrics := persistMetrics(metrics)
|
||||||
|
|
||||||
// Output example
|
sendToMatrix(updatedMetrics)
|
||||||
}
|
}
|
||||||
|
|
60
internal/gomastodonstats/matrix.go
Normal file
60
internal/gomastodonstats/matrix.go
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
package gomastodonstats
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MatrixWebhook struct {
|
||||||
|
Body string `json:"body"`
|
||||||
|
Key string `json:"key"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func sendToMatrix(m []metric) {
|
||||||
|
|
||||||
|
startOfDay := getStartofDay()
|
||||||
|
msg := fmt.Sprintf(
|
||||||
|
"*User stats for %d:*\n\n",
|
||||||
|
startOfDay,
|
||||||
|
getPrintableString(m),
|
||||||
|
)
|
||||||
|
|
||||||
|
err := sendMatrixWebhook(msg, MATRIX_WEBHOOK_CHANNEL)
|
||||||
|
if err != nil {
|
||||||
|
log.Print(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// sendMatrixWebhook - takes msg, sends to matrix
|
||||||
|
func sendMatrixWebhook(msgText string, channel string) error {
|
||||||
|
// log.Println(msgText)
|
||||||
|
data := MatrixWebhook{
|
||||||
|
Key: MATRIX_WEBHOOK_API_KEY,
|
||||||
|
}
|
||||||
|
data.Body = msgText
|
||||||
|
b, err := json.Marshal(data)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := http.NewRequest("POST", MATRIX_WEBHOOK_URL+"/"+channel, bytes.NewBuffer(b))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
|
||||||
|
client := &http.Client{}
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
log.Print(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
package gomastodonstats
|
package gomastodonstats
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
@ -13,15 +14,22 @@ type metric struct {
|
||||||
MetricValue int `json:"metric_value"`
|
MetricValue int `json:"metric_value"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func persistMetrics(metrics []metric) {
|
// persistMetrics - return any updated
|
||||||
|
func persistMetrics(metrics []metric) []metric {
|
||||||
|
var updatedMetrics []metric
|
||||||
|
|
||||||
startOfDay := getStartofDay()
|
startOfDay := getStartofDay()
|
||||||
for _, v := range metrics {
|
for _, v := range metrics {
|
||||||
v.MetricTime = startOfDay
|
v.MetricTime = startOfDay
|
||||||
err := insertValues(v)
|
err := insertValues(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
|
} else {
|
||||||
|
updatedMetrics = append(updatedMetrics, v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return updatedMetrics
|
||||||
}
|
}
|
||||||
|
|
||||||
func getUserCounts() ([]metric, error) {
|
func getUserCounts() ([]metric, error) {
|
||||||
|
@ -104,3 +112,13 @@ func getUserCounts() ([]metric, error) {
|
||||||
|
|
||||||
return metrics, nil
|
return metrics, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getPrintableString(m []metric) string {
|
||||||
|
output := ""
|
||||||
|
|
||||||
|
for _, v := range m {
|
||||||
|
output = fmt.Sprintf("%s\n%s: %d", output, v.Service, v.MetricValue)
|
||||||
|
}
|
||||||
|
|
||||||
|
return output
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue