defmodule Mongo.Events do @doc false require Logger def notify(event, topic \\ :topology) do Registry.dispatch(:events_registry, topic, fn entries -> for {pid, _} <- entries, do: send(pid, {:broadcast, topic, event}) end) end defmodule CommandStartedEvent do @moduledoc false defstruct [ ## Returns the command. :command, ## Returns the database name. :database_name, ## Returns the command name. :command_name, ## Returns the driver generated request id. :request_id, ## Returns the driver generated operation id. This is used to link events together such :operation_id, ## as bulk write operations. OPTIONAL. ## Returns the connection id for the command. For languages that do not have this, :connection_id ## this MUST return the driver equivalent which MUST include the server address and port. ## The name of this field is flexible to match the object that is returned from the drive ] end defmodule CommandSucceededEvent do @moduledoc false defstruct [ ## Returns the execution time of the event in the highest possible resolution for the platform. :duration, ## The calculated value MUST be the time to send the message and receive the reply from the server ## and MAY include BSON serialization and/or deserialization. The name can imply the units in which the ## value is returned, i.e. durationMS, durationNanos. ## Returns the command reply. :reply, ## Returns the command name. :command_name, ## Returns the driver generated request id. :request_id, ## Returns the driver generated operation id. This is used to link events together such :operation_id, ## as bulk write operations. OPTIONAL. ## Returns the connection id for the command. For languages that do not have this, :connection_id ## this MUST return the driver equivalent which MUST include the server address and port. ## The name of this field is flexible to match the object that is returned from the driver. ] end defmodule CommandFailedEvent do @moduledoc false defstruct [ ## Returns the execution time of the event in the highest possible resolution for the platform. :duration, ## The calculated value MUST be the time to send the message and receive the reply from the server ## and MAY include BSON serialization and/or deserialization. The name can imply the units in which the ## value is returned, i.e. durationMS, durationNanos. ## Returns the command name. :command_name, ## Returns the failure. Based on the language, this SHOULD be a message string, exception :failure, ## object, or error document. ## Returns the driver generated request id. :request_id, ## Returns the driver generated operation id. This is used to link events together such :operation_id, ## as bulk write operations. OPTIONAL. ## Returns the connection id for the command. For languages that do not have this, :connection_id ## this MUST return the driver equivalent which MUST include the server address and port. ## The name of this field is flexible to match the object that is returned from the driver. ] end defmodule MoreToComeEvent do @moduledoc false defstruct [ ## Returns the command. :command, ## Returns the command name. :command_name ] end defmodule RetryReadEvent do @moduledoc false defstruct [ ## Returns the command. :command, ## Returns the command name. :command_name ] end defmodule RetryWriteEvent do @moduledoc false defstruct [ ## Returns the command. :command, ## Returns the command name. :command_name ] end ## # defmodule ServerSelectionEmptyEvent do @moduledoc false defstruct [:action, :cmd_type, :topology, :opts] end # Published when server description changes, but does NOT include changes to # the RTT defmodule ServerDescriptionChangedEvent do @moduledoc false defstruct [:address, :topology_pid, :previous_description, :new_description] end # Published when server is initialized defmodule ServerOpeningEvent do @moduledoc false defstruct [:address, :topology_pid] end # Published when server is closed defmodule ServerClosedEvent do @moduledoc false defstruct [:address, :topology_pid] end # Published when topology description changes defmodule TopologyDescriptionChangedEvent do @moduledoc false defstruct [:topology_pid, :previous_description, :new_description] end # Published when topology is initialized defmodule TopologyOpeningEvent do @moduledoc false defstruct [:topology_pid] end # Published when topology is closed defmodule TopologyClosedEvent do @moduledoc false defstruct [:topology_pid] end # Fired when the server monitor’s ismaster command is started - immediately # before the ismaster command is serialized into raw BSON and written to the # socket. defmodule ServerHeartbeatStartedEvent do @moduledoc false defstruct [:connection_pid] end # Fired when the server monitor’s ismaster succeeds defmodule ServerHeartbeatSucceededEvent do @moduledoc false defstruct [:duration, :reply, :connection_pid] end # Fired when the server monitor’s ismaster fails, either with an “ok: 0” or # a socket exception. defmodule ServerHeartbeatFailedEvent do @moduledoc false defstruct [:duration, :failure, :connection_pid] end end