初版功能完成
ci / Go checks (ubuntu-latest) (push) Has been cancelled
ci / Go checks (windows-latest) (push) Has been cancelled

This commit is contained in:
qsc
2026-08-29 13:12:17 +08:00
commit 142e5dc7d6
217 changed files with 21313 additions and 0 deletions
+78
View File
@@ -0,0 +1,78 @@
package model
import (
"fmt"
"net/netip"
"time"
)
// SessionStatus is the Server-authoritative Remote Subnet Session state.
type SessionStatus string
const (
SessionCreating SessionStatus = "CREATING"
SessionPreparingSite SessionStatus = "PREPARING_SITE"
SessionReady SessionStatus = "READY"
SessionActive SessionStatus = "ACTIVE"
SessionStopping SessionStatus = "STOPPING"
SessionClosed SessionStatus = "CLOSED"
SessionFailed SessionStatus = "FAILED"
)
// SessionStatuses is the complete v1 state set.
var SessionStatuses = [...]SessionStatus{
SessionCreating,
SessionPreparingSite,
SessionReady,
SessionActive,
SessionStopping,
SessionClosed,
SessionFailed,
}
// Valid reports whether the status belongs to the v1 state machine.
func (s SessionStatus) Valid() bool {
switch s {
case SessionCreating,
SessionPreparingSite,
SessionReady,
SessionActive,
SessionStopping,
SessionClosed,
SessionFailed:
return true
default:
return false
}
}
// ParseSessionStatus parses and validates a wire/storage Session state.
func ParseSessionStatus(value string) (SessionStatus, error) {
status := SessionStatus(value)
if !status.Valid() {
return "", fmt.Errorf("invalid session status %q", value)
}
return status, nil
}
// SessionCounters are cumulative and use the Engineer point of view.
type SessionCounters struct {
UploadBytes uint64 `json:"upload_bytes"`
DownloadBytes uint64 `json:"download_bytes"`
UploadPackets uint64 `json:"upload_packets"`
DownloadPackets uint64 `json:"download_packets"`
}
// Session is the Server-authoritative persisted Remote Subnet lifecycle.
type Session struct {
ID uint64 `json:"session_id,string"`
EngineerNodeID string `json:"engineer_node_id"`
SiteNodeID string `json:"site_node_id"`
Status SessionStatus `json:"status"`
CIDRs []netip.Prefix `json:"cidrs"`
CreatedAt time.Time `json:"created_at"`
ActiveAt *time.Time `json:"active_at,omitempty"`
ClosedAt *time.Time `json:"closed_at,omitempty"`
ErrorCode string `json:"error_code,omitempty"`
Counters SessionCounters `json:"counters"`
}