mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-01 03:03:10 -06:00
sycnapi stats queries
This commit is contained in:
parent
9897a6e186
commit
2747c9eae2
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import (
|
|||
|
||||
"github.com/matrix-org/dendrite/internal/sqlutil"
|
||||
"github.com/matrix-org/dendrite/syncapi/storage/tables"
|
||||
"github.com/matrix-org/gomatrixserverlib"
|
||||
)
|
||||
|
||||
const countEventTypesSQL = "" +
|
||||
|
|
@ -31,19 +32,24 @@ 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
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
Loading…
Reference in a new issue