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 }