%%%------------------------------------------------------------------- %%% @doc %%%
request_correlation_header in the plugin config to read the correlation ID from the request headers.
%%%
%%% Notice: Cowboy request headers are always in lowercase.
%%%
%%% logger_metadata_key to customize the correlation ID key in OTP logger process metadata. By default it is set to <<"correlation-id">>.
%%%
%%% correlation_id in the request object for controller use if it makes further requests that it want to pass on the correlation id to.
%%%
%%% <<"x-correlation-id">>,
%%% logger_metadata_key => correlation_id
%%% }}
%%% ]}
%%% ]]>
%%%
%%% @end
%%%-------------------------------------------------------------------
-module(nova_correlation_plugin).
-behaviour(nova_plugin).
-export([pre_request/2,
post_request/2,
plugin_info/0]).
-include_lib("kernel/include/logger.hrl").
%%--------------------------------------------------------------------
%% @doc
%% Pre-request callback to either pick up correlation id from request headers
%% or generate a new uuid correlation id.
%% @end
%%--------------------------------------------------------------------
pre_request(Req0, Opts) ->
CorrId = get_correlation_id(Req0, Opts),
%% Update the loggers metadata with correlation-id
ok = update_logger_metadata(CorrId, Opts),
Req1 = cowboy_req:set_resp_header(<<"X-Correlation-ID">>, CorrId, Req0),
Req = Req1#{correlation_id => CorrId},
{ok, Req}.
post_request(Req, _) ->
{ok, Req}.
plugin_info() ->
{
<<"nova_correlation_plugin">>,
<<"0.2.0">>,
<<"Nova team