-
-
Notifications
You must be signed in to change notification settings - Fork 27
/
event.ex
90 lines (82 loc) · 2.1 KB
/
event.ex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
defmodule Bonny.Event do
@moduledoc """
Represents a kubernetes event.
Documentation: https://kubernetes.io/docs/reference/kubernetes-api/cluster-resources/event-v1/
"""
alias Bonny.Resource
@typedoc """
See https://kubernetes.io/docs/reference/kubernetes-api/cluster-resources/event-v1/ for field explanations.
"""
@type t :: %__MODULE__{
action: binary(),
event_type: event_type(),
message: binary(),
now: DateTime.t(),
reason: binary(),
regarding: map(),
related: map(),
reporting_controller: binary(),
reporting_instance: binary()
}
@typedoc """
Kubernetes events currently support these types.
"""
@type event_type :: :Normal | :Warning
@enforce_keys [
:action,
:event_type,
:message,
:now,
:reason,
:regarding,
:reporting_controller,
:reporting_instance
]
defstruct [
:action,
:event_type,
:message,
:now,
:reason,
:regarding,
:related,
:reporting_controller,
:reporting_instance
]
@doc """
Creates an event.
Options: `:reporting_controller`, `:reporting_instance`
"""
@spec new!(Keyword.t()) :: t()
def new!(fields) do
fields =
fields
|> Keyword.update!(:regarding, &Bonny.Resource.resource_reference/1)
|> Keyword.update(:related, nil, &Bonny.Resource.resource_reference/1)
|> Keyword.put_new(:now, DateTime.utc_now())
|> Keyword.put_new(:reporting_controller, Bonny.Config.name())
|> Keyword.put_new(:reporting_instance, Bonny.Config.instance_name())
struct!(__MODULE__, fields)
end
@spec new!(
Resource.t(),
Resource.t() | nil,
event_type(),
binary(),
binary(),
binary(),
Keyword.t()
) :: t()
def new!(regarding, related \\ nil, event_type, reason, action, message, opts \\ []) do
opts
|> Keyword.merge(
action: action,
event_type: event_type,
message: message,
reason: reason,
regarding: regarding,
related: related
)
|> new!()
end
end