sycnapi stats queries

This commit is contained in:
Till Faelligen 2022-03-02 16:13:46 +01:00
parent 9897a6e186
commit 2747c9eae2
8 changed files with 85 additions and 17 deletions

View file

@ -141,4 +141,12 @@ type Database interface {
SelectContextEvent(ctx context.Context, roomID, eventID string) (int, gomatrixserverlib.HeaderedEvent, error)
SelectContextBeforeEvent(ctx context.Context, id int, roomID string, filter *gomatrixserverlib.RoomEventFilter) ([]*gomatrixserverlib.HeaderedEvent, error)
SelectContextAfterEvent(ctx context.Context, id int, roomID string, filter *gomatrixserverlib.RoomEventFilter) (int, []*gomatrixserverlib.HeaderedEvent, error)
DailyE2EEMessages(ctx context.Context, prevID int64) (result int64, err error)
DailySentE2EEMessages(ctx context.Context, prevID int64) (result int64, err error)
DailyMessages(ctx context.Context, prevID int64) (result int64, err error)
DailySentMessages(ctx context.Context, prevID int64) (result int64, err error)
DailyActiveE2EERooms(ctx context.Context, prevID int64) (result int64, err error)
DailyActiveRooms(ctx context.Context, prevID int64) (result int64, err error)
TotalRooms(ctx context.Context) (result int64, err error)
}

View file

@ -21,29 +21,35 @@ import (
"github.com/matrix-org/dendrite/internal/sqlutil"
"github.com/matrix-org/dendrite/syncapi/storage/tables"
"github.com/matrix-org/gomatrixserverlib"
)
const countEventTypesSQL = ""+
"SELECT COUNT(*) FROM syncapi_output_room_events"+
const countEventTypesSQL = "" +
"SELECT COUNT(*) FROM syncapi_output_room_events" +
" WHERE type = $1 AND id > $2 AND sender like $3"
const countActiveRoomsSQL = ""+
"SELECT COUNT(DISTINCT room_id) FROM syncapi_output_room_events"+
const countActiveRoomsSQL = "" +
"SELECT COUNT(DISTINCT room_id) FROM syncapi_output_room_events" +
" WHERE type = $1 AND id > $2"
const countTotalRoomsSQL = "" +
"SELECT COUNT(DISTINCT room_id) FROM syncapi_output_room_events"
type statsStatements struct {
serverName string
serverName gomatrixserverlib.ServerName
countTypesStmt *sql.Stmt
countActiveRoomsStmt *sql.Stmt
countTotalRoomsStmt *sql.Stmt
}
func PrepareStats(db *sql.DB, serverName string) (tables.Stats, error) {
func PrepareStats(db *sql.DB, serverName gomatrixserverlib.ServerName) (tables.Stats, error) {
s := &statsStatements{
serverName: serverName,
}
return s, sqlutil.StatementList{
{&s.countTypesStmt, countEventTypesSQL},
{&s.countActiveRoomsStmt, countActiveRoomsSQL},
{&s.countTotalRoomsStmt, countTotalRoomsSQL},
}.Prepare(db)
}
@ -103,3 +109,9 @@ func (s *statsStatements) DailyActiveRooms(ctx context.Context, txn *sql.Tx, pre
).Scan(&result)
return
}
func (s *statsStatements) TotalRooms(ctx context.Context, txn *sql.Tx) (result int64, err error) {
stmt := sqlutil.TxStmt(txn, s.countTotalRoomsStmt)
err = stmt.QueryRowContext(ctx).Scan(&result)
return
}

View file

