%%%------------------------------------------------------------------- %%% @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/4,
post_request/4,
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, _Env, Opts, State) ->
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, State}.
post_request(Req, _Env, _, State) ->
{ok, Req, State}.
plugin_info() ->
#{
title => <<"nova_correlation_plugin">>,
version => <<"0.2.0">>,
url => <<"https://github.com/novaframework/nova">>,
authors => [<<"Nova team