event.go RawHistoryFolder
1package domain
2
3import (
4 "context"
5 "time"
6)
7
8// EventType defines the type of event that occurred.
9type EventType string
10
11const (
12 EventImagePushed EventType = "image.pushed"
13 EventImageDeleted EventType = "image.deleted"
14 EventConfigReload EventType = "config.reload"
15 EventManualReload EventType = "manual.reload"
16 EventManualDeploy EventType = "manual.deploy"
17 EventContainerStop EventType = "container.stop"
18 EventContainerStart EventType = "container.start"
19 EventContainerHealthCheck EventType = "container.health_check"
20 EventContainerDeployed EventType = "container.deployed"
21)
22
23// Event represents a domain event that occurred in the system.
24type Event struct {
25 ID string
26 Type EventType
27 Timestamp time.Time
28 ImageName string
29 Tag string
30 Route string
31 ContainerID string
32 Data any
33}
34
35// ImagePushedPayload contains data for image.pushed events.
36type ImagePushedPayload struct {
37 Name string
38 Reference string
39 Manifest []byte
40 Annotations map[string]string
41}
42
43// ContainerEventPayload contains data for container events.
44type ContainerEventPayload struct {
45 ContainerID string
46 Domain string
47 Image string
48 Action string
49}
50
51// ConfigReloadPayload contains data for config.reload events.
52type ConfigReloadPayload struct {
53 Source string // "file" or "manual"
54 AddedRoutes []string
55 RemovedRoutes []string
56 UpdatedRoutes []string
57}
58
59// ManualDeployPayload contains data for manual.deploy events.
60type ManualDeployPayload struct {
61 Domain string `json:"domain"`
62}
63
64// Context keys for domain-level concerns.
65type contextKey string
66
67const (
68 // ContextKeyInternalDeploy indicates the deployment is triggered internally
69 // (e.g., from our own registry's image.pushed event) and should use
70 // internal registry authentication for image pulls.
71 ContextKeyInternalDeploy contextKey = "internal_deploy"
72)
73
74// IsInternalDeploy checks if the context indicates an internal deployment.
75func IsInternalDeploy(ctx context.Context) bool {
76 v, ok := ctx.Value(ContextKeyInternalDeploy).(bool)
77 return ok && v
78}
79
80// WithInternalDeploy returns a context marked as an internal deployment.
81func WithInternalDeploy(ctx context.Context) context.Context {
82 return context.WithValue(ctx, ContextKeyInternalDeploy, true)
83}