README.md

# ExRabbitMQAdmin

![pipeline status](https://github.com/Intility/ex_rabbitmq_admin/actions/workflows/elixir.yaml/badge.svg?event=push)

Simple client library for the RabbitMQ [HTTP API](https://www.rabbitmq.com/management.html#http-api),
built on [Tesla](https://github.com/elixir-tesla/tesla).

Read the full documentation [here](https://hexdocs.pm/ex_rabbitmq_admin/readme.html).

### Supported functionality

- [ ] Basic information endpoints (listing connections, channels, nodes, and so on)
- [x] Client adapter configuration
- [x] User management endpoints
- [x] Virtual host endpoints
- [x] Queue endpoints
- [ ] Exchange endpoints
- [ ] Bindings endpoints
- [ ] Parameters
- [ ] Policies endpoints
- [ ] Operator endpoints
- [ ] Health check endpoints

## Installation

This package is [available in Hex](https://hex.pm/packages/ex_rabbitmq_admin), and can be installed
by adding `ex_rabbitmq_admin` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:ex_rabbitmq_admin, "~> 0.1.0"}
  ]
end
```

### Example usage

First step is to set up some basic configuration in your `config.exs` file.

```elixir
# config.exs

config :ex_rabbitmq_admin, ExRabbitMQAdmin,
  base_url: "https://rabbitmq.example.com:56721"
```

Next, you can use the `ExRabbitMQAdmin` client from wherever you want.

```elixir
defmodule RabbitMQControl do
  alias ExRabbitMQAdmin

  @doc """
  Creates a new user on the RabbitMQ cluster.
  """
  def create_rabbit_user(username, password) do
    {:ok, %Tesla.Env{status: 201}} =
      ExRabbitMQAdmin.client()
      |> ExRabbitMQAdmin.add_basic_auth_middleware(username: "rabbit-admin", password: "secret-password")
      |> ExRabbitMQAdmin.User.put_user(username, password: password, tags: "moderator")
  end

  # Or maybe you want to list virtual hosts
  def virtual_hosts do
    {:ok, %Tesla.Env{:status: 200, body: response}} =
      ExRabbitMQAdmin.client()
      |> ExRabbitMQAdmin.add_basic_auth_middleware(username: "rabbit-admin", password: "secret-password")
      |> ExRabbitMQAdmin.Vhost.list_vhosts()
  end
end
```

## Contribution

The RabbitMQ HTTP API documentation is available [here](https://rawcdn.githack.com/rabbitmq/rabbitmq-server/v3.11.2/deps/rabbitmq_management/priv/www/api/index.html).

### Running the test suite

```shell
$ mix coveralls.html
```