backupy-agent/apps/agent/internal/proto/proto.go
TronoSfera 8b0c978337 feat(initial): Backupy agent + backupy-decrypt CLI
Source ports from the TronoSfera/backupy-cloud monorepo:
- apps/agent/        — Go agent (WSS client, persistent queue, Docker
                       discovery, 5 DB drivers: PG/MySQL/Mongo/Redis/SQLite,
                       pre/post hooks, Prometheus metrics)
- apps/backupy-decrypt/ — standalone CLI for client-side decryption
- packages/proto/    — protobuf wire format (generated .pb.go committed
                       so the repo builds without protoc)
- docs/              — agent spec + wire-protocol contract

Apache-2.0 license. Image published to ghcr.io/tronosfera/backupy-agent
on every v* tag via .github/workflows/release.yml (multi-arch amd64+arm64).
2026-05-17 20:22:35 +03:00

73 lines
3 KiB
Go

// Package proto re-exports the generated protobuf types so the rest of the
// agent imports a single canonical name (`proto.Envelope`) rather than the
// long `backupv1.Envelope`. It also centralises a few convenience helpers
// (NewEnvelope) so call sites stay concise.
//
// Prerequisite: `make proto` must have been run from the repo root to
// generate packages/proto/gen/go/v1/*.pb.go. The agent's go.mod uses a
// `replace` directive pointing at that local path — see go.mod.
package proto
import (
"time"
backupv1 "github.com/backupy/backupy/packages/proto/gen/go/backupv1"
)
// Type aliases keep the agent codebase decoupled from the long generated
// package path. If we ever migrate to backup.v2 we change the alias here
// and the rest of the agent compiles unchanged.
type (
Envelope = backupv1.Envelope
Register = backupv1.Register
Heartbeat = backupv1.Heartbeat
AgentMetrics = backupv1.AgentMetrics
DiscoveryReport = backupv1.DiscoveryReport
JobUpdate = backupv1.JobUpdate
BackupCompleted = backupv1.BackupCompleted
HealthCheckResult = backupv1.HealthCheckResult
LogEvent = backupv1.LogEvent
Ack = backupv1.Ack
RegisterAck = backupv1.RegisterAck
ConfigUpdate = backupv1.ConfigUpdate
RunBackup = backupv1.RunBackup
CancelJob = backupv1.CancelJob
RunHealthCheck = backupv1.RunHealthCheck
SelfUpdate = backupv1.SelfUpdate
Ping = backupv1.Ping
AgentConfig = backupv1.AgentConfig
// Envelope payload oneof wrappers — full set so client/loops construct
// outgoing envelopes and pattern-match incoming via `agentproto.Envelope_*`
// without importing the generated package.
Envelope_Register = backupv1.Envelope_Register
Envelope_Heartbeat = backupv1.Envelope_Heartbeat
Envelope_Discovery = backupv1.Envelope_Discovery
Envelope_JobUpdate = backupv1.Envelope_JobUpdate
Envelope_BackupCompleted = backupv1.Envelope_BackupCompleted
Envelope_HealthResult = backupv1.Envelope_HealthResult
Envelope_Log = backupv1.Envelope_Log
Envelope_RestoreUpdate = backupv1.Envelope_RestoreUpdate
Envelope_Ack = backupv1.Envelope_Ack
Envelope_RegisterAck = backupv1.Envelope_RegisterAck
Envelope_ConfigUpdate = backupv1.Envelope_ConfigUpdate
Envelope_RunBackup = backupv1.Envelope_RunBackup
Envelope_CancelJob = backupv1.Envelope_CancelJob
Envelope_RunHealthCheck = backupv1.Envelope_RunHealthCheck
Envelope_SelfUpdate = backupv1.Envelope_SelfUpdate
Envelope_Ping = backupv1.Envelope_Ping
)
// NowMillis returns the current wall-clock time in unix milliseconds —
// the canonical ts_ms field used in every Envelope.
func NowMillis() uint64 {
return uint64(time.Now().UnixMilli())
}
// NewEnvelope is a convenience constructor that stamps ts_ms with the
// current time. Callers set seq + correlation_id + payload separately.
func NewEnvelope() *Envelope {
return &Envelope{TsMs: NowMillis()}
}