github.com/diadata-org/diadata@v1.4.593/internal/pkg/filtersBlockService/FilterCOUNT.go (about) 1 package filters 2 3 import ( 4 "strconv" 5 "time" 6 7 "github.com/diadata-org/diadata/pkg/dia" 8 models "github.com/diadata-org/diadata/pkg/model" 9 log "github.com/sirupsen/logrus" 10 ) 11 12 type FilterCOUNT struct { 13 asset dia.Asset 14 exchange string 15 currentTime time.Time 16 numTrades int64 17 value int64 18 filterName string 19 memory int 20 modified bool 21 } 22 23 func NewFilterCOUNT(asset dia.Asset, exchange string, memory int) *FilterCOUNT { 24 filter := &FilterCOUNT{ 25 asset: asset, 26 exchange: exchange, 27 numTrades: int64(0), 28 filterName: "COUNT" + strconv.Itoa(memory), 29 memory: memory, 30 } 31 return filter 32 } 33 34 func (filter *FilterCOUNT) Compute(trade dia.Trade) { 35 filter.compute(trade) 36 } 37 func (filter *FilterCOUNT) FinalCompute(t time.Time) { 38 filter.finalCompute(t) 39 } 40 41 func (filter *FilterCOUNT) compute(trade dia.Trade) { 42 filter.modified = true 43 filter.numTrades += 1 44 filter.currentTime = trade.Time 45 } 46 47 func (filter *FilterCOUNT) finalCompute(t time.Time) float64 { 48 filter.value = filter.numTrades 49 filter.numTrades = int64(0) 50 return float64(filter.value) 51 } 52 53 func (filter *FilterCOUNT) filterPointForBlock() *dia.FilterPoint { 54 return nil 55 } 56 57 func (filter *FilterCOUNT) FilterPointForBlock() *dia.FilterPoint { 58 return &dia.FilterPoint{ 59 Asset: filter.asset, 60 Value: float64(filter.value), 61 Name: filter.filterName, 62 Time: filter.currentTime, 63 } 64 } 65 66 func (filter *FilterCOUNT) save(ds models.Datastore) error { 67 if filter.modified { 68 filter.modified = false 69 err := ds.SetFilter(filter.filterName, filter.asset, filter.exchange, float64(filter.value), filter.currentTime) 70 if err != nil { 71 log.Errorln("FilterCOUNT Error:", err) 72 } 73 return err 74 } 75 return nil 76 }