1import type * as autoscaling from "@distilled.cloud/aws/auto-scaling";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { AutoScalingGroup } from "./AutoScalingGroup.ts";
5
6/**
7 * `DescribeScalingActivities` request with `AutoScalingGroupName` injected
8 * from the bound {@link AutoScalingGroup}.
9 */
10export interface DescribeScalingActivitiesRequest extends Omit<
11 autoscaling.DescribeScalingActivitiesType,
12 "AutoScalingGroupName"
13> {}
14
15/**
16 * Runtime binding for the `DescribeScalingActivities` operation (IAM action
17 * `autoscaling:DescribeScalingActivities`; EC2 Auto Scaling `Describe*`
18 * actions do not support resource-level permissions, so the grant is on `*`).
19 *
20 * Returns the bound group's recent scaling activities — what scaled, when,
21 * why, and whether it succeeded. Provide the implementation with
22 * `Effect.provide(AWS.AutoScaling.DescribeScalingActivitiesHttp)`.
23 * ### Observing Scaling Activity
24 * **Example:** List recent scaling activities
25 * ```typescript
26 * // init — bind the operation to the group
27 * const describeScalingActivities =
28 * yield* AWS.AutoScaling.DescribeScalingActivities(group);
29 *
30 * // runtime — page through the group's recent activities
31 * const page = yield* describeScalingActivities({ MaxRecords: 50 });
32 * for (const activity of page.Activities ?? []) {
33 * yield* Effect.log(`${activity.StatusCode}: ${activity.Cause}`);
34 * }
35 * ```
36 *
37 * @binding
38 */
39export interface DescribeScalingActivities extends Binding.Service<
40 DescribeScalingActivities,
41 "AWS.AutoScaling.DescribeScalingActivities",
42 (
43 group: AutoScalingGroup,
44 ) => Effect.Effect<
45 (
46 request?: DescribeScalingActivitiesRequest,
47 ) => Effect.Effect<
48 autoscaling.ActivitiesType,
49 autoscaling.DescribeScalingActivitiesError
50 >
51 >
52> {}
53
54export const DescribeScalingActivities =
55 Binding.Service<DescribeScalingActivities>(
56 "AWS.AutoScaling.DescribeScalingActivities",
57 );