2021-10-24 03:29:45 +02:00
|
|
|
// Package config provides the main configuration
|
|
|
|
package config
|
|
|
|
|
2021-10-24 04:49:50 +02:00
|
|
|
import (
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Defines default config settings
|
2021-10-24 03:29:45 +02:00
|
|
|
const (
|
2021-11-03 16:33:34 +01:00
|
|
|
DefaultListenHTTP = ":80"
|
|
|
|
DefaultCacheDuration = 12 * time.Hour
|
|
|
|
DefaultKeepaliveInterval = 30 * time.Second
|
|
|
|
DefaultManagerInterval = time.Minute
|
2021-10-24 04:49:50 +02:00
|
|
|
)
|
|
|
|
|
2021-11-01 21:39:40 +01:00
|
|
|
// Defines all the limits
|
|
|
|
// - global topic limit: max number of topics overall
|
2021-11-05 18:46:27 +01:00
|
|
|
// - per visistor request limit: max number of PUT/GET/.. requests (here: 60 requests bucket, replenished at a rate of one per 10 seconds)
|
|
|
|
// - per visistor subscription limit: max number of subscriptions (active HTTP connections) per per-visitor/IP
|
|
|
|
const (
|
|
|
|
DefaultGlobalTopicLimit = 5000
|
|
|
|
DefaultVisitorRequestLimitBurst = 60
|
|
|
|
DefaultVisitorRequestLimitReplenish = 10 * time.Second
|
|
|
|
DefaultVisitorSubscriptionLimit = 30
|
2021-10-24 03:29:45 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
// Config is the main config struct for the application. Use New to instantiate a default config struct.
|
|
|
|
type Config struct {
|
2021-11-05 18:46:27 +01:00
|
|
|
ListenHTTP string
|
2021-12-07 16:38:58 +01:00
|
|
|
ListenHTTPS string
|
|
|
|
KeyFile string
|
|
|
|
CertFile string
|
2021-11-05 18:46:27 +01:00
|
|
|
FirebaseKeyFile string
|
|
|
|
CacheFile string
|
|
|
|
CacheDuration time.Duration
|
|
|
|
KeepaliveInterval time.Duration
|
|
|
|
ManagerInterval time.Duration
|
|
|
|
GlobalTopicLimit int
|
|
|
|
VisitorRequestLimitBurst int
|
|
|
|
VisitorRequestLimitReplenish time.Duration
|
|
|
|
VisitorSubscriptionLimit int
|
|
|
|
BehindProxy bool
|
2021-10-24 03:29:45 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// New instantiates a default new config
|
|
|
|
func New(listenHTTP string) *Config {
|
|
|
|
return &Config{
|
2021-11-05 18:46:27 +01:00
|
|
|
ListenHTTP: listenHTTP,
|
2021-12-07 16:38:58 +01:00
|
|
|
ListenHTTPS: "",
|
|
|
|
KeyFile: "",
|
|
|
|
CertFile: "",
|
2021-11-05 18:46:27 +01:00
|
|
|
FirebaseKeyFile: "",
|
|
|
|
CacheFile: "",
|
|
|
|
CacheDuration: DefaultCacheDuration,
|
|
|
|
KeepaliveInterval: DefaultKeepaliveInterval,
|
|
|
|
ManagerInterval: DefaultManagerInterval,
|
|
|
|
GlobalTopicLimit: DefaultGlobalTopicLimit,
|
|
|
|
VisitorRequestLimitBurst: DefaultVisitorRequestLimitBurst,
|
|
|
|
VisitorRequestLimitReplenish: DefaultVisitorRequestLimitReplenish,
|
|
|
|
VisitorSubscriptionLimit: DefaultVisitorSubscriptionLimit,
|
|
|
|
BehindProxy: false,
|
2021-10-24 03:29:45 +02:00
|
|
|
}
|
|
|
|
}
|