defmodule Instream.Writer.Line do @moduledoc """ Point writer for the line protocol. ## Write Options - `precision`: write points with a precision other than `:nanosecond` ### InfluxDB v2.x Options - `bucket`: write data to a specific bucket - `org`: write data to a specific organization ### InfluxDB v1.x Options - `database`: write data to a specific database - `retention_policy`: write data with a specific retention policy """ alias Instream.Encoder.Line, as: Encoder alias Instream.Query.Headers alias Instream.Query.URL @behaviour Instream.Writer @impl Instream.Writer def write([_ | _] = points, opts, conn) do config = conn.config() headers = Headers.assemble(config, opts) ++ [{"Content-Type", "text/plain"}] body = Encoder.encode(points) url = URL.write(config, opts) http_opts = Keyword.merge( Keyword.get(config, :http_opts, []), Keyword.get(opts, :http_opts, []) ) config[:http_client].request(:post, url, headers, body, http_opts) end def write(_, _, _), do: {:ok, 200, [], ""} end