Update matrix info

This commit is contained in:
idanoo 2023-01-30 11:26:10 +13:00
parent ecfe777efa
commit b3c829c381
Signed by: idanoo
GPG key ID: 387387CDBC02F132
7 changed files with 103 additions and 4 deletions

View file

@ -9,3 +9,7 @@ MATRIX_DB_SCHEMA=matrix
MASTODON_DB_SCHEMA=mastodon_production
MOBILIZON_DB_SCHEMA=mobilizon_prod
PEERTUBE_DB_SCHEMA=peertube_prod
MATRIX_WEBHOOK_URL=""
MATRIX_WEBHOOK_API_KEY=""
MATRIX_WEBHOOK_CHANNEL=""

View file

@ -30,7 +30,7 @@ CREATE TABLE IF NOT EXISTS statsdb (
metric_value INT NOT NULL,
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 USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO gomastodonstats;

View file

@ -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
gms.PIXELFED_DB_SCHEMA = os.Getenv("PIXELFED_DB_SCHEMA")
gms.MATRIX_DB_SCHEMA = os.Getenv("MATRIX_DB_SCHEMA")

View file

@ -10,6 +10,10 @@ var (
TIMEZONE string
MATRIX_WEBHOOK_URL string
MATRIX_WEBHOOK_API_KEY string
MATRIX_WEBHOOK_CHANNEL string
// UserCount metric name
METRICNAME_USERCOUNT = "userCount"

View file

@ -12,7 +12,7 @@ func Run() {
}
// Write to DB
persistMetrics(metrics)
updatedMetrics := persistMetrics(metrics)
// Output example
sendToMatrix(updatedMetrics)
}

View 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
}

View file

@ -1,6 +1,7 @@
package gomastodonstats
import (
"fmt"
"log"
"time"
)
@ -13,15 +14,22 @@ type metric struct {
MetricValue int `json:"metric_value"`
}
func persistMetrics(metrics []metric) {
// persistMetrics - return any updated
func persistMetrics(metrics []metric) []metric {
var updatedMetrics []metric
startOfDay := getStartofDay()
for _, v := range metrics {
v.MetricTime = startOfDay
err := insertValues(v)
if err != nil {
log.Println(err)
} else {
updatedMetrics = append(updatedMetrics, v)
}
}
return updatedMetrics
}
func getUserCounts() ([]metric, error) {
@ -104,3 +112,13 @@ func getUserCounts() ([]metric, error) {
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
}