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  }