From 4a83c3f06004aadb2463c33d088a354083ad0551 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Wed, 6 Dec 2017 16:42:34 +0000 Subject: [PATCH] Convert clientapi to using base component --- .../dendrite/clientapi/clientapi.go | 62 ++++++++++ .../cmd/dendrite-client-api-server/main.go | 111 ++---------------- 2 files changed, 73 insertions(+), 100 deletions(-) create mode 100644 src/github.com/matrix-org/dendrite/clientapi/clientapi.go diff --git a/src/github.com/matrix-org/dendrite/clientapi/clientapi.go b/src/github.com/matrix-org/dendrite/clientapi/clientapi.go new file mode 100644 index 00000000..278edc0e --- /dev/null +++ b/src/github.com/matrix-org/dendrite/clientapi/clientapi.go @@ -0,0 +1,62 @@ +// Copyright 2017 Vector Creations Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package clientapi + +import ( + "github.com/matrix-org/dendrite/clientapi/auth/storage/accounts" + "github.com/matrix-org/dendrite/clientapi/auth/storage/devices" + "github.com/matrix-org/dendrite/clientapi/consumers" + "github.com/matrix-org/dendrite/clientapi/producers" + "github.com/matrix-org/dendrite/clientapi/routing" + "github.com/matrix-org/dendrite/common/basecomponent" + "github.com/matrix-org/gomatrixserverlib" + "github.com/sirupsen/logrus" +) + +// SetupClientAPIComponent sets up and registers HTTP handlers for the ClientAPI +// component. +func SetupClientAPIComponent( + base *basecomponent.BaseDendrite, + deviceDB *devices.Database, + accountsDB *accounts.Database, + federation *gomatrixserverlib.FederationClient, + keyRing *gomatrixserverlib.KeyRing, +) { + roomserverProducer := producers.NewRoomserverProducer(base.InputAPI()) + + userUpdateProducer := &producers.UserUpdateProducer{ + Producer: base.KafkaProducer, + Topic: string(base.Cfg.Kafka.Topics.UserUpdates), + } + + syncProducer := &producers.SyncAPIProducer{ + Producer: base.KafkaProducer, + Topic: string(base.Cfg.Kafka.Topics.OutputClientData), + } + + consumer := consumers.NewOutputRoomEventConsumer( + base.Cfg, base.KafkaConsumer, accountsDB, base.QueryAPI(), + ) + if err := consumer.Start(); err != nil { + logrus.WithError(err).Panicf("failed to start room server consumer") + } + + routing.Setup( + base.APIMux, *base.Cfg, roomserverProducer, + base.QueryAPI(), base.AliasAPI(), accountsDB, deviceDB, + federation, *keyRing, + userUpdateProducer, syncProducer, + ) +} diff --git a/src/github.com/matrix-org/dendrite/cmd/dendrite-client-api-server/main.go b/src/github.com/matrix-org/dendrite/cmd/dendrite-client-api-server/main.go index 8794107f..70a25835 100644 --- a/src/github.com/matrix-org/dendrite/cmd/dendrite-client-api-server/main.go +++ b/src/github.com/matrix-org/dendrite/cmd/dendrite-client-api-server/main.go @@ -15,113 +15,24 @@ package main import ( - "flag" - "net/http" - "os" - - "github.com/gorilla/mux" - "github.com/matrix-org/dendrite/clientapi/auth/storage/accounts" - "github.com/matrix-org/dendrite/clientapi/auth/storage/devices" - "github.com/matrix-org/dendrite/clientapi/consumers" - "github.com/matrix-org/dendrite/clientapi/producers" - "github.com/matrix-org/dendrite/clientapi/routing" - "github.com/matrix-org/dendrite/common" - "github.com/matrix-org/dendrite/common/config" + "github.com/matrix-org/dendrite/clientapi" + "github.com/matrix-org/dendrite/common/basecomponent" "github.com/matrix-org/dendrite/common/keydb" - "github.com/matrix-org/dendrite/roomserver/api" - - "github.com/matrix-org/gomatrixserverlib" - - log "github.com/sirupsen/logrus" - sarama "gopkg.in/Shopify/sarama.v1" -) - -var ( - logDir = os.Getenv("LOG_DIR") - configPath = flag.String("config", "dendrite.yaml", "The path to the config file, For more information see the config file in this repository") ) func main() { - common.SetupLogging(logDir) - - flag.Parse() - - cfg, err := config.Load(*configPath) - if err != nil { - log.Fatalf("Invalid config file: %s", err) - } - - closer, err := cfg.SetupTracing("DendriteClientAPI") - if err != nil { - log.WithError(err).Fatalf("Failed to start tracer") - } - defer closer.Close() // nolint: errcheck - - queryAPI := api.NewRoomserverQueryAPIHTTP(cfg.RoomServerURL(), nil) - aliasAPI := api.NewRoomserverAliasAPIHTTP(cfg.RoomServerURL(), nil) - inputAPI := api.NewRoomserverInputAPIHTTP(cfg.RoomServerURL(), nil) - - roomserverProducer := producers.NewRoomserverProducer(inputAPI) - - kafkaProducer, err := sarama.NewSyncProducer(cfg.Kafka.Addresses, nil) - if err != nil { - log.WithFields(log.Fields{ - log.ErrorKey: err, - "addresses": cfg.Kafka.Addresses, - }).Panic("Failed to setup kafka producers") - } - - userUpdateProducer := &producers.UserUpdateProducer{ - Producer: kafkaProducer, - Topic: string(cfg.Kafka.Topics.UserUpdates), - } - - syncProducer := &producers.SyncAPIProducer{ - Producer: kafkaProducer, - Topic: string(cfg.Kafka.Topics.OutputClientData), - } - - federation := gomatrixserverlib.NewFederationClient( - cfg.Matrix.ServerName, cfg.Matrix.KeyID, cfg.Matrix.PrivateKey, - ) - - accountDB, err := accounts.NewDatabase(string(cfg.Database.Account), cfg.Matrix.ServerName) - if err != nil { - log.Panicf("Failed to setup account database(%q): %s", cfg.Database.Account, err.Error()) - } - deviceDB, err := devices.NewDatabase(string(cfg.Database.Device), cfg.Matrix.ServerName) - if err != nil { - log.Panicf("Failed to setup device database(%q): %s", cfg.Database.Device, err.Error()) - } - keyDB, err := keydb.NewDatabase(string(cfg.Database.ServerKey)) - if err != nil { - log.Panicf("Failed to setup key database(%q): %s", cfg.Database.ServerKey, err.Error()) - } + base := basecomponent.NewBaseDendrite("ClientAPI") + defer base.Close() // nolint: errcheck + accountDB := base.CreateAccountsDB() + deviceDB := base.CreateDeviceDB() + keyDB := base.CreateKeyDB() + federation := base.CreateFederationClient() keyRing := keydb.CreateKeyRing(federation.Client, keyDB) - kafkaConsumer, err := sarama.NewConsumer(cfg.Kafka.Addresses, nil) - if err != nil { - log.WithFields(log.Fields{ - log.ErrorKey: err, - "addresses": cfg.Kafka.Addresses, - }).Panic("Failed to setup kafka consumers") - } - - consumer := consumers.NewOutputRoomEventConsumer(cfg, kafkaConsumer, accountDB, queryAPI) - if err = consumer.Start(); err != nil { - log.Panicf("startup: failed to start room server consumer") - } - - log.Info("Starting client API server on ", cfg.Listen.ClientAPI) - - api := mux.NewRouter() - routing.Setup( - api, *cfg, roomserverProducer, - queryAPI, aliasAPI, accountDB, deviceDB, federation, keyRing, - userUpdateProducer, syncProducer, + clientapi.SetupClientAPIComponent( + base, deviceDB, accountDB, federation, &keyRing, ) - common.SetupHTTPAPI(http.DefaultServeMux, common.WrapHandlerInCORS(api)) - log.Fatal(http.ListenAndServe(string(cfg.Listen.ClientAPI), nil)) + base.SetupAndServeHTTP(string(base.Cfg.Listen.ClientAPI)) }