github.com/status-im/status-go@v1.1.0/protocol/requests/community_metrics_request.go (about)

     1  package requests
     2  
     3  import (
     4  	"errors"
     5  
     6  	"github.com/status-im/status-go/eth-node/types"
     7  )
     8  
     9  var ErrNoCommunityID = errors.New("community metrics request has no community id")
    10  var ErrInvalidTimestampIntervals = errors.New("community metrics request invalid time intervals")
    11  
    12  type CommunityMetricsRequestType uint
    13  
    14  const (
    15  	CommunityMetricsRequestMessagesTimestamps CommunityMetricsRequestType = iota
    16  	CommunityMetricsRequestMessagesCount
    17  	CommunityMetricsRequestMembers
    18  	CommunityMetricsRequestControlNodeUptime
    19  )
    20  
    21  type MetricsIntervalRequest struct {
    22  	StartTimestamp uint64 `json:"startTimestamp"`
    23  	EndTimestamp   uint64 `json:"endTimestamp"`
    24  }
    25  
    26  type CommunityMetricsRequest struct {
    27  	CommunityID types.HexBytes              `json:"communityId"`
    28  	Type        CommunityMetricsRequestType `json:"type"`
    29  	Intervals   []MetricsIntervalRequest    `json:"intervals"`
    30  }
    31  
    32  func (r *CommunityMetricsRequest) Validate() error {
    33  	if len(r.CommunityID) == 0 {
    34  		return ErrNoCommunityID
    35  	}
    36  
    37  	for _, interval := range r.Intervals {
    38  		if interval.StartTimestamp == 0 || interval.EndTimestamp == 0 || interval.StartTimestamp >= interval.EndTimestamp {
    39  			return ErrInvalidTimestampIntervals
    40  		}
    41  	}
    42  
    43  	return nil
    44  }