Skip to content

Instantly share code, notes, and snippets.

@programisti
Created September 17, 2018 12:24
Show Gist options
  • Save programisti/e266b9ad697e97c700c87807d5fd349f to your computer and use it in GitHub Desktop.
Save programisti/e266b9ad697e97c700c87807d5fd349f to your computer and use it in GitHub Desktop.
defmodule NDCThreadRequest do
use Timex
require Logger
alias Timex.Interval, as: Interval
def start_thread(provider, request_data, method, consumer) do
time_start = Time.now
IO.inspect "NDCThread start | Provider: #{provider}"
{status, response} = try do
NDCEx.request(method, request_data, provider, consumer)
rescue
config_error in ConfigMissingError -> {:error, ErrorHandler.format_thread("Invalid provider code (#{provider})", provider, method)}
end
time_interval = Time.diff(Time.now, time_start, :milliseconds)
header = get_header(status, provider, method, time_interval)
header = "<!-- AG-Info: ProviderName: #{provider} | Status: #{Atom.to_string(status)} | NDCMethod: #{method} | ResponseTime: #{time_interval} -->"
response_xml = "#{header}\n#{response}\n<!-- AG-EOM -->\n"
_ = log_provider(provider, method, status, time_interval)
IO.inspect "NDCThread finished | Provider: #{provider} | Time elapsed(ms): #{time_interval}"
# FluxterModule.track_provider_request(method, provider, time_interval)
{status, response_xml, provider, method}
end
def get_header(status, provider, method, time_interval) do
header = "<!-- AG-Info: ProviderName: #{provider} | Status: #{Atom.to_string(status)} | NDCMethod: #{method} | ResponseTime: #{time_interval} -->"
end
defp log_provider(provider, method, status, time_interval) do
try do
data = %ProviderRequest{}
data = %{ data | fields: %{ data.fields | processTime: time_interval }}
data = %{ data | tags: %{ data.tags |
providerName: provider,
ndcMethod: method,
status: Atom.to_string(status),
}}
data |> Influx.Connection.write()
rescue
_ in _ -> {:error, "unable to log consumer request"}
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment