a52f766273
We want to send emails to SNOs. Node status changes go through the overlay service, so it's a good place to add the mail service. Add the mailservice.Service, satellite address, and satellite name to overlay service. Also add feature flag --overlay.send-node-emails Change-Id: I3bd2cb3bf22f9724954ce2374f8b651b902b3a24
78 lines
3.3 KiB
Go
78 lines
3.3 KiB
Go
// Copyright (C) 2019 Storj Labs, Inc.
|
|
// See LICENSE for copying information.
|
|
|
|
package overlay
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/spacemonkeygo/monkit/v3"
|
|
"github.com/zeebo/errs"
|
|
|
|
"storj.io/common/memory"
|
|
)
|
|
|
|
var (
|
|
mon = monkit.Package()
|
|
// Error represents an overlay error.
|
|
Error = errs.Class("overlay")
|
|
)
|
|
|
|
// Config is a configuration for overlay service.
|
|
type Config struct {
|
|
Node NodeSelectionConfig
|
|
NodeSelectionCache UploadSelectionCacheConfig
|
|
GeoIP GeoIPConfig
|
|
UpdateStatsBatchSize int `help:"number of update requests to process per transaction" default:"100"`
|
|
NodeCheckInWaitPeriod time.Duration `help:"the amount of time to wait before accepting a redundant check-in from a node (unmodified info since last check-in)" default:"2h" testDefault:"30s"`
|
|
RepairExcludedCountryCodes []string `help:"list of country codes to exclude nodes from target repair selection" default:"" testDefault:"FR,BE"`
|
|
SendNodeEmails bool `help:"whether to send emails to nodes" default:"false"`
|
|
}
|
|
|
|
// AsOfSystemTimeConfig is a configuration struct to enable 'AS OF SYSTEM TIME' for CRDB queries.
|
|
type AsOfSystemTimeConfig struct {
|
|
Enabled bool `help:"enables the use of the AS OF SYSTEM TIME feature in CRDB" default:"true"`
|
|
DefaultInterval time.Duration `help:"default duration for AS OF SYSTEM TIME" devDefault:"-1ms" releaseDefault:"-10s" testDefault:"-1µs"`
|
|
}
|
|
|
|
// NodeSelectionConfig is a configuration struct to determine the minimum
|
|
// values for nodes to select.
|
|
type NodeSelectionConfig struct {
|
|
NewNodeFraction float64 `help:"the fraction of new nodes allowed per request" releaseDefault:"0.05" devDefault:"1"`
|
|
MinimumVersion string `help:"the minimum node software version for node selection queries" default:""`
|
|
OnlineWindow time.Duration `help:"the amount of time without seeing a node before its considered offline" default:"4h" testDefault:"1m"`
|
|
DistinctIP bool `help:"require distinct IPs when choosing nodes for upload" releaseDefault:"true" devDefault:"false"`
|
|
MinimumDiskSpace memory.Size `help:"how much disk space a node at minimum must have to be selected for upload" default:"500.00MB" testDefault:"100.00MB"`
|
|
|
|
AsOfSystemTime AsOfSystemTimeConfig
|
|
|
|
UploadExcludedCountryCodes []string `help:"list of country codes to exclude from node selection for uploads" default:"" testDefault:"FR,BE"`
|
|
}
|
|
|
|
// GeoIPConfig is a configuration struct that helps configure the GeoIP lookup features on the satellite.
|
|
type GeoIPConfig struct {
|
|
DB string `help:"the location of the maxmind database containing geoip country information"`
|
|
MockCountries []string `help:"a mock list of countries the satellite will attribute to nodes (useful for testing)"`
|
|
}
|
|
|
|
func (aost *AsOfSystemTimeConfig) isValid() error {
|
|
if aost.Enabled {
|
|
if aost.DefaultInterval >= 0 {
|
|
return errs.New("AS OF SYSTEM TIME interval must be a negative number")
|
|
}
|
|
if aost.DefaultInterval > -time.Microsecond {
|
|
return errs.New("AS OF SYSTEM TIME interval cannot be in nanoseconds")
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// Interval returns the configured interval respecting Enabled property.
|
|
func (aost *AsOfSystemTimeConfig) Interval() time.Duration {
|
|
if !aost.Enabled {
|
|
return 0
|
|
}
|
|
return aost.DefaultInterval
|
|
}
|