Split out more components

This commit is contained in:
Kegan Dougal 2020-06-08 14:28:28 +01:00
parent 3a150ce35f
commit c974e56fed
11 changed files with 52 additions and 47 deletions

View file

@ -21,6 +21,7 @@ import (
"sync" "sync"
"time" "time"
"github.com/gorilla/mux"
appserviceAPI "github.com/matrix-org/dendrite/appservice/api" appserviceAPI "github.com/matrix-org/dendrite/appservice/api"
"github.com/matrix-org/dendrite/appservice/consumers" "github.com/matrix-org/dendrite/appservice/consumers"
"github.com/matrix-org/dendrite/appservice/inthttp" "github.com/matrix-org/dendrite/appservice/inthttp"
@ -40,15 +41,28 @@ import (
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
) )
// SetupAppServiceAPIComponent sets up and registers HTTP handlers for the AppServices // AddPublicRoutes registers HTTP handlers for CS API calls
// component. func AddPublicRoutes(router *mux.Router, cfg *config.Dendrite, rsAPI roomserverAPI.RoomserverInternalAPI,
func SetupAppServiceAPIComponent( accountsDB accounts.Database, federation *gomatrixserverlib.FederationClient, txnCache *transactions.Cache) {
routing.Setup(
router, cfg, rsAPI,
accountsDB, federation, txnCache,
)
}
// AddInternalRoutes registers HTTP handlers for internal API calls
func AddInternalRoutes(router *mux.Router, queryAPI appserviceAPI.AppServiceQueryAPI) {
inthttp.AddRoutes(queryAPI, router)
}
// NewInternalAPI returns a concerete implementation of the internal API. Callers
// can call functions directly on the returned API or via an HTTP interface using AddInternalRoutes.
func NewInternalAPI(
base *basecomponent.BaseDendrite, base *basecomponent.BaseDendrite,
accountsDB accounts.Database, accountsDB accounts.Database,
deviceDB devices.Database, deviceDB devices.Database,
federation *gomatrixserverlib.FederationClient,
rsAPI roomserverAPI.RoomserverInternalAPI, rsAPI roomserverAPI.RoomserverInternalAPI,
transactionsCache *transactions.Cache,
) appserviceAPI.AppServiceQueryAPI { ) appserviceAPI.AppServiceQueryAPI {
// Create a connection to the appservice postgres DB // Create a connection to the appservice postgres DB
appserviceDB, err := storage.NewDatabase(string(base.Cfg.Database.AppService), base.Cfg.DbProperties()) appserviceDB, err := storage.NewDatabase(string(base.Cfg.Database.AppService), base.Cfg.DbProperties())
@ -85,8 +99,6 @@ func SetupAppServiceAPIComponent(
Cfg: base.Cfg, Cfg: base.Cfg,
} }
inthttp.AddRoutes(appserviceQueryAPI, base.InternalAPIMux)
consumer := consumers.NewOutputRoomEventConsumer( consumer := consumers.NewOutputRoomEventConsumer(
base.Cfg, base.KafkaConsumer, accountsDB, appserviceDB, base.Cfg, base.KafkaConsumer, accountsDB, appserviceDB,
rsAPI, workerStates, rsAPI, workerStates,
@ -99,13 +111,6 @@ func SetupAppServiceAPIComponent(
if err := workers.SetupTransactionWorkers(appserviceDB, workerStates); err != nil { if err := workers.SetupTransactionWorkers(appserviceDB, workerStates); err != nil {
logrus.WithError(err).Panicf("failed to start app service transaction workers") logrus.WithError(err).Panicf("failed to start app service transaction workers")
} }
// Set up HTTP Endpoints
routing.Setup(
base.PublicAPIMux, base.Cfg, rsAPI,
accountsDB, federation, transactionsCache,
)
return appserviceQueryAPI return appserviceQueryAPI
} }

View file

@ -15,6 +15,7 @@
package clientapi package clientapi
import ( import (
"github.com/gorilla/mux"
appserviceAPI "github.com/matrix-org/dendrite/appservice/api" appserviceAPI "github.com/matrix-org/dendrite/appservice/api"
"github.com/matrix-org/dendrite/clientapi/auth/storage/accounts" "github.com/matrix-org/dendrite/clientapi/auth/storage/accounts"
"github.com/matrix-org/dendrite/clientapi/auth/storage/devices" "github.com/matrix-org/dendrite/clientapi/auth/storage/devices"
@ -30,9 +31,9 @@ import (
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
) )
// SetupClientAPIComponent sets up and registers HTTP handlers for the ClientAPI // AddPublicRoutes sets up and registers HTTP handlers for the ClientAPI component.
// component. func AddPublicRoutes(
func SetupClientAPIComponent( router *mux.Router,
base *basecomponent.BaseDendrite, base *basecomponent.BaseDendrite,
deviceDB devices.Database, deviceDB devices.Database,
accountsDB accounts.Database, accountsDB accounts.Database,
@ -65,7 +66,7 @@ func SetupClientAPIComponent(
} }
routing.Setup( routing.Setup(
base.PublicAPIMux, base.Cfg, roomserverProducer, rsAPI, asAPI, router, base.Cfg, roomserverProducer, rsAPI, asAPI,
accountsDB, deviceDB, federation, *keyRing, userUpdateProducer, accountsDB, deviceDB, federation, *keyRing, userUpdateProducer,
syncProducer, eduProducer, transactionsCache, fsAPI, syncProducer, eduProducer, transactionsCache, fsAPI,
) )

View file

@ -31,9 +31,9 @@ func main() {
rsAPI := base.RoomserverHTTPClient() rsAPI := base.RoomserverHTTPClient()
cache := transactions.New() cache := transactions.New()
appservice.SetupAppServiceAPIComponent( intAPI := appservice.NewInternalAPI(base, accountDB, deviceDB, rsAPI)
base, accountDB, deviceDB, federation, rsAPI, cache, appservice.AddInternalRoutes(base.InternalAPIMux, intAPI)
) appservice.AddPublicRoutes(base.PublicAPIMux, base.Cfg, rsAPI, accountDB, federation, cache)
base.SetupAndServeHTTP(string(base.Cfg.Bind.AppServiceAPI), string(base.Cfg.Listen.AppServiceAPI)) base.SetupAndServeHTTP(string(base.Cfg.Bind.AppServiceAPI), string(base.Cfg.Listen.AppServiceAPI))

View file

@ -38,8 +38,8 @@ func main() {
fsAPI := base.FederationSenderHTTPClient() fsAPI := base.FederationSenderHTTPClient()
eduInputAPI := base.EDUServerClient() eduInputAPI := base.EDUServerClient()
clientapi.SetupClientAPIComponent( clientapi.AddPublicRoutes(
base, deviceDB, accountDB, federation, keyRing, base.PublicAPIMux, base, deviceDB, accountDB, federation, keyRing,
rsAPI, eduInputAPI, asQuery, transactions.New(), fsAPI, rsAPI, eduInputAPI, asQuery, transactions.New(), fsAPI,
) )

View file

@ -150,21 +150,20 @@ func main() {
eduInputAPI := eduserver.NewInternalAPI( eduInputAPI := eduserver.NewInternalAPI(
&base.Base, cache.New(), deviceDB, &base.Base, cache.New(), deviceDB,
) )
asAPI := appservice.SetupAppServiceAPIComponent( asAPI := appservice.NewInternalAPI(&base.Base, accountDB, deviceDB, rsAPI)
&base.Base, accountDB, deviceDB, federation, rsAPI, transactions.New(), appservice.AddPublicRoutes(base.Base.PublicAPIMux, &cfg, rsAPI, accountDB, federation, transactions.New())
)
fsAPI := federationsender.SetupFederationSenderComponent( fsAPI := federationsender.SetupFederationSenderComponent(
&base.Base, federation, rsAPI, keyRing, &base.Base, federation, rsAPI, keyRing,
) )
rsAPI.SetFederationSenderAPI(fsAPI) rsAPI.SetFederationSenderAPI(fsAPI)
clientapi.SetupClientAPIComponent( clientapi.AddPublicRoutes(
&base.Base, deviceDB, accountDB, base.Base.PublicAPIMux, &base.Base, deviceDB, accountDB,
federation, keyRing, rsAPI, federation, keyRing, rsAPI,
eduInputAPI, asAPI, transactions.New(), fsAPI, eduInputAPI, asAPI, transactions.New(), fsAPI,
) )
eduProducer := producers.NewEDUServerProducer(eduInputAPI) eduProducer := producers.NewEDUServerProducer(eduInputAPI)
federationapi.AddRoutes(&base.Base, accountDB, deviceDB, federation, keyRing, rsAPI, asAPI, fsAPI, eduProducer) federationapi.AddPublicRoutes(&base.Base, accountDB, deviceDB, federation, keyRing, rsAPI, asAPI, fsAPI, eduProducer)
mediaapi.SetupMediaAPIComponent(&base.Base, deviceDB) mediaapi.SetupMediaAPIComponent(&base.Base, deviceDB)
publicRoomsDB, err := storage.NewPublicRoomsServerDatabaseWithPubSub(string(base.Base.Cfg.Database.PublicRoomsAPI), base.LibP2PPubsub, cfg.Matrix.ServerName) publicRoomsDB, err := storage.NewPublicRoomsServerDatabaseWithPubSub(string(base.Base.Cfg.Database.PublicRoomsAPI), base.LibP2PPubsub, cfg.Matrix.ServerName)
if err != nil { if err != nil {

View file

@ -32,7 +32,7 @@ func main() {
deviceDB := base.CreateDeviceDB() deviceDB := base.CreateDeviceDB()
intAPI := eduserver.NewInternalAPI(base, cache.New(), deviceDB) intAPI := eduserver.NewInternalAPI(base, cache.New(), deviceDB)
eduserver.AddRoutes(base.InternalAPIMux, intAPI) eduserver.AddInternalRoutes(base.InternalAPIMux, intAPI)
base.SetupAndServeHTTP(string(base.Cfg.Bind.EDUServer), string(base.Cfg.Listen.EDUServer)) base.SetupAndServeHTTP(string(base.Cfg.Bind.EDUServer), string(base.Cfg.Listen.EDUServer))

View file

@ -36,7 +36,7 @@ func main() {
// TODO: this isn't a producer // TODO: this isn't a producer
eduProducer := producers.NewEDUServerProducer(base.EDUServerClient()) eduProducer := producers.NewEDUServerProducer(base.EDUServerClient())
federationapi.AddRoutes( federationapi.AddPublicRoutes(
base, accountDB, deviceDB, federation, keyRing, base, accountDB, deviceDB, federation, keyRing,
rsAPI, asAPI, fsAPI, eduProducer, rsAPI, asAPI, fsAPI, eduProducer,
) )

View file

@ -90,14 +90,14 @@ func main() {
base, cache.New(), deviceDB, base, cache.New(), deviceDB,
) )
if base.UseHTTPAPIs { if base.UseHTTPAPIs {
eduserver.AddRoutes(base.InternalAPIMux, eduInputAPI) eduserver.AddInternalRoutes(base.InternalAPIMux, eduInputAPI)
eduInputAPI = base.EDUServerClient() eduInputAPI = base.EDUServerClient()
} }
asAPI := appservice.SetupAppServiceAPIComponent( asAPI := appservice.NewInternalAPI(base, accountDB, deviceDB, rsAPI)
base, accountDB, deviceDB, federation, rsAPI, transactions.New(), appservice.AddPublicRoutes(base.PublicAPIMux, cfg, rsAPI, accountDB, federation, transactions.New())
)
if base.UseHTTPAPIs { if base.UseHTTPAPIs {
appservice.AddInternalRoutes(base.InternalAPIMux, asAPI)
asAPI = base.AppserviceHTTPClient() asAPI = base.AppserviceHTTPClient()
} }
@ -109,8 +109,8 @@ func main() {
} }
rsComponent.SetFederationSenderAPI(fsAPI) rsComponent.SetFederationSenderAPI(fsAPI)
clientapi.SetupClientAPIComponent( clientapi.AddPublicRoutes(
base, deviceDB, accountDB, base.PublicAPIMux, base, deviceDB, accountDB,
federation, keyRing, rsAPI, federation, keyRing, rsAPI,
eduInputAPI, asAPI, transactions.New(), fsAPI, eduInputAPI, asAPI, transactions.New(), fsAPI,
) )
@ -119,7 +119,7 @@ func main() {
base, deviceDB, accountDB, base, deviceDB, accountDB,
) )
eduProducer := producers.NewEDUServerProducer(eduInputAPI) eduProducer := producers.NewEDUServerProducer(eduInputAPI)
federationapi.AddRoutes(base, accountDB, deviceDB, federation, keyRing, rsAPI, asAPI, fsAPI, eduProducer) federationapi.AddPublicRoutes(base, accountDB, deviceDB, federation, keyRing, rsAPI, asAPI, fsAPI, eduProducer)
mediaapi.SetupMediaAPIComponent(base, deviceDB) mediaapi.SetupMediaAPIComponent(base, deviceDB)
publicRoomsDB, err := storage.NewPublicRoomsServerDatabase(string(base.Cfg.Database.PublicRoomsAPI), base.Cfg.DbProperties(), cfg.Matrix.ServerName) publicRoomsDB, err := storage.NewPublicRoomsServerDatabase(string(base.Cfg.Database.PublicRoomsAPI), base.Cfg.DbProperties(), cfg.Matrix.ServerName)
if err != nil { if err != nil {

View file

@ -208,20 +208,20 @@ func main() {
rsAPI := roomserver.SetupRoomServerComponent(base, keyRing, federation) rsAPI := roomserver.SetupRoomServerComponent(base, keyRing, federation)
eduInputAPI := eduserver.NewInternalAPI(base, cache.New(), deviceDB) eduInputAPI := eduserver.NewInternalAPI(base, cache.New(), deviceDB)
asQuery := appservice.SetupAppServiceAPIComponent( asQuery := appservice.NewInternalAPI(
base, accountDB, deviceDB, federation, rsAPI, transactions.New(), base, accountDB, deviceDB, rsAPI,
) )
fedSenderAPI := federationsender.SetupFederationSenderComponent(base, federation, rsAPI, &keyRing) fedSenderAPI := federationsender.SetupFederationSenderComponent(base, federation, rsAPI, &keyRing)
rsAPI.SetFederationSenderAPI(fedSenderAPI) rsAPI.SetFederationSenderAPI(fedSenderAPI)
p2pPublicRoomProvider := NewLibP2PPublicRoomsProvider(node, fedSenderAPI) p2pPublicRoomProvider := NewLibP2PPublicRoomsProvider(node, fedSenderAPI)
clientapi.SetupClientAPIComponent( clientapi.AddPublicRoutes(
base, deviceDB, accountDB, base.PublicAPIMux, base, deviceDB, accountDB,
federation, &keyRing, rsAPI, federation, &keyRing, rsAPI,
eduInputAPI, asQuery, transactions.New(), fedSenderAPI, eduInputAPI, asQuery, transactions.New(), fedSenderAPI,
) )
eduProducer := producers.NewEDUServerProducer(eduInputAPI) eduProducer := producers.NewEDUServerProducer(eduInputAPI)
federationapi.AddRoutes(base, accountDB, deviceDB, federation, &keyRing, rsAPI, asQuery, fedSenderAPI, eduProducer) federationapi.AddPublicRoutes(base, accountDB, deviceDB, federation, &keyRing, rsAPI, asQuery, fedSenderAPI, eduProducer)
mediaapi.SetupMediaAPIComponent(base, deviceDB) mediaapi.SetupMediaAPIComponent(base, deviceDB)
publicRoomsDB, err := storage.NewPublicRoomsServerDatabase(string(base.Cfg.Database.PublicRoomsAPI), cfg.Matrix.ServerName) publicRoomsDB, err := storage.NewPublicRoomsServerDatabase(string(base.Cfg.Database.PublicRoomsAPI), cfg.Matrix.ServerName)
if err != nil { if err != nil {

View file

@ -26,9 +26,9 @@ import (
"github.com/matrix-org/dendrite/internal/basecomponent" "github.com/matrix-org/dendrite/internal/basecomponent"
) )
// AddRoutes registers HTTP handlers for the internal API. Invokes functions // AddInternalRoutes registers HTTP handlers for the internal API. Invokes functions
// on the given input API. // on the given input API.
func AddRoutes(internalMux *mux.Router, inputAPI api.EDUServerInputAPI) { func AddInternalRoutes(internalMux *mux.Router, inputAPI api.EDUServerInputAPI) {
inthttp.AddRoutes(inputAPI, internalMux) inthttp.AddRoutes(inputAPI, internalMux)
} }

View file

@ -28,8 +28,8 @@ import (
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
) )
// AddRoutes sets up and registers HTTP handlers on the base API muxes for the FederationAPI component. // AddPublicRoutes sets up and registers HTTP handlers on the base API muxes for the FederationAPI component.
func AddRoutes( func AddPublicRoutes(
base *basecomponent.BaseDendrite, base *basecomponent.BaseDendrite,
accountsDB accounts.Database, accountsDB accounts.Database,
deviceDB devices.Database, deviceDB devices.Database,