284 lines
10 KiB
Go
284 lines
10 KiB
Go
|
|
package notify
|
||
|
|
|
||
|
|
import (
|
||
|
|
"errors"
|
||
|
|
"time"
|
||
|
|
)
|
||
|
|
|
||
|
|
type FileTransferSummary struct {
|
||
|
|
Direction TransferDirection
|
||
|
|
Scope string
|
||
|
|
RuntimeScope string
|
||
|
|
TransportGeneration uint64
|
||
|
|
NetType NetType
|
||
|
|
Kind EnvelopeKind
|
||
|
|
FileID string
|
||
|
|
Path string
|
||
|
|
Received int64
|
||
|
|
Total int64
|
||
|
|
Percent float64
|
||
|
|
Active bool
|
||
|
|
Terminal bool
|
||
|
|
Done bool
|
||
|
|
Failed bool
|
||
|
|
Err error
|
||
|
|
StartedAt time.Time
|
||
|
|
UpdatedAt time.Time
|
||
|
|
Duration time.Duration
|
||
|
|
RateBPS float64
|
||
|
|
StepDuration time.Duration
|
||
|
|
InstantRateBPS float64
|
||
|
|
Time time.Time
|
||
|
|
Stage string
|
||
|
|
}
|
||
|
|
|
||
|
|
type FileTransferSummaryGroup struct {
|
||
|
|
Send []FileTransferSummary
|
||
|
|
Receive []FileTransferSummary
|
||
|
|
}
|
||
|
|
|
||
|
|
type FileTransferSummaryQuery struct {
|
||
|
|
Scope string
|
||
|
|
RuntimeScope string
|
||
|
|
TransportGeneration uint64
|
||
|
|
MatchTransportGeneration bool
|
||
|
|
}
|
||
|
|
|
||
|
|
type clientFileTransferSummaryReader interface {
|
||
|
|
clientFileTransferActiveSummaries() FileTransferSummaryGroup
|
||
|
|
clientFileTransferCompletedSummaries() FileTransferSummaryGroup
|
||
|
|
clientFileTransferFailedSummaries() FileTransferSummaryGroup
|
||
|
|
clientFileTransferLatestByFileID(string) FileTransferSummaryGroup
|
||
|
|
clientFileTransferLatestByFileIDQuery(string, FileTransferSummaryQuery) FileTransferSummaryGroup
|
||
|
|
}
|
||
|
|
|
||
|
|
type serverFileTransferSummaryReader interface {
|
||
|
|
serverFileTransferActiveSummaries() FileTransferSummaryGroup
|
||
|
|
serverFileTransferCompletedSummaries() FileTransferSummaryGroup
|
||
|
|
serverFileTransferFailedSummaries() FileTransferSummaryGroup
|
||
|
|
serverFileTransferLatestByFileID(string) FileTransferSummaryGroup
|
||
|
|
serverFileTransferLatestByFileIDQuery(string, FileTransferSummaryQuery) FileTransferSummaryGroup
|
||
|
|
}
|
||
|
|
|
||
|
|
var (
|
||
|
|
errClientFileTransferSummaryNil = errors.New("client file transfer summary target is nil")
|
||
|
|
errServerFileTransferSummaryNil = errors.New("server file transfer summary target is nil")
|
||
|
|
errClientFileTransferSummaryUnsupported = errors.New("client file transfer summary target type is unsupported")
|
||
|
|
errServerFileTransferSummaryUnsupported = errors.New("server file transfer summary target type is unsupported")
|
||
|
|
)
|
||
|
|
|
||
|
|
func GetClientFileTransferActiveSummaries(c Client) (FileTransferSummaryGroup, error) {
|
||
|
|
if c == nil {
|
||
|
|
return FileTransferSummaryGroup{}, errClientFileTransferSummaryNil
|
||
|
|
}
|
||
|
|
reader, ok := any(c).(clientFileTransferSummaryReader)
|
||
|
|
if !ok {
|
||
|
|
return FileTransferSummaryGroup{}, errClientFileTransferSummaryUnsupported
|
||
|
|
}
|
||
|
|
return reader.clientFileTransferActiveSummaries(), nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func GetServerFileTransferActiveSummaries(s Server) (FileTransferSummaryGroup, error) {
|
||
|
|
if s == nil {
|
||
|
|
return FileTransferSummaryGroup{}, errServerFileTransferSummaryNil
|
||
|
|
}
|
||
|
|
reader, ok := any(s).(serverFileTransferSummaryReader)
|
||
|
|
if !ok {
|
||
|
|
return FileTransferSummaryGroup{}, errServerFileTransferSummaryUnsupported
|
||
|
|
}
|
||
|
|
return reader.serverFileTransferActiveSummaries(), nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func GetClientFileTransferCompletedSummaries(c Client) (FileTransferSummaryGroup, error) {
|
||
|
|
if c == nil {
|
||
|
|
return FileTransferSummaryGroup{}, errClientFileTransferSummaryNil
|
||
|
|
}
|
||
|
|
reader, ok := any(c).(clientFileTransferSummaryReader)
|
||
|
|
if !ok {
|
||
|
|
return FileTransferSummaryGroup{}, errClientFileTransferSummaryUnsupported
|
||
|
|
}
|
||
|
|
return reader.clientFileTransferCompletedSummaries(), nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func GetServerFileTransferCompletedSummaries(s Server) (FileTransferSummaryGroup, error) {
|
||
|
|
if s == nil {
|
||
|
|
return FileTransferSummaryGroup{}, errServerFileTransferSummaryNil
|
||
|
|
}
|
||
|
|
reader, ok := any(s).(serverFileTransferSummaryReader)
|
||
|
|
if !ok {
|
||
|
|
return FileTransferSummaryGroup{}, errServerFileTransferSummaryUnsupported
|
||
|
|
}
|
||
|
|
return reader.serverFileTransferCompletedSummaries(), nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func GetClientFileTransferFailedSummaries(c Client) (FileTransferSummaryGroup, error) {
|
||
|
|
if c == nil {
|
||
|
|
return FileTransferSummaryGroup{}, errClientFileTransferSummaryNil
|
||
|
|
}
|
||
|
|
reader, ok := any(c).(clientFileTransferSummaryReader)
|
||
|
|
if !ok {
|
||
|
|
return FileTransferSummaryGroup{}, errClientFileTransferSummaryUnsupported
|
||
|
|
}
|
||
|
|
return reader.clientFileTransferFailedSummaries(), nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func GetServerFileTransferFailedSummaries(s Server) (FileTransferSummaryGroup, error) {
|
||
|
|
if s == nil {
|
||
|
|
return FileTransferSummaryGroup{}, errServerFileTransferSummaryNil
|
||
|
|
}
|
||
|
|
reader, ok := any(s).(serverFileTransferSummaryReader)
|
||
|
|
if !ok {
|
||
|
|
return FileTransferSummaryGroup{}, errServerFileTransferSummaryUnsupported
|
||
|
|
}
|
||
|
|
return reader.serverFileTransferFailedSummaries(), nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func GetClientFileTransferLatestByFileID(c Client, fileID string) (FileTransferSummaryGroup, error) {
|
||
|
|
if c == nil {
|
||
|
|
return FileTransferSummaryGroup{}, errClientFileTransferSummaryNil
|
||
|
|
}
|
||
|
|
reader, ok := any(c).(clientFileTransferSummaryReader)
|
||
|
|
if !ok {
|
||
|
|
return FileTransferSummaryGroup{}, errClientFileTransferSummaryUnsupported
|
||
|
|
}
|
||
|
|
return reader.clientFileTransferLatestByFileID(fileID), nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func GetServerFileTransferLatestByFileID(s Server, fileID string) (FileTransferSummaryGroup, error) {
|
||
|
|
if s == nil {
|
||
|
|
return FileTransferSummaryGroup{}, errServerFileTransferSummaryNil
|
||
|
|
}
|
||
|
|
reader, ok := any(s).(serverFileTransferSummaryReader)
|
||
|
|
if !ok {
|
||
|
|
return FileTransferSummaryGroup{}, errServerFileTransferSummaryUnsupported
|
||
|
|
}
|
||
|
|
return reader.serverFileTransferLatestByFileID(fileID), nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func GetClientFileTransferLatestByFileIDQuery(c Client, fileID string, query FileTransferSummaryQuery) (FileTransferSummaryGroup, error) {
|
||
|
|
if c == nil {
|
||
|
|
return FileTransferSummaryGroup{}, errClientFileTransferSummaryNil
|
||
|
|
}
|
||
|
|
reader, ok := any(c).(clientFileTransferSummaryReader)
|
||
|
|
if !ok {
|
||
|
|
return FileTransferSummaryGroup{}, errClientFileTransferSummaryUnsupported
|
||
|
|
}
|
||
|
|
return reader.clientFileTransferLatestByFileIDQuery(fileID, query), nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func GetServerFileTransferLatestByFileIDQuery(s Server, fileID string, query FileTransferSummaryQuery) (FileTransferSummaryGroup, error) {
|
||
|
|
if s == nil {
|
||
|
|
return FileTransferSummaryGroup{}, errServerFileTransferSummaryNil
|
||
|
|
}
|
||
|
|
reader, ok := any(s).(serverFileTransferSummaryReader)
|
||
|
|
if !ok {
|
||
|
|
return FileTransferSummaryGroup{}, errServerFileTransferSummaryUnsupported
|
||
|
|
}
|
||
|
|
return reader.serverFileTransferLatestByFileIDQuery(fileID, query), nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (c *ClientCommon) clientFileTransferActiveSummaries() FileTransferSummaryGroup {
|
||
|
|
return publicFileTransferSummaryGroup(c.getFileTransferState().active())
|
||
|
|
}
|
||
|
|
|
||
|
|
func (c *ClientCommon) clientFileTransferCompletedSummaries() FileTransferSummaryGroup {
|
||
|
|
return publicFileTransferSummaryGroup(c.getFileTransferState().completed())
|
||
|
|
}
|
||
|
|
|
||
|
|
func (c *ClientCommon) clientFileTransferFailedSummaries() FileTransferSummaryGroup {
|
||
|
|
return publicFileTransferSummaryGroup(c.getFileTransferState().failed())
|
||
|
|
}
|
||
|
|
|
||
|
|
func (c *ClientCommon) clientFileTransferLatestByFileID(fileID string) FileTransferSummaryGroup {
|
||
|
|
return publicFileTransferSummaryGroup(c.getFileTransferState().latestByFileID(fileID))
|
||
|
|
}
|
||
|
|
|
||
|
|
func (c *ClientCommon) clientFileTransferLatestByFileIDQuery(fileID string, query FileTransferSummaryQuery) FileTransferSummaryGroup {
|
||
|
|
return publicFileTransferSummaryGroup(c.getFileTransferState().latestByFileIDQuery(fileID, internalFileTransferSummaryQuery(query)))
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *ServerCommon) serverFileTransferActiveSummaries() FileTransferSummaryGroup {
|
||
|
|
return publicFileTransferSummaryGroup(s.getFileTransferState().active())
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *ServerCommon) serverFileTransferCompletedSummaries() FileTransferSummaryGroup {
|
||
|
|
return publicFileTransferSummaryGroup(s.getFileTransferState().completed())
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *ServerCommon) serverFileTransferFailedSummaries() FileTransferSummaryGroup {
|
||
|
|
return publicFileTransferSummaryGroup(s.getFileTransferState().failed())
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *ServerCommon) serverFileTransferLatestByFileID(fileID string) FileTransferSummaryGroup {
|
||
|
|
return publicFileTransferSummaryGroup(s.getFileTransferState().latestByFileID(fileID))
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *ServerCommon) serverFileTransferLatestByFileIDQuery(fileID string, query FileTransferSummaryQuery) FileTransferSummaryGroup {
|
||
|
|
return publicFileTransferSummaryGroup(s.getFileTransferState().latestByFileIDQuery(fileID, internalFileTransferSummaryQuery(query)))
|
||
|
|
}
|
||
|
|
|
||
|
|
func publicFileTransferSummaryGroup(src fileTransferSummaryGroup) FileTransferSummaryGroup {
|
||
|
|
return FileTransferSummaryGroup{
|
||
|
|
Send: publicFileTransferSummaries(src.Send),
|
||
|
|
Receive: publicFileTransferSummaries(src.Receive),
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func publicFileTransferSummaries(src []fileTransferSummary) []FileTransferSummary {
|
||
|
|
if len(src) == 0 {
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
out := make([]FileTransferSummary, 0, len(src))
|
||
|
|
for _, summary := range src {
|
||
|
|
out = append(out, publicFileTransferSummary(summary))
|
||
|
|
}
|
||
|
|
return out
|
||
|
|
}
|
||
|
|
|
||
|
|
func publicFileTransferSummary(summary fileTransferSummary) FileTransferSummary {
|
||
|
|
return FileTransferSummary{
|
||
|
|
Direction: publicFileTransferDirection(summary.Direction),
|
||
|
|
Scope: summary.Scope,
|
||
|
|
RuntimeScope: summary.RuntimeScope,
|
||
|
|
TransportGeneration: summary.TransportGeneration,
|
||
|
|
NetType: summary.NetType,
|
||
|
|
Kind: summary.Kind,
|
||
|
|
FileID: summary.FileID,
|
||
|
|
Path: summary.Path,
|
||
|
|
Received: summary.Received,
|
||
|
|
Total: summary.Total,
|
||
|
|
Percent: summary.Percent,
|
||
|
|
Active: summary.Active,
|
||
|
|
Terminal: summary.Terminal,
|
||
|
|
Done: summary.Done,
|
||
|
|
Failed: summary.Failed,
|
||
|
|
Err: summary.Err,
|
||
|
|
StartedAt: summary.StartedAt,
|
||
|
|
UpdatedAt: summary.UpdatedAt,
|
||
|
|
Duration: summary.Duration,
|
||
|
|
RateBPS: summary.RateBPS,
|
||
|
|
StepDuration: summary.StepDuration,
|
||
|
|
InstantRateBPS: summary.InstantRateBPS,
|
||
|
|
Time: summary.Time,
|
||
|
|
Stage: summary.Stage,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func publicFileTransferDirection(direction fileTransferDirection) TransferDirection {
|
||
|
|
switch direction {
|
||
|
|
case fileTransferDirectionReceive:
|
||
|
|
return TransferDirectionReceive
|
||
|
|
default:
|
||
|
|
return TransferDirectionSend
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func internalFileTransferSummaryQuery(query FileTransferSummaryQuery) fileTransferSummaryQuery {
|
||
|
|
return fileTransferSummaryQuery{
|
||
|
|
Scope: query.Scope,
|
||
|
|
RuntimeScope: query.RuntimeScope,
|
||
|
|
TransportGeneration: query.TransportGeneration,
|
||
|
|
MatchTransportGeneration: query.MatchTransportGeneration,
|
||
|
|
}
|
||
|
|
}
|