45 lines
1.2 KiB
Go
45 lines
1.2 KiB
Go
|
package requests
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
|
||
|
"github.com/status-im/status-go/eth-node/types"
|
||
|
)
|
||
|
|
||
|
var ErrNoCommunityID = errors.New("community metrics request has no community id")
|
||
|
var ErrInvalidTimestampIntervals = errors.New("community metrics request invalid time intervals")
|
||
|
|
||
|
type CommunityMetricsRequestType uint
|
||
|
|
||
|
const (
|
||
|
CommunityMetricsRequestMessagesTimestamps CommunityMetricsRequestType = iota
|
||
|
CommunityMetricsRequestMessagesCount
|
||
|
CommunityMetricsRequestMembers
|
||
|
CommunityMetricsRequestControlNodeUptime
|
||
|
)
|
||
|
|
||
|
type MetricsIntervalRequest struct {
|
||
|
StartTimestamp uint64 `json:"startTimestamp"`
|
||
|
EndTimestamp uint64 `json:"endTimestamp"`
|
||
|
}
|
||
|
|
||
|
type CommunityMetricsRequest struct {
|
||
|
CommunityID types.HexBytes `json:"communityId"`
|
||
|
Type CommunityMetricsRequestType `json:"type"`
|
||
|
Intervals []MetricsIntervalRequest `json:"intervals"`
|
||
|
}
|
||
|
|
||
|
func (r *CommunityMetricsRequest) Validate() error {
|
||
|
if len(r.CommunityID) == 0 {
|
||
|
return ErrNoCommunityID
|
||
|
}
|
||
|
|
||
|
for _, interval := range r.Intervals {
|
||
|
if interval.StartTimestamp == 0 || interval.EndTimestamp == 0 || interval.StartTimestamp >= interval.EndTimestamp {
|
||
|
return ErrInvalidTimestampIntervals
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|