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)
|
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)
|
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)
|
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/internal/sqlutil"
|
||||||
"github.com/matrix-org/dendrite/syncapi/storage/tables"
|
"github.com/matrix-org/dendrite/syncapi/storage/tables"
|
||||||
|
"github.com/matrix-org/gomatrixserverlib"
|
||||||
)
|
)
|
||||||
|
|
||||||
const countEventTypesSQL = "" +
|
const countEventTypesSQL = "" +
|
||||||
|
|
@ -31,19 +32,24 @@ const countActiveRoomsSQL = ""+
|
||||||
"SELECT COUNT(DISTINCT room_id) FROM syncapi_output_room_events" +
|
"SELECT COUNT(DISTINCT room_id) FROM syncapi_output_room_events" +
|
||||||
" WHERE type = $1 AND id > $2"
|
" WHERE type = $1 AND id > $2"
|
||||||
|
|
||||||
|
const countTotalRoomsSQL = "" +
|
||||||
|
"SELECT COUNT(DISTINCT room_id) FROM syncapi_output_room_events"
|
||||||
|
|
||||||
type statsStatements struct {
|
type statsStatements struct {
|
||||||
serverName string
|
serverName gomatrixserverlib.ServerName
|
||||||
countTypesStmt *sql.Stmt
|
countTypesStmt *sql.Stmt
|
||||||
countActiveRoomsStmt *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{
|
s := &statsStatements{
|
||||||
serverName: serverName,
|
serverName: serverName,
|
||||||
}
|
}
|
||||||
return s, sqlutil.StatementList{
|
return s, sqlutil.StatementList{
|
||||||
{&s.countTypesStmt, countEventTypesSQL},
|
{&s.countTypesStmt, countEventTypesSQL},
|
||||||
{&s.countActiveRoomsStmt, countActiveRoomsSQL},
|
{&s.countActiveRoomsStmt, countActiveRoomsSQL},
|
||||||
|
{&s.countTotalRoomsStmt, countTotalRoomsSQL},
|
||||||
}.Prepare(db)
|
}.Prepare(db)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -103,3 +109,9 @@ func (s *statsStatements) DailyActiveRooms(ctx context.Context, txn *sql.Tx, pre
|
||||||
).Scan(&result)
|
).Scan(&result)
|
||||||
return
|
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/setup/config"
|
||||||
"github.com/matrix-org/dendrite/syncapi/storage/postgres/deltas"
|
"github.com/matrix-org/dendrite/syncapi/storage/postgres/deltas"
|
||||||
"github.com/matrix-org/dendrite/syncapi/storage/shared"
|
"github.com/matrix-org/dendrite/syncapi/storage/shared"
|
||||||
|
"github.com/matrix-org/gomatrixserverlib"
|
||||||
)
|
)
|
||||||
|
|
||||||
// SyncServerDatasource represents a sync server datasource which manages
|
// SyncServerDatasource represents a sync server datasource which manages
|
||||||
|
|
@ -33,11 +34,12 @@ type SyncServerDatasource struct {
|
||||||
db *sql.DB
|
db *sql.DB
|
||||||
writer sqlutil.Writer
|
writer sqlutil.Writer
|
||||||
sqlutil.PartitionOffsetStatements
|
sqlutil.PartitionOffsetStatements
|
||||||
|
serverName gomatrixserverlib.ServerName
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewDatabase creates a new sync server database
|
// NewDatabase creates a new sync server database
|
||||||
func NewDatabase(dbProperties *config.DatabaseOptions) (*SyncServerDatasource, error) {
|
func NewDatabase(dbProperties *config.DatabaseOptions, serverName gomatrixserverlib.ServerName) (*SyncServerDatasource, error) {
|
||||||
var d SyncServerDatasource
|
d := SyncServerDatasource{serverName: serverName}
|
||||||
var err error
|
var err error
|
||||||
if d.db, err = sqlutil.Open(dbProperties); err != nil {
|
if d.db, err = sqlutil.Open(dbProperties); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
@ -90,6 +92,10 @@ func NewDatabase(dbProperties *config.DatabaseOptions) (*SyncServerDatasource, e
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
stats, err := PrepareStats(d.db, d.serverName)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
m := sqlutil.NewMigrations()
|
m := sqlutil.NewMigrations()
|
||||||
deltas.LoadFixSequences(m)
|
deltas.LoadFixSequences(m)
|
||||||
deltas.LoadRemoveSendToDeviceSentColumn(m)
|
deltas.LoadRemoveSendToDeviceSentColumn(m)
|
||||||
|
|
@ -110,6 +116,7 @@ func NewDatabase(dbProperties *config.DatabaseOptions) (*SyncServerDatasource, e
|
||||||
SendToDevice: sendToDevice,
|
SendToDevice: sendToDevice,
|
||||||
Receipts: receipts,
|
Receipts: receipts,
|
||||||
Memberships: memberships,
|
Memberships: memberships,
|
||||||
|
Stats: stats,
|
||||||
}
|
}
|
||||||
return &d, nil
|
return &d, nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@ type Database struct {
|
||||||
Filter tables.Filter
|
Filter tables.Filter
|
||||||
Receipts tables.Receipts
|
Receipts tables.Receipts
|
||||||
Memberships tables.Memberships
|
Memberships tables.Memberships
|
||||||
|
Stats tables.Stats
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Database) readOnlySnapshot(ctx context.Context) (*sql.Tx, error) {
|
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) {
|
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)
|
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/setup/config"
|
||||||
"github.com/matrix-org/dendrite/syncapi/storage/shared"
|
"github.com/matrix-org/dendrite/syncapi/storage/shared"
|
||||||
"github.com/matrix-org/dendrite/syncapi/storage/sqlite3/deltas"
|
"github.com/matrix-org/dendrite/syncapi/storage/sqlite3/deltas"
|
||||||
|
"github.com/matrix-org/gomatrixserverlib"
|
||||||
)
|
)
|
||||||
|
|
||||||
// SyncServerDatasource represents a sync server datasource which manages
|
// SyncServerDatasource represents a sync server datasource which manages
|
||||||
|
|
@ -32,12 +33,13 @@ type SyncServerDatasource struct {
|
||||||
writer sqlutil.Writer
|
writer sqlutil.Writer
|
||||||
sqlutil.PartitionOffsetStatements
|
sqlutil.PartitionOffsetStatements
|
||||||
streamID streamIDStatements
|
streamID streamIDStatements
|
||||||
|
serverName gomatrixserverlib.ServerName
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewDatabase creates a new sync server database
|
// NewDatabase creates a new sync server database
|
||||||
// nolint: gocyclo
|
// nolint: gocyclo
|
||||||
func NewDatabase(dbProperties *config.DatabaseOptions) (*SyncServerDatasource, error) {
|
func NewDatabase(dbProperties *config.DatabaseOptions, serverName gomatrixserverlib.ServerName) (*SyncServerDatasource, error) {
|
||||||
var d SyncServerDatasource
|
d := SyncServerDatasource{serverName: serverName}
|
||||||
var err error
|
var err error
|
||||||
if d.db, err = sqlutil.Open(dbProperties); err != nil {
|
if d.db, err = sqlutil.Open(dbProperties); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
@ -100,6 +102,12 @@ func (d *SyncServerDatasource) prepare(dbProperties *config.DatabaseOptions) (er
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
stats, err := PrepareStats(d.db, d.serverName)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
m := sqlutil.NewMigrations()
|
m := sqlutil.NewMigrations()
|
||||||
deltas.LoadFixSequences(m)
|
deltas.LoadFixSequences(m)
|
||||||
deltas.LoadRemoveSendToDeviceSentColumn(m)
|
deltas.LoadRemoveSendToDeviceSentColumn(m)
|
||||||
|
|
@ -120,6 +128,7 @@ func (d *SyncServerDatasource) prepare(dbProperties *config.DatabaseOptions) (er
|
||||||
SendToDevice: sendToDevice,
|
SendToDevice: sendToDevice,
|
||||||
Receipts: receipts,
|
Receipts: receipts,
|
||||||
Memberships: memberships,
|
Memberships: memberships,
|
||||||
|
Stats: stats,
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,15 +23,16 @@ import (
|
||||||
"github.com/matrix-org/dendrite/setup/config"
|
"github.com/matrix-org/dendrite/setup/config"
|
||||||
"github.com/matrix-org/dendrite/syncapi/storage/postgres"
|
"github.com/matrix-org/dendrite/syncapi/storage/postgres"
|
||||||
"github.com/matrix-org/dendrite/syncapi/storage/sqlite3"
|
"github.com/matrix-org/dendrite/syncapi/storage/sqlite3"
|
||||||
|
"github.com/matrix-org/gomatrixserverlib"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewSyncServerDatasource opens a database connection.
|
// NewSyncServerDatasource opens a database connection.
|
||||||
func NewSyncServerDatasource(dbProperties *config.DatabaseOptions) (Database, error) {
|
func NewSyncServerDatasource(dbProperties *config.DatabaseOptions, serverName gomatrixserverlib.ServerName) (Database, error) {
|
||||||
switch {
|
switch {
|
||||||
case dbProperties.ConnectionString.IsSQLite():
|
case dbProperties.ConnectionString.IsSQLite():
|
||||||
return sqlite3.NewDatabase(dbProperties)
|
return sqlite3.NewDatabase(dbProperties, serverName)
|
||||||
case dbProperties.ConnectionString.IsPostgres():
|
case dbProperties.ConnectionString.IsPostgres():
|
||||||
return postgres.NewDatabase(dbProperties)
|
return postgres.NewDatabase(dbProperties, serverName)
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("unexpected database type")
|
return nil, fmt.Errorf("unexpected database type")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,13 +19,14 @@ import (
|
||||||
|
|
||||||
"github.com/matrix-org/dendrite/setup/config"
|
"github.com/matrix-org/dendrite/setup/config"
|
||||||
"github.com/matrix-org/dendrite/syncapi/storage/sqlite3"
|
"github.com/matrix-org/dendrite/syncapi/storage/sqlite3"
|
||||||
|
"github.com/matrix-org/gomatrixserverlib"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewPublicRoomsServerDatabase opens a database connection.
|
// NewPublicRoomsServerDatabase opens a database connection.
|
||||||
func NewSyncServerDatasource(dbProperties *config.DatabaseOptions) (Database, error) {
|
func NewSyncServerDatasource(dbProperties *config.DatabaseOptions, serverName gomatrixserverlib.ServerName) (Database, error) {
|
||||||
switch {
|
switch {
|
||||||
case dbProperties.ConnectionString.IsSQLite():
|
case dbProperties.ConnectionString.IsSQLite():
|
||||||
return sqlite3.NewDatabase(dbProperties)
|
return sqlite3.NewDatabase(dbProperties, serverName)
|
||||||
case dbProperties.ConnectionString.IsPostgres():
|
case dbProperties.ConnectionString.IsPostgres():
|
||||||
return nil, fmt.Errorf("can't use Postgres implementation")
|
return nil, fmt.Errorf("can't use Postgres implementation")
|
||||||
default:
|
default:
|
||||||
|
|
|
||||||
|
|
@ -173,4 +173,11 @@ type Memberships interface {
|
||||||
}
|
}
|
||||||
|
|
||||||
type Stats 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