%% WARNING: DO NOT EDIT, AUTO-GENERATED CODE! %% See https://github.com/jkakar/aws-codegen for more details. %% @doc AWS Support %% %% The AWS Support API reference is intended for programmers who need %% detailed information about the AWS Support operations and data types. This %% service enables you to manage your AWS Support cases programmatically. It %% uses HTTP methods that return results in JSON format. %% %% The AWS Support service also exposes a set of Trusted %% Advisor features. You can retrieve a list of checks and their %% descriptions, get check results, specify checks to refresh, and get the %% refresh status of checks. %% %% The following list describes the AWS Support case management operations: %% %% The following list describes the operations available from the %% AWS Support service for Trusted Advisor: %% %% For authentication of requests, %% AWS Support uses Signature %% Version 4 Signing Process. %% %% See About %% the AWS Support API in the AWS Support User Guide for %% information about how to use this service to create and manage your %% support cases, and how to call Trusted Advisor for results of checks on %% your resources. -module(aws_support). -export([add_attachments_to_set/2, add_attachments_to_set/3, add_communication_to_case/2, add_communication_to_case/3, create_case/2, create_case/3, describe_attachment/2, describe_attachment/3, describe_cases/2, describe_cases/3, describe_communications/2, describe_communications/3, describe_services/2, describe_services/3, describe_severity_levels/2, describe_severity_levels/3, describe_trusted_advisor_check_refresh_statuses/2, describe_trusted_advisor_check_refresh_statuses/3, describe_trusted_advisor_check_result/2, describe_trusted_advisor_check_result/3, describe_trusted_advisor_check_summaries/2, describe_trusted_advisor_check_summaries/3, describe_trusted_advisor_checks/2, describe_trusted_advisor_checks/3, refresh_trusted_advisor_check/2, refresh_trusted_advisor_check/3, resolve_case/2, resolve_case/3]). -include_lib("hackney/include/hackney_lib.hrl"). %%==================================================================== %% API %%==================================================================== %% @doc Adds one or more attachments to an attachment set. If an %% AttachmentSetId is not specified, a new attachment set is %% created, and the ID of the set is returned in the response. If an %% AttachmentSetId is specified, the attachments are added to %% the specified set, if it exists. %% %% An attachment set is a temporary container for attachments that are to be %% added to a case or case communication. The set is available for one hour %% after it is created; the ExpiryTime returned in the response %% indicates when the set expires. The maximum number of attachments in a set %% is 3, and the maximum size of any attachment in the set is 5 MB. add_attachments_to_set(Client, Input) when is_map(Client), is_map(Input) -> add_attachments_to_set(Client, Input, []). add_attachments_to_set(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"AddAttachmentsToSet">>, Input, Options). %% @doc Adds additional customer communication to an AWS Support case. You %% use the CaseId value to identify the case to add %% communication to. You can list a set of email addresses to copy on the %% communication using the CcEmailAddresses value. The %% CommunicationBody value contains the text of the %% communication. %% %% The response indicates the success or failure of the request. %% %% This operation implements a subset of the features of the AWS Support %% Center. add_communication_to_case(Client, Input) when is_map(Client), is_map(Input) -> add_communication_to_case(Client, Input, []). add_communication_to_case(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"AddCommunicationToCase">>, Input, Options). %% @doc Creates a new case in the AWS Support Center. This operation is %% modeled on the behavior of the AWS Support Center Create %% Case page. Its parameters require you to specify the following %% information: %% %%
  1. IssueType. The type of issue for the case. You can %% specify either "customer-service" or "technical." If you do not indicate a %% value, the default is "technical."
  2. ServiceCode. The code %% for an AWS service. You obtain the ServiceCode by calling %% DescribeServices.
  3. CategoryCode. The category for %% the service defined for the ServiceCode value. You also %% obtain the category code for a service by calling DescribeServices. %% Each AWS service defines its own set of category codes.
  4. %% SeverityCode. A value that indicates the urgency of the case, which %% in turn determines the response time according to your service level %% agreement with AWS Support. You obtain the SeverityCode by calling %% DescribeSeverityLevels.
  5. Subject. The %% Subject field on the AWS Support Center Create %% Case page.
  6. CommunicationBody. The Description %% field on the AWS Support Center Create %% Case page.
  7. AttachmentSetId. The ID of a set of %% attachments that has been created by using %% AddAttachmentsToSet.
  8. Language. The human language %% in which AWS Support handles the case. English and Japanese are currently %% supported.
  9. CcEmailAddresses. The AWS Support Center %% CC field on the Create %% Case page. You can list email addresses to be copied on any %% correspondence about the case. The account that opens the case is already %% identified by passing the AWS Credentials in the HTTP POST method or in a %% method or function call from one of the programming languages supported by %% an AWS SDK.
