getProfile method
Gets the aggregated profile of a profiling group for a specified time range. Amazon CodeGuru Profiler collects posted agent profiles for a profiling group into aggregated profiles.
<note> <p> Because aggregated profiles expire over
time <code>GetProfile</code> is not idempotent. </p>
</note> <p> Specify the time range for the requested
aggregated profile using 1 or 2 of the following parameters:
<code>startTime</code>, <code>endTime</code>,
<code>period</code>. The maximum time range allowed is 7 days.
If you specify all 3 parameters, an exception is thrown. If you specify
only <code>period</code>, the latest aggregated profile is
returned. </p> <p> Aggregated profiles are available with
aggregation periods of 5 minutes, 1 hour, and 1 day, aligned to UTC. The
aggregation period of an aggregated profile determines how long it is
retained. For more information, see <a
href="https://docs.aws.amazon.com/codeguru/latest/profiler-api/API_AggregatedProfileTime.html">
<code>AggregatedProfileTime</code> </a>. The aggregated
profile's aggregation period determines how long it is retained by
CodeGuru Profiler. </p> <ul> <li> <p> If the
aggregation period is 5 minutes, the aggregated profile is retained for 15
days. </p> </li> <li> <p> If the aggregation
period is 1 hour, the aggregated profile is retained for 60 days.
</p> </li> <li> <p> If the aggregation period is 1
day, the aggregated profile is retained for 3 years. </p>
</li> </ul> <p>There are two use cases for calling
<code>GetProfile</code>.</p> <ol> <li>
<p> If you want to return an aggregated profile that already exists,
use <a
href="https://docs.aws.amazon.com/codeguru/latest/profiler-api/API_ListProfileTimes.html">
<code>ListProfileTimes</code> </a> to view the time
ranges of existing aggregated profiles. Use them in a
<code>GetProfile</code> request to return a specific, existing
aggregated profile. </p> </li> <li> <p> If you
want to return an aggregated profile for a time range that doesn't align
with an existing aggregated profile, then CodeGuru Profiler makes a best
effort to combine existing aggregated profiles from the requested time
range and return them as one aggregated profile. </p> <p> If
aggregated profiles do not exist for the full time range requested, then
aggregated profiles for a smaller time range are returned. For example, if
the requested time range is from 00:00 to 00:20, and the existing
aggregated profiles are from 00:15 and 00:25, then the aggregated profiles
from 00:15 to 00:20 are returned. </p> </li> </ol>
May throw InternalServerException. May throw ValidationException. May throw ThrottlingException. May throw ResourceNotFoundException.
Parameter profilingGroupName
:
The name of the profiling group to get.
Parameter accept
:
The format of the returned profiling data. The format maps to the
Accept
and Content-Type
headers of the HTTP
request. You can specify one of the following: or the default .
<ul> <li> <p>
<code>application/json</code> — standard JSON format
</p> </li> <li> <p>
<code>application/x-amzn-ion</code> — the Amazon Ion data
format. For more information, see <a
href="http://amzn.github.io/ion-docs/">Amazon Ion</a>.
</p> </li> </ul>
Parameter endTime
:
The end time of the requested profile. Specify using the ISO 8601 format.
For example, 2020-06-01T13:15:02.001Z represents 1 millisecond past June
1, 2020 1:15:02 PM UTC.
If you specify endTime
, then you must also specify
period
or startTime
, but not both.
Parameter maxDepth
:
The maximum depth of the stacks in the code that is represented in the
aggregated profile. For example, if CodeGuru Profiler finds a method
A
, which calls method B
, which calls method
C
, which calls method D
, then the depth is 4. If
the maxDepth
is set to 2, then the aggregated profile
contains representations of methods A
and B
.
Parameter period
:
Used with startTime
or endTime
to specify the
time range for the returned aggregated profile. Specify using the ISO 8601
format. For example, P1DT1H1M1S
.
<p> To get the latest aggregated profile, specify only
<code>period</code>. </p>
Parameter startTime
:
The start time of the profile to get. Specify using the ISO 8601 format.
For example, 2020-06-01T13:15:02.001Z represents 1 millisecond past June
1, 2020 1:15:02 PM UTC.
<p> If you specify <code>startTime</code>,
then you must also specify <code>period</code> or
<code>endTime</code>, but not both. </p>
Implementation
Future<GetProfileResponse> getProfile({
required String profilingGroupName,
String? accept,
DateTime? endTime,
int? maxDepth,
String? period,
DateTime? startTime,
}) async {
ArgumentError.checkNotNull(profilingGroupName, 'profilingGroupName');
_s.validateStringLength(
'profilingGroupName',
profilingGroupName,
1,
255,
isRequired: true,
);
_s.validateNumRange(
'maxDepth',
maxDepth,
1,
10000,
);
_s.validateStringLength(
'period',
period,
1,
64,
);
final headers = <String, String>{
if (accept != null) 'Accept': accept.toString(),
};
final $query = <String, List<String>>{
if (endTime != null) 'endTime': [_s.iso8601ToJson(endTime).toString()],
if (maxDepth != null) 'maxDepth': [maxDepth.toString()],
if (period != null) 'period': [period],
if (startTime != null)
'startTime': [_s.iso8601ToJson(startTime).toString()],
};
final response = await _protocol.sendRaw(
payload: null,
method: 'GET',
requestUri:
'/profilingGroups/${Uri.encodeComponent(profilingGroupName)}/profile',
queryParams: $query,
headers: headers,
exceptionFnMap: _exceptionFns,
);
return GetProfileResponse(
profile: await response.stream.toBytes(),
contentType:
_s.extractHeaderStringValue(response.headers, 'Content-Type')!,
contentEncoding:
_s.extractHeaderStringValue(response.headers, 'Content-Encoding'),
);
}