Repository: pagopa/io-wallet
Pull request #395: feat: created new createWalletAttestation to work without fiscal code
Author: login: silvicir
Labels: name: infra
name: apps
name: feat
name: changeset
Created: 2025-03-31T09:27:14Z | Merged: 2025-04-04T07:49:44Z

<!--- Please always add a PR description as if nobody knows anything about the context these changes come from. -->
<!--- Even if we are all from our internal team, we may not be on the same page. -->
<!--- Write this PR as you were contributing to a public OSS project, where nobody knows you and you have to earn their trust. -->
<!--- This will improve our projects in the long run! Thanks. -->

#### List of Changes

<!--- Describe your changes in detail -->
1. Added `addWalletInstanceUserId` to synchronize new collection `wallet-instances-user-id`(which contains `{ id, userId }`) to `wallet-instances`
2. Created new endpoint `createWalletAttestationV2` without fiscal-code as body parameter

#### Motivation and Context

<!--- Why is this change required? What problem does it solve? -->

#### How Has This Been Tested?

<!--- Please describe in detail how you tested your changes. -->
<!--- Include details of your testing environment, tests ran to see how -->
<!--- your change affects other areas of the code, etc. -->

#### Screenshots (if appropriate):

<!--- Attach screenshots in case changes impact UI. -->

#### Checklist:

<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->

- [ ] My change requires a change to the documentation.
- [ ] I have updated the documentation accordingly.



Diff:
diff --git a/.changeset/flat-cooks-taste.md b/.changeset/flat-cooks-taste.md
new file mode 100644
index 000000000..ec362c8bd
--- /dev/null
+++ b/.changeset/flat-cooks-taste.md
@@ -0,0 +1,5 @@
+---
+"io-wallet-user-func": minor
+---
+
+Added endpoint createWalletAttestationV2
diff --git a/apps/io-wallet-user-func/openapi.yaml b/apps/io-wallet-user-func/openapi.yaml
index d056ac3ed..e75c19641 100644
--- a/apps/io-wallet-user-func/openapi.yaml
+++ b/apps/io-wallet-user-func/openapi.yaml
@@ -104,6 +104,40 @@ paths:
         "503":
           $ref: "#/components/responses/ServiceUnavailable"
 
+  /wallet-attestation:
+    post:
+      operationId: createWalletAttestationV2
+      summary: Create and return a Wallet Attestation
+      security:
+        - FunctionsKey: []
+      requestBody:
+        required: true
+        content:
+          application/json:
+            schema:
+              $ref: "#/components/schemas/CreateWalletAttestationV2Body"
+      responses:
+        "200":
+          description: Wallet Attestation generated
+          content:
+            application/json:
+              schema:
+                $ref: "#/components/schemas/WalletAttestationView"
+        "403":
+          description: The wallet instance was revoked
+          $ref: "#/components/responses/Forbidden"
+        "404":
+          description: The wallet instance was not found
+          $ref: "#/components/responses/NotFound"
+        "409":
+          $ref: "#/components/responses/Conflict"
+        "422":
+          $ref: "#/components/responses/UnprocessableContent"
+        "500":
+          $ref: "#/components/responses/InternalServerError"
+        "503":
+          $ref: "#/components/responses/ServiceUnavailable"
+
   /wallet-instances/current/status:
     get:
       summary: Retrieve the current Wallet Instance status
@@ -359,6 +393,21 @@ components:
         - assertion
         - fiscal_code
 
+    CreateWalletAttestationV2Body:
+      type: object
+      properties:
+        grant_type:
+          type: string
+          enum: ["urn:ietf:params:oauth:grant-type:jwt-bearer"]
+        assertion:
+          type: string
+          minLength: 1
+          format: binary
+          example: eyJhbGciOiJFUzI1NiIsImtpZCI6InZiZVhKa3NNNDV4cGh0QU5uQ2lHNm1DeXVVNGpmR056b3BHdUt2b2dnOWMiLCJ0eXAiOiJ3YXIrand0In0.eyJpc3MiOiJodHRwczovL3dhbGxldC1wcm92aWRlci5leGFtcGxlLm9yZy9pbnN0YW5jZS92YmVYSmtzTTQ1eHBodEFObkNpRzZtQ3l1VTRqZkdOem9wR3VLdm9nZzljIiwic3ViIjoiaHR0cHM6Ly93YWxsZXQtcHJvdmlkZXIuZXhhbXBsZS5vcmcvIiwiY2hhbGxlbmdlIjoiNmVjNjkzMjQtNjBhOC00ZTViLWE2OTctYTc2NmQ4NTc5MGVhIiwiaGFyZHdhcmVfc2lnbmF0dXJlIjoiS29aSWh2Y05BUWNDb0lBd2dBSUIuLi5yZWRhY3RlZCIsImludGVncml0eV9hc3NlcnRpb24iOiJvMk5tYlhSdllYQndiR1V0WVhCd1lYLi4ucmVkYWN0ZWQiLCJoYXJkd2FyZV9rZXlfdGFnIjoiV1FoeUR5bUZLc1A5NWlGcXB6ZEVEV1c0bDdhVm5hMkZuNEpDZVdIWXRiVT0iLCJjbmYiOnsiandrIjp7ImNydiI6IlAtMjU2Iiwia3R5IjoiRUMiLCJ4IjoiNEhOcHRJLXhyMnBqeVJKS0dNbno0V21kblFEX3VKU3E0Ujk1Tmo5OGI0NCIsInkiOiJMSVpuU0IzOXZGSmhZZ1MzazdqWEU0cjMtQ29HRlF3WnRQQklScXBObHJnIiwia2lkIjoidmJlWEprc000NXhwaHRBTm5DaUc2bUN5dVU0amZHTnpvcEd1S3ZvZ2c5YyJ9fSwidnBfZm9ybWF0c19zdXBwb3J0ZWQiOnsiand0X3ZjX2pzb24iOnsiYWxnX3ZhbHVlc19zdXBwb3J0ZWQiOlsiRVMyNTZLIiwiRVMzODQiXX0sImp3dF92cF9qc29uIjp7ImFsZ192YWx1ZXNfc3VwcG9ydGVkIjpbIkVTMjU2SyIsIkVkRFNBIl19fSwiaWF0IjoxNjg2NjQ1MTE1LCJleHAiOjE2ODY2NTIzMTV9.F32bisVth4eDdGxDjB9ByENT-oZLtSY_89uwTSePo2GMEKaeEedpXZE_9mrX7t0_Fmc5m6LNVvIIBqotqsYJYQ
+      required:
+        - grant_type
+        - assertion
+
     RevocationReason:
       type: string
       enum:
diff --git a/apps/io-wallet-user-func/src/app/main.ts b/apps/io-wallet-user-func/src/app/main.ts
index 715e851ba..f2a17dbfa 100644
--- a/apps/io-wallet-user-func/src/app/main.ts
+++ b/apps/io-wallet-user-func/src/app/main.ts
@@ -3,7 +3,9 @@ import withAppInsights from "@/infra/azure/appinsights/wrapper-handler";
 import { CosmosDbNonceRepository } from "@/infra/azure/cosmos/nonce";
 import { CosmosDbWalletInstanceRepository } from "@/infra/azure/cosmos/wallet-instance";
 import { AddWalletInstanceToValidationQueueFunction } from "@/infra/azure/functions/add-wallet-instance-to-validation-queue";
+import { AddWalletInstanceUserIdFunction } from "@/infra/azure/functions/add-wallet-instance-user-id";
 import { CreateWalletAttestationFunction } from "@/infra/azure/functions/create-wallet-attestation";
+import { CreateWalletAttestationV2Function } from "@/infra/azure/functions/create-wallet-attestation-v2";
 import { CreateWalletInstanceFunction } from "@/infra/azure/functions/create-wallet-instance";
 import { DeleteWalletInstancesFunction } from "@/infra/azure/functions/delete-wallet-instances";
 import { GenerateEntityConfigurationFunction } from "@/infra/azure/functions/generate-entity-configuration";
@@ -277,3 +279,39 @@ app.http("deleteWalletInstances", {
   methods: ["DELETE"],
   route: "wallet-instances",
 });
+
+app.cosmosDB("addWalletInstanceUserId", {
+  connection: "CosmosDbEndpoint",
+  containerName: "wallet-instances",
+  databaseName: config.azure.cosmos.dbName,
+  handler: AddWalletInstanceUserIdFunction({
+    inputDecoder: t.array(WalletInstance),
+    telemetryClient: appInsightsClient,
+  }),
+  leaseContainerName: "leases-wallet-instances-user-id",
+  leaseContainerPrefix: "wallet-instances-user-id-",
+  return: output.cosmosDB({
+    connection: "CosmosDbEndpoint",
+    containerName: "wallet-instances-user-id",
+    createIfNotExists: false,
+    databaseName: config.azure.cosmos.dbName,
+  }),
+  startFromBeginning: true,
+});
+
+// this will replace the token endpoint
+app.http("createWalletAttestationV2", {
+  authLevel: "function",
+  handler: withAppInsights(
+    CreateWalletAttestationV2Function({
+      attestationService: mobileAttestationService,
+      federationEntityMetadata: config.federationEntity,
+      nonceRepository,
+      signer,
+      telemetryClient: appInsightsClient,
+      walletInstanceRepository,
+    }),
+  ),
+  methods: ["POST"],
+  route: "wallet-attestation",
+});
diff --git a/apps/io-wallet-user-func/src/infra/azure/cosmos/wallet-instance.ts b/apps/io-wallet-user-func/src/infra/azure/cosmos/wallet-instance.ts
index 5eadb9519..e0dc71e8c 100644
--- a/apps/io-wallet-user-func/src/infra/azure/cosmos/wallet-instance.ts
+++ b/apps/io-wallet-user-func/src/infra/azure/cosmos/wallet-instance.ts
@@ -1,4 +1,7 @@
-import { WalletInstanceRepository } from "@/wallet-instance";
+import {
+  WalletInstanceRepository,
+  WalletInstanceUserId,
+} from "@/wallet-instance";
 import { Container, Database, PatchOperationInput } from "@azure/cosmos";
 import * as A from "fp-ts/Array";
 import * as E from "fp-ts/Either";
@@ -23,10 +26,12 @@ const toError = (genericMessage: string) => (error: unknown) =>
 export class CosmosDbWalletInstanceRepository
   implements WalletInstanceRepository
 {
-  #container: Container;
+  #idKeyedContainer: Container;
+  #userIdKeyedContainer: Container;
 
   constructor(db: Database) {
-    this.#container = db.container("wallet-instances");
+    this.#idKeyedContainer = db.container("wallet-instances-user-id");
+    this.#userIdKeyedContainer = db.container("wallet-instances");
   }
 
   private delete(
@@ -34,7 +39,7 @@ export class CosmosDbWalletInstanceRepository
     userId: WalletInstance["userId"],
   ): TE.TaskEither<Error, void> {
     return TE.tryCatch(async () => {
-      await this.#container.item(id, userId).delete();
+      await this.#userIdKeyedContainer.item(id, userId).delete();
     }, toError("Error deleting wallet instance"));
   }
 
@@ -43,7 +48,7 @@ export class CosmosDbWalletInstanceRepository
   ): TE.TaskEither<Error, WalletInstance[]> {
     return pipe(
       TE.tryCatch(async () => {
-        const { resources: items } = await this.#container.items
+        const { resources: items } = await this.#userIdKeyedContainer.items
           .readAll({
             partitionKey: userId,
           })
@@ -86,7 +91,7 @@ export class CosmosDbWalletInstanceRepository
           },
         }),
       );
-      await this.#container.items.batch(operations, userId);
+      await this.#userIdKeyedContainer.items.batch(operations, userId);
     }, toError("Error updating wallet instances"));
   }
 
@@ -102,10 +107,10 @@ export class CosmosDbWalletInstanceRepository
     );
   }
 
