sync-server config: Read from a YAML file rather than hard-coded variables (#53)
parent
a423008987
commit
2d2c7e7169
|
@ -22,9 +22,9 @@ type ClientAPI struct {
|
||||||
// Sync contains the config information necessary to spin up a sync-server process.
|
// Sync contains the config information necessary to spin up a sync-server process.
|
||||||
type Sync struct {
|
type Sync struct {
|
||||||
// The topic for events which are written by the room server output log.
|
// 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.
|
// 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
|
// The postgres connection config for connecting to the database e.g a postgres:// URI
|
||||||
DataSource string
|
DataSource string `yaml:"database"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"flag"
|
||||||
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
@ -12,8 +14,12 @@ import (
|
||||||
|
|
||||||
log "github.com/Sirupsen/logrus"
|
log "github.com/Sirupsen/logrus"
|
||||||
"github.com/matrix-org/dugong"
|
"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) {
|
func setupLogging(logDir string) {
|
||||||
_ = os.Mkdir(logDir, os.ModePerm)
|
_ = os.Mkdir(logDir, os.ModePerm)
|
||||||
log.AddHook(dugong.NewFSHook(
|
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() {
|
func main() {
|
||||||
bindAddr := os.Getenv("BIND_ADDRESS")
|
flag.Parse()
|
||||||
if bindAddr == "" {
|
|
||||||
log.Panic("No BIND_ADDRESS environment variable found.")
|
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")
|
logDir := os.Getenv("LOG_DIR")
|
||||||
if logDir != "" {
|
if logDir != "" {
|
||||||
setupLogging(logDir)
|
setupLogging(logDir)
|
||||||
}
|
}
|
||||||
|
|
||||||
cfg := config.Sync{
|
log.Info("sync server config: ", cfg)
|
||||||
KafkaConsumerURIs: []string{"localhost:9092"},
|
|
||||||
RoomserverOutputTopic: "roomserverOutput",
|
|
||||||
DataSource: "postgres://dendrite:itsasecret@localhost/syncserver?sslmode=disable",
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Info("Starting sync server")
|
|
||||||
|
|
||||||
db, err := storage.NewSyncServerDatabase(cfg.DataSource)
|
db, err := storage.NewSyncServerDatabase(cfg.DataSource)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Panicf("startup: failed to create sync server database with data source %s : %s", cfg.DataSource, err)
|
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 {
|
if err != nil {
|
||||||
log.Panicf("startup: failed to create sync server: %s", err)
|
log.Panicf("startup: failed to create sync server: %s", err)
|
||||||
}
|
}
|
||||||
|
@ -60,6 +82,7 @@ func main() {
|
||||||
log.Panicf("startup: failed to start sync server")
|
log.Panicf("startup: failed to start sync server")
|
||||||
}
|
}
|
||||||
|
|
||||||
routing.SetupSyncServerListeners(http.DefaultServeMux, http.DefaultClient, cfg)
|
log.Info("Starting sync server on ", *bindAddr)
|
||||||
log.Fatal(http.ListenAndServe(bindAddr, nil))
|
routing.SetupSyncServerListeners(http.DefaultServeMux, http.DefaultClient, *cfg)
|
||||||
|
log.Fatal(http.ListenAndServe(*bindAddr, nil))
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"
|
Loading…
Reference in New Issue