middleware, config: re-add support for min interval
This commit is contained in:
parent
395e59aef3
commit
ef166a6159
2 changed files with 17 additions and 10 deletions
|
@ -3,6 +3,10 @@ chihaya:
|
||||||
# frequently they should announce in between client events.
|
# frequently they should announce in between client events.
|
||||||
announce_interval: 30m
|
announce_interval: 30m
|
||||||
|
|
||||||
|
# The interval communicated with BitTorrent clients informing them of the
|
||||||
|
# minimal duration between announces.
|
||||||
|
min_announce_interval: 15m
|
||||||
|
|
||||||
# The network interface that will bind to an HTTP endpoint that can be
|
# The network interface that will bind to an HTTP endpoint that can be
|
||||||
# scraped by an instance of the Prometheus time series database.
|
# scraped by an instance of the Prometheus time series database.
|
||||||
# For more info see: https://prometheus.io
|
# For more info see: https://prometheus.io
|
||||||
|
|
|
@ -15,7 +15,8 @@ import (
|
||||||
|
|
||||||
// Config holds the configuration common across all middleware.
|
// Config holds the configuration common across all middleware.
|
||||||
type Config struct {
|
type Config struct {
|
||||||
AnnounceInterval time.Duration `yaml:"announce_interval"`
|
AnnounceInterval time.Duration `yaml:"announce_interval"`
|
||||||
|
MinAnnounceInterval time.Duration `yaml:"min_announce_interval"`
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ frontend.TrackerLogic = &Logic{}
|
var _ frontend.TrackerLogic = &Logic{}
|
||||||
|
@ -24,27 +25,29 @@ var _ frontend.TrackerLogic = &Logic{}
|
||||||
// middleware hooks.
|
// middleware hooks.
|
||||||
func NewLogic(cfg Config, peerStore storage.PeerStore, preHooks, postHooks []Hook) *Logic {
|
func NewLogic(cfg Config, peerStore storage.PeerStore, preHooks, postHooks []Hook) *Logic {
|
||||||
return &Logic{
|
return &Logic{
|
||||||
announceInterval: cfg.AnnounceInterval,
|
announceInterval: cfg.AnnounceInterval,
|
||||||
peerStore: peerStore,
|
minAnnounceInterval: cfg.MinAnnounceInterval,
|
||||||
preHooks: append(preHooks, &responseHook{store: peerStore}),
|
peerStore: peerStore,
|
||||||
postHooks: append(postHooks, &swarmInteractionHook{store: peerStore}),
|
preHooks: append(preHooks, &responseHook{store: peerStore}),
|
||||||
|
postHooks: append(postHooks, &swarmInteractionHook{store: peerStore}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logic is an implementation of the TrackerLogic that functions by
|
// Logic is an implementation of the TrackerLogic that functions by
|
||||||
// executing a series of middleware hooks.
|
// executing a series of middleware hooks.
|
||||||
type Logic struct {
|
type Logic struct {
|
||||||
announceInterval time.Duration
|
announceInterval time.Duration
|
||||||
peerStore storage.PeerStore
|
minAnnounceInterval time.Duration
|
||||||
preHooks []Hook
|
peerStore storage.PeerStore
|
||||||
postHooks []Hook
|
preHooks []Hook
|
||||||
|
postHooks []Hook
|
||||||
}
|
}
|
||||||
|
|
||||||
// HandleAnnounce generates a response for an Announce.
|
// HandleAnnounce generates a response for an Announce.
|
||||||
func (l *Logic) HandleAnnounce(ctx context.Context, req *bittorrent.AnnounceRequest) (_ context.Context, resp *bittorrent.AnnounceResponse, err error) {
|
func (l *Logic) HandleAnnounce(ctx context.Context, req *bittorrent.AnnounceRequest) (_ context.Context, resp *bittorrent.AnnounceResponse, err error) {
|
||||||
resp = &bittorrent.AnnounceResponse{
|
resp = &bittorrent.AnnounceResponse{
|
||||||
Interval: l.announceInterval,
|
Interval: l.announceInterval,
|
||||||
MinInterval: l.announceInterval,
|
MinInterval: l.minAnnounceInterval,
|
||||||
Compact: req.Compact,
|
Compact: req.Compact,
|
||||||
}
|
}
|
||||||
for _, h := range l.preHooks {
|
for _, h := range l.preHooks {
|
||||||
|
|
Loading…
Reference in a new issue