%% WARNING: DO NOT EDIT, AUTO-GENERATED CODE! %% See https://github.com/aws-beam/aws-codegen for more details. %% @doc AWS X-Ray provides APIs for managing debug traces and retrieving %% service maps and other data created by processing those traces. -module(aws_xray). -export([batch_get_traces/2, batch_get_traces/3, create_group/2, create_group/3, create_sampling_rule/2, create_sampling_rule/3, delete_group/2, delete_group/3, delete_sampling_rule/2, delete_sampling_rule/3, get_encryption_config/2, get_encryption_config/3, get_group/2, get_group/3, get_groups/2, get_groups/3, get_sampling_rules/2, get_sampling_rules/3, get_sampling_statistic_summaries/2, get_sampling_statistic_summaries/3, get_sampling_targets/2, get_sampling_targets/3, get_service_graph/2, get_service_graph/3, get_time_series_service_statistics/2, get_time_series_service_statistics/3, get_trace_graph/2, get_trace_graph/3, get_trace_summaries/2, get_trace_summaries/3, put_encryption_config/2, put_encryption_config/3, put_telemetry_records/2, put_telemetry_records/3, put_trace_segments/2, put_trace_segments/3, update_group/2, update_group/3, update_sampling_rule/2, update_sampling_rule/3]). -include_lib("hackney/include/hackney_lib.hrl"). %%==================================================================== %% API %%==================================================================== %% @doc Retrieves a list of traces specified by ID. Each trace is a %% collection of segment documents that originates from a single request. Use %% GetTraceSummaries to get a list of trace IDs. batch_get_traces(Client, Input) -> batch_get_traces(Client, Input, []). batch_get_traces(Client, Input0, Options) -> Method = post, Path = ["/Traces"], SuccessStatusCode = undefined, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Creates a group resource with a name and a filter expression. create_group(Client, Input) -> create_group(Client, Input, []). create_group(Client, Input0, Options) -> Method = post, Path = ["/CreateGroup"], SuccessStatusCode = undefined, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Creates a rule to control sampling behavior for instrumented %% applications. Services retrieve rules with GetSamplingRules, and %% evaluate each rule in ascending order of priority for each request. %% If a rule matches, the service records a trace, borrowing it from the %% reservoir size. After 10 seconds, the service reports back to X-Ray with %% GetSamplingTargets to get updated versions of each in-use rule. The %% updated rule contains a trace quota that the service can use instead of %% borrowing from the reservoir. create_sampling_rule(Client, Input) -> create_sampling_rule(Client, Input, []). create_sampling_rule(Client, Input0, Options) -> Method = post, Path = ["/CreateSamplingRule"], SuccessStatusCode = undefined, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Deletes a group resource. delete_group(Client, Input) -> delete_group(Client, Input, []). delete_group(Client, Input0, Options) -> Method = post, Path = ["/DeleteGroup"], SuccessStatusCode = undefined, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Deletes a sampling rule. delete_sampling_rule(Client, Input) -> delete_sampling_rule(Client, Input, []). delete_sampling_rule(Client, Input0, Options) -> Method = post, Path = ["/DeleteSamplingRule"], SuccessStatusCode = undefined, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Retrieves the current encryption configuration for X-Ray data. get_encryption_config(Client, Input) -> get_encryption_config(Client, Input, []). get_encryption_config(Client, Input0, Options) -> Method = post, Path = ["/EncryptionConfig"], SuccessStatusCode = undefined, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Retrieves group resource details. get_group(Client, Input) -> get_group(Client, Input, []). get_group(Client, Input0, Options) -> Method = post, Path = ["/GetGroup"], SuccessStatusCode = undefined, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Retrieves all active group details. get_groups(Client, Input) -> get_groups(Client, Input, []). get_groups(Client, Input0, Options) -> Method = post, Path = ["/Groups"], SuccessStatusCode = undefined, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Retrieves all sampling rules. get_sampling_rules(Client, Input) -> get_sampling_rules(Client, Input, []). get_sampling_rules(Client, Input0, Options) -> Method = post, Path = ["/GetSamplingRules"], SuccessStatusCode = undefined, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Retrieves information about recent sampling results for all sampling %% rules. get_sampling_statistic_summaries(Client, Input) -> get_sampling_statistic_summaries(Client, Input, []). get_sampling_statistic_summaries(Client, Input0, Options) -> Method = post, Path = ["/SamplingStatisticSummaries"], SuccessStatusCode = undefined, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Requests a sampling quota for rules that the service is using to %% sample requests. get_sampling_targets(Client, Input) -> get_sampling_targets(Client, Input, []). get_sampling_targets(Client, Input0, Options) -> Method = post, Path = ["/SamplingTargets"], SuccessStatusCode = undefined, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Retrieves a document that describes services that process incoming %% requests, and downstream services that they call as a result. Root %% services process incoming requests and make calls to downstream services. %% Root services are applications that use the AWS X-Ray SDK. %% Downstream services can be other applications, AWS resources, HTTP web %% APIs, or SQL databases. get_service_graph(Client, Input) -> get_service_graph(Client, Input, []). get_service_graph(Client, Input0, Options) -> Method = post, Path = ["/ServiceGraph"], SuccessStatusCode = undefined, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Get an aggregation of service statistics defined by a specific time %% range. get_time_series_service_statistics(Client, Input) -> get_time_series_service_statistics(Client, Input, []). get_time_series_service_statistics(Client, Input0, Options) -> Method = post, Path = ["/TimeSeriesServiceStatistics"], SuccessStatusCode = undefined, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Retrieves a service graph for one or more specific trace IDs. get_trace_graph(Client, Input) -> get_trace_graph(Client, Input, []). get_trace_graph(Client, Input0, Options) -> Method = post, Path = ["/TraceGraph"], SuccessStatusCode = undefined, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Retrieves IDs and annotations for traces available for a specified %% time frame using an optional filter. To get the full traces, pass the %% trace IDs to BatchGetTraces. %% %% A filter expression can target traced requests that hit specific service %% nodes or edges, have errors, or come from a known user. For example, the %% following filter expression targets traces that pass through %% api.example.com: %% %% service("api.example.com") %% %% This filter expression finds traces that have an annotation named %% account with the value 12345: %% %% annotation.account = "12345" %% %% For a full list of indexed fields and keywords that you can use in filter %% expressions, see Using %% Filter Expressions in the AWS X-Ray Developer Guide. get_trace_summaries(Client, Input) -> get_trace_summaries(Client, Input, []). get_trace_summaries(Client, Input0, Options) -> Method = post, Path = ["/TraceSummaries"], SuccessStatusCode = undefined, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Updates the encryption configuration for X-Ray data. put_encryption_config(Client, Input) -> put_encryption_config(Client, Input, []). put_encryption_config(Client, Input0, Options) -> Method = post, Path = ["/PutEncryptionConfig"], SuccessStatusCode = undefined, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Used by the AWS X-Ray daemon to upload telemetry. put_telemetry_records(Client, Input) -> put_telemetry_records(Client, Input, []). put_telemetry_records(Client, Input0, Options) -> Method = post, Path = ["/TelemetryRecords"], SuccessStatusCode = undefined, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Uploads segment documents to AWS X-Ray. The X-Ray SDK generates %% segment documents and sends them to the X-Ray daemon, which uploads them %% in batches. A segment document can be a completed segment, an in-progress %% segment, or an array of subsegments. %% %% Segments must include the following fields. For the full segment document %% schema, see AWS %% X-Ray Segment Documents in the AWS X-Ray Developer Guide. %% %%

