Packages
livebook
0.18.3
0.19.8
0.19.7
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.6
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.3
0.17.2
0.17.1
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.14.0-rc.1
0.14.0-rc.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.2
0.1.1
0.1.0
Automate code & data workflows with interactive notebooks
Current section
Files
Jump to
Current section
Files
lib/livebook/teams/broadcasts.ex
defmodule Livebook.Teams.Broadcasts do
alias Livebook.Teams
@type broadcast :: :ok | {:error, term()}
@agents_topic "teams:agents"
@app_deployments_topic "teams:app_deployments"
@clients_topic "teams:clients"
@deployment_groups_topic "teams:deployment_groups"
@app_folders_topic "teams:app_folders"
@app_server_topic "teams:app_server"
@doc """
Subscribes to one or more subtopics in `"teams"`.
## Messages
Topic `#{@agents_topic}`:
* `{:agent_joined, Agent.t()}`
* `{:agent_left, Agent.t()}`
Topic `#{@app_deployments_topic}`:
* `{:app_deployment_started, AppDeployment.t()}`
* `{:app_deployment_stopped, AppDeployment.t()}`
* `{:app_deployment_updated, AppDeployment.t()}`
Topic `#{@clients_topic}`:
* `{:client_connected, id}`
Topic `#{@deployment_groups_topic}`:
* `{:deployment_group_created, DeploymentGroup.t()}`
* `{:deployment_group_updated, DeploymentGroup.t()}`
* `{:deployment_group_deleted, DeploymentGroup.t()}`
* `{:deployment_users_updated, DeploymentGroup.t()}`
Topic `#{@app_server_topic}`:
* `{:server_authorization_updated, DeploymentGroup.t()}`
Topic `#{@app_folders_topic}`:
* `{:app_folder_created, AppFolder.t()}`
* `{:app_folder_updated, AppFolder.t()}`
* `{:app_folder_deleted, AppFolder.t()}`
"""
@spec subscribe(atom() | list(atom())) :: :ok | {:error, term()}
def subscribe(topics) when is_list(topics) do
for topic <- topics, do: subscribe(topic)
:ok
end
def subscribe(topic) do
Phoenix.PubSub.subscribe(Livebook.PubSub, "teams:#{topic}")
end
@doc """
Unsubscribes from `subscribe/0`.
"""
@spec unsubscribe(atom() | list(atom())) :: :ok
def unsubscribe(topics) when is_list(topics) do
for topic <- topics, do: unsubscribe(topic)
:ok
end
def unsubscribe(topic) do
Phoenix.PubSub.unsubscribe(Livebook.PubSub, "teams:#{topic}")
end
@doc """
Broadcasts under `#{@clients_topic}` topic when hub received a new client connection.
"""
@spec client_connected(String.t()) :: broadcast()
def client_connected(id) do
broadcast(@clients_topic, {:client_connected, id})
end
@doc """
Broadcasts under `#{@deployment_groups_topic}` topic when hub received a new deployment group.
"""
@spec deployment_group_created(Teams.DeploymentGroup.t()) :: broadcast()
def deployment_group_created(%Teams.DeploymentGroup{} = deployment_group) do
broadcast(@deployment_groups_topic, {:deployment_group_created, deployment_group})
end
@doc """
Broadcasts under `#{@deployment_groups_topic}` topic when hub received an updated deployment group.
"""
@spec deployment_group_updated(Teams.DeploymentGroup.t()) :: broadcast()
def deployment_group_updated(%Teams.DeploymentGroup{} = deployment_group) do
broadcast(@deployment_groups_topic, {:deployment_group_updated, deployment_group})
end
@doc """
Broadcasts under `#{@deployment_groups_topic}` topic when hub received a deleted deployment group.
"""
@spec deployment_group_deleted(Teams.DeploymentGroup.t()) :: broadcast()
def deployment_group_deleted(%Teams.DeploymentGroup{} = deployment_group) do
broadcast(@deployment_groups_topic, {:deployment_group_deleted, deployment_group})
end
@doc """
Broadcasts under `#{@deployment_groups_topic}` topic when hub received an updated deployment group that changed which users have access to deploy apps.
"""
@spec deployment_users_updated(Teams.DeploymentGroup.t()) :: broadcast()
def deployment_users_updated(%Teams.DeploymentGroup{} = deployment_group) do
broadcast(@deployment_groups_topic, {:deployment_users_updated, deployment_group})
end
@doc """
Broadcasts under `#{@app_deployments_topic}` topic when hub received to start a new app deployment.
"""
@spec app_deployment_started(Teams.AppDeployment.t()) :: broadcast()
def app_deployment_started(%Teams.AppDeployment{} = app_deployment) do
broadcast(@app_deployments_topic, {:app_deployment_started, app_deployment})
end
@doc """
Broadcasts under `#{@app_deployments_topic}` topic when hub received to stop an app deployment.
"""
@spec app_deployment_stopped(Teams.AppDeployment.t()) :: broadcast()
def app_deployment_stopped(%Teams.AppDeployment{} = app_deployment) do
broadcast(@app_deployments_topic, {:app_deployment_stopped, app_deployment})
end
@doc """
Broadcasts under `#{@app_deployments_topic}` topic when hub received an updated app deployment.
"""
@spec app_deployment_updated(Teams.AppDeployment.t()) :: broadcast()
def app_deployment_updated(%Teams.AppDeployment{} = app_deployment) do
broadcast(@app_deployments_topic, {:app_deployment_updated, app_deployment})
end
@doc """
Broadcasts under `#{@agents_topic}` topic when hub received a new agent.
"""
@spec agent_joined(Teams.Agent.t()) :: broadcast()
def agent_joined(%Teams.Agent{} = agent) do
broadcast(@agents_topic, {:agent_joined, agent})
end
@doc """
Broadcasts under `#{@agents_topic}` topic when hub received a deleted agent.
"""
@spec agent_left(Teams.Agent.t()) :: broadcast()
def agent_left(%Teams.Agent{} = agent) do
broadcast(@agents_topic, {:agent_left, agent})
end
@doc """
Broadcasts under `#{@app_server_topic}` topic when hub received an updated deployment group that changed which groups have access to the server.
"""
@spec server_authorization_updated(Teams.DeploymentGroup.t()) :: broadcast()
def server_authorization_updated(%Teams.DeploymentGroup{} = deployment_group) do
broadcast(@app_server_topic, {:server_authorization_updated, deployment_group})
end
@doc """
Broadcasts under `#{@app_folders_topic}` topic when hub received a new app folder.
"""
@spec app_folder_created(Teams.AppFolder.t()) :: broadcast()
def app_folder_created(%Teams.AppFolder{} = app_folder) do
broadcast(@app_folders_topic, {:app_folder_created, app_folder})
end
@doc """
Broadcasts under `#{@app_folders_topic}` topic when hub received an updated app folder.
"""
@spec app_folder_updated(Teams.AppFolder.t()) :: broadcast()
def app_folder_updated(%Teams.AppFolder{} = app_folder) do
broadcast(@app_folders_topic, {:app_folder_updated, app_folder})
end
@doc """
Broadcasts under `#{@app_folders_topic}` topic when hub received a deleted app folder.
"""
@spec app_folder_deleted(Teams.AppFolder.t()) :: broadcast()
def app_folder_deleted(%Teams.AppFolder{} = app_folder) do
broadcast(@app_folders_topic, {:app_folder_deleted, app_folder})
end
defp broadcast(topic, message) do
Phoenix.PubSub.broadcast(Livebook.PubSub, topic, message)
end
end