Packages
ex_esdb
0.0.12-alpha
0.11.0
0.10.0
0.9.0
0.8.0
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.1
0.5.0
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14-alpha
0.0.13-alpha
0.0.12-alpha
0.0.11-alpha
0.0.10-alpha
0.0.9-alpha
0.0.8-alpha
0.0.6-alpha
0.0.5-alpha
0.0.4-alpha
0.0.3-alpha
0.0.2-alfa
0.0.1-alfa
ExESDB is a reincarnation of rabbitmq/khepri, specialized for use as a BEAM-native event store.
Current section
Files
Jump to
Current section
Files
lib/repl/event_generator.ex
defmodule ExESDB.Repl.EventGenerator do
@moduledoc false
require UUIDv7
require UUID
@initialized_v1 "initialized:v1"
@greenhouse1 "greenhouse1"
@greenhouse2 "greenhouse2"
@greenhouse3 "greenhouse3"
@greenhouse4 "greenhouse4"
@temperature_measured_v1 "temperature_measured:v1"
@humidity_measured_v1 "humidity_measured:v1"
@light_measured_v1 "light_measured:v1"
@fan_activated_v1 "fan_activated:v1"
@fan_deactivated_v1 "fan_deactivated:v1"
@light_activated_v1 "light_activated:v1"
@light_deactivated_v1 "light_deactivated:v1"
@heater_activated_v1 "heater_activated:v1"
@heater_deactivated_v1 "heater_deactivated:v1"
@sprinkler_activated_v1 "sprinkler_activated:v1"
@sprinkler_deactivated_v1 "sprinkler_deactivated:v1"
@desired_temperature_set_v1 "desired_temperature_set:v1"
@desired_humidity_set_v1 "desired_humidity_set:v1"
@desired_light_set_v1 "desired_light_set:v1"
def streams,
do: [
@greenhouse1,
@greenhouse2,
@greenhouse3,
@greenhouse4
]
def event_types,
do: [
@temperature_measured_v1,
@humidity_measured_v1,
@light_measured_v1,
@desired_temperature_set_v1,
@desired_humidity_set_v1,
@desired_light_set_v1,
@light_activated_v1,
@light_deactivated_v1,
@fan_activated_v1,
@fan_deactivated_v1,
@heater_activated_v1,
@heater_deactivated_v1,
@sprinkler_activated_v1,
@sprinkler_deactivated_v1
]
@operators [
"John",
"Paul",
"George",
"Ringo",
"Jim",
"Laura",
"Peter"
]
# Example content type values
@content_types [1, 2, 3]
def temperature_measured_v1, do: "temperature_measured:v1"
def humidity_measured_v1, do: "humidity_measured:v1"
def light_measured_v1, do: "light_measured:v1"
def desired_temperature_set_v1, do: "desired_temperature_set:v1"
def desired_humidity_set_v1, do: "desired_humidity_set:v1"
def desired_light_set_v1, do: "desired_light_set:v1"
def light_activated_v1, do: "light_activated:v1"
def light_deactivated_v1, do: "light_deactivated:v1"
def fan_activated_v1, do: "fan_activated:v1"
def fan_deactivated_v1, do: "fan_deactivated:v1"
def heater_activated_v1, do: "heater_activated:v1"
def heater_deactivated_v1, do: "heater_deactivated:v1"
def sprinkler_activated_v1, do: "sprinkler_activated:v1"
def sprinkler_deactivated_v1, do: "sprinkler_deactivated:v1"
defp random_operator, do: Enum.random(@operators)
defp random_temperature, do: 5 + :rand.uniform(30)
defp random_humidity, do: :rand.uniform(100)
defp random_light, do: :rand.uniform(100)
defp random_intensity, do: :rand.uniform(100)
defp initialized,
do: %ExESDB.NewEvent{
event_id: generate_uuid(),
event_type: @initialized_v1,
data_content_type: 1,
metadata_content_type: 1,
data: %{
temperature: random_temperature(),
humidity: random_humidity(),
light: random_light()
}
}
def generate_events(start_from, count) when is_integer(count) and count > 0 do
case start_from do
0 ->
[initialized() | generate_events(count - 1)]
_ ->
generate_events(count)
end
end
def generate_events(0), do: []
def generate_events(count)
when is_integer(count) and count > 0,
do:
1..count
|> Enum.map(&generate_event/1)
defp generate_event(_) do
event_id = generate_uuid()
event_type = Enum.random(event_types())
%ExESDB.NewEvent{
event_id: event_id,
event_type: event_type,
data_content_type: Enum.random(@content_types),
metadata_content_type: Enum.random(@content_types),
data: random_payload(event_type),
metadata: generate_optional_metadata()
}
end
defp generate_uuid, do: UUIDv7.generate()
defp random_payload(@temperature_measured_v1),
do: %{
temperature: random_temperature()
}
defp random_payload(@humidity_measured_v1),
do: %{
humidity: random_humidity()
}
defp random_payload(@light_measured_v1),
do: %{
light: random_light()
}
defp random_payload(@desired_temperature_set_v1),
do: %{
temperature: random_temperature(),
operator: random_operator()
}
defp random_payload(@desired_humidity_set_v1),
do: %{
humidity: random_humidity(),
operator: random_operator()
}
defp random_payload(@desired_light_set_v1),
do: %{
light: random_light(),
operator: random_operator()
}
defp random_payload(_),
do: %{
intensity: random_intensity()
}
defp generate_optional_metadata do
# 70% chance of metadata
%{
causation_id: generate_uuid(),
correlation_id: generate_uuid()
}
end
end