mirror of
https://github.com/h44z/wg-portal.git
synced 2025-07-03 19:57:00 +00:00
51 lines
1.5 KiB
Go
51 lines
1.5 KiB
Go
|
package models
|
||
|
|
||
|
import (
|
||
|
"time"
|
||
|
|
||
|
"github.com/h44z/wg-portal/internal/domain"
|
||
|
)
|
||
|
|
||
|
// PeerMetrics represents a peer metrics model for webhooks.
|
||
|
// For details about the fields, see the domain.PeerStatus and domain.Peer structs.
|
||
|
type PeerMetrics struct {
|
||
|
Status PeerStatus `json:"Status"`
|
||
|
Peer Peer `json:"Peer"`
|
||
|
}
|
||
|
|
||
|
// PeerStatus represents the status of a peer for webhooks.
|
||
|
// For details about the fields, see the domain.PeerStatus struct.
|
||
|
type PeerStatus struct {
|
||
|
UpdatedAt time.Time `json:"UpdatedAt"`
|
||
|
|
||
|
IsConnected bool `json:"IsConnected"`
|
||
|
|
||
|
IsPingable bool `json:"IsPingable"`
|
||
|
LastPing *time.Time `json:"LastPing,omitempty"`
|
||
|
|
||
|
BytesReceived uint64 `json:"BytesReceived"`
|
||
|
BytesTransmitted uint64 `json:"BytesTransmitted"`
|
||
|
|
||
|
Endpoint string `json:"Endpoint"`
|
||
|
LastHandshake *time.Time `json:"LastHandshake,omitempty"`
|
||
|
LastSessionStart *time.Time `json:"LastSessionStart,omitempty"`
|
||
|
}
|
||
|
|
||
|
// NewPeerMetrics creates a new PeerMetrics model from the domain.PeerStatus and domain.Peer models.
|
||
|
func NewPeerMetrics(status domain.PeerStatus, peer domain.Peer) PeerMetrics {
|
||
|
return PeerMetrics{
|
||
|
Status: PeerStatus{
|
||
|
UpdatedAt: status.UpdatedAt,
|
||
|
IsConnected: status.IsConnected,
|
||
|
IsPingable: status.IsPingable,
|
||
|
LastPing: status.LastPing,
|
||
|
BytesReceived: status.BytesReceived,
|
||
|
BytesTransmitted: status.BytesTransmitted,
|
||
|
Endpoint: status.Endpoint,
|
||
|
LastHandshake: status.LastHandshake,
|
||
|
LastSessionStart: status.LastSessionStart,
|
||
|
},
|
||
|
Peer: NewPeer(peer),
|
||
|
}
|
||
|
}
|