diff --git a/src/github.com/matrix-org/dendrite/clientapi/config/config.go b/src/github.com/matrix-org/dendrite/clientapi/config/config.go index 08e1f4d1..c3f18b08 100644 --- a/src/github.com/matrix-org/dendrite/clientapi/config/config.go +++ b/src/github.com/matrix-org/dendrite/clientapi/config/config.go @@ -22,9 +22,9 @@ type ClientAPI struct { // Sync contains the config information necessary to spin up a sync-server process. type Sync struct { // The topic for events which are written by the room server output log. - RoomserverOutputTopic string + RoomserverOutputTopic string `yaml:"roomserver_topic"` // A list of URIs to consume events from. These kafka logs should be produced by a Room Server. - KafkaConsumerURIs []string + KafkaConsumerURIs []string `yaml:"consumer_uris"` // The postgres connection config for connecting to the database e.g a postgres:// URI - DataSource string + DataSource string `yaml:"database"` } diff --git a/src/github.com/matrix-org/dendrite/cmd/dendrite-sync-server/main.go b/src/github.com/matrix-org/dendrite/cmd/dendrite-sync-server/main.go index 83ea51c3..0c11448a 100644 --- a/src/github.com/matrix-org/dendrite/cmd/dendrite-sync-server/main.go +++ b/src/github.com/matrix-org/dendrite/cmd/dendrite-sync-server/main.go @@ -1,6 +1,8 @@ package main import ( + "flag" + "io/ioutil" "net/http" "os" "path/filepath" @@ -12,8 +14,12 @@ import ( log "github.com/Sirupsen/logrus" "github.com/matrix-org/dugong" + yaml "gopkg.in/yaml.v2" ) +var configPath = flag.String("config", "sync-server-config.yaml", "The path to the config file. For more information, see the config file in this repository.") +var bindAddr = flag.String("listen", ":4200", "The port to listen on.") + func setupLogging(logDir string) { _ = os.Mkdir(logDir, os.ModePerm) log.AddHook(dugong.NewFSHook( @@ -29,30 +35,46 @@ func setupLogging(logDir string) { )) } +func loadConfig(configPath string) (*config.Sync, error) { + contents, err := ioutil.ReadFile(configPath) + if err != nil { + return nil, err + } + var cfg config.Sync + if err = yaml.Unmarshal(contents, &cfg); err != nil { + return nil, err + } + // check required fields + return &cfg, nil +} + func main() { - bindAddr := os.Getenv("BIND_ADDRESS") - if bindAddr == "" { - log.Panic("No BIND_ADDRESS environment variable found.") + flag.Parse() + + if *configPath == "" { + log.Fatal("--config must be supplied") + } + cfg, err := loadConfig(*configPath) + if err != nil { + log.Fatalf("Invalid config file: %s", err) + } + + if *bindAddr == "" { + log.Fatal("--listen must be supplied") } logDir := os.Getenv("LOG_DIR") if logDir != "" { setupLogging(logDir) } - cfg := config.Sync{ - KafkaConsumerURIs: []string{"localhost:9092"}, - RoomserverOutputTopic: "roomserverOutput", - DataSource: "postgres://dendrite:itsasecret@localhost/syncserver?sslmode=disable", - } - - log.Info("Starting sync server") + log.Info("sync server config: ", cfg) db, err := storage.NewSyncServerDatabase(cfg.DataSource) if err != nil { log.Panicf("startup: failed to create sync server database with data source %s : %s", cfg.DataSource, err) } - server, err := sync.NewServer(&cfg, db) + server, err := sync.NewServer(cfg, db) if err != nil { log.Panicf("startup: failed to create sync server: %s", err) } @@ -60,6 +82,7 @@ func main() { log.Panicf("startup: failed to start sync server") } - routing.SetupSyncServerListeners(http.DefaultServeMux, http.DefaultClient, cfg) - log.Fatal(http.ListenAndServe(bindAddr, nil)) + log.Info("Starting sync server on ", *bindAddr) + routing.SetupSyncServerListeners(http.DefaultServeMux, http.DefaultClient, *cfg) + log.Fatal(http.ListenAndServe(*bindAddr, nil)) } diff --git a/sync-server-config.yaml b/sync-server-config.yaml new file mode 100644 index 00000000..cbe452b3 --- /dev/null +++ b/sync-server-config.yaml @@ -0,0 +1,8 @@ +# A list of URIs which host Kafka logs. +consumer_uris: ["localhost:9092"] + +# The name of the topic which the sync server will consume events from. +roomserver_topic: "roomserverOutput" + +# The database URI to store sync server information. +database: "postgres://dendrite:itsasecret@localhost/syncserver?sslmode=disable"