-  get(id: WalletInstance["id"], userId: WalletInstance["userId"]) {
+  getByUserId(id: WalletInstance["id"], userId: WalletInstance["userId"]) {
     return pipe(
       TE.tryCatch(
-        () => this.#container.item(id, userId).read(),
+        () => this.#userIdKeyedContainer.item(id, userId).read(),
         toError("Error getting wallet instance"),
       ),
       TE.chain(({ resource }) =>
@@ -130,7 +135,7 @@ export class CosmosDbWalletInstanceRepository
   getLastByUserId(userId: WalletInstance["userId"]) {
     return pipe(
       TE.tryCatch(async () => {
-        const { resources: items } = await this.#container.items
+        const { resources: items } = await this.#userIdKeyedContainer.items
           .query({
             parameters: [
               {
@@ -166,13 +171,38 @@ export class CosmosDbWalletInstanceRepository
     );
   }
 
+  getUserId(id: WalletInstance["id"]) {
+    return pipe(
+      TE.tryCatch(
+        () => this.#idKeyedContainer.item(id, id).read(),
+        toError("Error getting wallet instance user id"),
+      ),
+      TE.chain(({ resource }) =>
+        resource === undefined
+          ? TE.right(O.none)
+          : pipe(
+              resource,
+              WalletInstanceUserId.decode,
+              E.map(O.some),
+              E.mapLeft(
+                () =>
+                  new Error(
+                    "Error getting wallet instance user id: invalid result format",
+                  ),
+              ),
+              TE.fromEither,
+            ),
+      ),
+    );
+  }
+
   getValidByUserIdExcludingOne(
     walletInstanceId: WalletInstance["id"],
     userId: WalletInstance["userId"],
   ) {
     return pipe(
       TE.tryCatch(async () => {
-        const { resources: items } = await this.#container.items
+        const { resources: items } = await this.#userIdKeyedContainer.items
           .query({
             parameters: [
               {
@@ -217,7 +247,12 @@ export class CosmosDbWalletInstanceRepository
 
   insert(walletInstance: WalletInstance) {
     return TE.tryCatch(async () => {
-      await this.#container.items.create(walletInstance);
+      await this.#userIdKeyedContainer.items.create(walletInstance);
+      // we will uncomment when idKeyedContainer is synchronized with userIdKeyedContainer
+      // await this.#idKeyedContainer.items.create({
+      //   id: walletInstance.id,
+      //   userId: walletInstance.userId,
+      // });
     }, toError("Error inserting wallet instance"));
   }
 }
diff --git a/apps/io-wallet-user-func/src/infra/azure/functions/add-wallet-instance-user-id.ts b/apps/io-wallet-user-func/src/infra/azure/functions/add-wallet-instance-user-id.ts
new file mode 100644
index 000000000..85510c911
--- /dev/null
+++ b/apps/io-wallet-user-func/src/infra/azure/functions/add-wallet-instance-user-id.ts
@@ -0,0 +1,6 @@
+import { AddWalletInstanceUserIdHandler } from "@/infra/handlers/add-wallet-instance-user-id";
+import { azureFunction } from "@pagopa/handler-kit-azure-func";
+
+export const AddWalletInstanceUserIdFunction = azureFunction(
+  AddWalletInstanceUserIdHandler,
+);
diff --git a/apps/io-wallet-user-func/src/infra/azure/functions/create-wallet-attestation-v2.ts b/apps/io-wallet-user-func/src/infra/azure/functions/create-wallet-attestation-v2.ts
new file mode 100644
index 000000000..51174987b
--- /dev/null
+++ b/apps/io-wallet-user-func/src/infra/azure/functions/create-wallet-attestation-v2.ts
@@ -0,0 +1,6 @@
+import { CreateWalletAttestationV2Handler } from "@/infra/http/handlers/create-wallet-attestation-v2";
+import { httpAzureFunction } from "@pagopa/handler-kit-azure-func";
+
+export const CreateWalletAttestationV2Function = httpAzureFunction(
+  CreateWalletAttestationV2Handler,
+);
diff --git a/apps/io-wallet-user-func/src/infra/handlers/add-wallet-instance-user-id.ts b/apps/io-wallet-user-func/src/infra/handlers/add-wallet-instance-user-id.ts
new file mode 100644
index 000000000..f340e4a28
--- /dev/null
+++ b/apps/io-wallet-user-func/src/infra/handlers/add-wallet-instance-user-id.ts
@@ -0,0 +1,24 @@
+import * as H from "@pagopa/handler-kit";
+import { flow, pipe } from "fp-ts/function";
+import * as RTE from "fp-ts/lib/ReaderTaskEither";
+import { sendTelemetryException } from "io-wallet-common/infra/azure/appinsights/telemetry";
+import { WalletInstance } from "io-wallet-common/wallet-instance";
+
+export const AddWalletInstanceUserIdHandler = H.of(
+  flow(
+    (walletInstances: WalletInstance[]) =>
+      walletInstances.map(({ id, userId }) => ({
+        id,
+        userId,
+      })),
+    RTE.right,
+    RTE.orElseFirstW((error) =>
+      pipe(
+        sendTelemetryException(error, {
+          functionName: "AddWalletInstanceUserId",
+        }),
+        RTE.fromReader,
+      ),
+    ),
+  ),
+);
diff --git a/apps/io-wallet-user-func/src/infra/http/handlers/__test__/create-wallet-attestation-v2.spec.ts b/apps/io-wallet-user-func/src/infra/http/handlers/__test__/create-wallet-attestation-v2.spec.ts
new file mode 100644
index 000000000..a53032118
--- /dev/null
+++ b/apps/io-wallet-user-func/src/infra/http/handlers/__test__/create-wallet-attestation-v2.spec.ts
@@ -0,0 +1,279 @@
+import { AttestationService } from "@/attestation-service";
+import { iOSMockData } from "@/infra/mobile-attestation-service/ios/__test__/config";
+import { NonceRepository } from "@/nonce";
+import { WalletInstanceRepository } from "@/wallet-instance";
+import { GRANT_TYPE_KEY_ATTESTATION } from "@/wallet-provider";
+import * as H from "@pagopa/handler-kit";
+import * as L from "@pagopa/logger";
+import { FiscalCode, NonEmptyString } from "@pagopa/ts-commons/lib/strings";
+import * as appInsights from "applicationinsights";
+import { decode } from "cbor-x";
+import * as E from "fp-ts/Either";
+import * as O from "fp-ts/Option";
+import * as TE from "fp-ts/TaskEither";
+import * as jose from "jose";
+import { describe, expect, it } from "vitest";
+
+import { CreateWalletAttestationV2Handler } from "../create-wallet-attestation-v2";
+import { privateEcKey, publicEcKey, signer } from "./keys";
+import { federationEntityMetadata } from "./trust-anchor";
+
+const { assertion, challenge, hardwareKey, keyId } = iOSMockData;
+
+const mockFiscalCode = "AAACCC94E17H501P" as FiscalCode;
+
+const nonceRepository: NonceRepository = {
+  delete: () => TE.right(void 0),
+  insert: () => TE.left(new Error("not implemented")),
+};
+
+const logger = {
+  format: L.format.simple,
+  log: () => () => void 0,
+};
+
+const mockAttestationService: AttestationService = {
+  getHardwarePublicTestKey: () => TE.left(new Error("not implemented")),
+  validateAssertion: () => TE.right(undefined),
+  validateAttestation: () =>
+    TE.right({
+      deviceDetails: { platform: "ios" },
+      hardwareKey: {
+        crv: "P-256",
+        kid: "ea693e3c-e8f6-436c-ac78-afdf9956eecb",
+        kty: "EC",
+        x: "01m0xf5ujQ5g22FvZ2zbFrvyLx9bgN2AiLVFtca2BUE",
+        y: "7ZIKVr_WCQgyLOpTysVUrBKJz1LzjNlK3DD4KdOGHjo",
+      },
+    }),
+};
+
+const walletInstanceRepository: WalletInstanceRepository = {
+  batchPatch: () => TE.left(new Error("not implemented")),
+  deleteAllByUserId: () => TE.left(new Error("not implemented")),
+  getByUserId: () =>
+    TE.right(
+      O.some({
+        createdAt: new Date(),
+        hardwareKey,
+        id: "123" as NonEmptyString,
+        isRevoked: false,
+        signCount: 0,
+        userId: mockFiscalCode,
+      }),
+    ),
+  getLastByUserId: () => TE.left(new Error("not implemented")),
+  getUserId: () =>
+    TE.right(
+      O.some({
+        id: "123" as NonEmptyString,
+        userId: mockFiscalCode,
+      }),
+    ),
+  getValidByUserIdExcludingOne: () => TE.left(new Error("not implemented")),
+  insert: () => TE.left(new Error("not implemented")),
+};
+
+const data = Buffer.from(assertion, "base64");
+const { authenticatorData, signature } = decode(data);
+
+const telemetryClient: appInsights.TelemetryClient = {
+  trackException: () => void 0,
+} as unknown as appInsights.TelemetryClient;
+
+describe("CreateWalletAttestationV2Handler", async () => {
+  const josePrivateKey = await jose.importJWK(privateEcKey);
+  const walletAttestationRequest = await new jose.SignJWT({
+    challenge,
+    cnf: {
+      jwk: publicEcKey,
+    },
+    hardware_key_tag: keyId,
+    hardware_signature: signature.toString("base64"),
+    integrity_assertion: authenticatorData.toString("base64"),
+    iss: "demokey",
+    sub: "https://wallet-provider.example.org/",
+  })
+    .setProtectedHeader({
+      alg: "ES256",
+      kid: publicEcKey.kid,
+      typ: "war+jwt",
+    })
+    .setIssuedAt()
+    .setExpirationTime("2h")
+    .sign(josePrivateKey);
+
+  it("should return a 200 HTTP response on success", async () => {
+    const req = {
+      ...H.request("https://wallet-provider.example.org"),
+      body: {
+        assertion: walletAttestationRequest,
+        grant_type: GRANT_TYPE_KEY_ATTESTATION,
+      },
+      method: "POST",
+    };
+    const handler = CreateWalletAttestationV2Handler({
+      attestationService: mockAttestationService,
+      federationEntityMetadata,
+      input: req,
+      inputDecoder: H.HttpRequest,
+      logger,
+      nonceRepository,
+      signer,
+      telemetryClient,
+      walletInstanceRepository,
+    });
+
+    const result = await handler();
+    expect.assertions(3);
+    expect(result).toEqual({
+      _tag: "Right",
+      right: {
+        body: expect.objectContaining({
+          wallet_attestation: expect.any(String),
+        }),
+        headers: expect.objectContaining({
+          "Content-Type": "application/json",
+        }),
+        statusCode: 200,
+      },
+    });
+
+    // check trailing slashes are removed
+    if (E.isRight(result)) {
+      const body = result.right.body;
+      const walletAttestation = body.wallet_attestation;
+      if (typeof walletAttestation === "string") {
+        const decoded = jose.decodeJwt(walletAttestation);
+        expect((decoded.iss || "").endsWith("/")).toBe(false);
+        expect((decoded.sub || "").endsWith("/")).toBe(false);
+      }
+    }
+  });
+
+  it("should return a 422 HTTP response on invalid body", async () => {
+    const req = {
+      ...H.request("https://wallet-provider.example.org"),
+      body: {
+        assertion: walletAttestationRequest,
+        grant_type: "foo",
+      },
+      method: "POST",
+    };
+    const handler = CreateWalletAttestationV2Handler({
+      attestationService: mockAttestationService,
+      federationEntityMetadata,
+      input: req,
+      inputDecoder: H.HttpRequest,
+      logger,
+      nonceRepository,
+      signer,
+      telemetryClient,
+      walletInstanceRepository,
+    });
+
+    await expect(handler()).resolves.toEqual({
+      _tag: "Right",
+      right: expect.objectContaining({
+        headers: expect.objectContaining({
+          "Content-Type": "application/problem+json",
+        }),
+        statusCode: 422,
+      }),
+    });
+  });
+
+  it("should return a 403 HTTP response when the wallet instance is revoked", async () => {
+    const walletInstanceRepositoryWithRevokedWI: WalletInstanceRepository = {
+      ...walletInstanceRepository,
+      getByUserId: () =>
+        TE.right(
+          O.some({
+            createdAt: new Date(),
+            hardwareKey,
+            id: "123" as NonEmptyString,
+            isRevoked: true,
+            revokedAt: new Date(),
+            signCount: 0,
+            userId: mockFiscalCode,
+          }),
+        ),
+    };
+    const req = {
+      ...H.request("https://wallet-provider.example.org"),
+      body: {
+        assertion: walletAttestationRequest,
+        grant_type: GRANT_TYPE_KEY_ATTESTATION,
+      },
+      method: "POST",
+    };
+    const handler = CreateWalletAttestationV2Handler({
+      attestationService: mockAttestationService,
+      federationEntityMetadata,
+      input: req,
+      inputDecoder: H.HttpRequest,
+      logger,
+      nonceRepository,
+      signer,
+      telemetryClient,
+      walletInstanceRepository: walletInstanceRepositoryWithRevokedWI,
+    });
+
+    await expect(handler()).resolves.toEqual({
+      _tag: "Right",
+      right: expect.objectContaining({
+        body: {
+          detail: "The wallet instance has been revoked.",
+          status: 403,
+          title: "Forbidden",
+        },
+        headers: expect.objectContaining({
+          "Content-Type": "application/problem+json",
+        }),
+        statusCode: 403,
+      }),
+    });
+  });
+
+  it("should return a 404 HTTP response when the wallet instance is not found", async () => {
+    const walletInstanceRepositoryWithNotFoundWI: WalletInstanceRepository = {
+      ...walletInstanceRepository,
+      getByUserId: () => TE.right(O.none),
+      getUserId: () => TE.right(O.none),
+    };
+    const req = {
+      ...H.request("https://wallet-provider.example.org"),
+      body: {
+        assertion: walletAttestationRequest,
+        grant_type: GRANT_TYPE_KEY_ATTESTATION,
+      },
+      method: "POST",
+    };
+    const handler = CreateWalletAttestationV2Handler({
+      attestationService: mockAttestationService,
+      federationEntityMetadata,
+      input: req,
+      inputDecoder: H.HttpRequest,
+      logger,
+      nonceRepository,
+      signer,
+      telemetryClient,
+      walletInstanceRepository: walletInstanceRepositoryWithNotFoundWI,
+    });
+
+    await expect(handler()).resolves.toEqual({
+      _tag: "Right",
+      right: expect.objectContaining({
+        body: {
+          detail: "Wallet instance not found",
+          status: 404,
+          title: "Not Found",
+        },
+        headers: expect.objectContaining({
+          "Content-Type": "application/problem+json",
+        }),
+        statusCode: 404,
+      }),
+    });
+  });
+});
diff --git a/apps/io-wallet-user-func/src/infra/http/handlers/__test__/create-wallet-attestation.spec.ts b/apps/io-wallet-user-func/src/infra/http/handlers/__test__/create-wallet-attestation.spec.ts
index 132f36dfc..4db29b674 100644
--- a/apps/io-wallet-user-func/src/infra/http/handlers/__test__/create-wallet-attestation.spec.ts
+++ b/apps/io-wallet-user-func/src/infra/http/handlers/__test__/create-wallet-attestation.spec.ts
@@ -52,7 +52,7 @@ const mockAttestationService: AttestationService = {
 const walletInstanceRepository: WalletInstanceRepository = {
   batchPatch: () => TE.left(new Error("not implemented")),
   deleteAllByUserId: () => TE.left(new Error("not implemented")),
-  get: () =>
+  getByUserId: () =>
     TE.right(
       O.some({
         createdAt: new Date(),
@@ -64,6 +64,7 @@ const walletInstanceRepository: WalletInstanceRepository = {
       }),
     ),
   getLastByUserId: () => TE.left(new Error("not implemented")),
+  getUserId: () => TE.left(new Error("not implemented")),
   getValidByUserIdExcludingOne: () => TE.left(new Error("not implemented")),
   insert: () => TE.left(new Error("not implemented")),
 };
@@ -182,7 +183,7 @@ describe("CreateWalletAttestationHandler", async () => {
     const walletInstanceRepositoryWithRevokedWI: WalletInstanceRepository = {
       batchPatch: () => TE.left(new Error("not implemented")),
       deleteAllByUserId: () => TE.left(new Error("not implemented")),
-      get: () =>
+      getByUserId: () =>
         TE.right(
           O.some({
             createdAt: new Date(),
@@ -195,6 +196,7 @@ describe("CreateWalletAttestationHandler", async () => {
           }),
         ),
       getLastByUserId: () => TE.left(new Error("not implemented")),
+      getUserId: () => TE.left(new Error("not implemented")),
       getValidByUserIdExcludingOne: () => TE.left(new Error("not implemented")),
       insert: () => TE.left(new Error("not implemented")),
     };
@@ -239,8 +241,9 @@ describe("CreateWalletAttestationHandler", async () => {
     const walletInstanceRepositoryWithNotFoundWI: WalletInstanceRepository = {
       batchPatch: () => TE.left(new Error("not implemented")),
       deleteAllByUserId: () => TE.left(new Error("not implemented")),
-      get: () => TE.right(O.none),
+      getByUserId: () => TE.right(O.none),
       getLastByUserId: () => TE.left(new Error("not implemented")),
+      getUserId: () => TE.left(new Error("not implemented")),
       getValidByUserIdExcludingOne: () => TE.left(new Error("not implemented")),
       insert: () => TE.left(new Error("not implemented")),
     };
diff --git a/apps/io-wallet-user-func/src/infra/http/handlers/__test__/create-wallet-instance.spec.ts b/apps/io-wallet-user-func/src/infra/http/handlers/__test__/create-wallet-instance.spec.ts
index 5ddb1d864..1797fff63 100644
--- a/apps/io-wallet-user-func/src/infra/http/handlers/__test__/create-wallet-instance.spec.ts
+++ b/apps/io-wallet-user-func/src/infra/http/handlers/__test__/create-wallet-instance.spec.ts
@@ -34,8 +34,9 @@ describe("CreateWalletInstanceHandler", () => {
   const walletInstanceRepository: WalletInstanceRepository = {
     batchPatch: () => TE.right(undefined),
     deleteAllByUserId: () => TE.left(new Error("not implemented")),
-    get: () => TE.left(new Error("not implemented")),
+    getByUserId: () => TE.left(new Error("not implemented")),
     getLastByUserId: () => TE.left(new Error("not implemented")),
+    getUserId: () => TE.left(new Error("not implemented")),
     getValidByUserIdExcludingOne: () => TE.right(O.some([])),
     insert: () => TE.right(undefined),
   };
@@ -165,8 +166,9 @@ describe("CreateWalletInstanceHandler", () => {
       {
         batchPatch: () => TE.left(new Error("not implemented")),
         deleteAllByUserId: () => TE.left(new Error("not implemented")),
-        get: () => TE.left(new Error("not implemented")),
+        getByUserId: () => TE.left(new Error("not implemented")),
         getLastByUserId: () => TE.left(new Error("not implemented")),
+        getUserId: () => TE.left(new Error("not implemented")),
         getValidByUserIdExcludingOne: () =>
           TE.left(new Error("not implemented")),
         insert: () => TE.left(new Error("failed on insert!")),
@@ -202,8 +204,9 @@ describe("CreateWalletInstanceHandler", () => {
     const walletInstanceRepositoryThatFails: WalletInstanceRepository = {
       batchPatch: () => TE.left(new Error("not implemented")),
       deleteAllByUserId: () => TE.left(new Error("not implemented")),
-      get: () => TE.left(new Error("not implemented")),
+      getByUserId: () => TE.left(new Error("not implemented")),
       getLastByUserId: () => TE.left(new Error("not implemented")),
+      getUserId: () => TE.left(new Error("not implemented")),
       getValidByUserIdExcludingOne: () =>
         TE.left(new Error("failed on getValidByUserIdExcludingOne!")),
       insert: () => TE.left(new Error("not implemented")),
@@ -240,8 +243,9 @@ describe("CreateWalletInstanceHandler", () => {
       {
         batchPatch: () => TE.left(new Error("failed on batchPatch!")),
         deleteAllByUserId: () => TE.left(new Error("not implemented")),
-        get: () => TE.left(new Error("not implemented")),
+        getByUserId: () => TE.left(new Error("not implemented")),
         getLastByUserId: () => TE.left(new Error("not implemented")),
+        getUserId: () => TE.left(new Error("not implemented")),
         getValidByUserIdExcludingOne: () =>
           TE.left(new Error("not implemented")),
         insert: () => TE.left(new Error("not implemented")),
diff --git a/apps/io-wallet-user-func/src/infra/http/handlers/__test__/delete-wallet-instances.spec.ts b/apps/io-wallet-user-func/src/infra/http/handlers/__test__/delete-wallet-instances.spec.ts
index f6d50579e..64652d3ef 100644
--- a/apps/io-wallet-user-func/src/infra/http/handlers/__test__/delete-wallet-instances.spec.ts
+++ b/apps/io-wallet-user-func/src/infra/http/handlers/__test__/delete-wallet-instances.spec.ts
@@ -19,8 +19,9 @@ describe("DeleteWalletInstancesHandler", () => {
   const walletInstanceRepository: WalletInstanceRepository = {
     batchPatch: () => TE.left(new Error("not implemented")),
     deleteAllByUserId: () => TE.right(undefined),
-    get: () => TE.left(new Error("not implemented")),
+    getByUserId: () => TE.left(new Error("not implemented")),
     getLastByUserId: () => TE.left(new Error("not implemented")),
+    getUserId: () => TE.left(new Error("not implemented")),
     getValidByUserIdExcludingOne: () => TE.left(new Error("not implemented")),
     insert: () => TE.left(new Error("not implemented")),
   };
@@ -123,8 +124,9 @@ describe("DeleteWalletInstancesHandler", () => {
         batchPatch: () => TE.left(new Error("not implemented")),
         deleteAllByUserId: () =>
           TE.left(new Error("failed on deleteAllByUserId!")),
-        get: () => TE.left(new Error("not implemented")),
+        getByUserId: () => TE.left(new Error("not implemented")),
         getLastByUserId: () => TE.left(new Error("not implemented")),
+        getUserId: () => TE.left(new Error("not implemented")),
         getValidByUserIdExcludingOne: () =>
           TE.left(new Error("not implemented")),
         insert: () => TE.left(new Error("not implemented")),
@@ -179,8 +181,9 @@ describe("DeleteWalletInstancesHandler", () => {
       {
         batchPatch: () => TE.left(new Error("not implemented")),
         deleteAllByUserId: () => TE.left(new ServiceUnavailableError()),
-        get: () => TE.left(new Error("not implemented")),
+        getByUserId: () => TE.left(new Error("not implemented")),
         getLastByUserId: () => TE.left(new Error("not implemented")),
+        getUserId: () => TE.left(new Error("not implemented")),
         getValidByUserIdExcludingOne: () =>
           TE.left(new Error("not implemented")),
         insert: () => TE.left(new Error("not implemented")),
diff --git a/apps/io-wallet-user-func/src/infra/http/handlers/__test__/get-current-wallet-instance-status.spec.ts b/apps/io-wallet-user-func/src/infra/http/handlers/__test__/get-current-wallet-instance-status.spec.ts
index 64d805478..8cb42d3ed 100644
--- a/apps/io-wallet-user-func/src/infra/http/handlers/__test__/get-current-wallet-instance-status.spec.ts
+++ b/apps/io-wallet-user-func/src/infra/http/handlers/__test__/get-current-wallet-instance-status.spec.ts
@@ -20,7 +20,7 @@ describe("GetCurrentWalletInstanceStatusHandler", () => {
   const walletInstanceRepository: WalletInstanceRepository = {
     batchPatch: () => TE.left(new Error("not implemented")),
     deleteAllByUserId: () => TE.left(new Error("not implemented")),
-    get: () => TE.left(new Error("not implemented")),
+    getByUserId: () => TE.left(new Error("not implemented")),
     getLastByUserId: () =>
       TE.right(
         O.some({
@@ -37,6 +37,7 @@ describe("GetCurrentWalletInstanceStatusHandler", () => {
           userId: "AAA" as FiscalCode,
         }),
       ),
+    getUserId: () => TE.left(new Error("not implemented")),
     getValidByUserIdExcludingOne: () => TE.left(new Error("not implemented")),
     insert: () => TE.left(new Error("not implemented")),
   };
@@ -137,8 +138,9 @@ describe("GetCurrentWalletInstanceStatusHandler", () => {
     const walletInstanceRepository: WalletInstanceRepository = {
       batchPatch: () => TE.left(new Error("not implemented")),
       deleteAllByUserId: () => TE.left(new Error("not implemented")),
-      get: () => TE.left(new Error("not implemented")),
+      getByUserId: () => TE.left(new Error("not implemented")),
       getLastByUserId: () => TE.right(O.none),
+      getUserId: () => TE.left(new Error("not implemented")),
       getValidByUserIdExcludingOne: () => TE.left(new Error("not implemented")),
       insert: () => TE.left(new Error("not implemented")),
     };
@@ -166,8 +168,9 @@ describe("GetCurrentWalletInstanceStatusHandler", () => {
       {
         batchPatch: () => TE.left(new Error("not implemented")),
         deleteAllByUserId: () => TE.left(new Error("not implemented")),
-        get: () => TE.left(new Error("not implemented")),
+        getByUserId: () => TE.left(new Error("not implemented")),
         getLastByUserId: () => TE.left(new Error("failed on getLastByUserId!")),
+        getUserId: () => TE.left(new Error("not implemented")),
         getValidByUserIdExcludingOne: () =>
           TE.left(new Error("not implemented")),
         insert: () => TE.left(new Error("not implemented")),
@@ -197,8 +200,9 @@ describe("GetCurrentWalletInstanceStatusHandler", () => {
       {
         batchPatch: () => TE.left(new Error("not implemented")),
         deleteAllByUserId: () => TE.left(new Error("not implemented")),
-        get: () => TE.left(new Error("not implemented")),
+        getByUserId: () => TE.left(new Error("not implemented")),
         getLastByUserId: () => TE.left(new ServiceUnavailableError("foo")),
+        getUserId: () => TE.left(new Error("not implemented")),
         getValidByUserIdExcludingOne: () =>
           TE.left(new Error("not implemented")),
         insert: () => TE.left(new Error("not implemented")),
diff --git a/apps/io-wallet-user-func/src/infra/http/handlers/__test__/get-wallet-instance-status.spec.ts b/apps/io-wallet-user-func/src/infra/http/handlers/__test__/get-wallet-instance-status.spec.ts
index cb08b1807..7f85d8820 100644
--- a/apps/io-wallet-user-func/src/infra/http/handlers/__test__/get-wallet-instance-status.spec.ts
+++ b/apps/io-wallet-user-func/src/infra/http/handlers/__test__/get-wallet-instance-status.spec.ts
@@ -20,7 +20,7 @@ describe("GetWalletInstanceStatusHandler", () => {
   const walletInstanceRepository: WalletInstanceRepository = {
     batchPatch: () => TE.left(new Error("not implemented")),
     deleteAllByUserId: () => TE.left(new Error("not implemented")),
-    get: () =>
+    getByUserId: () =>
       TE.right(
         O.some({
           createdAt: new Date(),
@@ -37,6 +37,7 @@ describe("GetWalletInstanceStatusHandler", () => {
         }),
       ),
     getLastByUserId: () => TE.left(new Error("not implemented")),
+    getUserId: () => TE.left(new Error("not implemented")),
     getValidByUserIdExcludingOne: () => TE.left(new Error("not implemented")),
     insert: () => TE.left(new Error("not implemented")),
   };
@@ -81,7 +82,7 @@ describe("GetWalletInstanceStatusHandler", () => {
   });
 
   it("should return a 200 HTTP response and revoked wallet instance with revocationReason on success", async () => {
-    walletInstanceRepository.get = () =>
+    walletInstanceRepository.getByUserId = () =>
       TE.right(
         O.some({
           createdAt: new Date(),
@@ -125,7 +126,7 @@ describe("GetWalletInstanceStatusHandler", () => {
   });
 
   it("should return a 200 HTTP response and revoked wallet instance with revocationReason on success", async () => {
-    walletInstanceRepository.get = () =>
+    walletInstanceRepository.getByUserId = () =>
       TE.right(
         O.some({
           createdAt: new Date(),
@@ -201,8 +202,9 @@ describe("GetWalletInstanceStatusHandler", () => {
     const walletInstanceRepository: WalletInstanceRepository = {
       batchPatch: () => TE.left(new Error("not implemented")),
       deleteAllByUserId: () => TE.left(new Error("not implemented")),
-      get: () => TE.right(O.none),
+      getByUserId: () => TE.right(O.none),
       getLastByUserId: () => TE.left(new Error("not implemented")),
+      getUserId: () => TE.left(new Error("not implemented")),
       getValidByUserIdExcludingOne: () => TE.left(new Error("not implemented")),
       insert: () => TE.left(new Error("not implemented")),
     };
@@ -260,8 +262,9 @@ describe("GetWalletInstanceStatusHandler", () => {
     const walletInstanceRepositoryThatFailsOnGet: WalletInstanceRepository = {
       batchPatch: () => TE.left(new Error("not implemented")),
       deleteAllByUserId: () => TE.left(new Error("not implemented")),
-      get: () => TE.left(new Error("failed on get!")),
+      getByUserId: () => TE.left(new Error("failed on get!")),
       getLastByUserId: () => TE.left(new Error("not implemented")),
+      getUserId: () => TE.left(new Error("not implemented")),
       getValidByUserIdExcludingOne: () => TE.left(new Error("not implemented")),
       insert: () => TE.left(new Error("not implemented")),
     };
@@ -288,8 +291,9 @@ describe("GetWalletInstanceStatusHandler", () => {
     const walletInstanceRepositoryThatFailsOnGet: WalletInstanceRepository = {
       batchPatch: () => TE.left(new Error("not implemented")),
       deleteAllByUserId: () => TE.left(new Error("not implemented")),
-      get: () => TE.left(new ServiceUnavailableError("foo")),
+      getByUserId: () => TE.left(new ServiceUnavailableError("foo")),
       getLastByUserId: () => TE.left(new Error("not implemented")),
+      getUserId: () => TE.left(new Error("not implemented")),
       getValidByUserIdExcludingOne: () => TE.left(new Error("not implemented")),
       insert: () => TE.left(new Error("not implemented")),
     };
diff --git a/apps/io-wallet-user-func/src/infra/http/handlers/__test__/set-wallet-instance-status.spec.ts b/apps/io-wallet-user-func/src/infra/http/handlers/__test__/set-wallet-instance-status.spec.ts
index 12f40ad54..5e67fd1f3 100644
--- a/apps/io-wallet-user-func/src/infra/http/handlers/__test__/set-wallet-instance-status.spec.ts
+++ b/apps/io-wallet-user-func/src/infra/http/handlers/__test__/set-wallet-instance-status.spec.ts
@@ -21,8 +21,9 @@ describe("SetWalletInstanceStatusHandler", () => {
   const walletInstanceRepository: WalletInstanceRepository = {
     batchPatch: () => TE.right(undefined),
     deleteAllByUserId: () => TE.left(new Error("not implemented")),
-    get: () => TE.left(new Error("not implemented")),
+    getByUserId: () => TE.left(new Error("not implemented")),
     getLastByUserId: () => TE.left(new Error("not implemented")),
+    getUserId: () => TE.left(new Error("not implemented")),
     getValidByUserIdExcludingOne: () => TE.left(new Error("not implemented")),
     insert: () => TE.left(new Error("not implemented")),
   };
@@ -135,8 +136,9 @@ describe("SetWalletInstanceStatusHandler", () => {
       {
         batchPatch: () => TE.left(new Error("failed on batchPatch!")),
         deleteAllByUserId: () => TE.left(new Error("not implemented")),
-        get: () => TE.left(new Error("not implemented")),
+        getByUserId: () => TE.left(new Error("not implemented")),
         getLastByUserId: () => TE.left(new Error("not implemented")),
+        getUserId: () => TE.left(new Error("not implemented")),
         getValidByUserIdExcludingOne: () =>
           TE.left(new Error("not implemented")),
         insert: () => TE.left(new Error("not implemented")),
diff --git a/apps/io-wallet-user-func/src/infra/http/handlers/create-wallet-attestation-v2.ts b/apps/io-wallet-user-func/src/infra/http/handlers/create-wallet-attestation-v2.ts
new file mode 100644
index 000000000..13d775b48
--- /dev/null
+++ b/apps/io-wallet-user-func/src/infra/http/handlers/create-wallet-attestation-v2.ts
@@ -0,0 +1,91 @@
+import { validateAssertion } from "@/attestation-service";
+import { sendExceptionWithBodyToAppInsights } from "@/telemetry";
+import { isLoadTestUser } from "@/user";
+import { createWalletAttestation } from "@/wallet-attestation";
+import { verifyWalletAttestationRequest } from "@/wallet-attestation-request";
+import {
+  getValidWalletInstanceByUserId,
+  getWalletInstanceUserId,
+} from "@/wallet-instance";
+import { consumeNonce } from "@/wallet-instance-request";
+import { GRANT_TYPE_KEY_ATTESTATION } from "@/wallet-provider";
+import * as H from "@pagopa/handler-kit";
+import { NonEmptyString } from "@pagopa/ts-commons/lib/strings";
+import { pipe } from "fp-ts/function";
+import * as E from "fp-ts/lib/Either";
+import * as RTE from "fp-ts/lib/ReaderTaskEither";
+import * as TE from "fp-ts/lib/TaskEither";
+import * as t from "io-ts";
+import { logErrorAndReturnResponse } from "io-wallet-common/infra/http/error";
+
+const WalletAttestationRequestPayload = t.type({
+  assertion: NonEmptyString,
+  grant_type: t.literal(GRANT_TYPE_KEY_ATTESTATION),
+});
+
+type WalletAttestationRequestPayload = t.TypeOf<
+  typeof WalletAttestationRequestPayload
+>;
+
+const requireAssertion = (req: H.HttpRequest) =>
+  pipe(
+    req.body,
+    H.parse(WalletAttestationRequestPayload),
+    E.map(({ assertion }) => assertion),
+  );
+
+export const CreateWalletAttestationV2Handler = H.of((req: H.HttpRequest) =>
+  pipe(
+    req,
+    requireAssertion,
+    TE.fromEither,
+    TE.chain((assertion) =>
+      pipe(
+        assertion,
+        verifyWalletAttestationRequest,
+        TE.map((assertion) => ({ assertion })),
+      ),
+    ),
+    RTE.fromTaskEither,
+    RTE.chainW(({ assertion }) =>
+      pipe(
+        assertion.payload.challenge,
+        consumeNonce,
+        RTE.chainW(() =>
+          getWalletInstanceUserId(assertion.payload.hardware_key_tag),
+        ),
+        RTE.chainW(({ id, userId }) =>
+          pipe(
+            getValidWalletInstanceByUserId(id, userId),
+            RTE.chainW((walletInstance) =>
+              isLoadTestUser(userId)
+                ? RTE.right(undefined)
+                : validateAssertion(
+                    assertion,
+                    walletInstance.hardwareKey,
+                    walletInstance.signCount,
+                    userId,
+                  ),
+            ),
+            RTE.chainW(() => createWalletAttestation(assertion)),
+            RTE.map((attestation) =>
+              isLoadTestUser(userId)
+                ? "this_is_a_test_attestation"
+                : attestation,
+            ),
+          ),
+        ),
+      ),
+    ),
+    RTE.map((wallet_attestation) => ({ wallet_attestation })),
+    RTE.map(H.successJson),
+    RTE.orElseFirstW((error) =>
+      sendExceptionWithBodyToAppInsights(
+        error,
+        req.body,
+        "createWalletAttestationV2",
+      ),
+    ),
+    RTE.orElseW(logErrorAndReturnResponse),
+  ),
+);
diff --git a/apps/io-wallet-user-func/src/infra/http/handlers/create-wallet-attestation.ts b/apps/io-wallet-user-func/src/infra/http/handlers/create-wallet-attestation.ts
index bcfc6929e..c576ac218 100644
--- a/apps/io-wallet-user-func/src/infra/http/handlers/create-wallet-attestation.ts
+++ b/apps/io-wallet-user-func/src/infra/http/handlers/create-wallet-attestation.ts
@@ -3,7 +3,7 @@ import { sendExceptionWithBodyToAppInsights } from "@/telemetry";
 import { isLoadTestUser } from "@/user";
 import { createWalletAttestation } from "@/wallet-attestation";
 import { verifyWalletAttestationRequest } from "@/wallet-attestation-request";
-import { getValidWalletInstance } from "@/wallet-instance";
+import { getValidWalletInstanceByUserId } from "@/wallet-instance";
 import { consumeNonce } from "@/wallet-instance-request";
 import { GRANT_TYPE_KEY_ATTESTATION } from "@/wallet-provider";
 import * as H from "@pagopa/handler-kit";
@@ -55,7 +55,7 @@ export const CreateWalletAttestationHandler = H.of((req: H.HttpRequest) =>
       pipe(
         consumeNonce(assertion.payload.challenge),
         RTE.chainW(() =>
-          getValidWalletInstance(
+          getValidWalletInstanceByUserId(
             assertion.payload.hardware_key_tag,
             fiscalCode,
           ),
diff --git a/apps/io-wallet-user-func/src/infra/http/handlers/delete-wallet-instances.ts b/apps/io-wallet-user-func/src/infra/http/handlers/delete-wallet-instances.ts
index 086e241e9..6199f1ad1 100644
--- a/apps/io-wallet-user-func/src/infra/http/handlers/delete-wallet-instances.ts
+++ b/apps/io-wallet-user-func/src/infra/http/handlers/delete-wallet-instances.ts
@@ -8,6 +8,7 @@ import { logErrorAndReturnResponse } from "io-wallet-common/infra/http/error";
 
 import { requireFiscalCodeFromHeader } from "../fiscal-code";
 
+// delete wallet instances from `wallet-instances-user-id` collection
 export const DeleteWalletInstancesHandler = H.of((req: H.HttpRequest) =>
   pipe(
     req,
diff --git a/apps/io-wallet-user-func/src/infra/http/handlers/get-wallet-instance-status.ts b/apps/io-wallet-user-func/src/infra/http/handlers/get-wallet-instance-status.ts
index 1cc213578..8f9cf3725 100644
--- a/apps/io-wallet-user-func/src/infra/http/handlers/get-wallet-instance-status.ts
+++ b/apps/io-wallet-user-func/src/infra/http/handlers/get-wallet-instance-status.ts
@@ -1,4 +1,4 @@
-import { getWalletInstance } from "@/wallet-instance";
+import { getWalletInstanceByUserId } from "@/wallet-instance";
 import * as H from "@pagopa/handler-kit";
 import { sequenceS } from "fp-ts/Apply";
 import * as E from "fp-ts/lib/Either";
@@ -20,7 +20,7 @@ export const GetWalletInstanceStatusHandler = H.of((req: H.HttpRequest) =>
     RTE.fromEither,
     RTE.chainW(({ fiscalCode, walletInstanceId }) =>
       pipe(
-        getWalletInstance(walletInstanceId, fiscalCode),
+        getWalletInstanceByUserId(walletInstanceId, fiscalCode),
         RTE.map(WalletInstanceToStatusApiModel.encode),
         RTE.map(H.successJson),
         RTE.orElseFirstW((error) =>
diff --git a/apps/io-wallet-user-func/src/wallet-instance.ts b/apps/io-wallet-user-func/src/wallet-instance.ts
index 0c73d3a89..5a1f27d7d 100644
--- a/apps/io-wallet-user-func/src/wallet-instance.ts
+++ b/apps/io-wallet-user-func/src/wallet-instance.ts
@@ -1,9 +1,11 @@
+import { FiscalCode, NonEmptyString } from "@pagopa/ts-commons/lib/strings";
 import * as E from "fp-ts/Either";
 import * as O from "fp-ts/Option";
 import * as RTE from "fp-ts/ReaderTaskEither";
 import * as RA from "fp-ts/ReadonlyArray";
 import * as TE from "fp-ts/TaskEither";
 import { flow, pipe } from "fp-ts/function";
+import * as t from "io-ts";
 import { EntityNotFoundError } from "io-wallet-common/error";
 import {
   RevocationReason,
@@ -19,6 +21,13 @@ class RevokedWalletInstance extends Error {
   }
 }
 
+export const WalletInstanceUserId = t.type({
+  id: NonEmptyString,
+  userId: FiscalCode,
+});
+
+export type WalletInstanceUserId = t.TypeOf<typeof WalletInstanceUserId>;
+
 export interface WalletInstanceRepository {
   batchPatch: (
     operationsInput: {
@@ -34,13 +43,16 @@ export interface WalletInstanceRepository {
   deleteAllByUserId: (
     userId: WalletInstance["userId"],
   ) => TE.TaskEither<Error, void>;
-  get: (
+  getByUserId: (
     id: WalletInstance["id"],
     userId: WalletInstance["userId"],
   ) => TE.TaskEither<Error, O.Option<WalletInstance>>;
   getLastByUserId: (
     userId: WalletInstance["userId"],
   ) => TE.TaskEither<Error, O.Option<WalletInstance>>;
+  getUserId: (
+    id: WalletInstance["id"],
+  ) => TE.TaskEither<Error, O.Option<WalletInstanceUserId>>;
   getValidByUserIdExcludingOne: (
     walletInstanceId: WalletInstance["id"],
     userId: WalletInstance["userId"],
@@ -52,14 +64,14 @@ export interface WalletInstanceEnvironment {
   walletInstanceRepository: WalletInstanceRepository;
 }
 
-export const getWalletInstance: (
+export const getWalletInstanceByUserId: (
   id: WalletInstance["id"],
   userId: WalletInstance["userId"],
 ) => RTE.ReaderTaskEither<WalletInstanceEnvironment, Error, WalletInstance> =
   (id, userId) =>
   ({ walletInstanceRepository }) =>
     pipe(
-      walletInstanceRepository.get(id, userId),
+      walletInstanceRepository.getByUserId(id, userId),
       TE.chain(
         TE.fromOption(
           () => new EntityNotFoundError("Wallet instance not found"),
@@ -88,7 +100,26 @@ export const insertWalletInstance: (
   ({ walletInstanceRepository }) =>
     walletInstanceRepository.insert(walletInstance);
 
-export const getValidWalletInstance: (
+export const getWalletInstanceUserId: (
+  id: WalletInstance["id"],
+) => RTE.ReaderTaskEither<
+  WalletInstanceEnvironment,
+  Error,
+  WalletInstanceUserId
+> =
+  (id) =>
+  ({ walletInstanceRepository }) =>
+    pipe(
+      id,
+      walletInstanceRepository.getUserId,
+      TE.chain(
+        TE.fromOption(
+          () => new EntityNotFoundError("Wallet instance not found"),
+        ),
+      ),
+    );
+
+export const getValidWalletInstanceByUserId: (
   id: WalletInstance["id"],
   userId: WalletInstance["userId"],
 ) => RTE.ReaderTaskEither<
@@ -99,7 +130,7 @@ export const getValidWalletInstance: (
   (id, userId) =>
   ({ walletInstanceRepository }) =>
     pipe(
-      walletInstanceRepository.get(id, userId),
+      walletInstanceRepository.getByUserId(id, userId),
       TE.chain(
         TE.fromOption(
           () => new EntityNotFoundError("Wallet instance not found"),
@@ -121,7 +152,7 @@ export const getValidWalletInstanceWithAndroidCertificatesChain: (
   WalletInstanceValidWithAndroidCertificatesChain
 > = (id, userId) =>
   pipe(
-    getValidWalletInstance(id, userId),
+    getValidWalletInstanceByUserId(id, userId),
     RTE.chainEitherK(
       flow(
         WalletInstanceValidWithAndroidCertificatesChain.decode,
diff --git a/infra/resources/_modules/apim/api/app/_base_policy.xml b/infra/resources/_modules/apim/api/app/_base_policy.xml
new file mode 100644
index 000000000..e86f6af38
--- /dev/null
+++ b/infra/resources/_modules/apim/api/app/_base_policy.xml
@@ -0,0 +1,11 @@
+<policies>
+    <inbound>
+        <base />
+        <set-header name="x-functions-key" exists-action="override">
+            <value>{{io-wallet-user-func-create-wa-key}}</value>
+        </set-header>
+    </inbound>
+    <outbound>
+        <base />
+    </outbound>
+</policies>
\ No newline at end of file
diff --git a/infra/resources/_modules/apim/api/app/_swagger.json b/infra/resources/_modules/apim/api/app/_swagger.json
new file mode 100644
index 000000000..51dd12629
--- /dev/null
+++ b/infra/resources/_modules/apim/api/app/_swagger.json
@@ -0,0 +1,207 @@
+{
+  "openapi": "3.0.3",
+  "info": {
+    "title": "IO Wallet - APP API",
+    "version": "1.0.0"
+  },
+  "paths": {
+    "/wallet-attestation": {
+      "post": {
+        "operationId": "createWalletAttestation",
+        "summary": "Create and return a Wallet Attestation",
+        "security": [
+          {
+            "SubscriptionKey": []
+          }
+        ],
+        "requestBody": {
+          "required": true,
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/CreateWalletAttestationBody"
+              }
+            }
+          }
+        },
+        "responses": {
+          "200": {
+            "description": "Wallet Attestation generated",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/WalletAttestationView"
+                }
+              }
+            }
+          },
+          "403": {
+            "description": "The wallet instance was revoked",
+            "$ref": "#/components/responses/Forbidden"
+          },
+          "404": {
+            "description": "The wallet instance was not found",
+            "$ref": "#/components/responses/NotFound"
+          },
+          "409": {
+            "$ref": "#/components/responses/Conflict"
+          },
+          "422": {
+            "$ref": "#/components/responses/UnprocessableContent"
+          },
+          "500": {
+            "$ref": "#/components/responses/InternalServerError"
+          },
+          "503": {
+            "$ref": "#/components/responses/ServiceUnavailable"
+          }
+        }
+      }
+    }
+  },
+  "components": {
+    "securitySchemes": {
+      "SubscriptionKey": {
+        "type": "apiKey",
+        "name": "Ocp-Apim-Subscription-Key",
+        "in": "header"
+      }
+    },
+    "responses": {
+      "Forbidden": {
+        "description": "The server understands the request but refuses to authorize it",
+        "content": {
+          "application/json": {
+            "schema": {
+              "$ref": "#/components/schemas/ProblemJson"
+            }
+          }
+        }
+      },
+      "BadRequest": {
+        "description": "Validation error",
+        "content": {
+          "application/json": {
+            "schema": {
+              "$ref": "#/components/schemas/ProblemJson"
+            }
+          }
+        }
+      },
+      "NotFound": {
+        "description": "The specified resource was not found",
+        "content": {
+          "application/json": {
+            "schema": {
+              "$ref": "#/components/schemas/ProblemJson"
+            }
+          }
+        }
+      },
+      "Conflict": {
+        "description": "There has been a conflict",
+        "content": {
+          "application/json": {
+            "schema": {
+              "$ref": "#/components/schemas/ProblemJson"
+            }
+          }
+        }
+      },
+      "UnprocessableContent": {
+        "description": "Unprocessable Content",
+        "content": {
+          "application/json": {
+            "schema": {
+              "$ref": "#/components/schemas/ProblemJson"
+            }
+          }
+        }
+      },
+      "InternalServerError": {
+        "description": "Internal Server Error",
+        "content": {
+          "application/json": {
+            "schema": {
+              "$ref": "#/components/schemas/ProblemJson"
+            }
+          }
+        }
+      },
+      "ServiceUnavailable": {
+        "description": "Service Unavailable",
+        "content": {
+          "application/json": {
+            "schema": {
+              "$ref": "#/components/schemas/ProblemJson"
+            }
+          }
+        }
+      }
+    },
+    "schemas": {
+      "WalletAttestationView": {
+        "type": "object",
+        "properties": {
+          "wallet_attestation": {
+            "type": "string",
+            "minLength": 1,
+            "format": "binary"
+          }
+        },
+        "required": ["wallet_attestation"]
+      },
+      "CreateWalletAttestationBody": {
+        "type": "object",
+        "properties": {
+          "grant_type": {
+            "type": "string",
+            "enum": ["urn:ietf:params:oauth:grant-type:jwt-bearer"]
+          },
+          "assertion": {
+            "type": "string",
+            "minLength": 1,
+            "format": "binary",
+            "example": "eyJhbGciOiJFUzI1NiIsImtpZCI6InZiZVhKa3NNNDV4cGh0QU5uQ2lHNm1DeXVVNGpmR056b3BHdUt2b2dnOWMiLCJ0eXAiOiJ3YXIrand0In0.eyJpc3MiOiJodHRwczovL3dhbGxldC1wcm92aWRlci5leGFtcGxlLm9yZy9pbnN0YW5jZS92YmVYSmtzTTQ1eHBodEFObkNpRzZtQ3l1VTRqZkdOem9wR3VLdm9nZzljIiwic3ViIjoiaHR0cHM6Ly93YWxsZXQtcHJvdmlkZXIuZXhhbXBsZS5vcmcvIiwiY2hhbGxlbmdlIjoiNmVjNjkzMjQtNjBhOC00ZTViLWE2OTctYTc2NmQ4NTc5MGVhIiwiaGFyZHdhcmVfc2lnbmF0dXJlIjoiS29aSWh2Y05BUWNDb0lBd2dBSUIuLi5yZWRhY3RlZCIsImludGVncml0eV9hc3NlcnRpb24iOiJvMk5tYlhSdllYQndiR1V0WVhCd1lYLi4ucmVkYWN0ZWQiLCJoYXJkd2FyZV9rZXlfdGFnIjoiV1FoeUR5bUZLc1A5NWlGcXB6ZEVEV1c0bDdhVm5hMkZuNEpDZVdIWXRiVT0iLCJjbmYiOnsiandrIjp7ImNydiI6IlAtMjU2Iiwia3R5IjoiRUMiLCJ4IjoiNEhOcHRJLXhyMnBqeVJKS0dNbno0V21kblFEX3VKU3E0Ujk1Tmo5OGI0NCIsInkiOiJMSVpuU0IzOXZGSmhZZ1MzazdqWEU0cjMtQ29HRlF3WnRQQklScXBObHJnIiwia2lkIjoidmJlWEprc000NXhwaHRBTm5DaUc2bUN5dVU0amZHTnpvcEd1S3ZvZ2c5YyJ9fSwidnBfZm9ybWF0c19zdXBwb3J0ZWQiOnsiand0X3ZjX2pzb24iOnsiYWxnX3ZhbHVlc19zdXBwb3J0ZWQiOlsiRVMyNTZLIiwiRVMzODQiXX0sImp3dF92cF9qc29uIjp7ImFsZ192YWx1ZXNfc3VwcG9ydGVkIjpbIkVTMjU2SyIsIkVkRFNBIl19fSwiaWF0IjoxNjg2NjQ1MTE1LCJleHAiOjE2ODY2NTIzMTV9.F32bisVth4eDdGxDjB9ByENT-oZLtSY_89uwTSePo2GMEKaeEedpXZE_9mrX7t0_Fmc5m6LNVvIIBqotqsYJYQ"
+          }
+        },
+        "required": ["grant_type", "assertion"]
+      },
+      "ProblemJson": {
+        "type": "object",
+        "properties": {
+          "type": {
+            "type": "string",
+            "format": "uri",
+            "description": "An absolute URI that identifies the problem type. When dereferenced,\nit SHOULD provide human-readable documentation for the problem type\n(e.g., using HTML).",
+            "default": "about:blank",
+            "example": "https://example.com/problem/constraint-violation"
+          },
+          "title": {
+            "type": "string",
+            "description": "A short, summary of the problem type. Written in english and readable for engineers (usually not suited for non technical stakeholders and not localized); example: Service Unavailable"
+          },
+          "status": {
+            "type": "integer",
+            "format": "int32",
+            "description": "The HTTP status code generated by the origin server for this occurrence of the problem.",
+            "minimum": 100,
+            "maximum": 600,
+            "exclusiveMaximum": true,
+            "example": 500
+          },
+          "detail": {
+            "type": "string",
+            "description": "A human readable explanation specific to this occurrence of the\nproblem.",
+            "example": "There was an error processing the request"
+          },
+          "instance": {
+            "type": "string",
+            "format": "uri",
+            "description": "An absolute URI that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced."
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/infra/resources/_modules/apim/apim.tf b/infra/resources/_modules/apim/apim.tf
index 755198c00..1614ee2bb 100644
--- a/infra/resources/_modules/apim/apim.tf
+++ b/infra/resources/_modules/apim/apim.tf
@@ -67,7 +67,6 @@ module "apim_v2_wallet_support_api" {
 
   service_url = format("https://%s/api/v1/wallet", var.function_apps.support_function.function_hostname)
 
-
   description  = "API for Wallet Support Assistance"
   display_name = "IO Wallet - Support"
   path         = "api/v1/wallet/support"
@@ -120,7 +119,6 @@ module "apim_v2_wallet_pdnd_api" {
 
   service_url = format("https://%s/api/v1/wallet", var.function_apps.user_function.function_hostname)
 
-
   description  = "API access limited by PDND token authentication"
   display_name = "IO Wallet - PDND"
   path         = "api/v1/wallet/pdnd"
@@ -145,7 +143,6 @@ module "apim_v2_wallet_admin_api" {
 
   service_url = format("https://%s/api/v1/wallet", var.function_apps.user_function.function_hostname)
 
-
   description  = "Admin API to delete wallet instances"
   display_name = "IO Wallet - ADMIN"
   path         = "api/v1/wallet/admin"
@@ -175,3 +172,41 @@ resource "azurerm_api_management_api_operation_policy" "set_wallet_instance_stat
 
   xml_content = file("${path.module}/api/pdnd/_set_wallet_instance_status_policy.xml")
 }
+
+// APP CREATE WALLET ATTESTATION API
+module "apim_v2_wallet_app_api" {
+  source = "git::https://github.com/pagopa/terraform-azurerm-v4//api_management_api?ref=v1.0.0"
+
+  name                  = format("%s-wallet-app-api", var.project_legacy)
+  api_management_name   = var.apim.name
+  resource_group_name   = var.apim.resource_group_name
+  product_ids           = [module.apim_v2_wallet_app_product.product_id]
+  subscription_required = true
+
+  service_url = format("https://%s/api/v1/wallet", var.function_apps.user_function.function_hostname)
+
+  description  = "App API to create wallet attestation"
+  display_name = "IO Wallet - APP"
+  path         = "api/v1/wallet/app"
+  protocols    = ["https"]
+
+  content_format = "openapi"
+
+  content_value = file("${path.module}/api/app/_swagger.json")
+
+  xml_content = file("${path.module}/api/app/_base_policy.xml")
+}
+
+resource "azurerm_api_management_named_value" "app_func_key" {
+  name                = "io-wallet-user-func-create-wa-key"
+  api_management_name = var.apim.name
+  resource_group_name = var.apim.resource_group_name
+  display_name        = "io-wallet-user-func-create-wa-key"
+  value               = data.azurerm_key_vault_secret.user_func_key_app.value
+  secret              = true
+}
+
+data "azurerm_key_vault_secret" "user_func_key_app" {
+  name         = "io-wallet-user-func-create-wa-key"
+  key_vault_id = var.key_vault_wallet_id
+}
diff --git a/infra/resources/_modules/apim/product.tf b/infra/resources/_modules/apim/product.tf
index 88072f853..0d5b93fd1 100644
--- a/infra/resources/_modules/apim/product.tf
+++ b/infra/resources/_modules/apim/product.tf
@@ -42,3 +42,18 @@ module "apim_v2_wallet_admin_product" {
   subscription_required = true
   approval_required     = false
 }
+
+module "apim_v2_wallet_app_product" {
+  source = "github.com/pagopa/terraform-azurerm-v4//api_management_product?ref=v1.0.0"
+
+  product_id   = format("%s-wallet-app-api", var.project_legacy)
+  display_name = "IO WALLET APP APIs"
+  description  = "Product containing app APIs"
+
+  api_management_name = var.apim.name
+  resource_group_name = var.apim.resource_group_name
+
+  published             = true
+  subscription_required = true
+  approval_required     = false
+}
diff --git a/infra/resources/_modules/cosmos/locals.tf b/infra/resources/_modules/cosmos/locals.tf
index 98bbe4418..b5e36c149 100644
--- a/infra/resources/_modules/cosmos/locals.tf
+++ b/infra/resources/_modules/cosmos/locals.tf
@@ -1,7 +1,7 @@
 locals {
   wallet_cosmosdb_containers = [
     # Each document represents a wallet instance
-    # The userId partition key is the tokenized identifier of the user
+    # The userId partition key is the user fiscal code
     {
       name               = "wallet-instances"
       partition_key_path = "/userId"
@@ -19,6 +19,14 @@ locals {
       }
       default_ttl = 300
     },
+    {
+      name               = "wallet-instances-user-id"
+      partition_key_path = "/id"
+      autoscale_settings = {
+        max_throughput = 8000
+      }
+      default_ttl = null
+    },
     {
       name               = "leases-revoke-wallet-instance"
       partition_key_path = "/id"
@@ -26,6 +34,14 @@ locals {
         max_throughput = 1000
       }
       default_ttl = null
+    },
+    {
+      name               = "leases-wallet-instances-user-id"
+      partition_key_path = "/id"
+      autoscale_settings = {
+        max_throughput = 1000
+      }
+      default_ttl = null
     }
   ]
 }
diff --git a/infra/resources/prod/main.tf b/infra/resources/prod/main.tf
index 35ac19fc6..529f73f75 100644
--- a/infra/resources/prod/main.tf
+++ b/infra/resources/prod/main.tf
@@ -234,7 +234,7 @@ module "storage_accounts" {
   prefix          = local.prefix
   env_short       = local.env_short
   location        = local.location
-  domain          = null
+  domain          = ""
   app_name        = local.domain
   instance_number = "01"
 


Reviews:
user: login: grausof
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-03T09:27:25Z
user: login: copilot-pull-request-reviewer[bot]
body: ## Pull Request Overview

This PR introduces a new attestation endpoint (createWalletAttestationV2) that no longer requires a fiscal code in the request body, and extends the wallet instance synchronization with a new collection for wallet instance user IDs. Key changes include:
- Adding a new endpoint (createWalletAttestationV2) and associated handler logic.
- Updating the wallet instance repository interface and implementation to use getByUserId and getUserId methods.
- Adjusting tests and Azure function registration to accommodate the new API and repository changes.

### Reviewed Changes

Copilot reviewed 24 out of 25 changed files in this pull request and generated no comments.

<details>
<summary>Show a summary per file</summary>

| File | Description |
| ---- | ----------- |
| apps/io-wallet-user-func/src/wallet-instance.ts | Refactored repository methods to use getByUserId and added getWalletInstanceUserId functionality. |
| apps/io-wallet-user-func/src/infra/mobile-attestation-service/index.ts | Conditionally calls allowDevelopmentEnvironmentForUser to improve safety. |
| Various test files | Updated mock repository functions to use the new getByUserId and getUserId methods. |
| apps/io-wallet-user-func/src/infra/azure/cosmos/wallet-instance.ts | Updated Cosmos DB access to use separate containers for id-keyed and userId-keyed data, and added getUserId implementation. |
| Remaining files | Registered new endpoints and functions for attestation and wallet instance user ID synchronization. |
</details>


<details>
<summary>Files not reviewed (1)</summary>

* **apps/io-wallet-user-func/openapi.yaml**: Language not supported
</details>

<details>
<summary>Comments suppressed due to low confidence (1)</summary>

**apps/io-wallet-user-func/src/infra/azure/cosmos/wallet-instance.ts:174**
* Ensure that the partition key used in the getUserId method is correct. If the 'wallet-instances-user-id' container is partitioned by 'id', using item(id, id) is appropriate; otherwise, adjust the partition key to match the expected configuration.
```
getUserId(id: WalletInstance["id"]) {
```
</details>


state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-03T12:39:14Z
user: login: grausof
body: LGTM
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-03T12:49:41Z
user: login: christian-calabrese
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-04T07:35:26Z
user: login: christian-calabrese
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-04T07:48:48Z

Review comments:
diff_hunk: @@ -104,6 +104,41 @@ paths:
         "503":
           $ref: "#/components/responses/ServiceUnavailable"
 
+  /wallet-attestation:
+    description: This is a token endpoint (as defined in RFC 7523 section 4)
path: apps/io-wallet-user-func/openapi.yaml
user: login: grausof
body: no more a token endpoint
created_at: 2025-04-03T09:09:55Z
author_association: CONTRIBUTOR
diff_hunk: @@ -28,7 +28,7 @@ export interface ValidateAssertionRequest {
   jwk: JwkPublicKey;
   nonce: NonEmptyString;
   signCount: number;
-  user: FiscalCode;
+  user?: FiscalCode;
path: apps/io-wallet-user-func/src/attestation-service.ts
user: login: grausof
body: Why optional?
created_at: 2025-04-03T09:27:22Z
author_association: CONTRIBUTOR
diff_hunk: @@ -175,3 +172,41 @@ resource "azurerm_api_management_api_operation_policy" "set_wallet_instance_stat
 
   xml_content = file("${path.module}/api/pdnd/_set_wallet_instance_status_policy.xml")
 }
+
+// APP CREATE WALLET ATTESTATION API
+module "apim_v2_wallet_app_api" {
+  source = "git::https://github.com/pagopa/terraform-azurerm-v4//api_management_api?ref=v1.0.0"
+
+  name                  = format("%s-wallet-app-api", var.project_legacy)
+  api_management_name   = var.apim.name
+  resource_group_name   = var.apim.resource_group_name
+  product_ids           = [module.apim_v2_wallet_app_product.product_id]
+  subscription_required = true
+
+  service_url = format("https://%s/api/v1/wallet", var.function_apps.user_function.function_hostname)
+
+  description  = "App API to create wallet attestation"
+  display_name = "IO Wallet - APP"
+  path         = "api/v1/wallet/app"
+  protocols    = ["https"]
+
+  content_format = "openapi"
+
+  content_value = file("${path.module}/api/app/_swagger.json")
+
+  xml_content = file("${path.module}/api/app/_base_policy.xml")
+}
+
+resource "azurerm_api_management_named_value" "app_func_key" {
+  name                = "io-wallet-user-func-create-wa-key"
+  api_management_name = var.apim.name
+  resource_group_name = var.apim.resource_group_name
+  display_name        = "io-wallet-user-func-create-wa-key"
+  value               = data.azurerm_key_vault_secret.user_func_key_app.value
+  secret              = "true"
path: infra/resources/_modules/apim/apim.tf
user: login: christian-calabrese
body: **suggestion**: I think secret is a boolean rather than a string

```suggestion
  secret              = true
```
created_at: 2025-04-04T07:34:49Z
author_association: CONTRIBUTOR

PR comments:
user: login: github-actions[bot]
created_at: 2025-03-31T09:28:17Z
body: #### 📖 Terraform Plan ('azure-dashboard') - success
<details>
<summary>Terraform Plan</summary>

```hcl
[INFO] init tf on env: prod
[0m[1mInitializing the backend...[0m
[0m[32m
Successfully configured the backend "azurerm"! Terraform will automatically
use this backend unless the backend configuration changes.[0m
[0m[1mInitializing provider plugins...[0m
- Finding hashicorp/azurerm versions matching ">= 3.30.0, <= 3.40.0"...
- Installing hashicorp/azurerm v3.40.0...
- Installed hashicorp/azurerm v3.40.0 (signed by HashiCorp)
Terraform has created a lock file [1m.terraform.lock.hcl[0m to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.[0m

[0m[1m[32mTerraform has been successfully initialized![0m[32m[0m
[0m[32m
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.[0m
[INFO] run tf with: plan on env: prod and other: >-no-color<

No changes. Your infrastructure matches the configuration.

Terraform has compared your real infrastructure against your configuration
and found no differences, so no changes are needed.
```

</details>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-03-31T09:41:00Z
body: #### 📖 Terraform Plan ('azure-dashboard') - success
<details>
<summary>Terraform Plan</summary>

```hcl
[INFO] init tf on env: prod
[0m[1mInitializing the backend...[0m
[0m[32m
Successfully configured the backend "azurerm"! Terraform will automatically
use this backend unless the backend configuration changes.[0m
[0m[1mInitializing provider plugins...[0m
- Finding hashicorp/azurerm versions matching ">= 3.30.0, <= 3.40.0"...
- Installing hashicorp/azurerm v3.40.0...
- Installed hashicorp/azurerm v3.40.0 (signed by HashiCorp)
Terraform has created a lock file [1m.terraform.lock.hcl[0m to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.[0m

[0m[1m[32mTerraform has been successfully initialized![0m[32m[0m
[0m[32m
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.[0m
[INFO] run tf with: plan on env: prod and other: >-no-color<

No changes. Your infrastructure matches the configuration.

Terraform has compared your real infrastructure against your configuration
and found no differences, so no changes are needed.
```

</details>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-03-31T12:53:22Z
body: #### 📖 Terraform Plan ('azure-dashboard') - success
<details>
<summary>Terraform Plan</summary>

```hcl
[INFO] init tf on env: prod
[0m[1mInitializing the backend...[0m
[0m[32m
Successfully configured the backend "azurerm"! Terraform will automatically
use this backend unless the backend configuration changes.[0m
[0m[1mInitializing provider plugins...[0m
- Finding hashicorp/azurerm versions matching ">= 3.30.0, <= 3.40.0"...
- Installing hashicorp/azurerm v3.40.0...
- Installed hashicorp/azurerm v3.40.0 (signed by HashiCorp)
Terraform has created a lock file [1m.terraform.lock.hcl[0m to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.[0m

[0m[1m[32mTerraform has been successfully initialized![0m[32m[0m
[0m[32m
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.[0m
[INFO] run tf with: plan on env: prod and other: >-no-color<

No changes. Your infrastructure matches the configuration.

Terraform has compared your real infrastructure against your configuration
and found no differences, so no changes are needed.
```

</details>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-04-01T09:58:59Z
body: #### 📖 Terraform Plan ('azure-dashboard') - success
<details>
<summary>Terraform Plan</summary>

```hcl
[INFO] init tf on env: prod
[0m[1mInitializing the backend...[0m
[0m[32m
Successfully configured the backend "azurerm"! Terraform will automatically
use this backend unless the backend configuration changes.[0m
[0m[1mInitializing provider plugins...[0m
- Finding hashicorp/azurerm versions matching ">= 3.30.0, <= 3.40.0"...
- Installing hashicorp/azurerm v3.40.0...
- Installed hashicorp/azurerm v3.40.0 (signed by HashiCorp)
Terraform has created a lock file [1m.terraform.lock.hcl[0m to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.[0m

[0m[1m[32mTerraform has been successfully initialized![0m[32m[0m
[0m[32m
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.[0m
[INFO] run tf with: plan on env: prod and other: >-no-color<

No changes. Your infrastructure matches the configuration.

Terraform has compared your real infrastructure against your configuration
and found no differences, so no changes are needed.
```

</details>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-04-01T14:10:53Z
body: #### 📖 Terraform Plan ('azure-dashboard') - success
<details>
<summary>Terraform Plan</summary>

```hcl
atatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/{id}/status" -> "/api/v1/wallet/wallet-instances/current/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "15" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "16" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Response Codes (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "httpStatus_d"
                                                    type = "string"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "count_"
                                                        type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "17" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          + "18" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Line"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Availability (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "availability"
                                                      + type = "real"
                                                    },
                                                  + {
                                                      + name = "watermark"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + PartTitle = "Availability (5m)"
                                          + Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 0
                                  + y       = 24
                                }
                            }
                          + "19" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Pie"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Response Codes (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "httpStatus_d"
                                                  + type = "string"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = [
                                                  + {
                                                      + name = "HTTPStatus"
                                                      + type = "string"
                                                    },
                                                ]
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Response Codes (5m)"
                                          + Query         = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                          + SpecificChart = "StackedArea"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 6
                                  + y       = 24
                                }
                            }
                          + "20" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "StackedColumn"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Percentile Response Time (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "watermark"
                                                      + type = "long"
                                                    },
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Percentile Response Time (5m)"
                                          + Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                          + SpecificChart = "Line"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 12
                                  + y       = 24
                                }
                            }
                          ~ "9"  = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/current/status" -> "/api/v1/wallet/wallet-attestation"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                            # (9 unchanged attributes hidden)
                        }
                        # (1 unchanged attribute hidden)
                    }
                }
                # (1 unchanged attribute hidden)
            }
        )
        id                   = "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/dashboards/providers/Microsoft.Portal/dashboards/io-p-opex_io_wallet"
        name                 = "io-p-opex_io_wallet"
        tags                 = {
            "CostCenter"     = "TS310 - PAGAMENTI & SERVIZI"
            "CreatedBy"      = "Terraform"
            "Environment"    = "Prod"
            "ManagementTeam" = "IO Wallet"
            "Owner"          = "IO"
            "Source"         = "https://github.com/pagopa/io-wallet"
        }
        # (2 unchanged attributes hidden)
    }

Plan: 8 to add, 1 to change, 6 to destroy.

─────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so Terraform can't
guarantee to take exactly these actions if you run "terraform apply" now.
```

</details>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-04-01T14:14:41Z
body: #### 📖 Terraform Plan ('azure-dashboard') - success
<details>
<summary>Terraform Plan</summary>

```hcl
atatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/{id}/status" -> "/api/v1/wallet/wallet-instances/current/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "15" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "16" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Response Codes (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "httpStatus_d"
                                                    type = "string"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "count_"
                                                        type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "17" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          + "18" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Line"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Availability (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "availability"
                                                      + type = "real"
                                                    },
                                                  + {
                                                      + name = "watermark"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + PartTitle = "Availability (5m)"
                                          + Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 0
                                  + y       = 24
                                }
                            }
                          + "19" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Pie"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Response Codes (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "httpStatus_d"
                                                  + type = "string"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = [
                                                  + {
                                                      + name = "HTTPStatus"
                                                      + type = "string"
                                                    },
                                                ]
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Response Codes (5m)"
                                          + Query         = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                          + SpecificChart = "StackedArea"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 6
                                  + y       = 24
                                }
                            }
                          + "20" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "StackedColumn"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Percentile Response Time (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "watermark"
                                                      + type = "long"
                                                    },
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Percentile Response Time (5m)"
                                          + Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                          + SpecificChart = "Line"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 12
                                  + y       = 24
                                }
                            }
                          ~ "9"  = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/current/status" -> "/api/v1/wallet/wallet-attestation"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                            # (9 unchanged attributes hidden)
                        }
                        # (1 unchanged attribute hidden)
                    }
                }
                # (1 unchanged attribute hidden)
            }
        )
        id                   = "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/dashboards/providers/Microsoft.Portal/dashboards/io-p-opex_io_wallet"
        name                 = "io-p-opex_io_wallet"
        tags                 = {
            "CostCenter"     = "TS310 - PAGAMENTI & SERVIZI"
            "CreatedBy"      = "Terraform"
            "Environment"    = "Prod"
            "ManagementTeam" = "IO Wallet"
            "Owner"          = "IO"
            "Source"         = "https://github.com/pagopa/io-wallet"
        }
        # (2 unchanged attributes hidden)
    }

Plan: 8 to add, 1 to change, 6 to destroy.

─────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so Terraform can't
guarantee to take exactly these actions if you run "terraform apply" now.
```

</details>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-04-01T14:59:44Z
body: #### 📖 Terraform Plan ('azure-dashboard') - success
<details>
<summary>Terraform Plan</summary>

```hcl
atatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/{id}/status" -> "/api/v1/wallet/wallet-instances/current/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "15" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "16" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Response Codes (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "httpStatus_d"
                                                    type = "string"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "count_"
                                                        type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "17" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          + "18" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Line"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Availability (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "availability"
                                                      + type = "real"
                                                    },
                                                  + {
                                                      + name = "watermark"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + PartTitle = "Availability (5m)"
                                          + Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 0
                                  + y       = 24
                                }
                            }
                          + "19" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Pie"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Response Codes (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "httpStatus_d"
                                                  + type = "string"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = [
                                                  + {
                                                      + name = "HTTPStatus"
                                                      + type = "string"
                                                    },
                                                ]
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Response Codes (5m)"
                                          + Query         = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                          + SpecificChart = "StackedArea"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 6
                                  + y       = 24
                                }
                            }
                          + "20" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "StackedColumn"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Percentile Response Time (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "watermark"
                                                      + type = "long"
                                                    },
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Percentile Response Time (5m)"
                                          + Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                          + SpecificChart = "Line"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 12
                                  + y       = 24
                                }
                            }
                          ~ "9"  = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/current/status" -> "/api/v1/wallet/wallet-attestation"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                            # (9 unchanged attributes hidden)
                        }
                        # (1 unchanged attribute hidden)
                    }
                }
                # (1 unchanged attribute hidden)
            }
        )
        id                   = "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/dashboards/providers/Microsoft.Portal/dashboards/io-p-opex_io_wallet"
        name                 = "io-p-opex_io_wallet"
        tags                 = {
            "CostCenter"     = "TS310 - PAGAMENTI & SERVIZI"
            "CreatedBy"      = "Terraform"
            "Environment"    = "Prod"
            "ManagementTeam" = "IO Wallet"
            "Owner"          = "IO"
            "Source"         = "https://github.com/pagopa/io-wallet"
        }
        # (2 unchanged attributes hidden)
    }

Plan: 8 to add, 1 to change, 6 to destroy.

─────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so Terraform can't
guarantee to take exactly these actions if you run "terraform apply" now.
```

</details>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-04-01T15:16:05Z
body: #### 📖 Terraform Plan ('azure-dashboard') - success
<details>
<summary>Terraform Plan</summary>

```hcl
atatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/{id}/status" -> "/api/v1/wallet/wallet-instances/current/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "15" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "16" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Response Codes (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "httpStatus_d"
                                                    type = "string"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "count_"
                                                        type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "17" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          + "18" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Line"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Availability (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "availability"
                                                      + type = "real"
                                                    },
                                                  + {
                                                      + name = "watermark"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + PartTitle = "Availability (5m)"
                                          + Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 0
                                  + y       = 24
                                }
                            }
                          + "19" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Pie"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Response Codes (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "httpStatus_d"
                                                  + type = "string"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = [
                                                  + {
                                                      + name = "HTTPStatus"
                                                      + type = "string"
                                                    },
                                                ]
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Response Codes (5m)"
                                          + Query         = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                          + SpecificChart = "StackedArea"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 6
                                  + y       = 24
                                }
                            }
                          + "20" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "StackedColumn"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Percentile Response Time (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "watermark"
                                                      + type = "long"
                                                    },
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Percentile Response Time (5m)"
                                          + Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                          + SpecificChart = "Line"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 12
                                  + y       = 24
                                }
                            }
                          ~ "9"  = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/current/status" -> "/api/v1/wallet/wallet-attestation"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                            # (9 unchanged attributes hidden)
                        }
                        # (1 unchanged attribute hidden)
                    }
                }
                # (1 unchanged attribute hidden)
            }
        )
        id                   = "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/dashboards/providers/Microsoft.Portal/dashboards/io-p-opex_io_wallet"
        name                 = "io-p-opex_io_wallet"
        tags                 = {
            "CostCenter"     = "TS310 - PAGAMENTI & SERVIZI"
            "CreatedBy"      = "Terraform"
            "Environment"    = "Prod"
            "ManagementTeam" = "IO Wallet"
            "Owner"          = "IO"
            "Source"         = "https://github.com/pagopa/io-wallet"
        }
        # (2 unchanged attributes hidden)
    }

Plan: 8 to add, 1 to change, 6 to destroy.

─────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so Terraform can't
guarantee to take exactly these actions if you run "terraform apply" now.
```

</details>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-04-01T15:26:12Z
body: #### 📖 Terraform Plan ('azure-dashboard') - success
<details>
<summary>Terraform Plan</summary>

```hcl
atatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/{id}/status" -> "/api/v1/wallet/wallet-instances/current/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "15" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "16" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Response Codes (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "httpStatus_d"
                                                    type = "string"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "count_"
                                                        type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "17" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          + "18" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Line"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Availability (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "availability"
                                                      + type = "real"
                                                    },
                                                  + {
                                                      + name = "watermark"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + PartTitle = "Availability (5m)"
                                          + Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 0
                                  + y       = 24
                                }
                            }
                          + "19" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Pie"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Response Codes (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "httpStatus_d"
                                                  + type = "string"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = [
                                                  + {
                                                      + name = "HTTPStatus"
                                                      + type = "string"
                                                    },
                                                ]
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Response Codes (5m)"
                                          + Query         = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                          + SpecificChart = "StackedArea"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 6
                                  + y       = 24
                                }
                            }
                          + "20" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "StackedColumn"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Percentile Response Time (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "watermark"
                                                      + type = "long"
                                                    },
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Percentile Response Time (5m)"
                                          + Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                          + SpecificChart = "Line"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 12
                                  + y       = 24
                                }
                            }
                          ~ "9"  = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/current/status" -> "/api/v1/wallet/wallet-attestation"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                            # (9 unchanged attributes hidden)
                        }
                        # (1 unchanged attribute hidden)
                    }
                }
                # (1 unchanged attribute hidden)
            }
        )
        id                   = "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/dashboards/providers/Microsoft.Portal/dashboards/io-p-opex_io_wallet"
        name                 = "io-p-opex_io_wallet"
        tags                 = {
            "CostCenter"     = "TS310 - PAGAMENTI & SERVIZI"
            "CreatedBy"      = "Terraform"
            "Environment"    = "Prod"
            "ManagementTeam" = "IO Wallet"
            "Owner"          = "IO"
            "Source"         = "https://github.com/pagopa/io-wallet"
        }
        # (2 unchanged attributes hidden)
    }

Plan: 8 to add, 1 to change, 6 to destroy.

─────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so Terraform can't
guarantee to take exactly these actions if you run "terraform apply" now.
```

</details>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-04-01T15:28:26Z
body: #### 📖 Terraform Plan ('azure-dashboard') - success
<details>
<summary>Terraform Plan</summary>

```hcl
atatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/{id}/status" -> "/api/v1/wallet/wallet-instances/current/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "15" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "16" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Response Codes (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "httpStatus_d"
                                                    type = "string"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "count_"
                                                        type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "17" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          + "18" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Line"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Availability (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "availability"
                                                      + type = "real"
                                                    },
                                                  + {
                                                      + name = "watermark"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + PartTitle = "Availability (5m)"
                                          + Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 0
                                  + y       = 24
                                }
                            }
                          + "19" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Pie"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Response Codes (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "httpStatus_d"
                                                  + type = "string"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = [
                                                  + {
                                                      + name = "HTTPStatus"
                                                      + type = "string"
                                                    },
                                                ]
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Response Codes (5m)"
                                          + Query         = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                          + SpecificChart = "StackedArea"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 6
                                  + y       = 24
                                }
                            }
                          + "20" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "StackedColumn"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Percentile Response Time (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "watermark"
                                                      + type = "long"
                                                    },
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Percentile Response Time (5m)"
                                          + Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                          + SpecificChart = "Line"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 12
                                  + y       = 24
                                }
                            }
                          ~ "9"  = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/current/status" -> "/api/v1/wallet/wallet-attestation"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                            # (9 unchanged attributes hidden)
                        }
                        # (1 unchanged attribute hidden)
                    }
                }
                # (1 unchanged attribute hidden)
            }
        )
        id                   = "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/dashboards/providers/Microsoft.Portal/dashboards/io-p-opex_io_wallet"
        name                 = "io-p-opex_io_wallet"
        tags                 = {
            "CostCenter"     = "TS310 - PAGAMENTI & SERVIZI"
            "CreatedBy"      = "Terraform"
            "Environment"    = "Prod"
            "ManagementTeam" = "IO Wallet"
            "Owner"          = "IO"
            "Source"         = "https://github.com/pagopa/io-wallet"
        }
        # (2 unchanged attributes hidden)
    }

Plan: 8 to add, 1 to change, 6 to destroy.

─────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so Terraform can't
guarantee to take exactly these actions if you run "terraform apply" now.
```

</details>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-04-03T10:04:36Z
body: #### 📖 Terraform Plan ('azure-dashboard') - success
<details>
<summary>Terraform Plan</summary>

```hcl
atatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/{id}/status" -> "/api/v1/wallet/wallet-instances/current/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "15" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "16" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Response Codes (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "httpStatus_d"
                                                    type = "string"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "count_"
                                                        type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "17" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          + "18" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Line"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Availability (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "availability"
                                                      + type = "real"
                                                    },
                                                  + {
                                                      + name = "watermark"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + PartTitle = "Availability (5m)"
                                          + Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 0
                                  + y       = 24
                                }
                            }
                          + "19" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Pie"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Response Codes (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "httpStatus_d"
                                                  + type = "string"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = [
                                                  + {
                                                      + name = "HTTPStatus"
                                                      + type = "string"
                                                    },
                                                ]
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Response Codes (5m)"
                                          + Query         = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                          + SpecificChart = "StackedArea"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 6
                                  + y       = 24
                                }
                            }
                          + "20" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "StackedColumn"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Percentile Response Time (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "watermark"
                                                      + type = "long"
                                                    },
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Percentile Response Time (5m)"
                                          + Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                          + SpecificChart = "Line"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 12
                                  + y       = 24
                                }
                            }
                          ~ "9"  = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/current/status" -> "/api/v1/wallet/wallet-attestation"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                            # (9 unchanged attributes hidden)
                        }
                        # (1 unchanged attribute hidden)
                    }
                }
                # (1 unchanged attribute hidden)
            }
        )
        id                   = "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/dashboards/providers/Microsoft.Portal/dashboards/io-p-opex_io_wallet"
        name                 = "io-p-opex_io_wallet"
        tags                 = {
            "CostCenter"     = "TS310 - PAGAMENTI & SERVIZI"
            "CreatedBy"      = "Terraform"
            "Environment"    = "Prod"
            "ManagementTeam" = "IO Wallet"
            "Owner"          = "IO"
            "Source"         = "https://github.com/pagopa/io-wallet"
        }
        # (2 unchanged attributes hidden)
    }

Plan: 8 to add, 1 to change, 6 to destroy.

─────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so Terraform can't
guarantee to take exactly these actions if you run "terraform apply" now.
```

</details>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-04-03T12:22:58Z
body: #### 📖 Terraform Plan ('azure-dashboard') - success
<details>
<summary>Terraform Plan</summary>

```hcl
atatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/{id}/status" -> "/api/v1/wallet/wallet-instances/current/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "15" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "16" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Response Codes (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "httpStatus_d"
                                                    type = "string"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "count_"
                                                        type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "17" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          + "18" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Line"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Availability (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "availability"
                                                      + type = "real"
                                                    },
                                                  + {
                                                      + name = "watermark"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + PartTitle = "Availability (5m)"
                                          + Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 0
                                  + y       = 24
                                }
                            }
                          + "19" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Pie"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Response Codes (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "httpStatus_d"
                                                  + type = "string"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = [
                                                  + {
                                                      + name = "HTTPStatus"
                                                      + type = "string"
                                                    },
                                                ]
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Response Codes (5m)"
                                          + Query         = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                          + SpecificChart = "StackedArea"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 6
                                  + y       = 24
                                }
                            }
                          + "20" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "StackedColumn"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Percentile Response Time (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "watermark"
                                                      + type = "long"
                                                    },
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Percentile Response Time (5m)"
                                          + Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                          + SpecificChart = "Line"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 12
                                  + y       = 24
                                }
                            }
                          ~ "9"  = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/current/status" -> "/api/v1/wallet/wallet-attestation"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                            # (9 unchanged attributes hidden)
                        }
                        # (1 unchanged attribute hidden)
                    }
                }
                # (1 unchanged attribute hidden)
            }
        )
        id                   = "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/dashboards/providers/Microsoft.Portal/dashboards/io-p-opex_io_wallet"
        name                 = "io-p-opex_io_wallet"
        tags                 = {
            "CostCenter"     = "TS310 - PAGAMENTI & SERVIZI"
            "CreatedBy"      = "Terraform"
            "Environment"    = "Prod"
            "ManagementTeam" = "IO Wallet"
            "Owner"          = "IO"
            "Source"         = "https://github.com/pagopa/io-wallet"
        }
        # (2 unchanged attributes hidden)
    }

Plan: 8 to add, 1 to change, 6 to destroy.

─────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so Terraform can't
guarantee to take exactly these actions if you run "terraform apply" now.
```

</details>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-04-03T12:47:37Z
body: #### 📖 Terraform Plan ('azure-dashboard') - success
<details>
<summary>Terraform Plan</summary>

```hcl
atatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/{id}/status" -> "/api/v1/wallet/wallet-instances/current/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "15" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "16" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Response Codes (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "httpStatus_d"
                                                    type = "string"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "count_"
                                                        type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "17" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          + "18" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Line"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Availability (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "availability"
                                                      + type = "real"
                                                    },
                                                  + {
                                                      + name = "watermark"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + PartTitle = "Availability (5m)"
                                          + Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 0
                                  + y       = 24
                                }
                            }
                          + "19" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Pie"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Response Codes (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "httpStatus_d"
                                                  + type = "string"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = [
                                                  + {
                                                      + name = "HTTPStatus"
                                                      + type = "string"
                                                    },
                                                ]
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Response Codes (5m)"
                                          + Query         = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                          + SpecificChart = "StackedArea"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 6
                                  + y       = 24
                                }
                            }
                          + "20" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "StackedColumn"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Percentile Response Time (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "watermark"
                                                      + type = "long"
                                                    },
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Percentile Response Time (5m)"
                                          + Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                          + SpecificChart = "Line"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 12
                                  + y       = 24
                                }
                            }
                          ~ "9"  = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/current/status" -> "/api/v1/wallet/wallet-attestation"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                            # (9 unchanged attributes hidden)
                        }
                        # (1 unchanged attribute hidden)
                    }
                }
                # (1 unchanged attribute hidden)
            }
        )
        id                   = "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/dashboards/providers/Microsoft.Portal/dashboards/io-p-opex_io_wallet"
        name                 = "io-p-opex_io_wallet"
        tags                 = {
            "CostCenter"     = "TS310 - PAGAMENTI & SERVIZI"
            "CreatedBy"      = "Terraform"
            "Environment"    = "Prod"
            "ManagementTeam" = "IO Wallet"
            "Owner"          = "IO"
            "Source"         = "https://github.com/pagopa/io-wallet"
        }
        # (2 unchanged attributes hidden)
    }

Plan: 8 to add, 1 to change, 6 to destroy.

─────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so Terraform can't
guarantee to take exactly these actions if you run "terraform apply" now.
```

</details>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-04-03T12:50:14Z
body: #### 📖 Terraform Plan ('azure-dashboard') - success
<details>
<summary>Terraform Plan</summary>

```hcl
atatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/{id}/status" -> "/api/v1/wallet/wallet-instances/current/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "15" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "16" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Response Codes (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "httpStatus_d"
                                                    type = "string"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "count_"
                                                        type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "17" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          + "18" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Line"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Availability (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "availability"
                                                      + type = "real"
                                                    },
                                                  + {
                                                      + name = "watermark"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + PartTitle = "Availability (5m)"
                                          + Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 0
                                  + y       = 24
                                }
                            }
                          + "19" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Pie"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Response Codes (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "httpStatus_d"
                                                  + type = "string"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = [
                                                  + {
                                                      + name = "HTTPStatus"
                                                      + type = "string"
                                                    },
                                                ]
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Response Codes (5m)"
                                          + Query         = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                          + SpecificChart = "StackedArea"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 6
                                  + y       = 24
                                }
                            }
                          + "20" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "StackedColumn"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Percentile Response Time (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "watermark"
                                                      + type = "long"
                                                    },
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Percentile Response Time (5m)"
                                          + Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                          + SpecificChart = "Line"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 12
                                  + y       = 24
                                }
                            }
                          ~ "9"  = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/current/status" -> "/api/v1/wallet/wallet-attestation"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                            # (9 unchanged attributes hidden)
                        }
                        # (1 unchanged attribute hidden)
                    }
                }
                # (1 unchanged attribute hidden)
            }
        )
        id                   = "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/dashboards/providers/Microsoft.Portal/dashboards/io-p-opex_io_wallet"
        name                 = "io-p-opex_io_wallet"
        tags                 = {
            "CostCenter"     = "TS310 - PAGAMENTI & SERVIZI"
            "CreatedBy"      = "Terraform"
            "Environment"    = "Prod"
            "ManagementTeam" = "IO Wallet"
            "Owner"          = "IO"
            "Source"         = "https://github.com/pagopa/io-wallet"
        }
        # (2 unchanged attributes hidden)
    }

Plan: 8 to add, 1 to change, 6 to destroy.

─────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so Terraform can't
guarantee to take exactly these actions if you run "terraform apply" now.
```

</details>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-04-03T13:02:40Z
body: #### 📖 Terraform Plan ('azure-dashboard') - success
<details>
<summary>Terraform Plan</summary>

```hcl
atatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/{id}/status" -> "/api/v1/wallet/wallet-instances/current/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "15" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "16" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Response Codes (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "httpStatus_d"
                                                    type = "string"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "count_"
                                                        type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "17" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          + "18" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Line"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Availability (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "availability"
                                                      + type = "real"
                                                    },
                                                  + {
                                                      + name = "watermark"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + PartTitle = "Availability (5m)"
                                          + Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 0
                                  + y       = 24
                                }
                            }
                          + "19" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Pie"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Response Codes (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "httpStatus_d"
                                                  + type = "string"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = [
                                                  + {
                                                      + name = "HTTPStatus"
                                                      + type = "string"
                                                    },
                                                ]
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Response Codes (5m)"
                                          + Query         = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                          + SpecificChart = "StackedArea"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 6
                                  + y       = 24
                                }
                            }
                          + "20" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "StackedColumn"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Percentile Response Time (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "watermark"
                                                      + type = "long"
                                                    },
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Percentile Response Time (5m)"
                                          + Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                          + SpecificChart = "Line"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 12
                                  + y       = 24
                                }
                            }
                          ~ "9"  = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/current/status" -> "/api/v1/wallet/wallet-attestation"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                            # (9 unchanged attributes hidden)
                        }
                        # (1 unchanged attribute hidden)
                    }
                }
                # (1 unchanged attribute hidden)
            }
        )
        id                   = "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/dashboards/providers/Microsoft.Portal/dashboards/io-p-opex_io_wallet"
        name                 = "io-p-opex_io_wallet"
        tags                 = {
            "CostCenter"     = "TS310 - PAGAMENTI & SERVIZI"
            "CreatedBy"      = "Terraform"
            "Environment"    = "Prod"
            "ManagementTeam" = "IO Wallet"
            "Owner"          = "IO"
            "Source"         = "https://github.com/pagopa/io-wallet"
        }
        # (2 unchanged attributes hidden)
    }

Plan: 8 to add, 1 to change, 6 to destroy.

─────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so Terraform can't
guarantee to take exactly these actions if you run "terraform apply" now.
```

</details>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-04-03T13:08:09Z
body: #### 📖 Terraform Plan ('azure-dashboard') - success
<details>
<summary>Terraform Plan</summary>

```hcl
atatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/{id}/status" -> "/api/v1/wallet/wallet-instances/current/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "15" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "16" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Response Codes (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "httpStatus_d"
                                                    type = "string"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "count_"
                                                        type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "17" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          + "18" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Line"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Availability (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "availability"
                                                      + type = "real"
                                                    },
                                                  + {
                                                      + name = "watermark"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + PartTitle = "Availability (5m)"
                                          + Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 0
                                  + y       = 24
                                }
                            }
                          + "19" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Pie"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Response Codes (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "httpStatus_d"
                                                  + type = "string"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = [
                                                  + {
                                                      + name = "HTTPStatus"
                                                      + type = "string"
                                                    },
                                                ]
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Response Codes (5m)"
                                          + Query         = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                          + SpecificChart = "StackedArea"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 6
                                  + y       = 24
                                }
                            }
                          + "20" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "StackedColumn"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Percentile Response Time (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "watermark"
                                                      + type = "long"
                                                    },
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Percentile Response Time (5m)"
                                          + Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                          + SpecificChart = "Line"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 12
                                  + y       = 24
                                }
                            }
                          ~ "9"  = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/current/status" -> "/api/v1/wallet/wallet-attestation"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                            # (9 unchanged attributes hidden)
                        }
                        # (1 unchanged attribute hidden)
                    }
                }
                # (1 unchanged attribute hidden)
            }
        )
        id                   = "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/dashboards/providers/Microsoft.Portal/dashboards/io-p-opex_io_wallet"
        name                 = "io-p-opex_io_wallet"
        tags                 = {
            "CostCenter"     = "TS310 - PAGAMENTI & SERVIZI"
            "CreatedBy"      = "Terraform"
            "Environment"    = "Prod"
            "ManagementTeam" = "IO Wallet"
            "Owner"          = "IO"
            "Source"         = "https://github.com/pagopa/io-wallet"
        }
        # (2 unchanged attributes hidden)
    }

Plan: 8 to add, 1 to change, 6 to destroy.

─────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so Terraform can't
guarantee to take exactly these actions if you run "terraform apply" now.
```

</details>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-04-04T07:45:08Z
body: #### 📖 Terraform Plan ('azure-dashboard') - success
<details>
<summary>Terraform Plan</summary>

```hcl
atatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/{id}/status" -> "/api/v1/wallet/wallet-instances/current/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 10;
                                              + let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "15" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "16" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Response Codes (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "httpStatus_d"
                                                    type = "string"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "count_"
                                                        type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                              - let api_url = "/api/v1/wallet/health";
                                              + let api_url = "/api/v1/wallet/wallet-instances/[^/]+/status";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          ~ "17" = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Percentile Response Time (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/health" -> "/api/v1/wallet/wallet-instances/{id}/status"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "duration_percentile_95"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                              - let threshold = 1;
                                              + let threshold = 10;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/health"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/[^/]+/status"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                            # (3 unchanged attributes hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                          + "18" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Line"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Availability (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "availability"
                                                      + type = "real"
                                                    },
                                                  + {
                                                      + name = "watermark"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + PartTitle = "Availability (5m)"
                                          + Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 0
                                  + y       = 24
                                }
                            }
                          + "19" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "Pie"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Response Codes (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "httpStatus_d"
                                                  + type = "string"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = [
                                                  + {
                                                      + name = "HTTPStatus"
                                                      + type = "string"
                                                    },
                                                ]
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "count_"
                                                      + type = "long"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Response Codes (5m)"
                                          + Query         = <<-EOT
                                                let api_url = "/api/v1/wallet/health";
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex api_url
                                                | extend HTTPStatus = case(
                                                  httpStatus_d between (100 .. 199), "1XX",
                                                  httpStatus_d between (200 .. 299), "2XX",
                                                  httpStatus_d between (300 .. 399), "3XX",
                                                  httpStatus_d between (400 .. 499), "4XX",
                                                  "5XX")
                                                | summarize count() by HTTPStatus, bin(TimeGenerated, 5m)
                                                | render areachart with (xtitle = "time", ytitle= "count")
                                            EOT
                                          + SpecificChart = "StackedArea"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 6
                                  + y       = 24
                                }
                            }
                          + "20" = {
                              + metadata = {
                                  + inputs   = [
                                      + {
                                          + isOptional = true
                                          + name       = "resourceTypeMode"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ComponentId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Scope"
                                          + value      = {
                                              + resourceIds = [
                                                  + "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-rg-external/providers/Microsoft.Network/applicationGateways/io-p-appgateway",
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Version"
                                          + value      = "2.0"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "TimeRange"
                                          + value      = "PT4H"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DashboardId"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "DraftRequestParameters"
                                          + value      = {
                                              + scope = "hierarchy"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Query"
                                          + value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "ControlType"
                                          + value      = "FrameControlChart"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "SpecificChart"
                                          + value      = "StackedColumn"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartTitle"
                                          + value      = "Percentile Response Time (5m)"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "PartSubTitle"
                                          + value      = "/api/v1/wallet/health"
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "Dimensions"
                                          + value      = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "LegendOptions"
                                          + value      = {
                                              + isEnabled = true
                                              + position  = "Bottom"
                                            }
                                        },
                                      + {
                                          + isOptional = true
                                          + name       = "IsQueryContainTimeRange"
                                          + value      = false
                                        },
                                    ]
                                  + settings = {
                                      + content = {
                                          + Dimensions    = {
                                              + aggregation = "Sum"
                                              + splitBy     = []
                                              + xAxis       = {
                                                  + name = "TimeGenerated"
                                                  + type = "datetime"
                                                }
                                              + yAxis       = [
                                                  + {
                                                      + name = "watermark"
                                                      + type = "long"
                                                    },
                                                  + {
                                                      + name = "duration_percentile_95"
                                                      + type = "real"
                                                    },
                                                ]
                                            }
                                          + PartTitle     = "Percentile Response Time (5m)"
                                          + Query         = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 1;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                                | where requestUri_s matches regex "/api/v1/wallet/health"
                                                | summarize
                                                    watermark=threshold,
                                                    duration_percentile_95=percentiles(timeTaken_d, 95) by bin(TimeGenerated, 5m)
                                                | render timechart with (xtitle = "time", ytitle= "response time(s)")
                                            EOT
                                          + SpecificChart = "Line"
                                        }
                                    }
                                  + type     = "Extension/Microsoft_OperationsManagementSuite_Workspace/PartType/LogsDashboardPart"
                                }
                              + position = {
                                  + colSpan = 6
                                  + rowSpan = 4
                                  + x       = 12
                                  + y       = 24
                                }
                            }
                          ~ "9"  = {
                              ~ metadata = {
                                  ~ inputs   = [
                                        # (7 unchanged elements hidden)
                                        {
                                            isOptional = true
                                            name       = "DraftRequestParameters"
                                            value      = {
                                                scope = "hierarchy"
                                            }
                                        },
                                      ~ {
                                            name       = "Query"
                                          ~ value      = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "ControlType"
                                            value      = "FrameControlChart"
                                        },
                                        # (1 unchanged element hidden)
                                        {
                                            isOptional = true
                                            name       = "PartTitle"
                                            value      = "Availability (5m)"
                                        },
                                      ~ {
                                            name       = "PartSubTitle"
                                          ~ value      = "/api/v1/wallet/wallet-instances/current/status" -> "/api/v1/wallet/wallet-attestation"
                                            # (1 unchanged attribute hidden)
                                        },
                                        {
                                            isOptional = true
                                            name       = "Dimensions"
                                            value      = {
                                                aggregation = "Sum"
                                                splitBy     = []
                                                xAxis       = {
                                                    name = "TimeGenerated"
                                                    type = "datetime"
                                                }
                                                yAxis       = [
                                                    {
                                                        name = "availability"
                                                        type = "real"
                                                    },
                                                    {
                                                        name = "watermark"
                                                        type = "real"
                                                    },
                                                ]
                                            }
                                        },
                                        # (2 unchanged elements hidden)
                                    ]
                                  ~ settings = {
                                      ~ content = {
                                          ~ Query     = <<-EOT
                                                let api_hosts = datatable (name: string) ["api-app.io.pagopa.it"];
                                                let threshold = 0.99;
                                                AzureDiagnostics
                                                | where originalHost_s in (api_hosts)
                                              - | where requestUri_s matches regex "/api/v1/wallet/wallet-instances/current/status"
                                              + | where requestUri_s matches regex "/api/v1/wallet/wallet-attestation"
                                                | summarize
                                                  Total=count(),
                                                  Success=count(httpStatus_d < 500) by bin(TimeGenerated, 5m)
                                                | extend availability=toreal(Success) / Total
                                                | project TimeGenerated, availability, watermark=threshold
                                                | render timechart with (xtitle = "time", ytitle= "availability(%)")
                                            EOT
                                            # (1 unchanged attribute hidden)
                                        }
                                    }
                                    # (1 unchanged attribute hidden)
                                }
                                # (1 unchanged attribute hidden)
                            }
                            # (9 unchanged attributes hidden)
                        }
                        # (1 unchanged attribute hidden)
                    }
                }
                # (1 unchanged attribute hidden)
            }
        )
        id                   = "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/dashboards/providers/Microsoft.Portal/dashboards/io-p-opex_io_wallet"
        name                 = "io-p-opex_io_wallet"
        tags                 = {
            "CostCenter"     = "TS310 - PAGAMENTI & SERVIZI"
            "CreatedBy"      = "Terraform"
            "Environment"    = "Prod"
            "ManagementTeam" = "IO Wallet"
            "Owner"          = "IO"
            "Source"         = "https://github.com/pagopa/io-wallet"
        }
        # (2 unchanged attributes hidden)
    }

Plan: 8 to add, 1 to change, 6 to destroy.

─────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so Terraform can't
guarantee to take exactly these actions if you run "terraform apply" now.
```

</details>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-04-04T07:46:34Z
body: #### 📖 Terraform Plan ('infra/resources/prod') - success
<details>
<summary>Terraform Plan</summary>

```hcl
module.function_apps.module.function_app_user_autoscaler_02.data.azurerm_linux_function_app.this[0]: Still reading... [10s elapsed]
module.function_apps.module.function_app_support_autoscaler.data.azurerm_linux_function_app.this[0]: Still reading... [10s elapsed]

Terraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
  + create
  ~ update in-place

Terraform will perform the following actions:

  # module.apim_itn.azurerm_api_management_named_value.app_func_key will be created
  + resource "azurerm_api_management_named_value" "app_func_key" {
      + api_management_name = "io-p-itn-apim-01"
      + display_name        = "io-wallet-user-func-create-wa-key"
      + id                  = (known after apply)
      + name                = "io-wallet-user-func-create-wa-key"
      + resource_group_name = "io-p-itn-common-rg-01"
      + secret              = true
      + value               = (sensitive value)
    }

  # module.cosmos.azurerm_cosmosdb_sql_container.containers_02["leases-wallet-instances-user-id"] will be created
  + resource "azurerm_cosmosdb_sql_container" "containers_02" {
      + account_name        = "io-p-itn-wallet-cosno-02"
      + database_name       = "db"
      + id                  = (known after apply)
      + name                = "leases-wallet-instances-user-id"
      + partition_key_kind  = "Hash"
      + partition_key_paths = [
          + "/id",
        ]
      + resource_group_name = "io-p-itn-wallet-rg-01"
      + throughput          = (known after apply)

      + autoscale_settings {
          + max_throughput = 1000
        }

      + conflict_resolution_policy (known after apply)

      + indexing_policy (known after apply)
    }

  # module.cosmos.azurerm_cosmosdb_sql_container.containers_02["wallet-instances-user-id"] will be created
  + resource "azurerm_cosmosdb_sql_container" "containers_02" {
      + account_name        = "io-p-itn-wallet-cosno-02"
      + database_name       = "db"
      + id                  = (known after apply)
      + name                = "wallet-instances-user-id"
      + partition_key_kind  = "Hash"
      + partition_key_paths = [
          + "/id",
        ]
      + resource_group_name = "io-p-itn-wallet-rg-01"
      + throughput          = (known after apply)

      + autoscale_settings {
          + max_throughput = 8000
        }

      + conflict_resolution_policy (known after apply)

      + indexing_policy (known after apply)
    }

  # module.apim_itn.module.apim_v2_wallet_app_api.azurerm_api_management_api.this will be created
  + resource "azurerm_api_management_api" "this" {
      + api_management_name   = "io-p-itn-apim-01"
      + api_type              = "http"
      + description           = "App API to create wallet attestation"
      + display_name          = "IO Wallet - APP"
      + id                    = (known after apply)
      + is_current            = (known after apply)
      + is_online             = (known after apply)
      + name                  = "io-p-wallet-app-api"
      + path                  = "api/v1/wallet/app"
      + protocols             = [
          + "https",
        ]
      + resource_group_name   = "io-p-itn-common-rg-01"
      + revision              = "1"
      + service_url           = "https://io-p-itn-wallet-user-func-02.azurewebsites.net/api/v1/wallet"
      + subscription_required = true
      + version               = (known after apply)
      + version_set_id        = (known after apply)

      + import {
          + content_format = "openapi"
          + content_value  = jsonencode(
                {
                  + components = {
                      + responses       = {
                          + BadRequest           = {
                              + content     = {
                                  + "application/json" = {
                                      + schema = {
                                          + "$ref" = "#/components/schemas/ProblemJson"
                                        }
                                    }
                                }
                              + description = "Validation error"
                            }
                          + Conflict             = {
                              + content     = {
                                  + "application/json" = {
                                      + schema = {
                                          + "$ref" = "#/components/schemas/ProblemJson"
                                        }
                                    }
                                }
                              + description = "There has been a conflict"
                            }
                          + Forbidden            = {
                              + content     = {
                                  + "application/json" = {
                                      + schema = {
                                          + "$ref" = "#/components/schemas/ProblemJson"
                                        }
                                    }
                                }
                              + description = "The server understands the request but refuses to authorize it"
                            }
                          + InternalServerError  = {
                              + content     = {
                                  + "application/json" = {
                                      + schema = {
                                          + "$ref" = "#/components/schemas/ProblemJson"
                                        }
                                    }
                                }
                              + description = "Internal Server Error"
                            }
                          + NotFound             = {
                              + content     = {
                                  + "application/json" = {
                                      + schema = {
                                          + "$ref" = "#/components/schemas/ProblemJson"
                                        }
                                    }
                                }
                              + description = "The specified resource was not found"
                            }
                          + ServiceUnavailable   = {
                              + content     = {
                                  + "application/json" = {
                                      + schema = {
                                          + "$ref" = "#/components/schemas/ProblemJson"
                                        }
                                    }
                                }
                              + description = "Service Unavailable"
                            }
                          + UnprocessableContent = {
                              + content     = {
                                  + "application/json" = {
                                      + schema = {
                                          + "$ref" = "#/components/schemas/ProblemJson"
                                        }
                                    }
                                }
                              + description = "Unprocessable Content"
                            }
                        }
                      + schemas         = {
                          + CreateWalletAttestationBody = {
                              + properties = {
                                  + assertion  = {
                                      + example   = "eyJhbGciOiJFUzI1NiIsImtpZCI6InZiZVhKa3NNNDV4cGh0QU5uQ2lHNm1DeXVVNGpmR056b3BHdUt2b2dnOWMiLCJ0eXAiOiJ3YXIrand0In0.eyJpc3MiOiJodHRwczovL3dhbGxldC1wcm92aWRlci5leGFtcGxlLm9yZy9pbnN0YW5jZS92YmVYSmtzTTQ1eHBodEFObkNpRzZtQ3l1VTRqZkdOem9wR3VLdm9nZzljIiwic3ViIjoiaHR0cHM6Ly93YWxsZXQtcHJvdmlkZXIuZXhhbXBsZS5vcmcvIiwiY2hhbGxlbmdlIjoiNmVjNjkzMjQtNjBhOC00ZTViLWE2OTctYTc2NmQ4NTc5MGVhIiwiaGFyZHdhcmVfc2lnbmF0dXJlIjoiS29aSWh2Y05BUWNDb0lBd2dBSUIuLi5yZWRhY3RlZCIsImludGVncml0eV9hc3NlcnRpb24iOiJvMk5tYlhSdllYQndiR1V0WVhCd1lYLi4ucmVkYWN0ZWQiLCJoYXJkd2FyZV9rZXlfdGFnIjoiV1FoeUR5bUZLc1A5NWlGcXB6ZEVEV1c0bDdhVm5hMkZuNEpDZVdIWXRiVT0iLCJjbmYiOnsiandrIjp7ImNydiI6IlAtMjU2Iiwia3R5IjoiRUMiLCJ4IjoiNEhOcHRJLXhyMnBqeVJKS0dNbno0V21kblFEX3VKU3E0Ujk1Tmo5OGI0NCIsInkiOiJMSVpuU0IzOXZGSmhZZ1MzazdqWEU0cjMtQ29HRlF3WnRQQklScXBObHJnIiwia2lkIjoidmJlWEprc000NXhwaHRBTm5DaUc2bUN5dVU0amZHTnpvcEd1S3ZvZ2c5YyJ9fSwidnBfZm9ybWF0c19zdXBwb3J0ZWQiOnsiand0X3ZjX2pzb24iOnsiYWxnX3ZhbHVlc19zdXBwb3J0ZWQiOlsiRVMyNTZLIiwiRVMzODQiXX0sImp3dF92cF9qc29uIjp7ImFsZ192YWx1ZXNfc3VwcG9ydGVkIjpbIkVTMjU2SyIsIkVkRFNBIl19fSwiaWF0IjoxNjg2NjQ1MTE1LCJleHAiOjE2ODY2NTIzMTV9.F32bisVth4eDdGxDjB9ByENT-oZLtSY_89uwTSePo2GMEKaeEedpXZE_9mrX7t0_Fmc5m6LNVvIIBqotqsYJYQ"
                                      + format    = "binary"
                                      + minLength = 1
                                      + type      = "string"
                                    }
                                  + grant_type = {
                                      + enum = [
                                          + "urn:ietf:params:oauth:grant-type:jwt-bearer",
                                        ]
                                      + type = "string"
                                    }
                                }
                              + required   = [
                                  + "grant_type",
                                  + "assertion",
                                ]
                              + type       = "object"
                            }
                          + ProblemJson                 = {
                              + properties = {
                                  + detail   = {
                                      + description = <<-EOT
                                            A human readable explanation specific to this occurrence of the
                                            problem.
                                        EOT
                                      + example     = "There was an error processing the request"
                                      + type        = "string"
                                    }
                                  + instance = {
                                      + description = "An absolute URI that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced."
                                      + format      = "uri"
                                      + type        = "string"
                                    }
                                  + status   = {
                                      + description      = "The HTTP status code generated by the origin server for this occurrence of the problem."
                                      + example          = 500
                                      + exclusiveMaximum = true
                                      + format           = "int32"
                                      + maximum          = 600
                                      + minimum          = 100
                                      + type             = "integer"
                                    }
                                  + title    = {
                                      + description = "A short, summary of the problem type. Written in english and readable for engineers (usually not suited for non technical stakeholders and not localized); example: Service Unavailable"
                                      + type        = "string"
                                    }
                                  + type     = {
                                      + default     = "about:blank"
                                      + description = <<-EOT
                                            An absolute URI that identifies the problem type. When dereferenced,
                                            it SHOULD provide human-readable documentation for the problem type
                                            (e.g., using HTML).
                                        EOT
                                      + example     = "https://example.com/problem/constraint-violation"
                                      + format      = "uri"
                                      + type        = "string"
                                    }
                                }
                              + type       = "object"
                            }
                          + WalletAttestationView       = {
                              + properties = {
                                  + wallet_attestation = {
                                      + format    = "binary"
                                      + minLength = 1
                                      + type      = "string"
                                    }
                                }
                              + required   = [
                                  + "wallet_attestation",
                                ]
                              + type       = "object"
                            }
                        }
                      + securitySchemes = {
                          + SubscriptionKey = {
                              + in   = "header"
                              + name = "Ocp-Apim-Subscription-Key"
                              + type = "apiKey"
                            }
                        }
                    }
                  + info       = {
                      + title   = "IO Wallet - APP API"
                      + version = "1.0.0"
                    }
                  + openapi    = "3.0.3"
                  + paths      = {
                      + "/wallet-attestation" = {
                          + post = {
                              + operationId = "createWalletAttestation"
                              + requestBody = {
                                  + content  = {
                                      + "application/json" = {
                                          + schema = {
                                              + "$ref" = "#/components/schemas/CreateWalletAttestationBody"
                                            }
                                        }
                                    }
                                  + required = true
                                }
                              + responses   = {
                                  + "200" = {
                                      + content     = {
                                          + "application/json" = {
                                              + schema = {
                                                  + "$ref" = "#/components/schemas/WalletAttestationView"
                                                }
                                            }
                                        }
                                      + description = "Wallet Attestation generated"
                                    }
                                  + "403" = {
                                      + "$ref"      = "#/components/responses/Forbidden"
                                      + description = "The wallet instance was revoked"
                                    }
                                  + "404" = {
                                      + "$ref"      = "#/components/responses/NotFound"
                                      + description = "The wallet instance was not found"
                                    }
                                  + "409" = {
                                      + "$ref" = "#/components/responses/Conflict"
                                    }
                                  + "422" = {
                                      + "$ref" = "#/components/responses/UnprocessableContent"
                                    }
                                  + "500" = {
                                      + "$ref" = "#/components/responses/InternalServerError"
                                    }
                                  + "503" = {
                                      + "$ref" = "#/components/responses/ServiceUnavailable"
                                    }
                                }
                              + security    = [
                                  + {
                                      + SubscriptionKey = []
                                    },
                                ]
                              + summary     = "Create and return a Wallet Attestation"
                            }
                        }
                    }
                }
            )
        }

      + subscription_key_parameter_names (known after apply)
    }

  # module.apim_itn.module.apim_v2_wallet_app_api.azurerm_api_management_api_policy.this[0] will be created
  + resource "azurerm_api_management_api_policy" "this" {
      + api_management_name = "io-p-itn-apim-01"
      + api_name            = "io-p-wallet-app-api"
      + id                  = (known after apply)
      + resource_group_name = "io-p-itn-common-rg-01"
      + xml_content         = <<-EOT
            <policies>
                <inbound>
                    <base />
                    <set-header name="x-functions-key" exists-action="override">
                        <value>{{io-wallet-user-func-create-wa-key}}</value>
                    </set-header>
                </inbound>
                <outbound>
                    <base />
                </outbound>
            </policies>
        EOT
    }

  # module.apim_itn.module.apim_v2_wallet_app_api.azurerm_api_management_product_api.this["io-p-wallet-app-api"] will be created
  + resource "azurerm_api_management_product_api" "this" {
      + api_management_name = "io-p-itn-apim-01"
      + api_name            = "io-p-wallet-app-api"
      + id                  = (known after apply)
      + product_id          = "io-p-wallet-app-api"
      + resource_group_name = "io-p-itn-common-rg-01"
    }

  # module.apim_itn.module.apim_v2_wallet_app_product.azurerm_api_management_product.this will be created
  + resource "azurerm_api_management_product" "this" {
      + api_management_name   = "io-p-itn-apim-01"
      + approval_required     = false
      + description           = "Product containing app APIs"
      + display_name          = "IO WALLET APP APIs"
      + id                    = (known after apply)
      + product_id            = "io-p-wallet-app-api"
      + published             = true
      + resource_group_name   = "io-p-itn-common-rg-01"
      + subscription_required = true
    }

  # module.function_apps.module.function_app_support.azurerm_linux_function_app_slot.this[0] will be updated in-place
  ~ resource "azurerm_linux_function_app_slot" "this" {
        id                                             = "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-itn-wallet-rg-01/providers/Microsoft.Web/sites/io-p-itn-wallet-supp-func-01/slots/staging"
        name                                           = "staging"
        tags                                           = {
            "CostCenter"                                     = "TS310 - PAGAMENTI & SERVIZI"
            "CreatedBy"                                      = "Terraform"
            "Environment"                                    = "Prod"
            "ManagementTeam"                                 = "IO Wallet"
            "Owner"                                          = "IO"
            "Source"                                         = "https://github.com/pagopa/io-wallet/blob/main/infra/resources/prod"
        }
        # (31 unchanged attributes hidden)

      ~ site_config {
          ~ health_check_eviction_time_in_min             = 0 -> 2
            # (33 unchanged attributes hidden)

            # (1 unchanged block hidden)
        }

        # (1 unchanged block hidden)
    }

  # module.function_apps.module.function_app_user_02.azurerm_linux_function_app_slot.this[0] will be updated in-place
  ~ resource "azurerm_linux_function_app_slot" "this" {
        id                                             = "/subscriptions/ec285037-c673-4f58-b594-d7c480da4e8b/resourceGroups/io-p-itn-wallet-rg-01/providers/Microsoft.Web/sites/io-p-itn-wallet-user-func-02/slots/staging"
        name                                           = "staging"
        tags                                           = {
            "CostCenter"     = "TS310 - PAGAMENTI & SERVIZI"
            "CreatedBy"      = "Terraform"
            "Environment"    = "Prod"
            "ManagementTeam" = "IO Wallet"
            "Owner"          = "IO"
            "Source"         = "https://github.com/pagopa/io-wallet/blob/main/infra/resources/prod"
        }
        # (31 unchanged attributes hidden)

      ~ site_config {
          ~ health_check_eviction_time_in_min             = 0 -> 2
            # (33 unchanged attributes hidden)

            # (1 unchanged block hidden)
        }

        # (1 unchanged block hidden)
    }

Plan: 7 to add, 2 to change, 0 to destroy.

Warning: Argument is deprecated

  with module.cdn.azurerm_storage_container.well_known,
  on ../_modules/cdn/storage_account.tf line 29, in resource "azurerm_storage_container" "well_known":
  29:   storage_account_name = azurerm_storage_account.this.name

the `storage_account_name` property has been deprecated in favour of
`storage_account_id` and will be removed in version 5.0 of the Provider.

(and 4 more similar warnings elsewhere)

─────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so Terraform can't
guarantee to take exactly these actions if you run "terraform apply" now.
```

</details>

author_association: CONTRIBUTOR