Created
September 17, 2018 12:24
-
-
Save programisti/e266b9ad697e97c700c87807d5fd349f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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