@ -24,6 +24,7 @@ import (
"github.com/matrix-org/dendrite/setup/config"
"github.com/matrix-org/dendrite/syncapi/storage/postgres/deltas"
"github.com/matrix-org/dendrite/syncapi/storage/shared"
"github.com/matrix-org/gomatrixserverlib"
)
// SyncServerDatasource represents a sync server datasource which manages
@ -33,11 +34,12 @@ type SyncServerDatasource struct {
db *sql.DB
writer sqlutil.Writer
sqlutil.PartitionOffsetStatements
serverName gomatrixserverlib.ServerName
}
// NewDatabase creates a new sync server database
func NewDatabase(dbProperties *config.DatabaseOptions) (*SyncServerDatasource, error) {
var d SyncServerDatasource
func NewDatabase(dbProperties *config.DatabaseOptions, serverName gomatrixserverlib.ServerName) (*SyncServerDatasource, error) {
d := SyncServerDatasource{serverName: serverName}
var err error
if d.db, err = sqlutil.Open(dbProperties); err != nil {
return nil, err
@ -90,6 +92,10 @@ func NewDatabase(dbProperties *config.DatabaseOptions) (*SyncServerDatasource, e
if err != nil {
return nil, err
}
stats, err := PrepareStats(d.db, d.serverName)
if err != nil {
return nil, err
}
m := sqlutil.NewMigrations()
deltas.LoadFixSequences(m)
deltas.LoadRemoveSendToDeviceSentColumn(m)
@ -110,6 +116,7 @@ func NewDatabase(dbProperties *config.DatabaseOptions) (*SyncServerDatasource, e
SendToDevice: sendToDevice,
Receipts: receipts,
Memberships: memberships,
Stats: stats,
}
return &d, nil
}

View file

@ -48,6 +48,7 @@ type Database struct {
Filter tables.Filter
Receipts tables.Receipts
Memberships tables.Memberships
Stats tables.Stats
}
func (d *Database) readOnlySnapshot(ctx context.Context) (*sql.Tx, error) {
@ -966,3 +967,25 @@ func (s *Database) SelectContextBeforeEvent(ctx context.Context, id int, roomID
func (s *Database) SelectContextAfterEvent(ctx context.Context, id int, roomID string, filter *gomatrixserverlib.RoomEventFilter) (int, []*gomatrixserverlib.HeaderedEvent, error) {
return s.OutputEvents.SelectContextAfterEvent(ctx, nil, id, roomID, filter)
}
func (s *Database) DailyE2EEMessages(ctx context.Context, prevID int64) (result int64, err error) {
return s.Stats.DailyE2EEMessages(ctx, nil, prevID)
}
func (s *Database) DailySentE2EEMessages(ctx context.Context, prevID int64) (result int64, err error) {
return s.Stats.DailySentE2EEMessages(ctx, nil, prevID)
}
func (s *Database) DailyMessages(ctx context.Context, prevID int64) (result int64, err error) {
return s.Stats.DailyMessages(ctx, nil, prevID)
}
func (s *Database) DailySentMessages(ctx context.Context, prevID int64) (result int64, err error) {
return s.Stats.DailySentMessages(ctx, nil, prevID)
}
func (s *Database) DailyActiveE2EERooms(ctx context.Context, prevID int64) (result int64, err error) {
return s.Stats.DailyActiveE2EERooms(ctx, nil, prevID)
}
func (s *Database) DailyActiveRooms(ctx context.Context, prevID int64) (result int64, err error) {
return s.Stats.DailyActiveRooms(ctx, nil, prevID)
}
func (s *Database) TotalRooms(ctx context.Context) (result int64, err error) {
return s.Stats.TotalRooms(ctx, nil)
}

View file

@ -22,6 +22,7 @@ import (
"github.com/matrix-org/dendrite/setup/config"
"github.com/matrix-org/dendrite/syncapi/storage/shared"
"github.com/matrix-org/dendrite/syncapi/storage/sqlite3/deltas"
"github.com/matrix-org/gomatrixserverlib"
)
// SyncServerDatasource represents a sync server datasource which manages
@ -32,12 +33,13 @@ type SyncServerDatasource struct {
writer sqlutil.Writer
sqlutil.PartitionOffsetStatements
streamID streamIDStatements
serverName gomatrixserverlib.ServerName
}
// NewDatabase creates a new sync server database
// nolint: gocyclo
func NewDatabase(dbProperties *config.DatabaseOptions) (*SyncServerDatasource, error) {
var d SyncServerDatasource
func NewDatabase(dbProperties *config.DatabaseOptions, serverName gomatrixserverlib.ServerName) (*SyncServerDatasource, error) {
d := SyncServerDatasource{serverName: serverName}
var err error
if d.db, err = sqlutil.Open(dbProperties); err != nil {
return nil, err
@ -100,6 +102,12 @@ func (d *SyncServerDatasource) prepare(dbProperties *config.DatabaseOptions) (er
if err != nil {
return err
}
stats, err := PrepareStats(d.db, d.serverName)
if err != nil {
return err
}
m := sqlutil.NewMigrations()
deltas.LoadFixSequences(m)
deltas.LoadRemoveSendToDeviceSentColumn(m)
@ -120,6 +128,7 @@ func (d *SyncServerDatasource) prepare(dbProperties *config.DatabaseOptions) (er
SendToDevice: sendToDevice,
Receipts: receipts,
Memberships: memberships,
Stats: stats,
}
return nil
}

View file

@ -23,15 +23,16 @@ import (
"github.com/matrix-org/dendrite/setup/config"
"github.com/matrix-org/dendrite/syncapi/storage/postgres"
"github.com/matrix-org/dendrite/syncapi/storage/sqlite3"
"github.com/matrix-org/gomatrixserverlib"
)
// NewSyncServerDatasource opens a database connection.
func NewSyncServerDatasource(dbProperties *config.DatabaseOptions) (Database, error) {
func NewSyncServerDatasource(dbProperties *config.DatabaseOptions, serverName gomatrixserverlib.ServerName) (Database, error) {
switch {
case dbProperties.ConnectionString.IsSQLite():
return sqlite3.NewDatabase(dbProperties)
return sqlite3.NewDatabase(dbProperties, serverName)
case dbProperties.ConnectionString.IsPostgres():
return postgres.NewDatabase(dbProperties)
return postgres.NewDatabase(dbProperties, serverName)
default:
return nil, fmt.Errorf("unexpected database type")
}

View file

@ -19,13 +19,14 @@ import (
"github.com/matrix-org/dendrite/setup/config"
"github.com/matrix-org/dendrite/syncapi/storage/sqlite3"
"github.com/matrix-org/gomatrixserverlib"
)
// NewPublicRoomsServerDatabase opens a database connection.
func NewSyncServerDatasource(dbProperties *config.DatabaseOptions) (Database, error) {
func NewSyncServerDatasource(dbProperties *config.DatabaseOptions, serverName gomatrixserverlib.ServerName) (Database, error) {
switch {
case dbProperties.ConnectionString.IsSQLite():
return sqlite3.NewDatabase(dbProperties)
return sqlite3.NewDatabase(dbProperties, serverName)
case dbProperties.ConnectionString.IsPostgres():
return nil, fmt.Errorf("can't use Postgres implementation")
default:

View file

@ -173,4 +173,11 @@ type Memberships interface {
}
type Stats interface {
DailyE2EEMessages(ctx context.Context, txn *sql.Tx, prevID int64) (result int64, err error)
DailySentE2EEMessages(ctx context.Context, txn *sql.Tx, prevID int64) (result int64, err error)
DailyMessages(ctx context.Context, txn *sql.Tx, prevID int64) (result int64, err error)
DailySentMessages(ctx context.Context, txn *sql.Tx, prevID int64) (result int64, err error)
DailyActiveE2EERooms(ctx context.Context, txn *sql.Tx, prevID int64) (result int64, err error)
DailyActiveRooms(ctx context.Context, txn *sql.Tx, prevID int64) (result int64, err error)
TotalRooms(ctx context.Context, txn *sql.Tx) (result int64, err error)
}