defmodule OffBroadway.Defender365.Options do
@moduledoc """
OffBroadway Defender365 option definition and custom validators.
"""
def definition do
[
receive_interval: [
type: :non_neg_integer,
doc: """
The duration (in milliseconds) for which the producer waits before
making a request for more messages. Keep in mind that the 365 Defender API
quota is 50 calls per minute and 1500 calls per hour.
""",
default: 5000
],
from_timestamp: [
type: {
:custom,
__MODULE__,
:type_date_time,
[[{:name, :from_timestamp}]]
},
required: false,
doc: """
If present, use this value to fetch incidents with "lastUpdateTime" greater or
equal to given value.
"""
],
on_success: [
type: :atom,
doc: """
Configures the acking behaviour for successful messages. See the "Acknowledgements"
section below for all the possible values.
""",
default: :ack
],
on_failure: [
type: :atom,
doc: """
Configures the acking behaviour for failed messages. See the "Acknowledgements"
section below for all the possible values.
""",
default: :noop
],
incident_client: [
doc: """
A module that implements the `OffBroadway.Defender365.Client` behaviour.
This module is responsible for fetching and acknowledging the messages
from the 365 Defender APIs. All options passed to the producer will also be forwarded to
the client.
""",
default: OffBroadway.Defender365.IncidentClient
],
config: [
type: :non_empty_keyword_list,
required: true,
keys: [
tenant_id: [type: :string, required: true, doc: "Tenant ID to consume incidents for"],
client_id: [type: :string, required: true, doc: "Client ID to use for obtaining authentication token"],
client_secret: [type: :string, required: true, doc: "Client secret to use for obtaining authentication token"]
],
doc: """
A set of config options that overrides the default config for the `incident_client`
module. Any option set here can also be configured in `config.exs`.
"""
],
test_pid: [type: :pid, doc: false],
message_server: [type: :pid, doc: false]
]
end
def type_date_time(value, _) when is_struct(value), do: {:ok, value}
end