Required Segment Document Fields %% %%

A trace_id consists of three numbers separated by %% hyphens. For example, 1-58406520-a006649127e371903a2de979. This includes: %% %%

Trace ID Format %% %%

put_trace_segments(Client, Input) -> put_trace_segments(Client, Input, []). put_trace_segments(Client, Input0, Options) -> Method = post, Path = ["/TraceSegments"], SuccessStatusCode = undefined, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Updates a group resource. update_group(Client, Input) -> update_group(Client, Input, []). update_group(Client, Input0, Options) -> Method = post, Path = ["/UpdateGroup"], SuccessStatusCode = undefined, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Modifies a sampling rule's configuration. update_sampling_rule(Client, Input) -> update_sampling_rule(Client, Input, []). update_sampling_rule(Client, Input0, Options) -> Method = post, Path = ["/UpdateSamplingRule"], SuccessStatusCode = undefined, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %%==================================================================== %% Internal functions %%==================================================================== -spec request(aws_client:aws_client(), atom(), iolist(), list(), map() | undefined, list(), pos_integer() | undefined) -> {ok, Result, {integer(), list(), hackney:client()}} | {error, Error, {integer(), list(), hackney:client()}} | {error, term()} when Result :: map() | undefined, Error :: {binary(), binary()}. request(Client, Method, Path, Headers0, Input, Options, SuccessStatusCode) -> Client1 = Client#{service => <<"xray">>}, Host = get_host(<<"xray">>, Client1), URL = get_url(Host, Path, Client1), Headers1 = [ {<<"Host">>, Host}, {<<"Content-Type">>, <<"application/x-amz-json-1.1">>} | Headers0 ], Payload = encode_payload(Input), MethodBin = aws_request:method_to_binary(Method), SignedHeaders = aws_request:sign_request(Client1, MethodBin, URL, Headers1, Payload), Response = hackney:request(Method, URL, SignedHeaders, Payload, Options), handle_response(Response, SuccessStatusCode). handle_response({ok, StatusCode, ResponseHeaders, Client}, SuccessStatusCode) when StatusCode =:= 200; StatusCode =:= 202; StatusCode =:= 204; StatusCode =:= SuccessStatusCode -> case hackney:body(Client) of {ok, <<>>} when StatusCode =:= 200; StatusCode =:= SuccessStatusCode -> {ok, undefined, {StatusCode, ResponseHeaders, Client}}; {ok, Body} -> Result = jsx:decode(Body, [return_maps]), {ok, Result, {StatusCode, ResponseHeaders, Client}} end; handle_response({ok, StatusCode, ResponseHeaders, Client}, _) -> {ok, Body} = hackney:body(Client), Error = jsx:decode(Body, [return_maps]), Reason1 = maps:get(<<"message">>, Error, undefined), Reason2 = maps:get(<<"Message">>, Error, Reason1), {error, Reason2, {StatusCode, ResponseHeaders, Client}}; handle_response({error, Reason}, _) -> {error, Reason}. get_host(_EndpointPrefix, #{region := <<"local">>}) -> <<"localhost">>; get_host(EndpointPrefix, #{region := Region, endpoint := Endpoint}) -> aws_util:binary_join([EndpointPrefix, <<".">>, Region, <<".">>, Endpoint], <<"">>). get_url(Host, Path0, Client) -> Proto = maps:get(proto, Client), Path = erlang:iolist_to_binary(Path0), Port = maps:get(port, Client), aws_util:binary_join([Proto, <<"://">>, Host, <<":">>, Port, Path], <<"">>). -spec encode_payload(undefined | map()) -> binary(). encode_payload(undefined) -> <<>>; encode_payload(Input) -> jsx:encode(Input).