%% To add additional communication or attachments to an existing case, %% use AddCommunicationToCase. %% %% A successful CreateCase request returns an AWS Support case %% number. Case numbers are used by the DescribeCases operation to %% retrieve existing AWS Support cases. create_case(Client, Input) when is_map(Client), is_map(Input) -> create_case(Client, Input, []). create_case(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"CreateCase">>, Input, Options). %% @doc Returns the attachment that has the specified ID. Attachment IDs are %% generated by the case management system when you add an attachment to a %% case or case communication. Attachment IDs are returned in the %% AttachmentDetails objects that are returned by the %% DescribeCommunications operation. describe_attachment(Client, Input) when is_map(Client), is_map(Input) -> describe_attachment(Client, Input, []). describe_attachment(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DescribeAttachment">>, Input, Options). %% @doc Returns a list of cases that you specify by passing one or more case %% IDs. In addition, you can filter the cases by date by setting values for %% the AfterTime and BeforeTime request parameters. %% You can set values for the IncludeResolvedCases and %% IncludeCommunications request parameters to control how much %% information is returned. %% %% Case data is available for 12 months after creation. If a case was created %% more than 12 months ago, a request for data might cause an error. %% %% The response returns the following in JSON format: %% %%
  1. One or more CaseDetails data types.
  2. One or more %% NextToken values, which specify where to paginate the %% returned records represented by the CaseDetails objects.
  3. %%
describe_cases(Client, Input) when is_map(Client), is_map(Input) -> describe_cases(Client, Input, []). describe_cases(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DescribeCases">>, Input, Options). %% @doc Returns communications (and attachments) for one or more support %% cases. You can use the AfterTime and BeforeTime %% parameters to filter by date. You can use the CaseId %% parameter to restrict the results to a particular case. %% %% Case data is available for 12 months after creation. If a case was created %% more than 12 months ago, a request for data might cause an error. %% %% You can use the MaxResults and NextToken %% parameters to control the pagination of the result set. Set %% MaxResults to the number of cases you want displayed on each %% page, and use NextToken to specify the resumption of %% pagination. describe_communications(Client, Input) when is_map(Client), is_map(Input) -> describe_communications(Client, Input, []). describe_communications(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DescribeCommunications">>, Input, Options). %% @doc Returns the current list of AWS services and a list of service %% categories that applies to each one. You then use service names and %% categories in your CreateCase requests. Each AWS service has its %% own set of categories. %% %% The service codes and category codes correspond to the values that are %% displayed in the Service and Category drop-down lists on the %% AWS Support Center Create %% Case page. The values in those fields, however, do not necessarily %% match the service codes and categories returned by the %% DescribeServices request. Always use the service codes and %% categories obtained programmatically. This practice ensures that you %% always have the most recent set of service and category codes. describe_services(Client, Input) when is_map(Client), is_map(Input) -> describe_services(Client, Input, []). describe_services(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DescribeServices">>, Input, Options). %% @doc Returns the list of severity levels that you can assign to an AWS %% Support case. The severity level for a case is also a field in the %% CaseDetails data type included in any CreateCase request. describe_severity_levels(Client, Input) when is_map(Client), is_map(Input) -> describe_severity_levels(Client, Input, []). describe_severity_levels(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DescribeSeverityLevels">>, Input, Options). %% @doc Returns the refresh status of the Trusted Advisor checks that have %% the specified check IDs. Check IDs can be obtained by calling %% DescribeTrustedAdvisorChecks. describe_trusted_advisor_check_refresh_statuses(Client, Input) when is_map(Client), is_map(Input) -> describe_trusted_advisor_check_refresh_statuses(Client, Input, []). describe_trusted_advisor_check_refresh_statuses(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DescribeTrustedAdvisorCheckRefreshStatuses">>, Input, Options). %% @doc Returns the results of the Trusted Advisor check that has the %% specified check ID. Check IDs can be obtained by calling %% DescribeTrustedAdvisorChecks. %% %% The response contains a TrustedAdvisorCheckResult object, which %% contains these three objects: %% %% In addition, the %% response contains these fields: %% %% describe_trusted_advisor_check_result(Client, Input) when is_map(Client), is_map(Input) -> describe_trusted_advisor_check_result(Client, Input, []). describe_trusted_advisor_check_result(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DescribeTrustedAdvisorCheckResult">>, Input, Options). %% @doc Returns the summaries of the results of the Trusted Advisor checks %% that have the specified check IDs. Check IDs can be obtained by calling %% DescribeTrustedAdvisorChecks. %% %% The response contains an array of TrustedAdvisorCheckSummary %% objects. describe_trusted_advisor_check_summaries(Client, Input) when is_map(Client), is_map(Input) -> describe_trusted_advisor_check_summaries(Client, Input, []). describe_trusted_advisor_check_summaries(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DescribeTrustedAdvisorCheckSummaries">>, Input, Options). %% @doc Returns information about all available Trusted Advisor checks, %% including name, ID, category, description, and metadata. You must specify %% a language code; English ("en") and Japanese ("ja") are currently %% supported. The response contains a TrustedAdvisorCheckDescription %% for each check. describe_trusted_advisor_checks(Client, Input) when is_map(Client), is_map(Input) -> describe_trusted_advisor_checks(Client, Input, []). describe_trusted_advisor_checks(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DescribeTrustedAdvisorChecks">>, Input, Options). %% @doc Requests a refresh of the Trusted Advisor check that has the %% specified check ID. Check IDs can be obtained by calling %% DescribeTrustedAdvisorChecks. %% %% The response contains a TrustedAdvisorCheckRefreshStatus object, %% which contains these fields: %% %% refresh_trusted_advisor_check(Client, Input) when is_map(Client), is_map(Input) -> refresh_trusted_advisor_check(Client, Input, []). refresh_trusted_advisor_check(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"RefreshTrustedAdvisorCheck">>, Input, Options). %% @doc Takes a CaseId and returns the initial state of the case %% along with the state of the case after the call to ResolveCase %% completed. resolve_case(Client, Input) when is_map(Client), is_map(Input) -> resolve_case(Client, Input, []). resolve_case(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ResolveCase">>, Input, Options). %%==================================================================== %% Internal functions %%==================================================================== -spec request(aws_client:aws_client(), binary(), map(), list()) -> {ok, Result, {integer(), list(), hackney:client()}} | {error, Error, {integer(), list(), hackney:client()}} | {error, term()} when Result :: map() | undefined, Error :: {binary(), binary()}. request(Client, Action, Input, Options) -> Client1 = Client#{service => <<"support">>}, Host = get_host(<<"support">>, Client1), URL = get_url(Host, Client1), Headers = [{<<"Host">>, Host}, {<<"Content-Type">>, <<"application/x-amz-json-1.1">>}, {<<"X-Amz-Target">>, << <<"AWSSupport_20130415.">>/binary, Action/binary>>}], Payload = jsx:encode(Input), Headers1 = aws_request:sign_request(Client1, <<"POST">>, URL, Headers, Payload), Response = hackney:request(post, URL, Headers1, Payload, Options), handle_response(Response). handle_response({ok, 200, ResponseHeaders, Client}) -> case hackney:body(Client) of {ok, <<>>} -> {ok, undefined, {200, ResponseHeaders, Client}}; {ok, Body} -> Result = jsx:decode(Body, [return_maps]), {ok, Result, {200, ResponseHeaders, Client}} end; handle_response({ok, StatusCode, ResponseHeaders, Client}) -> {ok, Body} = hackney:body(Client), Error = jsx:decode(Body, [return_maps]), Exception = maps:get(<<"__type">>, Error, undefined), Reason = maps:get(<<"message">>, Error, undefined), {error, {Exception, Reason}, {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, Client) -> Proto = maps:get(proto, Client), Port = maps:get(port, Client), aws_util:binary_join([Proto, <<"://">>, Host, <<":">>, Port, <<"/">>], <<"">>).