forked from TrueCloudLab/frostfs-node
685b593af3
Implement component that analyzes audit results and generates transactions for payment of awards for successfully passed audit. When calculating the total fee, the declared price of the node (attribute) and the total volume of storage groups, which were successfully audited by the container, are taken into account. In one call the calculator processes all audit results for the previous epoch (relative to the calculated parameter). Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
48 lines
925 B
Go
48 lines
925 B
Go
package audit
|
|
|
|
import (
|
|
"github.com/nspcc-dev/neofs-node/pkg/util/logger"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// Calculator represents component for calculating payments
|
|
// based on data audit results and sending remittances to the chain.
|
|
type Calculator struct {
|
|
prm *CalculatorPrm
|
|
|
|
opts *options
|
|
}
|
|
|
|
// CalculatorOption is a Calculator constructor's option.
|
|
type CalculatorOption func(*options)
|
|
|
|
type options struct {
|
|
log *logger.Logger
|
|
}
|
|
|
|
func defaultOptions() *options {
|
|
return &options{
|
|
log: zap.L(),
|
|
}
|
|
}
|
|
|
|
// NewCalculator creates, initializes and returns new Calculator instance.
|
|
func NewCalculator(p *CalculatorPrm, opts ...CalculatorOption) *Calculator {
|
|
o := defaultOptions()
|
|
|
|
for i := range opts {
|
|
opts[i](o)
|
|
}
|
|
|
|
return &Calculator{
|
|
prm: p,
|
|
opts: o,
|
|
}
|
|
}
|
|
|
|
// WithLogger returns option to specify logging component.
|
|
func WithLogger(l *logger.Logger) CalculatorOption {
|
|
return func(o *options) {
|
|
o.log = l
|
|
}
|
|
}
|