Files
Ruslan PiatrovichandCursor 532ac723cb Add full Cursor chat archive for Documents/repos workspaces.
Includes global state.vscdb, per-repo transcripts, workspace storage,
composer exports, and restore scripts for a new machine.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 11:53:07 +03:00

4437 lines
558 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"_v": 14,
"composerId": "add1f78f-555d-47b9-996c-8e8c3a03a44d",
"richText": "{\"root\":{\"children\":[{\"children\":[],\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1}],\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}",
"hasLoaded": true,
"text": "",
"fullConversationHeadersOnly": [
{
"bubbleId": "4336e5fc-58d4-4387-a36c-9121c4c4a2f0",
"type": 1
},
{
"bubbleId": "bb460759-58b3-4e65-91f9-e3d432fc2d4e",
"type": 2
},
{
"bubbleId": "b9f47632-c44a-4c03-978e-99141caec720",
"type": 2
},
{
"bubbleId": "b4c46e75-7461-4863-bf76-8c9ccf7a0f19",
"type": 2
},
{
"bubbleId": "ff7b9e12-d091-47ea-9ed2-6a3516517d69",
"type": 2
},
{
"bubbleId": "fecabb5a-878b-4836-8718-84c7ea5906e4",
"type": 2
},
{
"bubbleId": "bfc27751-06e5-4894-8b68-9fa0cab244f3",
"type": 2
},
{
"bubbleId": "44ce63ec-22b2-4f36-9ce6-84cc53c4ec44",
"type": 2
},
{
"bubbleId": "66332a16-75a4-4694-aaa2-faf2bbe6be97",
"type": 2
},
{
"bubbleId": "7f3e9e25-4b6c-419e-96a1-596f2c73cd62",
"type": 2
},
{
"bubbleId": "30611b6f-2df6-4f76-8fbd-b8109a7d6b69",
"type": 2
},
{
"bubbleId": "dc62b98b-4ebe-403f-af90-d23e40a6ac72",
"type": 2
},
{
"bubbleId": "c7bd10c6-4e1e-4290-bdbb-87a1cdfb5adc",
"type": 2
},
{
"bubbleId": "94894b6e-6aac-441e-bc3d-9a889dd3315d",
"type": 2
},
{
"bubbleId": "f72a7cc9-4e92-44f9-893d-fac2567775c8",
"type": 2
},
{
"bubbleId": "ec86e628-c0f1-4ad1-83fa-7488a8ee29c9",
"type": 2
},
{
"bubbleId": "a341e2d7-af5e-44b1-b623-b4e391364f8f",
"type": 2
},
{
"bubbleId": "43da2658-3f22-4f29-ba76-77058a739ca6",
"type": 2
},
{
"bubbleId": "fd84592d-0454-45d8-8d10-987e3fe9a698",
"type": 2
},
{
"bubbleId": "b21231bb-18d3-4628-8a2b-318d3e50b69b",
"type": 2
},
{
"bubbleId": "d2365e39-66af-44c0-98bc-232602d6af48",
"type": 2
},
{
"bubbleId": "591bd2fd-22f9-4707-94d6-7fe62ac69bcb",
"type": 2
},
{
"bubbleId": "28d290a5-daa9-415c-af1e-95eb1f767d3d",
"type": 2
},
{
"bubbleId": "beb2b2e6-6b29-4164-b44b-31193c8f2fe9",
"type": 2
},
{
"bubbleId": "fef6db8b-1cd4-4e07-b4cf-53be0548b297",
"type": 2
},
{
"bubbleId": "f7a9f2f5-cce7-422b-8539-a79f2217bbb1",
"type": 2
},
{
"bubbleId": "f13034af-3325-4fbe-9aea-bfe251902c22",
"type": 2
},
{
"bubbleId": "2fd3e840-0a89-4f91-b2d6-6bbaae3258b8",
"type": 2
},
{
"bubbleId": "97a30530-e0df-45ad-80d4-1cf634d816d9",
"type": 2
},
{
"bubbleId": "6d174649-3b5a-4a1c-b958-91d3a3be0927",
"type": 1
},
{
"bubbleId": "11ed86bb-daa2-4eb6-93c7-cfd0869c7c8c",
"type": 2
},
{
"bubbleId": "2f6e557e-86d6-4c67-89cc-a5f9f00bfdbc",
"type": 2
},
{
"bubbleId": "98449f9d-c697-45b9-a636-93091173833e",
"type": 2
},
{
"bubbleId": "d19b9658-d343-4f06-a339-ed08b07ad9d7",
"type": 2
},
{
"bubbleId": "8e9f92b9-d656-4235-a73d-1b580ca0b510",
"type": 2
},
{
"bubbleId": "532783ad-20f6-4b25-8141-1e8819d30590",
"type": 2
},
{
"bubbleId": "c1bbabda-5e02-4647-a216-98936847c7a3",
"type": 2
},
{
"bubbleId": "fd743fb9-53cd-43ba-a879-61e7dd2cf1f5",
"type": 2
},
{
"bubbleId": "8e771eda-6b4a-4c7a-9195-981a136c66f9",
"type": 2
},
{
"bubbleId": "6c8fc8ee-27d6-4ed1-8f13-8ae9e77d28b9",
"type": 2
},
{
"bubbleId": "b9a22d20-ab46-4867-a41f-6491c76353fc",
"type": 2
},
{
"bubbleId": "00a85cf3-dfa8-4d90-89cc-ea4ea99ca6bc",
"type": 2
},
{
"bubbleId": "6d811ae1-b8e5-4087-bf23-b4ee40f451b9",
"type": 2
},
{
"bubbleId": "0c535d43-cd0d-4966-be55-533c3f9aa6ac",
"type": 2
},
{
"bubbleId": "3296c015-cbf2-4f17-88be-36213724f4e8",
"type": 2
},
{
"bubbleId": "ed493a2c-8cda-4369-8b8c-4ad6b103c009",
"type": 2
},
{
"bubbleId": "68885c29-6da3-4dc6-8112-fdfbcc3ec1d9",
"type": 2
},
{
"bubbleId": "6fa5865e-e521-4223-a137-9a28e7352a55",
"type": 2
},
{
"bubbleId": "e834e756-b78b-4dc1-8282-7af0f63e1325",
"type": 1
},
{
"bubbleId": "0f5fab06-da05-40d2-b54d-cba2c7084545",
"type": 2
},
{
"bubbleId": "077d463f-fb57-4ab8-9065-0f28903b9502",
"type": 2
},
{
"bubbleId": "35b56d46-9bf6-4658-ac1d-679211f5f90a",
"type": 2
},
{
"bubbleId": "d52af984-583d-4894-8028-66e91dbc38f1",
"type": 2
},
{
"bubbleId": "3abe61d8-cc5c-45da-98f9-9ad0c0d8b07d",
"type": 2
},
{
"bubbleId": "027c25e9-606d-4477-a387-46bb6abc7bde",
"type": 2
},
{
"bubbleId": "03ed5452-8d41-4c15-8629-26a428048886",
"type": 2
},
{
"bubbleId": "ab4f86b7-9931-4e26-9f22-6d30fd693a34",
"type": 2
},
{
"bubbleId": "fe6cc169-e648-4024-b33f-bf86ff412b2f",
"type": 2
},
{
"bubbleId": "d8dd7012-3462-4cdc-8e91-a8b020ec5fa0",
"type": 2
},
{
"bubbleId": "721e1c30-3fc7-45a9-8959-04e08bf501e9",
"type": 2
},
{
"bubbleId": "5f0d2956-740f-4dcb-9445-4c3032d87d6c",
"type": 2
},
{
"bubbleId": "89ad4816-529a-4a33-8984-1566a02e43ee",
"type": 2
},
{
"bubbleId": "b5baf23b-9ce3-442f-8bb9-d5f212ac013d",
"type": 2
},
{
"bubbleId": "08649b28-bde0-4dfa-a65f-a9871b4d897f",
"type": 2
},
{
"bubbleId": "a790c538-7b3c-433d-ad94-9a919534668b",
"type": 2
},
{
"bubbleId": "3370cb42-5f79-4c87-b35a-04b49444dd7f",
"type": 2
},
{
"bubbleId": "02704672-d56c-4084-b69c-f54e10126e73",
"type": 2
},
{
"bubbleId": "2e098bb5-01e4-4bf0-bd58-bbfb72dfc275",
"type": 2
},
{
"bubbleId": "f0b9ed54-2132-477c-8e37-dbbf70cfc716",
"type": 2
},
{
"bubbleId": "a397ca6e-a897-499b-ae03-73bb6a8acccc",
"type": 2
},
{
"bubbleId": "a652061e-06c6-4a8e-9faa-ea1f5db803f6",
"type": 2
},
{
"bubbleId": "cbf485d6-4852-456e-8d0a-34e5b56a8c9d",
"type": 2
},
{
"bubbleId": "348e7682-8397-4308-88cc-e91147f0ebc3",
"type": 2
},
{
"bubbleId": "2ee17e1a-b0eb-4a03-9673-df256434b792",
"type": 2
},
{
"bubbleId": "5e0f00e5-0321-4f4c-84ed-460a47eceee6",
"type": 2
},
{
"bubbleId": "bf6e5c0c-6015-4dcb-836c-cffb7009a162",
"type": 2
},
{
"bubbleId": "c67a7226-25e7-497f-9027-5323a4d195c2",
"type": 2
},
{
"bubbleId": "07fa2a7c-e8c0-41c3-a9cf-7b89c6449d0f",
"type": 2
},
{
"bubbleId": "47925e2d-f12b-4476-9ecb-b2fd0fce5de4",
"type": 2
},
{
"bubbleId": "00534c75-f9ea-436c-af8d-c78cb829388b",
"type": 2
},
{
"bubbleId": "a7f3eecd-0cf3-48b8-8f85-216029e04bfa",
"type": 2
},
{
"bubbleId": "e36c8d77-6ca8-4eab-b8a6-c834ef3d3299",
"type": 2
},
{
"bubbleId": "d6f06d7b-ae20-42b9-aa15-09cd98eea77e",
"type": 2
},
{
"bubbleId": "3b5472c8-c7fc-4452-b371-eaa93ad71029",
"type": 2
},
{
"bubbleId": "b103134e-9f92-418e-bc7c-3a3ee6cdbc06",
"type": 2
},
{
"bubbleId": "cafbd7bc-4dcf-4b73-adb7-95e1fcf51a2e",
"type": 2
},
{
"bubbleId": "74398835-bcd5-4d28-87e7-3b0ed0a90ba9",
"type": 2
},
{
"bubbleId": "0fd2cdae-cdb8-45b4-9296-97f21d574053",
"type": 2
},
{
"bubbleId": "01d47ee9-46b7-47e8-a815-c4c2445d26ff",
"type": 1
},
{
"bubbleId": "7f8f86d5-0bd5-4e5d-8ba8-ee8cd41f1167",
"type": 2
},
{
"bubbleId": "04146231-b535-4790-a3cf-177b7bb1b76b",
"type": 2
},
{
"bubbleId": "a2b98b72-6ddf-41c6-ad3d-9825d1f7f53a",
"type": 2
},
{
"bubbleId": "c62dc0a2-3546-49ca-9dfa-f7d283d38db3",
"type": 2
},
{
"bubbleId": "fa693515-197f-4e24-aff8-b3d7aa2f5cbe",
"type": 2
},
{
"bubbleId": "bdc17b2f-9b3f-435f-824c-4bdc493d1045",
"type": 2
},
{
"bubbleId": "222b5914-cb2d-40aa-84c0-70422f57a225",
"type": 2
},
{
"bubbleId": "8ba6b18d-a6bc-4e6e-ab72-321259e4cf47",
"type": 2
},
{
"bubbleId": "e511ace8-b137-43aa-ac1f-68734803f25a",
"type": 2
},
{
"bubbleId": "de423c1f-4a14-49c6-9b94-d327a5289b76",
"type": 2
},
{
"bubbleId": "cdef20e5-da8a-4519-9347-f85e7692f4a0",
"type": 2
},
{
"bubbleId": "532bc8ee-5998-4d47-ad24-e7a927bb883f",
"type": 2
},
{
"bubbleId": "9aef7543-1cb4-4f3c-af5f-66799e2d9e26",
"type": 2
},
{
"bubbleId": "201513fe-4273-4323-8e72-0bfcf8e50e4f",
"type": 2
},
{
"bubbleId": "9d6308b4-28c1-4be9-9364-3e4327e63641",
"type": 2
},
{
"bubbleId": "3d765279-8a03-4830-9172-fde4125a3d08",
"type": 2
},
{
"bubbleId": "444ca31f-a21c-4368-bd5c-f6b8760e905c",
"type": 2
},
{
"bubbleId": "2e191b48-ff2d-471a-a253-6e24f3a05f34",
"type": 2
},
{
"bubbleId": "58515b33-2d2f-4728-8b38-a4bde7301771",
"type": 1
},
{
"bubbleId": "5376e6d0-9744-4769-886f-580fefc3672b",
"type": 2
},
{
"bubbleId": "6b56c5cb-20fc-45da-86b1-d4ba32db14f9",
"type": 2
},
{
"bubbleId": "01022acf-b26c-44ee-95dc-35a0751a1033",
"type": 2
},
{
"bubbleId": "d89c19b2-9d26-4a86-bda2-c22658347b23",
"type": 2
},
{
"bubbleId": "db9a8da8-d20f-46f4-823c-4ac6d48842e0",
"type": 2
},
{
"bubbleId": "444f5762-d953-4eca-af98-dbdd034cde12",
"type": 2
},
{
"bubbleId": "36a3336b-3ea8-4c7b-961f-5cd6a89f50f0",
"type": 2
},
{
"bubbleId": "53fe5d43-08e2-40c0-a852-3ef99d23fd13",
"type": 2
},
{
"bubbleId": "8bad9682-2579-4f5d-9a2d-a96c77545b9e",
"type": 2
},
{
"bubbleId": "d3262755-2798-4047-87ba-81f3643ff482",
"type": 2
},
{
"bubbleId": "3009897f-41b2-41ab-9708-9ce623d57c05",
"type": 2
},
{
"bubbleId": "b60d1a9a-5ea4-4933-9af4-598dbc142518",
"type": 2
},
{
"bubbleId": "d01b2ea0-f8d8-4f35-9db4-a3406195af74",
"type": 2
},
{
"bubbleId": "c73e25bb-2881-42da-a2b5-a646a7f050d6",
"type": 2
},
{
"bubbleId": "e8fcb624-bf7c-477f-baa8-9778feecd044",
"type": 1
},
{
"bubbleId": "f40a1e6e-7bd2-4d25-95fc-dec1f93f6dc1",
"type": 2
},
{
"bubbleId": "7596f430-7536-4da5-86c8-93c8999494ae",
"type": 2
},
{
"bubbleId": "81e2b84f-9c2b-4411-9b25-5ec2bf58dcef",
"type": 2
},
{
"bubbleId": "da5499d3-e477-4dec-a511-fa21564635d5",
"type": 2
},
{
"bubbleId": "550698d0-fde9-4068-ae9a-b0130f40b803",
"type": 2
},
{
"bubbleId": "f8d28482-20e5-4766-a1c4-cae9726f8a0b",
"type": 2
},
{
"bubbleId": "fd0c13ea-da16-473a-ad0a-610320f6be6b",
"type": 2
},
{
"bubbleId": "05f59909-39ee-4959-ab3a-21b2c4e0948a",
"type": 2
},
{
"bubbleId": "ed0fa26e-0e99-4d85-a250-34afcb5bff2f",
"type": 2
},
{
"bubbleId": "8ef8298b-9905-4cc5-898a-f81e129acf43",
"type": 2
},
{
"bubbleId": "aecb77cc-5c49-453c-956e-c9ab3f291b61",
"type": 1
},
{
"bubbleId": "8dc8994a-a882-471b-9f86-4b8e9a11f467",
"type": 2
},
{
"bubbleId": "bb3b6dd7-f2aa-474f-ad4b-50afb2e39cf5",
"type": 2
},
{
"bubbleId": "b9d0a783-8419-4e78-906a-dab692e19f36",
"type": 2
},
{
"bubbleId": "5aa1c74f-099e-41da-aa41-34ac6ecb0828",
"type": 2
},
{
"bubbleId": "1b637902-b69e-41a6-9708-292544d97cfe",
"type": 2
},
{
"bubbleId": "bf29dc0f-886c-4d99-ac96-30896db432e2",
"type": 2
},
{
"bubbleId": "7cc90213-85c8-4569-b672-067ec7c73f42",
"type": 2
},
{
"bubbleId": "9cb142f3-e806-41ef-9d3a-0d074703229f",
"type": 2
},
{
"bubbleId": "5156eece-8305-4bcf-bee2-40f86dcede12",
"type": 2
},
{
"bubbleId": "e5624db5-2d2c-4cb7-b631-47d1a7d31e36",
"type": 2
},
{
"bubbleId": "998ded11-2fb9-4e8b-bbeb-646f23f6e74b",
"type": 2
},
{
"bubbleId": "03a7bd56-e712-45cf-b983-39b02c9969a1",
"type": 2
},
{
"bubbleId": "ea8fe5cf-34c7-43fa-9f78-e5bb19a2c61b",
"type": 2
},
{
"bubbleId": "1e8c35ee-51af-4c98-9ce2-75d6185f2bd2",
"type": 2
},
{
"bubbleId": "4c003302-6ca2-4800-b074-e28a3d18ebc2",
"type": 1
},
{
"bubbleId": "f1dc2992-b670-496b-8ce2-96bc201c3c53",
"type": 2
},
{
"bubbleId": "b6cbc091-37ed-47f6-b8f9-cbc9c67e96fc",
"type": 2
},
{
"bubbleId": "d3655401-c977-4e3d-b36f-6b80472f1533",
"type": 2
},
{
"bubbleId": "e5683f9f-36a8-4eb7-a6e6-efbdd1649f3d",
"type": 2
},
{
"bubbleId": "48051119-ff99-4d35-bde2-22d9c30bd28f",
"type": 2
},
{
"bubbleId": "717b8ac3-2c5d-475c-88e0-5a7d3e19a509",
"type": 2
},
{
"bubbleId": "55610650-8c03-4d20-aef4-cc886d4640bb",
"type": 2
},
{
"bubbleId": "7c8ac050-b72e-4c6d-b7ab-fe46796fdcbc",
"type": 2
},
{
"bubbleId": "afbf7d3c-92cd-4586-9b12-da34b0a407fc",
"type": 2
},
{
"bubbleId": "ce0941a7-4abb-4d6e-9a34-b8843e0e4eed",
"type": 2
},
{
"bubbleId": "184dc366-7bf0-40e5-83dd-2ba13a195402",
"type": 2
},
{
"bubbleId": "4a96fc1d-d969-4dd2-aae6-06619622fb52",
"type": 2
},
{
"bubbleId": "15c0b809-bd02-480a-9ff4-2ed1590df916",
"type": 2
},
{
"bubbleId": "17e8a255-0b77-4074-87c9-2e17aa8f49d1",
"type": 2
},
{
"bubbleId": "43dc8315-ea1b-438b-b06e-0ddfc0ebf6a0",
"type": 2
},
{
"bubbleId": "896e966e-5498-4c59-b8a7-36175fc418ab",
"type": 2
},
{
"bubbleId": "2462e94c-f187-49fe-91f3-93c9c0666fde",
"type": 2
},
{
"bubbleId": "46c819e3-83f4-4c62-a440-ec0f5bbc804e",
"type": 2
},
{
"bubbleId": "cd351bf8-5ccc-4293-ae55-87568e0dafc2",
"type": 2
},
{
"bubbleId": "b7af563d-56bd-4407-b9b1-d188fc3b7c52",
"type": 2
},
{
"bubbleId": "936d73ef-e7d0-4f2c-b75c-8a926a8ca856",
"type": 2
},
{
"bubbleId": "21f41e2f-b49f-4c0a-aa20-2d738675401d",
"type": 2
},
{
"bubbleId": "404e3cd8-ff69-4b70-b9ea-20f0ea627a19",
"type": 2
},
{
"bubbleId": "af9b58b9-fbde-4264-bd59-2a24921ffb0a",
"type": 2
},
{
"bubbleId": "ba846218-6c5b-44d8-ab50-bb51cb55df43",
"type": 2
},
{
"bubbleId": "1cbfd331-0f0c-4e17-bf1f-aa0200ecef3a",
"type": 2
},
{
"bubbleId": "2e80a265-b874-4625-b8d0-75653f58ad93",
"type": 2
},
{
"bubbleId": "01c460e1-0eec-4b26-ac91-c4794e8ab934",
"type": 2
},
{
"bubbleId": "ff00b406-5da3-452c-b6c9-d93bb8c2b613",
"type": 2
},
{
"bubbleId": "b76ea970-14a4-47d7-9104-7c137517eb41",
"type": 2
},
{
"bubbleId": "169a5822-ac70-4096-ae94-2b59830c90e6",
"type": 2
},
{
"bubbleId": "34dd120d-1aec-4f99-bd5c-19de5e595700",
"type": 2
},
{
"bubbleId": "a44e617a-96ff-4509-9cb7-e1976f9c559f",
"type": 2
},
{
"bubbleId": "71073349-540d-4b15-8439-598615ff461a",
"type": 2
},
{
"bubbleId": "73f3f6f1-d4bc-410f-b27b-34d9514528b3",
"type": 2
},
{
"bubbleId": "ca2c4a73-6797-4aca-8c65-67056d63e775",
"type": 2
},
{
"bubbleId": "4becbe63-62c2-4684-8b34-2f5473396b26",
"type": 2
},
{
"bubbleId": "333c2ac9-9182-4dd4-bf86-64c8a8997461",
"type": 2
},
{
"bubbleId": "6f3d3ec3-32e9-48ee-b4ec-28c2fdbb37f7",
"type": 2
},
{
"bubbleId": "328ce33f-d7e8-4aed-8f89-c5697550cd0b",
"type": 2
},
{
"bubbleId": "ee0bac20-9f44-46c9-b164-c7c19f54dfd1",
"type": 2
},
{
"bubbleId": "f9e7dabc-0dca-4fd2-be92-aed27448e3ec",
"type": 2
},
{
"bubbleId": "2992cbad-07ff-4c38-b2a9-a0f05b76108f",
"type": 2
},
{
"bubbleId": "2ea33e42-e0fb-4c0c-bf49-31abca77e843",
"type": 1
},
{
"bubbleId": "136743da-d9ed-47ad-9b4f-e7bc0022d24e",
"type": 2
},
{
"bubbleId": "a85d80ad-bbd1-4cdf-aa33-3f8fc697bf05",
"type": 2
},
{
"bubbleId": "8e13d4ce-343f-4490-8776-c6e5c9563cae",
"type": 2
},
{
"bubbleId": "3189d242-7dac-49fc-afa9-4f9e881d8356",
"type": 2
},
{
"bubbleId": "cc924dda-9570-457c-8a83-c7795b095ddb",
"type": 2
},
{
"bubbleId": "c3c9bb9d-7b6b-4b71-90df-225b3708dab1",
"type": 2
},
{
"bubbleId": "fa02ee6b-1381-4688-8e10-7cd2f1816111",
"type": 2
},
{
"bubbleId": "81293795-944e-484b-8d28-24a5f6b92a19",
"type": 2
},
{
"bubbleId": "64d3a4b9-9903-4d74-886f-93fe9f2c3f93",
"type": 2
},
{
"bubbleId": "2977f181-ee36-4f5b-8ef0-189a3182d800",
"type": 2
},
{
"bubbleId": "d22aeeab-3d3c-4e4e-abae-76ff1e2e1678",
"type": 2
},
{
"bubbleId": "4c2bac76-f348-4237-90d4-5e62c2c79fdf",
"type": 2
},
{
"bubbleId": "c8c24160-969d-45eb-b000-50d00f7fb320",
"type": 2
},
{
"bubbleId": "71135894-ecf0-4e8e-9789-e0d2883e4258",
"type": 2
},
{
"bubbleId": "af3e63ee-5b34-42d4-95c0-3845af244400",
"type": 2
},
{
"bubbleId": "34323434-922e-472b-860a-dc78c4d1aa60",
"type": 2
},
{
"bubbleId": "5dc81917-f9f7-45a1-a437-c5b682752fd7",
"type": 2
},
{
"bubbleId": "cc3b6c26-0a33-4a38-909b-d172bf106ee8",
"type": 1
},
{
"bubbleId": "3634be97-7a61-4260-9cc4-3c20cd89d1f4",
"type": 2
},
{
"bubbleId": "b7a8d760-c538-4750-b4c1-9bc6b2c905c3",
"type": 2
},
{
"bubbleId": "6a40f13f-58ae-45ed-ada5-ad00e4c70f53",
"type": 2
},
{
"bubbleId": "bfb14b77-bab9-4057-8b95-0716fd4fa724",
"type": 2
},
{
"bubbleId": "94b22e03-204a-421c-b7f0-c28cd367e8af",
"type": 2
},
{
"bubbleId": "1da11140-3169-4172-8759-d9a8fd2c0749",
"type": 2
},
{
"bubbleId": "292e68b3-1b08-4c52-9ab8-b1b556ea6e9b",
"type": 2
},
{
"bubbleId": "1b98683d-5046-4767-9f2d-8bc59091cfc5",
"type": 2
},
{
"bubbleId": "117804e1-fba6-4e72-9cf3-b18f75296f01",
"type": 2
},
{
"bubbleId": "52e3f174-6d1e-4e23-b9d3-0e46cfb2b81d",
"type": 2
},
{
"bubbleId": "758259f4-e2fa-4b03-8828-742580d4614e",
"type": 1
},
{
"bubbleId": "7b093869-c60d-4c45-a0b0-73cd39bb4753",
"type": 2
},
{
"bubbleId": "2c9a85ce-2e9c-4138-be8d-74bc78291ccb",
"type": 2
},
{
"bubbleId": "5f3ee948-ef5f-473d-93da-07aad6972e26",
"type": 2
},
{
"bubbleId": "9ee254ca-d393-4ca5-a1f2-e4194be75bda",
"type": 2
},
{
"bubbleId": "bd1d190c-934a-475b-8374-c6c366277987",
"type": 2
},
{
"bubbleId": "70fc9dd7-dcf6-4fa4-adbe-b9486d716ddd",
"type": 2
},
{
"bubbleId": "6831c460-dabb-4176-a48f-7858541659d2",
"type": 2
},
{
"bubbleId": "6ae3dd0d-c367-4040-9939-1f8c5b860f3e",
"type": 2
},
{
"bubbleId": "21324c1e-84ac-4720-935e-50cb8af32be1",
"type": 2
},
{
"bubbleId": "fd7dc27b-ddc5-48f3-8670-75efc55fe2cf",
"type": 2
},
{
"bubbleId": "c28b58b1-df41-4729-80b3-5984ac971363",
"type": 2
},
{
"bubbleId": "5b624c98-3ec9-4b87-ac95-1db14871688c",
"type": 1
},
{
"bubbleId": "0b8257c2-13a4-44d1-99da-90e65306d277",
"type": 2
},
{
"bubbleId": "55339401-b769-44bd-b64d-d057c99f615c",
"type": 2
},
{
"bubbleId": "f67334a3-7ea1-4f00-a6f0-a02f2fbed553",
"type": 2
},
{
"bubbleId": "e9280b28-cfee-4a3c-8c79-7cabe935d950",
"type": 2
},
{
"bubbleId": "9ea799e8-7a6b-4eda-ab48-eec22fe71a8e",
"type": 2
},
{
"bubbleId": "1b53046e-a43f-4911-aeb5-0eadaa291f7c",
"type": 2
},
{
"bubbleId": "a728ecaf-eb3d-4352-9222-866604c142c9",
"type": 2
},
{
"bubbleId": "e38191b2-0141-4a12-9b92-aed9f9162c5a",
"type": 2
},
{
"bubbleId": "458f40b5-af7e-4ea7-a6ef-ecf9ac5b985a",
"type": 1
},
{
"bubbleId": "45132df6-4dd7-4002-9c6e-d92c43e4c1ff",
"type": 2
},
{
"bubbleId": "d383f06d-ef50-4ca2-bb26-f465f9e082c2",
"type": 2
},
{
"bubbleId": "1a2899aa-df12-4059-8c4e-f2292e7ecdbe",
"type": 2
},
{
"bubbleId": "323946c9-46c9-44b6-b52c-d557a274e0b0",
"type": 2
},
{
"bubbleId": "496d5e66-6900-47d9-968a-328620a905da",
"type": 2
},
{
"bubbleId": "109c65ee-74a0-43d3-ac17-2ba147b50c8b",
"type": 2
},
{
"bubbleId": "8b589fa9-3943-421e-a860-c6017b13291a",
"type": 2
},
{
"bubbleId": "15fe78f4-726a-4f33-b65a-958c37b8c7e1",
"type": 2
},
{
"bubbleId": "115b334f-432d-447b-b84f-67e441adc830",
"type": 2
},
{
"bubbleId": "f0b76236-c2f6-4e9e-87f8-b72357958ad3",
"type": 2
},
{
"bubbleId": "6e757895-fbe8-4d97-ac8b-2629eac6efa4",
"type": 2
},
{
"bubbleId": "c5405b7c-4965-4954-b74f-caa99ed82127",
"type": 2
},
{
"bubbleId": "7c1723d4-b17a-48d8-ad77-6dbd08aa99a8",
"type": 2
},
{
"bubbleId": "24bf6949-d72f-4426-9fe9-e8cc4e25ab1a",
"type": 2
},
{
"bubbleId": "ed57ec57-d5f5-4a95-9820-50aa15be1c28",
"type": 2
},
{
"bubbleId": "b25bca6d-24a3-4617-8efd-4adc0418a667",
"type": 2
},
{
"bubbleId": "30e33257-0b99-42b0-b54c-b36376e692b8",
"type": 2
},
{
"bubbleId": "5835b6e7-d285-453e-bae5-a67b9722b814",
"type": 2
},
{
"bubbleId": "ad0dde2a-5f59-46a6-b784-6efc995c98d6",
"type": 2
},
{
"bubbleId": "c0cc8c76-ec07-4c74-81ca-ea4bf4828bd7",
"type": 2
},
{
"bubbleId": "d0dfd29d-8c66-45a3-ab35-dac3b209413b",
"type": 2
},
{
"bubbleId": "6b4b3625-50dc-4a67-be0f-ff10fb072a1a",
"type": 2
},
{
"bubbleId": "4ffd7edc-2089-436d-a146-d6e9d04a4542",
"type": 2
},
{
"bubbleId": "a5773b86-0ae9-4fb9-a929-cee1e4f1344c",
"type": 2
},
{
"bubbleId": "5379e1a6-2dae-4aee-aa32-e292eba3faa2",
"type": 2
},
{
"bubbleId": "984238aa-1990-4c5a-a414-c41541d1fd7f",
"type": 1
},
{
"bubbleId": "d33d1c8f-923a-487c-8830-58708869dbe3",
"type": 2
},
{
"bubbleId": "fbefa6c1-5f32-48bf-b758-f8c8af1ae47f",
"type": 2
},
{
"bubbleId": "c84e155d-8d2f-44e8-b2ee-fb1f28d8eb3d",
"type": 2
},
{
"bubbleId": "2972bfb2-e0a7-48d4-9061-e2390fc1fa26",
"type": 2
},
{
"bubbleId": "c0512afc-e86b-4490-90d0-804344d5836d",
"type": 2
},
{
"bubbleId": "a553ae11-76f9-4e4f-91e1-50827afac653",
"type": 2
},
{
"bubbleId": "ae3e97ac-0c2a-4bdd-9cfe-f7c057c847e1",
"type": 2
},
{
"bubbleId": "a9715d3d-b368-4815-9b8d-b403ac7f877c",
"type": 2
},
{
"bubbleId": "0fdbfa6c-049e-40a1-84d8-e3279a1ffc91",
"type": 2
},
{
"bubbleId": "ec7a4bf1-6207-4d82-9751-f36ba5979c37",
"type": 2
},
{
"bubbleId": "6d059bef-e0da-4756-ac60-d62e5bc1a9e6",
"type": 2
},
{
"bubbleId": "33c3cc74-2c8b-430d-ad43-b72d925a2fbc",
"type": 2
},
{
"bubbleId": "885ba37e-51e2-4565-b806-82e6fffcc376",
"type": 2
},
{
"bubbleId": "8e3a90e7-de89-46f1-89a1-71aef7dea5e7",
"type": 2
},
{
"bubbleId": "c4b4c6d8-7497-41db-9d25-1657a202083f",
"type": 2
},
{
"bubbleId": "4c8815ef-5733-4cbc-b832-cde88208d57a",
"type": 2
},
{
"bubbleId": "70b5f845-6c36-47cf-84f5-f2a7641ab24b",
"type": 2
},
{
"bubbleId": "9ea4d748-6e77-45d8-8240-f909d5f413a1",
"type": 2
},
{
"bubbleId": "d3240e2f-c077-4047-bf0e-bbebfc642195",
"type": 2
},
{
"bubbleId": "c9d0120d-382e-4af9-a4ac-9cd224eac642",
"type": 2
},
{
"bubbleId": "6ee50b22-6225-4040-99bd-ce3ec7522f11",
"type": 2
},
{
"bubbleId": "28e4fb9f-4941-491f-bcb3-8acc2247af92",
"type": 2
},
{
"bubbleId": "ad67bdf2-4f6e-427e-84da-57a495231505",
"type": 2
},
{
"bubbleId": "37d9cf83-4e0d-49f7-860d-56a8d7d98a54",
"type": 2
},
{
"bubbleId": "b47917af-2e59-4f9e-9688-f15df84bee90",
"type": 2
},
{
"bubbleId": "7c47f727-3dbe-403b-97db-66673595f002",
"type": 2
},
{
"bubbleId": "423b19eb-68a9-442d-9045-1db2606b56a3",
"type": 2
},
{
"bubbleId": "6435067f-3061-4cd7-9cc3-0b04271f58d7",
"type": 1
},
{
"bubbleId": "962aaf22-afc3-4a44-80c0-6915208fdee4",
"type": 2
},
{
"bubbleId": "efb2ecb0-24c1-44b4-8c7b-1082d9a230c6",
"type": 2
},
{
"bubbleId": "d829163e-997e-486f-841b-81fefecf2db3",
"type": 2
},
{
"bubbleId": "a5fa6651-1e2b-456f-a9e4-fcf84ee9ad9d",
"type": 2
},
{
"bubbleId": "ddd3423d-3b34-4273-9144-4f816cb1791f",
"type": 2
},
{
"bubbleId": "4081224e-9bd8-4fb1-b42e-01b092cf9ea6",
"type": 2
},
{
"bubbleId": "446b06e5-e70c-422f-bfea-f101fe875ab6",
"type": 2
},
{
"bubbleId": "692ed7c0-eff7-4e93-a1ea-ba893081acda",
"type": 2
},
{
"bubbleId": "86e95121-d48e-48d4-965a-c620c2c40f11",
"type": 1
},
{
"bubbleId": "5bf7eeb1-2799-4f55-aba4-0a55921f15cb",
"type": 2
},
{
"bubbleId": "7ed23ae4-8513-4e2d-9ec4-91d8aa353635",
"type": 2
},
{
"bubbleId": "9c741429-42c5-4d0f-bbe4-0b3688847267",
"type": 1
},
{
"bubbleId": "8f53af50-664e-495f-8d86-8911251808cc",
"type": 2
},
{
"bubbleId": "10d01188-56b2-47ec-b402-5acbcd78fd1b",
"type": 2
},
{
"bubbleId": "cb17bec1-a370-4611-8a6e-aa01d63f1d06",
"type": 2
},
{
"bubbleId": "f88271fe-2bb8-4158-b920-eb241d968ad0",
"type": 2
},
{
"bubbleId": "9d81de1c-d39a-4b9c-9604-404a7acc9c38",
"type": 2
},
{
"bubbleId": "7e12c076-e1a0-428c-a534-2e2fb71e6594",
"type": 2
},
{
"bubbleId": "2b60be87-a754-461f-ac0a-82716d80c0b1",
"type": 2
},
{
"bubbleId": "24641449-a2c6-47f5-a397-c0c58b8f0721",
"type": 2
},
{
"bubbleId": "137ff449-e5ee-4124-9bab-eb2c846e3e7c",
"type": 2
},
{
"bubbleId": "d3dbe27c-f82f-48a4-b083-37a5f08c9c36",
"type": 2
},
{
"bubbleId": "5ea2530b-b7a7-40b7-a760-5b14c1463421",
"type": 2
},
{
"bubbleId": "8e5b77e9-d3f1-4332-9a35-f7276eede0f8",
"type": 2
},
{
"bubbleId": "0b62302c-1480-41be-9b2b-9286e005d5a0",
"type": 2
},
{
"bubbleId": "02239429-fce9-478e-b718-ef3ec803b862",
"type": 1
},
{
"bubbleId": "d828a6d5-b329-49f2-bc94-57b54adfbc17",
"type": 2
},
{
"bubbleId": "196e65e1-2593-47e1-8b06-4e79ebf9bdc2",
"type": 2
},
{
"bubbleId": "80608e0d-4190-403f-bbe0-c0c2d27abd7e",
"type": 2
},
{
"bubbleId": "d0767e6c-3ffc-4e5d-9c4f-93adba8bea70",
"type": 2
},
{
"bubbleId": "00103c42-b80e-47ca-957c-b14a072091a9",
"type": 2
},
{
"bubbleId": "27f77f76-fbe8-4c9e-a09d-e5ae6e24ec31",
"type": 2
},
{
"bubbleId": "734c9683-4178-402f-97b6-edaedb911a1a",
"type": 2
},
{
"bubbleId": "7d1ba107-7fd9-4b8f-91ca-de3d441c8cb2",
"type": 2
},
{
"bubbleId": "a308ae0f-7d28-4ecd-8356-56995f88065b",
"type": 2
},
{
"bubbleId": "7071653a-e6a1-4d3f-8680-a316773cef3e",
"type": 2
},
{
"bubbleId": "df3efb7b-5c1e-477e-a223-3515404c1cda",
"type": 2
},
{
"bubbleId": "66e94364-75d6-45eb-b0a9-2742588dd46a",
"type": 1
},
{
"bubbleId": "e4945178-8791-43e9-ba04-bf513a60583b",
"type": 2
},
{
"bubbleId": "4151e2d7-e779-48ae-b953-112faab465f8",
"type": 2
},
{
"bubbleId": "a74092ae-00e1-4369-a911-81a9dbb5b267",
"type": 2
},
{
"bubbleId": "fa31f8c7-1c04-4bfa-924c-ff5201c15875",
"type": 2
},
{
"bubbleId": "29ca7e1f-7451-434a-9c48-2b89a818f0e1",
"type": 2
},
{
"bubbleId": "ddc94e16-afb2-4721-92b8-7ba11f09a642",
"type": 2
},
{
"bubbleId": "8a60f83d-3a1b-408b-b6a5-9e85f5967c01",
"type": 2
},
{
"bubbleId": "d0488295-d857-421e-b262-779a45b8689d",
"type": 2
},
{
"bubbleId": "0847dbb9-1bae-425d-893b-e043f0f66375",
"type": 2
},
{
"bubbleId": "5249dd83-b20b-4d9a-a0d7-8bdbee8744bf",
"type": 2
},
{
"bubbleId": "29d1474d-4dcb-40b3-8f2e-0734c2fb6318",
"type": 2
},
{
"bubbleId": "8a20fd4b-2f9f-40a4-b0d2-4cdb738d26d0",
"type": 2
},
{
"bubbleId": "4b03d244-a57a-4a38-89bf-2fed39e60244",
"type": 2
},
{
"bubbleId": "2b01583b-cbb0-4297-8f2b-cf0f2fe595b3",
"type": 2
},
{
"bubbleId": "f8b41dbc-f128-429b-acea-191587179eb0",
"type": 2
},
{
"bubbleId": "37cdfd76-a960-4a6b-a43b-1c261275ab6f",
"type": 2
},
{
"bubbleId": "cc75c3fb-1533-42d5-9045-ebb9119c01d2",
"type": 2
},
{
"bubbleId": "8021e825-a6fb-4802-9abd-edd92c5f980b",
"type": 2
},
{
"bubbleId": "aaebc44f-50da-4d87-9975-1b91d0ac7d4b",
"type": 2
},
{
"bubbleId": "858c05cf-608d-4173-b508-f9f586934fd7",
"type": 2
},
{
"bubbleId": "04e39421-fa8d-446d-aedf-933775189bda",
"type": 2
},
{
"bubbleId": "92bdeb7f-f941-4d40-9073-8b9c9842f2ae",
"type": 2
},
{
"bubbleId": "4268b268-d45e-402a-b93a-9cad93acd1aa",
"type": 2
},
{
"bubbleId": "cc783e9a-ae35-43eb-bc79-f74cdfe42268",
"type": 2
},
{
"bubbleId": "b0a9d53c-0a5d-43c2-b4e0-3301fb215efe",
"type": 2
},
{
"bubbleId": "1510a949-d130-4fbc-9c15-7961323bf085",
"type": 2
},
{
"bubbleId": "2aadf10a-2be0-4e39-aee7-0e6fafd3ef93",
"type": 2
},
{
"bubbleId": "45d74371-856c-4d0d-b73b-8bac585f199f",
"type": 2
},
{
"bubbleId": "5028645f-a711-48f4-9908-5ad2bc0e2850",
"type": 2
},
{
"bubbleId": "9fff389d-f42a-42ed-9972-55206ea6ea2f",
"type": 2
},
{
"bubbleId": "12514ecb-f20c-47aa-81d6-4ab0bfd6eb16",
"type": 2
},
{
"bubbleId": "bf591582-3a84-4dd1-85d8-ac133e6cafd1",
"type": 2
},
{
"bubbleId": "a05721c1-ee40-4cf9-9be3-0c571493b2cf",
"type": 2
},
{
"bubbleId": "9ea56d3d-4722-4bba-923e-badb07974edd",
"type": 2
},
{
"bubbleId": "6789a354-b868-4a13-bc0b-90b8da26e1a0",
"type": 2
},
{
"bubbleId": "44d7d5aa-3a48-4450-aef8-e4dcf649a4af",
"type": 2
},
{
"bubbleId": "a84aef59-10e9-482c-aa44-bfc28db48769",
"type": 2
},
{
"bubbleId": "ceae8aef-06da-4e5e-99ff-0177b31aee97",
"type": 2
},
{
"bubbleId": "61494c14-787c-4625-9be6-3d647290c909",
"type": 2
},
{
"bubbleId": "8a1762f8-823f-4a0a-a82b-12a5495effc6",
"type": 2
},
{
"bubbleId": "22bf15bb-9565-4ab8-80c3-e4049a033401",
"type": 2
},
{
"bubbleId": "f7cdc591-a53e-4cf0-b525-c6e8ff751193",
"type": 2
},
{
"bubbleId": "89eaaa11-27ce-4b88-84c7-b2f63354515f",
"type": 2
},
{
"bubbleId": "d66ac94b-0d7c-4811-9f78-7647189e63a4",
"type": 2
},
{
"bubbleId": "75a8c525-db3d-45c9-b5f6-8a79842fef51",
"type": 1
},
{
"bubbleId": "e8ba8091-969e-42f6-a69c-54c94954e382",
"type": 2
},
{
"bubbleId": "78576945-82b4-4674-af84-422bc153dbdb",
"type": 2
},
{
"bubbleId": "a7829768-fa71-4dd5-bba0-8b416dfd7d10",
"type": 2
},
{
"bubbleId": "15fc254f-0e16-48f5-8284-62ee9071d931",
"type": 2
},
{
"bubbleId": "8c68376e-476a-4772-a549-d0583d07b293",
"type": 2
},
{
"bubbleId": "f3c98f34-db60-4343-820e-129cf7c23f28",
"type": 2
},
{
"bubbleId": "5ffe1030-d50d-40ea-ac7e-57b9b7c6a102",
"type": 2
},
{
"bubbleId": "c353d704-cb83-47f9-9a18-c857db268ebc",
"type": 2
},
{
"bubbleId": "28b4909c-f708-4d69-8783-2624489e1d15",
"type": 2
},
{
"bubbleId": "69235ecc-fb05-4ee0-9c20-ee745ffc43ef",
"type": 2
},
{
"bubbleId": "8f08bb6e-1f84-4a3e-a087-7b7deedad255",
"type": 2
},
{
"bubbleId": "144f3cb7-e6db-4047-a4f8-b86f81a329c4",
"type": 2
},
{
"bubbleId": "014d33ad-8590-4002-b557-e6635a4c20f6",
"type": 2
},
{
"bubbleId": "ee9d243b-7228-44b3-9320-4e90caf62c7b",
"type": 2
},
{
"bubbleId": "eee1336f-c35b-4197-bbb9-4b070c7842e2",
"type": 2
},
{
"bubbleId": "7176a18c-0cd2-4ab4-86c1-99b111936ec1",
"type": 2
},
{
"bubbleId": "ff53f815-d286-4ae8-a167-12ab1cb1d93e",
"type": 2
},
{
"bubbleId": "7a114c94-9d21-4ee1-9975-aaecfe9b9aec",
"type": 2
},
{
"bubbleId": "1c2f0e6d-37f6-4af3-a832-806f63feb06e",
"type": 2
},
{
"bubbleId": "118b5039-ab0f-43f5-abb7-2f285782ca41",
"type": 2
},
{
"bubbleId": "dc73687a-1108-494b-86f9-223d29963c75",
"type": 2
},
{
"bubbleId": "c6ad10d4-7f2f-43d0-88e0-969430eca907",
"type": 2
},
{
"bubbleId": "5b7c587b-87ae-4f4b-9ae8-33a9c3064284",
"type": 2
},
{
"bubbleId": "22950e1d-1b87-4249-816b-0d2a5db4c71b",
"type": 2
},
{
"bubbleId": "63ed26eb-4707-4fde-a6c1-923d55f86dac",
"type": 2
},
{
"bubbleId": "2e4344ea-c768-4cf5-a15d-50dfdbe01d28",
"type": 2
},
{
"bubbleId": "1b137a14-0de3-4dfa-8102-d36c31db7907",
"type": 2
},
{
"bubbleId": "89db5e92-4d48-4676-8e32-5cf03b407cc2",
"type": 2
},
{
"bubbleId": "db5ed4d5-c821-433e-99d2-9e0cdd61bbd9",
"type": 2
},
{
"bubbleId": "4aad7d0d-02cd-407d-bbd2-af6b2679848d",
"type": 2
},
{
"bubbleId": "d41d2497-41b4-4fef-9b1f-354417a64971",
"type": 2
},
{
"bubbleId": "7d247a5b-375e-450d-8425-c0ad2696fdae",
"type": 2
},
{
"bubbleId": "1735a4e6-87df-4952-92a1-7ca9a14233fc",
"type": 2
},
{
"bubbleId": "8b42d75b-2312-4127-8eb6-4ce48153bb8a",
"type": 2
},
{
"bubbleId": "d42b6bc8-0306-4540-92bf-db800c8230b1",
"type": 2
},
{
"bubbleId": "9cdab59f-14ec-446b-beb5-96003e96a1a9",
"type": 2
},
{
"bubbleId": "10367176-fdbf-40f5-a19d-ab87ade3f49a",
"type": 2
},
{
"bubbleId": "27461116-2a5e-497f-bf05-61ef52d0d3f2",
"type": 2
},
{
"bubbleId": "df04f533-6e2e-43f8-ba63-577ad5a6ca2f",
"type": 2
},
{
"bubbleId": "eddd2b7a-1d3e-42cb-a926-80526558628f",
"type": 2
},
{
"bubbleId": "ec92c40d-2593-4c27-a20f-6799b6d41e15",
"type": 2
},
{
"bubbleId": "332a6227-3f14-451d-bbba-8d4257b62cc7",
"type": 2
},
{
"bubbleId": "538ea81c-230d-46e4-a984-96245ee5caad",
"type": 2
},
{
"bubbleId": "77c2748a-d736-4459-8963-a8604cceb42b",
"type": 1
},
{
"bubbleId": "54ea63f7-2040-4f33-b94d-79cee9a1c29c",
"type": 2
},
{
"bubbleId": "05c81270-54c8-4276-87dd-82f3265ac8e4",
"type": 2
},
{
"bubbleId": "7876c8cd-5973-4b2c-9d8e-cc87ff46ab3d",
"type": 2
},
{
"bubbleId": "9ab84248-dc16-4d19-866b-7d15674c57bc",
"type": 2
},
{
"bubbleId": "55767486-416e-406a-b8fc-d7aa0fd738ab",
"type": 2
},
{
"bubbleId": "bdb63c89-8611-46e8-8922-a0806e36ed18",
"type": 2
},
{
"bubbleId": "038c70a2-b369-471b-9a61-24ad4b59fa09",
"type": 2
},
{
"bubbleId": "8532514d-faa2-44cf-84b6-543cbe4d5fe3",
"type": 2
},
{
"bubbleId": "e5f5a194-05a0-4b7a-83f7-b73eb3cb77d4",
"type": 2
},
{
"bubbleId": "7a1e48c6-24f3-4ef5-b87f-9622f5c51438",
"type": 2
},
{
"bubbleId": "91cf6999-1fe3-4874-91ca-4a0f82439f3e",
"type": 2
},
{
"bubbleId": "2e98b2b0-0a75-415f-8cb8-6a3b1591f287",
"type": 2
},
{
"bubbleId": "c5d5ce6d-66fc-4992-95f4-d078dbdd4076",
"type": 2
},
{
"bubbleId": "72bf63b0-d08a-4f3c-9cd0-cfae4d45801b",
"type": 2
},
{
"bubbleId": "35cfc661-5e05-4866-aa53-1b32036fdced",
"type": 2
},
{
"bubbleId": "c4e04f59-0888-4bd7-b376-cc6ccb299aba",
"type": 2
},
{
"bubbleId": "99935afe-5974-4185-8880-9e0a47a7d57a",
"type": 2
},
{
"bubbleId": "99c076c6-3bb4-42e2-84d5-eaca2c596e89",
"type": 2
},
{
"bubbleId": "436dc84c-4a49-46d9-aebc-80e3db4359da",
"type": 2
},
{
"bubbleId": "e40c9cd3-4a6b-4976-bad0-1ee0850d6587",
"type": 2
},
{
"bubbleId": "0023d68e-ee60-4066-b4cf-071f572fc5f0",
"type": 2
},
{
"bubbleId": "7562a040-c1d0-42fc-970e-8cec4df117f3",
"type": 2
},
{
"bubbleId": "1e253e2d-b446-4946-a1c5-7fa367b24074",
"type": 2
},
{
"bubbleId": "4efb6158-0f95-4c50-8613-e8084a4b687d",
"type": 2
},
{
"bubbleId": "dd1e7031-af2b-41df-b735-ef791e660f91",
"type": 2
},
{
"bubbleId": "d4f959ac-9244-46bc-a83d-cc603770f409",
"type": 2
},
{
"bubbleId": "c3260868-aa31-4edc-832f-937f2b082c8e",
"type": 2
},
{
"bubbleId": "06b301af-9523-4d15-9cd8-bb8005e71ab1",
"type": 2
},
{
"bubbleId": "449a34f6-5735-47f1-a3a6-13058fb1fced",
"type": 2
},
{
"bubbleId": "526873d8-5ac9-43b3-9a68-5cfb4c20e4d2",
"type": 2
},
{
"bubbleId": "10a9d2f2-461b-4110-9654-a2de3ccb843b",
"type": 2
},
{
"bubbleId": "a743c222-a81c-4b8a-b7a7-817a46e72bf0",
"type": 2
},
{
"bubbleId": "8c9a3390-3a36-4755-8c2c-b77fdb6e2d9e",
"type": 2
},
{
"bubbleId": "99719140-1c5f-49b9-a5de-8b66604fb56d",
"type": 2
},
{
"bubbleId": "6f586096-7c3f-4443-ac03-550d5758c4f8",
"type": 2
},
{
"bubbleId": "b928e905-ecf2-4b5d-b968-267fe1e3956e",
"type": 1
},
{
"bubbleId": "b79fb821-104d-4571-b091-20ebd0021be0",
"type": 2
},
{
"bubbleId": "5f7fd02b-eb6c-439c-83e3-3c8fcabb79fe",
"type": 2
},
{
"bubbleId": "ce3ff5b3-4048-4147-924b-f5343e8bc0a8",
"type": 2
},
{
"bubbleId": "0dbce843-a421-42d5-8484-17a239066cec",
"type": 2
},
{
"bubbleId": "f8ad084b-f410-4c3d-888e-8d9bd609f4d1",
"type": 2
},
{
"bubbleId": "30cceab7-6de3-4aff-aa15-19451e71a845",
"type": 2
},
{
"bubbleId": "433b0925-3bfc-4eba-91c2-ba15516c8ee1",
"type": 2
},
{
"bubbleId": "7e7f61d1-152f-4aef-8195-e3f3eb84b21f",
"type": 2
},
{
"bubbleId": "38494701-c32d-4df3-85b2-aa0ace4a08a3",
"type": 2
},
{
"bubbleId": "7b1b8b7b-c2e0-4586-8080-76f0a14bec49",
"type": 2
},
{
"bubbleId": "3ba04cbf-2238-43b3-974f-8d24882c3355",
"type": 2
},
{
"bubbleId": "c9278034-17c6-4b65-846c-0ed5c297be30",
"type": 2
},
{
"bubbleId": "d4081edc-9883-4fee-979a-6697e45d7b9b",
"type": 2
},
{
"bubbleId": "dcb93f6c-1f88-4ab3-840f-c200c86f199f",
"type": 2
},
{
"bubbleId": "e4b2405c-2d8d-4ecf-912e-e2257442d2b1",
"type": 2
},
{
"bubbleId": "33ef6cf3-8acb-41da-8165-3db0a2487a42",
"type": 2
},
{
"bubbleId": "07adc4de-3709-4447-a7c6-0d13beaaf158",
"type": 2
},
{
"bubbleId": "70999ad5-c6c7-4cbd-b866-d81e50b9f0e3",
"type": 2
},
{
"bubbleId": "9f958774-c774-4a54-9056-bcc92ef42ee7",
"type": 2
},
{
"bubbleId": "3ec8ebb8-6885-4d97-9b51-e77cc652feca",
"type": 2
},
{
"bubbleId": "28a3f382-0829-4d49-b42e-8ba56bee5b48",
"type": 1
},
{
"bubbleId": "7223e00c-afcc-4698-8b71-e94edf55b20b",
"type": 2
},
{
"bubbleId": "567ed1a0-d00d-4fff-9053-82ed4cfb71c3",
"type": 2
},
{
"bubbleId": "98c7a0b8-ee51-451e-ad15-24f0987c40c4",
"type": 1
},
{
"bubbleId": "8d4bfebe-206b-4773-ae29-be1bdaa261f3",
"type": 2
},
{
"bubbleId": "814278b6-bef2-4253-b884-c4a085365009",
"type": 2
},
{
"bubbleId": "210cb41e-64f6-454b-b6ca-45c2395ea2a5",
"type": 2
},
{
"bubbleId": "9d532900-2f86-498c-b0a4-676a811e1ff2",
"type": 2
},
{
"bubbleId": "80a7d257-ff44-453c-aca6-29bff53fe501",
"type": 2
},
{
"bubbleId": "3044fce5-7017-4807-b973-fb5c4e0a0fb4",
"type": 2
},
{
"bubbleId": "4c62462d-3f72-46bc-adfb-48036af8429a",
"type": 2
},
{
"bubbleId": "02003503-e6ac-4459-aa9a-24d579b44da0",
"type": 2
},
{
"bubbleId": "0cbc52fc-c997-435a-8ec3-f0b9a4ccc397",
"type": 2
},
{
"bubbleId": "cc20f02d-e7c5-4a73-9d94-270261f39340",
"type": 2
},
{
"bubbleId": "d270602f-52e1-456a-84e0-d56e33515705",
"type": 2
},
{
"bubbleId": "f77dd62f-6bc7-4214-890a-f603f0fe0791",
"type": 2
},
{
"bubbleId": "60762cce-297a-4def-885e-6325a1269ba6",
"type": 2
},
{
"bubbleId": "5426c694-d402-4d74-a3a0-18e280abf075",
"type": 2
},
{
"bubbleId": "06763a5a-5772-4f05-9893-a32c31f9b584",
"type": 2
},
{
"bubbleId": "90b7d0e9-efee-4ca4-bf62-7cb0e7bee937",
"type": 2
},
{
"bubbleId": "28ebb8cd-86e0-43e9-882d-4f6e5669d79f",
"type": 2
},
{
"bubbleId": "d37c2ba6-e7c2-4a2b-9a51-3ef99d9bbdf4",
"type": 2
},
{
"bubbleId": "abf8ec1d-94e4-4c03-b909-950cb806b93c",
"type": 2
},
{
"bubbleId": "2e855374-67ef-4565-9c8d-9128905a82bf",
"type": 2
},
{
"bubbleId": "d66d9c31-aa46-4689-94c2-ba979143f333",
"type": 2
},
{
"bubbleId": "b44cbc0c-6a5e-4c5e-84d6-71fd461fa5c7",
"type": 2
},
{
"bubbleId": "5481e93f-4ba7-4136-9299-235312cd607d",
"type": 2
},
{
"bubbleId": "48239946-dc80-4ad2-959c-0acfadb1e7c3",
"type": 2
},
{
"bubbleId": "329f0cd0-0e13-47ac-9180-299d3be41bea",
"type": 2
},
{
"bubbleId": "3feaa4f3-84e7-47cc-a7b4-781f58c4f34f",
"type": 2
},
{
"bubbleId": "1075dbba-0740-456f-86b7-8fa0494051da",
"type": 2
},
{
"bubbleId": "17d74507-5526-476f-9cfb-7954097445d9",
"type": 1
},
{
"bubbleId": "fd6f4d5a-a5aa-4ffb-afd4-d5b7b8491044",
"type": 2
},
{
"bubbleId": "14277fe7-bd09-4fff-adec-4adc8ec245d0",
"type": 2
},
{
"bubbleId": "19c9aacc-85d8-4506-9cf7-438fdbcce936",
"type": 2
},
{
"bubbleId": "39fb88e9-2bdc-42fb-a5a6-f8f541b72b61",
"type": 2
},
{
"bubbleId": "69143c4a-5ae6-42cd-9426-9753be6401b1",
"type": 2
},
{
"bubbleId": "af94d985-7f0e-467f-ba86-0a25e6e806ff",
"type": 2
},
{
"bubbleId": "276d18be-3fb3-42f7-bfc4-ddc864b50315",
"type": 1
},
{
"bubbleId": "ae069cb0-4e09-4d9c-a53b-d36bd0fd2c92",
"type": 2
},
{
"bubbleId": "43ac78ff-f1ea-4708-9c2a-e8bbb3aff774",
"type": 2
},
{
"bubbleId": "2868c3e5-f1eb-4e65-98c7-3bd36b7f8d5a",
"type": 2
},
{
"bubbleId": "12c56d93-64a3-4e07-8820-6972449989a8",
"type": 2
},
{
"bubbleId": "e7149616-5893-43eb-a234-2c2e9a956dbb",
"type": 2
},
{
"bubbleId": "bbfb14fd-72c7-48a4-b0e8-a8dfe296a1a0",
"type": 2
},
{
"bubbleId": "4bc84045-f00e-4f31-88c2-4cf233774702",
"type": 2
},
{
"bubbleId": "593c359b-1e21-440c-a24e-31f485c80fe0",
"type": 2
},
{
"bubbleId": "9d7517d7-fddd-421f-a413-bc684040a6fe",
"type": 2
},
{
"bubbleId": "85a3c799-8529-4824-be8f-c5f743786af1",
"type": 1
},
{
"bubbleId": "798f6d68-8774-4535-a9e9-e91722bb6405",
"type": 2
},
{
"bubbleId": "8e6063de-56c6-4464-9e19-0c1229746996",
"type": 2
},
{
"bubbleId": "56889c35-0a1f-47fe-b332-18d958477c51",
"type": 2
},
{
"bubbleId": "152eaa61-0b29-4741-8d97-b0075826c27d",
"type": 2
},
{
"bubbleId": "099073e4-1f1d-430c-ac15-f47067378859",
"type": 2
},
{
"bubbleId": "73e792f6-72ca-47fb-a4ca-44c51f75598a",
"type": 2
},
{
"bubbleId": "d47aa513-2df4-463b-9e76-cca1eb266355",
"type": 2
},
{
"bubbleId": "e947d6c9-d487-43ae-9130-029f7bec1b12",
"type": 2
},
{
"bubbleId": "9305792d-546b-4b5c-95b8-8cf0df0a65fa",
"type": 2
},
{
"bubbleId": "aab891c5-d784-4552-9678-b9de8a834a8c",
"type": 2
},
{
"bubbleId": "6dd811b8-8625-4efa-8fb4-14b43f724890",
"type": 2
},
{
"bubbleId": "189b70e2-96f7-4592-9157-667d531523ef",
"type": 2
},
{
"bubbleId": "9974d890-749f-40ac-88d8-1160cb5158c2",
"type": 2
},
{
"bubbleId": "6277afae-4a4a-4e22-a7c6-91f1fcc94bbb",
"type": 2
},
{
"bubbleId": "e00a635d-601b-4fb6-bd0d-e74ef4dff058",
"type": 2
},
{
"bubbleId": "a6e68fce-443f-4c45-bfae-cfe5bab3c5ae",
"type": 2
},
{
"bubbleId": "20140e02-09f5-44b9-b56b-3490bd97ea23",
"type": 1
},
{
"bubbleId": "bb64affd-c880-4024-89bd-8f38200ce72f",
"type": 2
},
{
"bubbleId": "a04fc242-c7df-42ae-8b21-3e3ca01ebcfd",
"type": 2
},
{
"bubbleId": "767e75ae-adf8-49bc-b52e-f51cf62d8cbc",
"type": 2
},
{
"bubbleId": "33714145-66a0-48bc-bcb7-108956a488b6",
"type": 2
},
{
"bubbleId": "61e7d5b7-56ff-446b-80ed-b2e4b3c77bab",
"type": 2
},
{
"bubbleId": "a21570ba-7caa-4f1d-9fb6-c5dded4a0052",
"type": 2
},
{
"bubbleId": "1ad2cac0-cb13-40d0-8f18-fb75bd595a51",
"type": 2
},
{
"bubbleId": "11299601-9e9f-45b6-8f4a-202feadb2ee1",
"type": 2
},
{
"bubbleId": "9d1cffec-6c19-4a1d-8797-6035a24079b1",
"type": 2
},
{
"bubbleId": "38e58f89-964a-457e-8b5b-b9d48ec19dff",
"type": 2
},
{
"bubbleId": "09a516d7-9d3b-466c-aeff-b583aa4fdd81",
"type": 2
},
{
"bubbleId": "ba4622b2-4a04-4dec-8fc3-b8cf854f3f5f",
"type": 2
},
{
"bubbleId": "8a56ace7-ca6c-45d1-a364-e164d21ce6cc",
"type": 2
},
{
"bubbleId": "41b6fe7c-84ff-4f10-a18c-f3a7b080c972",
"type": 2
},
{
"bubbleId": "47aec93b-b74b-481d-9092-ecc3e222daca",
"type": 2
},
{
"bubbleId": "45dfc848-87bd-4252-b53b-9d6bf0729178",
"type": 2
},
{
"bubbleId": "db6f0fa7-40b3-4be4-b7df-293ccc752863",
"type": 2
},
{
"bubbleId": "8c76d30e-53aa-4d4b-ad76-0b27f6edda34",
"type": 2
},
{
"bubbleId": "153c1edf-bb27-492d-a102-ad4b8391fe3a",
"type": 2
},
{
"bubbleId": "40e55869-7c83-43e8-8789-31b334d55214",
"type": 2
},
{
"bubbleId": "e69a664d-4e30-49f7-ac68-2378b562bac9",
"type": 2
},
{
"bubbleId": "b87f21b1-6503-4a3e-8bec-7e39359c38e1",
"type": 2
},
{
"bubbleId": "e967bc92-e1cd-4ccd-adca-3ff15f9a7e83",
"type": 2
},
{
"bubbleId": "1f9ffd1b-4532-4bb5-958d-8ca0d0d269d9",
"type": 2
},
{
"bubbleId": "4de1f199-ce81-4dac-8e80-0ef912e1333d",
"type": 2
},
{
"bubbleId": "032635bd-3451-4ed3-aa5e-240b86ebe43e",
"type": 2
},
{
"bubbleId": "1d19e0f8-586e-4fb0-b432-51bfd0390963",
"type": 2
},
{
"bubbleId": "9207240c-cad4-455c-a77f-7185cd9bda4d",
"type": 2
},
{
"bubbleId": "0ae05d4e-cd84-4683-9eff-09406c59ca31",
"type": 2
},
{
"bubbleId": "6bd00de4-1f93-4c61-9d18-18239c2071ee",
"type": 2
},
{
"bubbleId": "1734ff26-22d7-4eeb-a981-954bedfc42b2",
"type": 2
},
{
"bubbleId": "36bfa75a-f19e-4591-93f8-afe45392b87a",
"type": 2
},
{
"bubbleId": "5de04c94-9b95-409e-b907-f40eab42be13",
"type": 2
},
{
"bubbleId": "8d50a514-7c82-454f-93a9-d4fc042d7046",
"type": 2
},
{
"bubbleId": "c294b9f0-8e48-4ed3-bf3f-fd0780573bca",
"type": 2
},
{
"bubbleId": "56fe6836-cd6c-495d-b18a-1001b8a3c6ae",
"type": 2
},
{
"bubbleId": "b249b876-0266-45cb-8b90-d511f4fae6b8",
"type": 2
},
{
"bubbleId": "91df9b58-75c1-4f5b-8c1a-a3764d4302b8",
"type": 2
},
{
"bubbleId": "60d6afe3-09bc-4e17-891d-0033ffd20b7e",
"type": 1
},
{
"bubbleId": "46840b7a-7aa7-44ab-88d0-448cd32ae677",
"type": 2
},
{
"bubbleId": "bc20796d-611c-4e08-aca7-6b1e5aa32ccd",
"type": 2
},
{
"bubbleId": "c95ede2c-c327-4204-b727-a5a6a6ad3bc3",
"type": 2
},
{
"bubbleId": "fc29b89b-9ac5-4a2b-a9be-5bbb04592a11",
"type": 2
},
{
"bubbleId": "d1d61d3d-f7b2-4fb8-abe1-9705714325ac",
"type": 2
},
{
"bubbleId": "3cfbee76-9cbd-4584-8939-ead485a60c26",
"type": 2
},
{
"bubbleId": "e460a4a5-8d5f-4778-98f7-d76569b04a18",
"type": 2
},
{
"bubbleId": "ea1af1e9-5a86-4570-a1b9-b781870efb92",
"type": 2
},
{
"bubbleId": "fa2541f7-a752-452f-a840-8312d3f9a090",
"type": 2
},
{
"bubbleId": "b4d5cd2f-be44-4383-864b-7a5fe3d0b6e9",
"type": 1
},
{
"bubbleId": "c47db740-41b8-4d88-8408-defaa3b814c4",
"type": 2
},
{
"bubbleId": "26672c52-7b3f-4d28-a9d3-5e924b6b8f3e",
"type": 2
},
{
"bubbleId": "be483d49-4468-451e-bcf8-f0890c8f5fcb",
"type": 2
},
{
"bubbleId": "66a84c51-83ce-4a5b-b14d-c3502ad16513",
"type": 2
},
{
"bubbleId": "c1619442-8135-4578-92eb-c5a76373d768",
"type": 2
},
{
"bubbleId": "8936253e-b38d-4c5d-a0d7-96502ec3fd05",
"type": 2
},
{
"bubbleId": "9180a514-c1cb-46d9-89b6-1448780ad5b6",
"type": 2
},
{
"bubbleId": "13068265-adba-4c80-9fbf-932291755846",
"type": 2
},
{
"bubbleId": "f7a87718-9bd6-4b9d-88b5-3ee8225b748f",
"type": 2
},
{
"bubbleId": "24afd5c0-28da-40cd-b307-3474e5fc8436",
"type": 2
},
{
"bubbleId": "708b2cac-4ca8-4273-85fa-77487a3f3ecb",
"type": 2
},
{
"bubbleId": "557d260c-f4c4-4870-8c84-2baeaa4cb2ec",
"type": 2
},
{
"bubbleId": "a7380758-e00f-4558-9769-d18db509ed54",
"type": 2
},
{
"bubbleId": "e632121f-a0f7-44c5-bb2b-eca60ffa78f4",
"type": 2
},
{
"bubbleId": "c6464977-81ec-4502-8deb-b10a86deb500",
"type": 2
},
{
"bubbleId": "1bd34857-23bc-483d-ad8e-f828cefc5d32",
"type": 2
},
{
"bubbleId": "5cb41124-0805-4408-ad64-c261ba5a4b5c",
"type": 2
},
{
"bubbleId": "589e94fe-729c-4b08-8d6a-eb3c3fb8bdb5",
"type": 2
},
{
"bubbleId": "c1049450-6eca-4494-9340-de67d0bcd80f",
"type": 2
},
{
"bubbleId": "cea3bc5b-9411-46bf-9ec0-41db19232d74",
"type": 2
},
{
"bubbleId": "e0156526-8c7b-4521-8696-c7f5a24945cd",
"type": 2
},
{
"bubbleId": "8e63863f-0f17-4b0d-9b48-9866bb79fef2",
"type": 2
},
{
"bubbleId": "0791be4c-a61a-4afe-9266-f03b84d6e1b9",
"type": 2
},
{
"bubbleId": "9a67a375-289f-47a6-b938-678fc0a0632b",
"type": 2
},
{
"bubbleId": "82938b33-ca2a-4b4b-bcd6-3e72d597eed8",
"type": 2
},
{
"bubbleId": "b0f5c0af-356d-49d5-a58b-ce97985f64d7",
"type": 2
},
{
"bubbleId": "71437fdf-f3a1-4c7d-9d4d-390e4f519d1a",
"type": 2
},
{
"bubbleId": "0fcc959c-0c2e-4576-831b-b19880d198a7",
"type": 1
},
{
"bubbleId": "bda2c631-cc68-403f-806d-3fd5fe69db12",
"type": 2
},
{
"bubbleId": "8ff95482-9c63-4800-91d0-c13ce5d07b6c",
"type": 2
},
{
"bubbleId": "9935a776-2ab5-4f2c-ab6e-da14254cc593",
"type": 1
},
{
"bubbleId": "6b67e9e3-4789-4455-a95b-1da1114a2c31",
"type": 2
},
{
"bubbleId": "97545890-0f53-4feb-83aa-e1a85242da87",
"type": 2
},
{
"bubbleId": "00b4e66d-d2cf-4a93-a87f-8c034f8aed97",
"type": 2
},
{
"bubbleId": "13abd9b3-03f2-49e3-a0d5-8299e267fe6d",
"type": 2
},
{
"bubbleId": "def43b5e-2bd2-460f-9a44-9175b3b7dfe5",
"type": 2
},
{
"bubbleId": "8e007070-001e-487f-9667-3ce3b74fac31",
"type": 2
},
{
"bubbleId": "256bc228-ebf7-4357-a026-c649bbe4a802",
"type": 2
},
{
"bubbleId": "af711962-1b6b-43d4-97ff-8fe507a2c71b",
"type": 2
},
{
"bubbleId": "d95f141d-adb2-46a6-8db8-d9963ec7efad",
"type": 2
},
{
"bubbleId": "a05edeff-8d73-48a5-bc1f-b448e397f5c9",
"type": 2
},
{
"bubbleId": "cee214c1-95de-448b-9060-629d4ddb9c29",
"type": 2
},
{
"bubbleId": "4cebdf4b-d006-4f9d-b7e7-40e959f16fd2",
"type": 2
},
{
"bubbleId": "d8fb6ec0-04c4-4645-84fa-0b97f5ff6bdb",
"type": 2
},
{
"bubbleId": "fda591b3-4c98-4acd-9400-e67e2fff55fb",
"type": 2
},
{
"bubbleId": "f5687332-2543-43c0-84c5-88b47426f6da",
"type": 2
},
{
"bubbleId": "2b1dde79-cbb0-4760-914f-cbe060a6fd08",
"type": 2
},
{
"bubbleId": "792faa36-e5e3-48c3-99f1-0c12c52c473d",
"type": 2
},
{
"bubbleId": "3f786a28-e8fb-4d16-99f9-386f6867bc52",
"type": 2
},
{
"bubbleId": "9d142358-8345-4eae-b3c5-c47d7d3ae6d1",
"type": 2
},
{
"bubbleId": "7e6e7b86-a255-457a-9943-30bc6ec8dcd0",
"type": 2
},
{
"bubbleId": "9aa98ce3-7e7b-4442-bb35-40f44bd73d28",
"type": 1
},
{
"bubbleId": "d862ab45-2d4a-4596-bdcd-6be9d1f6f00a",
"type": 2
},
{
"bubbleId": "b4d54dbc-bd6c-478f-906f-962f061e39a9",
"type": 2
},
{
"bubbleId": "74cf6d49-4194-4b8a-ae56-c52d300d02e5",
"type": 2
},
{
"bubbleId": "430b9390-ee77-4c22-8308-7eb51a6d5afe",
"type": 2
},
{
"bubbleId": "71055aab-a833-419b-8783-4df62a188db9",
"type": 2
},
{
"bubbleId": "477b6adb-4a8f-4352-bdf8-147987e8a7c9",
"type": 2
},
{
"bubbleId": "3f157706-8875-495e-8ce1-ab3b1036cd61",
"type": 2
},
{
"bubbleId": "d80cb17e-d5ae-4f90-afa7-2d1076e56ba1",
"type": 2
},
{
"bubbleId": "982af644-f20e-45c2-a937-55b5b4ebe1bb",
"type": 2
},
{
"bubbleId": "d979703e-25c3-49d8-964e-70b1eb47c7a3",
"type": 2
},
{
"bubbleId": "2135430f-2c1b-437f-8c10-7bcc9efb4805",
"type": 2
},
{
"bubbleId": "c26a6524-8b1c-43e1-96cd-518afeccd4e2",
"type": 2
},
{
"bubbleId": "ec4403e7-bd34-484e-82f7-de7be97ee7b1",
"type": 2
},
{
"bubbleId": "c7b50cbf-c679-4a97-ab6b-e1334503db4f",
"type": 2
},
{
"bubbleId": "3da7df1d-d005-441a-bece-87d2d2088036",
"type": 2
},
{
"bubbleId": "68d2834a-d593-4b7f-b75c-66ae9b48a38a",
"type": 2
},
{
"bubbleId": "821e7d85-b942-4c2e-b1c1-fc42c1108f5d",
"type": 2
},
{
"bubbleId": "25d3faa3-f603-40c4-b3d9-03710fbe239f",
"type": 2
},
{
"bubbleId": "2a1be520-1378-4e3b-82e5-b595035dcb83",
"type": 1
},
{
"bubbleId": "258d9eee-e392-416e-9861-227f2ede9841",
"type": 2
},
{
"bubbleId": "f61e7b57-9151-4def-966b-3abab1f76ad7",
"type": 2
},
{
"bubbleId": "5b35cd27-7831-4579-8770-7764ae213821",
"type": 2
},
{
"bubbleId": "9162dff7-940c-4558-8b52-7f97f0045664",
"type": 2
},
{
"bubbleId": "732dd2c6-8734-47aa-8cf2-d774ca49d33c",
"type": 2
},
{
"bubbleId": "2ec278fc-72cc-4a2d-9f7d-f3e93e79df10",
"type": 2
},
{
"bubbleId": "e3cc5205-431d-44db-99ed-bebac1003399",
"type": 2
},
{
"bubbleId": "d769eb92-0e38-418a-b55d-538177c3ed64",
"type": 2
},
{
"bubbleId": "a8ea0b47-782f-4106-88a8-cec80a05c01c",
"type": 2
},
{
"bubbleId": "7763fccb-5c35-465a-80ef-cb3fa880b2f0",
"type": 2
},
{
"bubbleId": "c55db976-c11e-4325-ad6f-2b801c8d90cf",
"type": 2
},
{
"bubbleId": "b0e384ee-12f4-424b-9ad2-f1934d98e300",
"type": 1
},
{
"bubbleId": "45d96150-e6c9-4c2d-b785-49028c678ec2",
"type": 2
},
{
"bubbleId": "bde94d13-af41-409b-b842-8161376bd269",
"type": 2
},
{
"bubbleId": "3cabd424-348e-40be-ad8e-58c7d6bd29e7",
"type": 2
},
{
"bubbleId": "db893281-9b53-4af0-a087-34130987be4c",
"type": 2
},
{
"bubbleId": "97472f50-7d61-42ab-b9e1-e540d4ea5198",
"type": 2
},
{
"bubbleId": "23ce46f7-f3cf-4666-89f4-189a384e59ec",
"type": 2
},
{
"bubbleId": "8dff7c21-519b-4277-95c5-86a089d6999a",
"type": 2
},
{
"bubbleId": "6cf07af2-daf7-4b70-be10-9184b07eaf00",
"type": 2
},
{
"bubbleId": "47fb1020-2933-4ff5-89c7-81f2041d7952",
"type": 2
},
{
"bubbleId": "b1a97f33-93b0-46d0-b8c9-ab56f0daad73",
"type": 2
},
{
"bubbleId": "e9e6bf65-1bd7-48f9-be7a-0864f7e0d8da",
"type": 2
},
{
"bubbleId": "73ca2a95-5498-4178-8ea6-ddfd3b0e4525",
"type": 2
},
{
"bubbleId": "eac8024b-9716-4059-bf67-6a18b2eab908",
"type": 1
},
{
"bubbleId": "6297ef31-7a53-452f-a1f4-d06069925afe",
"type": 2
},
{
"bubbleId": "e91a4398-c26a-4a38-9c3b-a1f2db2e8770",
"type": 2
},
{
"bubbleId": "f811a085-4b0b-4aeb-b5bb-a66003d432f6",
"type": 2
},
{
"bubbleId": "014c937b-21a4-4068-80dd-03f13a4fdc58",
"type": 2
},
{
"bubbleId": "402afd4a-8dbb-4407-a117-77b1bbe4bc8c",
"type": 2
},
{
"bubbleId": "99e865b2-4be5-44c7-82cb-17730e3d83a5",
"type": 2
},
{
"bubbleId": "ee23466e-b8cb-40bf-9553-81e4eee1577e",
"type": 2
},
{
"bubbleId": "525248f9-8f62-47f0-a3da-90055caf07c3",
"type": 2
},
{
"bubbleId": "64d31801-80d3-4251-a21a-f70c6136b664",
"type": 2
},
{
"bubbleId": "ee731eb1-561d-40c3-a3a9-7564e83a7671",
"type": 2
},
{
"bubbleId": "c4f240fb-7321-4ad9-9aa7-8aa2abb30b66",
"type": 2
},
{
"bubbleId": "3742871a-447d-4878-8988-ff4e030fd529",
"type": 2
},
{
"bubbleId": "d591b5d3-837b-42f2-bdc0-83f3390363f4",
"type": 2
},
{
"bubbleId": "825353eb-6766-48c2-9b4a-4e857f062a24",
"type": 2
},
{
"bubbleId": "7713be8f-aa9d-42e5-8dcf-c30facd0fb00",
"type": 2
},
{
"bubbleId": "6c37b14b-ab73-4b8a-8ab5-bde2003415bd",
"type": 2
},
{
"bubbleId": "9efcb8f6-7465-4669-aeb7-d522e2b506c5",
"type": 2
},
{
"bubbleId": "dd741049-65d9-4791-bb32-1dd2726e8ede",
"type": 2
},
{
"bubbleId": "54c714f8-2d8b-4b31-8699-142590086d67",
"type": 2
},
{
"bubbleId": "0f916abd-4fb6-43ad-8f2d-58a770f5cbe7",
"type": 2
},
{
"bubbleId": "def341b3-4ea4-45d7-81f7-8e05bc3a3a0d",
"type": 2
},
{
"bubbleId": "7bdc3634-04fd-416c-beab-e96555c26912",
"type": 2
},
{
"bubbleId": "2f47b3b8-f907-49d4-ba22-68be77f52700",
"type": 2
},
{
"bubbleId": "0dd820da-1700-42e2-b05d-4db19280d10b",
"type": 2
},
{
"bubbleId": "f1861780-7fc3-4edb-b86e-04b0da913e85",
"type": 2
},
{
"bubbleId": "b3e100f4-3e3d-420f-9f5e-d6c0bc85cb48",
"type": 2
},
{
"bubbleId": "cfba230a-3e70-4960-b6e7-09d7c543ceba",
"type": 2
},
{
"bubbleId": "e05adfee-6f1d-424c-9127-51e6b0fee9b6",
"type": 2
},
{
"bubbleId": "3d1105fd-b1a9-4ad8-877f-b3eb3fa2b47f",
"type": 2
},
{
"bubbleId": "223c39bb-8ea2-448f-b72a-a428b1364b60",
"type": 2
},
{
"bubbleId": "d9e069e5-d353-439b-8051-68dc824c3696",
"type": 2
},
{
"bubbleId": "f65daad5-2205-4c1a-9e38-ff1384c9f580",
"type": 1
},
{
"bubbleId": "c881f687-a91c-4398-8919-932c06d1a785",
"type": 2
},
{
"bubbleId": "f3956ba6-67fc-4d50-9c29-83095193516a",
"type": 2
},
{
"bubbleId": "2ad20354-0894-4a6b-9e8e-c165025f5e7d",
"type": 2
},
{
"bubbleId": "f818a2ed-4eb1-4e28-8f73-f2c19aa22a91",
"type": 2
},
{
"bubbleId": "5c850cc4-de73-4ad6-9883-45b7ac031deb",
"type": 2
},
{
"bubbleId": "e56e7e72-4297-420b-8d93-864bd4120bd1",
"type": 2
},
{
"bubbleId": "50a20242-7250-4ea4-835a-1e18a4e935d1",
"type": 2
},
{
"bubbleId": "07f89787-ce8c-4cc2-a272-2f87f5496b16",
"type": 2
},
{
"bubbleId": "9c551dfa-f2db-49d2-a11b-7aae7604a559",
"type": 2
},
{
"bubbleId": "e1815437-b044-454e-a2e4-345cada60f8a",
"type": 2
},
{
"bubbleId": "500d2e99-27b2-4901-9670-3d455a126139",
"type": 2
},
{
"bubbleId": "e97b1009-baee-4269-bc75-922f62589088",
"type": 2
},
{
"bubbleId": "4e42b2d9-fc1d-4dc8-98f0-048cfaf0b7a4",
"type": 2
},
{
"bubbleId": "f325d6fa-7103-4f35-8666-b8c712ef7133",
"type": 2
},
{
"bubbleId": "c41480a0-d375-4a4b-b23f-eb35eb5256b1",
"type": 2
},
{
"bubbleId": "97a454ad-8b1e-47bf-ae83-2db5d34047cd",
"type": 1
},
{
"bubbleId": "858dd29f-bb30-42eb-8e5d-e8dde4afeaad",
"type": 2
},
{
"bubbleId": "4816fb30-009e-4ee7-8287-7538fbb64c84",
"type": 2
},
{
"bubbleId": "14750c96-f705-46c0-b64d-3bf28a679760",
"type": 2
},
{
"bubbleId": "44e4b91b-63ea-417a-8c7f-d19869e64a94",
"type": 2
},
{
"bubbleId": "ba8e8a89-167c-4395-b806-a44da71f63e3",
"type": 2
},
{
"bubbleId": "80047c3d-bb03-4997-9012-548b88d1e08b",
"type": 2
},
{
"bubbleId": "0b33d5f5-2232-4e60-a9c7-59e4f3233f25",
"type": 2
},
{
"bubbleId": "81616664-4ded-4cc4-80cb-1f81bad2905b",
"type": 2
},
{
"bubbleId": "39d9d36c-807e-46ca-b5de-7026665cc83f",
"type": 2
},
{
"bubbleId": "01abb864-c20d-432a-9e25-e7251b4399d4",
"type": 2
},
{
"bubbleId": "b8be988a-493f-405a-a59e-9c95ade420b9",
"type": 2
},
{
"bubbleId": "1f764d2b-116c-4119-b668-dc42a252013f",
"type": 2
},
{
"bubbleId": "d4d8f794-02e7-4401-8f6f-602870ac93b2",
"type": 2
},
{
"bubbleId": "fcf1ee86-023b-4082-8a27-7c9bc2ee8360",
"type": 2
},
{
"bubbleId": "65b3d520-d2be-404a-b676-0e5b6474398b",
"type": 1
},
{
"bubbleId": "3deb7fbc-e860-44b4-9169-992f502676d9",
"type": 2
},
{
"bubbleId": "24acb046-056d-4661-aac9-42903413c320",
"type": 2
},
{
"bubbleId": "363ef7c1-4229-4104-afe6-2db901c29249",
"type": 2
},
{
"bubbleId": "59f21e12-3243-4f97-b757-514f158621ee",
"type": 2
},
{
"bubbleId": "0ae546f5-7695-4f2a-8e5a-4324f230e7b9",
"type": 2
},
{
"bubbleId": "0e44e8ac-97ca-411d-82fc-76eace9e67a5",
"type": 2
},
{
"bubbleId": "2b3e4866-a803-45ca-a364-2c0576437f2a",
"type": 2
},
{
"bubbleId": "786f0896-6b58-4f37-a99d-de99e50a8516",
"type": 2
},
{
"bubbleId": "27bc2554-bf49-42b7-ad42-26377bc38747",
"type": 2
},
{
"bubbleId": "ecca2f7b-0cb2-49ca-b60b-8ed03b0dbde0",
"type": 2
},
{
"bubbleId": "1de8d6eb-58e7-49e6-bb19-8ec6286c80de",
"type": 2
},
{
"bubbleId": "caeef7a9-6686-496c-9a1a-6c2daa53efaa",
"type": 2
},
{
"bubbleId": "562bc13d-3859-4f6b-a41c-5335f80f8cbd",
"type": 2
},
{
"bubbleId": "c5059b7f-c5f0-4733-bf96-526976d49c99",
"type": 2
},
{
"bubbleId": "da7e7e44-38a6-4694-8465-32529bb8ec83",
"type": 2
},
{
"bubbleId": "9a4cae29-2aba-4b9c-9eb9-395a6fa6baea",
"type": 2
},
{
"bubbleId": "3cd43640-406d-4a21-87be-2af16ad359d4",
"type": 2
},
{
"bubbleId": "0740fdb6-398f-4e6e-8633-77fee51ba8df",
"type": 2
},
{
"bubbleId": "8a49fa58-a0b4-4aaa-907b-55427e955bfa",
"type": 1
},
{
"bubbleId": "6e4b213d-3450-452e-852b-17e26814a58e",
"type": 2
},
{
"bubbleId": "16dd1573-a845-41fd-94e5-3a3e356e51a4",
"type": 2
},
{
"bubbleId": "f1300941-ebae-4fdb-9f68-f9fa4bc0347e",
"type": 2
},
{
"bubbleId": "5d64c22f-7ead-42a3-88a9-8e0a02448b52",
"type": 2
},
{
"bubbleId": "c6c5a239-4b60-4952-966b-0af29c57dd97",
"type": 2
},
{
"bubbleId": "7a203755-d651-47aa-9042-04e21b800130",
"type": 2
},
{
"bubbleId": "fb121c21-584e-4623-90e4-45564694d0ef",
"type": 2
},
{
"bubbleId": "a150729c-9d02-4d73-9923-6e7f4455e1c7",
"type": 2
},
{
"bubbleId": "0df87bbc-7de5-4a5b-818f-55692ab75b07",
"type": 2
},
{
"bubbleId": "5200bd63-7845-4efe-ad73-dd3ce5c854f9",
"type": 2
},
{
"bubbleId": "01dc8ae6-1899-4eef-9db4-39b175883ee6",
"type": 2
},
{
"bubbleId": "a40c1a0f-c30c-4b49-a69a-46ace0566b6c",
"type": 2
},
{
"bubbleId": "8688a697-18c7-4fd7-97a4-4cee005145c4",
"type": 2
},
{
"bubbleId": "0863a65e-7d43-4ca9-b7ce-390c14304626",
"type": 2
},
{
"bubbleId": "b8c08cbe-01b3-4f35-aebb-990f3f7afc58",
"type": 2
},
{
"bubbleId": "597fa5ad-43bc-416b-b4c2-cb4e0d34dd68",
"type": 2
},
{
"bubbleId": "fe69c4e1-0757-4ac8-afee-61868a4eecfc",
"type": 2
},
{
"bubbleId": "42dad61a-42c6-4381-9bea-3b876297c79b",
"type": 2
},
{
"bubbleId": "2f43e10a-0b09-4930-a73e-bf826c886128",
"type": 2
},
{
"bubbleId": "8ac48968-3b2a-4d0b-a210-be8c0be38a34",
"type": 2
},
{
"bubbleId": "f9018892-6735-4c7d-8203-6e05f1e9c73f",
"type": 2
},
{
"bubbleId": "d141ecd2-34be-47ed-acce-05ee94db7d54",
"type": 2
},
{
"bubbleId": "09a0f5cb-4ff4-473d-a996-12b95987f83e",
"type": 2
},
{
"bubbleId": "e15af26f-dda6-4b40-b0a4-a99508ce6e68",
"type": 2
},
{
"bubbleId": "c30192bc-d469-44d3-9927-e51f158933d0",
"type": 2
},
{
"bubbleId": "f17ecf76-ad4d-494e-be5d-abba8218aa37",
"type": 2
},
{
"bubbleId": "1fcd44b3-08d6-488e-ba1f-da811fbab618",
"type": 2
},
{
"bubbleId": "9b69680f-ad1d-4891-91e8-206d4eaf13ac",
"type": 2
},
{
"bubbleId": "052d18ba-b3d6-4d04-bcc4-6adcae31374d",
"type": 2
},
{
"bubbleId": "1d32ef4b-6531-4352-8c31-5ab92bf9a7c0",
"type": 2
},
{
"bubbleId": "27fa526f-8ff2-41a4-8284-45fe5e243a8f",
"type": 2
},
{
"bubbleId": "69f11397-9472-4543-9b99-e3ca3eef2486",
"type": 2
},
{
"bubbleId": "91f080e1-ae05-45e7-9670-7e0bf3645d89",
"type": 2
},
{
"bubbleId": "f52b3a6a-b0c6-4f4f-b2af-ce0d8e609614",
"type": 2
},
{
"bubbleId": "989122df-9837-4c8b-8855-6ccbcf79e3f0",
"type": 2
},
{
"bubbleId": "82861b2a-ec22-4d08-81a3-137859757a31",
"type": 2
},
{
"bubbleId": "1ed6d147-e0f8-49d1-8749-19dccb20da2b",
"type": 2
},
{
"bubbleId": "18b63402-d3fc-4d4a-bd48-3e9245a91fb5",
"type": 2
},
{
"bubbleId": "d8c692ac-2edc-4aa2-a9b6-be2b04e562ca",
"type": 2
},
{
"bubbleId": "05f1798c-43db-43ae-a15b-f99fc9d23f17",
"type": 2
},
{
"bubbleId": "d414adf3-7ee7-435c-8b78-0c46849f631d",
"type": 2
},
{
"bubbleId": "af7a8e00-bab3-414b-8ec7-6acdd13976ba",
"type": 2
},
{
"bubbleId": "64282aae-1478-4a67-b48f-02aad0df97c8",
"type": 2
},
{
"bubbleId": "201de9fd-48c4-4297-869a-6e8dbf7bc5a6",
"type": 2
},
{
"bubbleId": "9ce7b099-5ed6-42a6-b906-8b935db181cf",
"type": 2
},
{
"bubbleId": "e681cf92-2a28-44b1-bf26-c8cde20bb567",
"type": 2
},
{
"bubbleId": "ca29443c-766f-42d0-a828-8c6a49703968",
"type": 2
},
{
"bubbleId": "0ced6dd6-39a8-4cb0-9cc9-0a5cefc1a917",
"type": 2
},
{
"bubbleId": "3c7bbd76-f7b6-4bc4-8e23-4c75c2c2f426",
"type": 2
},
{
"bubbleId": "9acde8d4-c9f1-4b26-bdb7-223edfee25dc",
"type": 2
},
{
"bubbleId": "932b242a-a0d7-433b-84f1-28c01b560810",
"type": 2
},
{
"bubbleId": "cf5b77fb-bf38-4c4b-84cf-71c155054cd4",
"type": 2
},
{
"bubbleId": "f8d21844-8448-4247-a088-9bc82a2e2703",
"type": 2
},
{
"bubbleId": "b6c80a63-3e21-4e42-9a2e-018ebef4a60e",
"type": 2
},
{
"bubbleId": "fa817f75-6934-4a99-b521-234a75773ce4",
"type": 2
},
{
"bubbleId": "eeb643a9-cb10-45ba-9950-0bb5fc6d4ccd",
"type": 2
},
{
"bubbleId": "f1cd3b2b-c562-432b-b5ad-ff583356760d",
"type": 2
},
{
"bubbleId": "95c989ab-bbeb-4d48-8cfe-5327a66325d3",
"type": 2
},
{
"bubbleId": "6230a580-ed5f-45d0-9eab-464d5f80440c",
"type": 1
},
{
"bubbleId": "fb7bbe99-55ee-474b-993d-b6576c8f2ec1",
"type": 2
},
{
"bubbleId": "c3882a0b-7864-46fb-a2ca-a672eb35c611",
"type": 2
},
{
"bubbleId": "29d0bbf8-cd22-4139-8223-b7d2a014f7bc",
"type": 1
},
{
"bubbleId": "5c82a965-3072-40dc-adfd-06d11d608d54",
"type": 2
},
{
"bubbleId": "8f4a6844-a9a9-420c-a483-dc6d22c2f8e1",
"type": 2
},
{
"bubbleId": "eb67fab5-c68c-437f-a04c-cdce7f21a4a1",
"type": 2
},
{
"bubbleId": "0a48bbac-7d9f-4814-a481-6f58ced95dee",
"type": 2
},
{
"bubbleId": "bdf18d8a-8765-456c-82d6-455ec61ed316",
"type": 2
},
{
"bubbleId": "32897d5c-aa8f-48d5-b242-056d53e492d3",
"type": 1
},
{
"bubbleId": "58532d64-73fc-4e96-819f-63ed019071c7",
"type": 2
},
{
"bubbleId": "6986a189-0ed7-4ee0-bd67-8df2debe8027",
"type": 2
},
{
"bubbleId": "10e81e25-97ed-4bda-b8d3-2ae23a962ad3",
"type": 2
},
{
"bubbleId": "61dd311b-744e-4278-931d-078d6336f0a5",
"type": 2
},
{
"bubbleId": "217b98d2-0a2d-4838-8b4c-073a3a8186ac",
"type": 2
},
{
"bubbleId": "b5d90051-af3b-44c5-a9ec-e0e3c8f48eae",
"type": 2
},
{
"bubbleId": "dd3c9423-69fc-4ebe-bd21-5d943a1cad03",
"type": 2
},
{
"bubbleId": "7d3b33dc-d999-47ec-a49b-8a1c9ccdb67f",
"type": 2
},
{
"bubbleId": "87852621-1ef3-41bf-ac8a-75b7a69df528",
"type": 2
},
{
"bubbleId": "fc8e1bc3-b79d-4f45-a021-0cdcff7751b1",
"type": 2
},
{
"bubbleId": "6687a2b4-9ff9-4616-a0f4-2d0a86aaf44a",
"type": 2
},
{
"bubbleId": "d3d37396-59d7-451c-8cfa-6c77334a103d",
"type": 2
},
{
"bubbleId": "2f795037-d0a3-4610-879a-7b20ab2a3472",
"type": 2
},
{
"bubbleId": "2e1fe004-9237-4cc6-89a1-94f7e502ced4",
"type": 2
},
{
"bubbleId": "e34d739b-e69f-4337-882b-114ed7b5b7a2",
"type": 2
},
{
"bubbleId": "fdb3ae45-57c2-416c-919c-e9ff040b6b0a",
"type": 2
},
{
"bubbleId": "8b1aa015-42f9-4b26-b3ef-5520ac6352db",
"type": 2
},
{
"bubbleId": "e66abef3-9294-406a-9e57-1afb1a1bed63",
"type": 2
},
{
"bubbleId": "563ad7a1-f067-4c37-9f5c-70c99d53d4d4",
"type": 2
},
{
"bubbleId": "59d29ea9-10be-40d4-b174-9429282ac41a",
"type": 2
},
{
"bubbleId": "78f6eff4-cc52-40cd-a4d8-15d5ee4a727f",
"type": 2
},
{
"bubbleId": "d13ee91c-b57a-4b4e-83b8-5286ce61e1e4",
"type": 2
},
{
"bubbleId": "bd980dac-7fcb-4653-99aa-a02ed70399b7",
"type": 2
},
{
"bubbleId": "c55231c5-9316-47d6-9386-95e78e837dd8",
"type": 2
},
{
"bubbleId": "a5dde56f-2b8c-43ea-8ce7-a368ae493934",
"type": 2
},
{
"bubbleId": "36318875-cec3-4813-9e02-b53c6e2057b4",
"type": 2
},
{
"bubbleId": "e829d7a6-f877-4dc7-97be-7fbcb7ad4cd1",
"type": 2
},
{
"bubbleId": "923ca124-3780-4423-afad-523e0eddc090",
"type": 2
},
{
"bubbleId": "34e4bdc8-94e0-400f-a61d-e93c8af22b58",
"type": 2
},
{
"bubbleId": "910336c9-fb91-4480-b53b-f59b1a502a52",
"type": 2
},
{
"bubbleId": "994b3e86-7b53-480e-a9ae-60e9895ff503",
"type": 2
},
{
"bubbleId": "9ef0a758-2321-43fb-b5ff-2fc211228abe",
"type": 2
},
{
"bubbleId": "8eac5a4c-9362-4e33-84a1-9f8d5934af4b",
"type": 2
},
{
"bubbleId": "4b4271d7-7fea-4153-9c3e-04ec79a312ec",
"type": 2
},
{
"bubbleId": "08ec930c-1cce-4f5b-980b-b96339dc9a45",
"type": 2
},
{
"bubbleId": "b862d8c8-3177-4fcd-8bfe-2962a5e6e541",
"type": 2
},
{
"bubbleId": "38651656-82ba-47bd-ac68-62698f88f572",
"type": 2
},
{
"bubbleId": "0fe19a5f-ef9a-4cdb-8d4e-5f7b3e3c6dc1",
"type": 2
},
{
"bubbleId": "c7106122-1113-44d4-a9ce-af7858a5ad0e",
"type": 2
},
{
"bubbleId": "8bec3dec-8347-46e5-b5d7-d346aa6c531f",
"type": 2
},
{
"bubbleId": "ea22b12c-f284-4d0c-8db6-b2e784842cc5",
"type": 2
},
{
"bubbleId": "a71f8dd2-5a27-4238-8f05-9a143d1330fd",
"type": 2
},
{
"bubbleId": "4a7e1a9d-a36e-4203-b027-b526e80cf350",
"type": 2
},
{
"bubbleId": "55bda90d-7220-4f25-a561-918f7ee6d3ff",
"type": 2
},
{
"bubbleId": "4a75330b-a4bc-41e4-bc1b-1f607c0e04bf",
"type": 2
},
{
"bubbleId": "d9e35740-1d6f-45ac-bfd3-47a78f3c550b",
"type": 2
},
{
"bubbleId": "c0f1203e-d585-4d44-9ab9-3b94bc61562d",
"type": 2
},
{
"bubbleId": "e3e4fc93-6947-4613-8468-2797b17937f2",
"type": 2
},
{
"bubbleId": "c471e112-8f7b-4e87-9b65-53691efe54f4",
"type": 2
},
{
"bubbleId": "add27962-6b25-4f44-83a8-6bb99105295f",
"type": 2
},
{
"bubbleId": "70d63beb-15f6-4145-8e2a-cb190525fe3f",
"type": 2
},
{
"bubbleId": "370a4d61-666c-43e7-9ffc-78cfb48256ba",
"type": 2
},
{
"bubbleId": "668f084c-cad0-4056-8b31-a4fbdd532309",
"type": 2
},
{
"bubbleId": "3d963f2d-d707-4653-8720-7930ab20ac10",
"type": 2
},
{
"bubbleId": "2964c1c4-a2e4-4324-ad21-4d1045ab657d",
"type": 2
},
{
"bubbleId": "28bdbd9f-ac29-44bc-ab21-8138f3f5417c",
"type": 2
},
{
"bubbleId": "5a2f4aef-a82f-4352-9deb-7daeae3604dc",
"type": 2
},
{
"bubbleId": "77592c19-6106-48b4-8847-c0efa765a85e",
"type": 2
},
{
"bubbleId": "fa2adb5a-c458-47ed-aa14-c913ca2d2967",
"type": 2
},
{
"bubbleId": "aaafe98b-c9de-4890-acc3-5e78293fb35e",
"type": 2
},
{
"bubbleId": "ce91b0b8-a728-4643-a546-b74255e157ed",
"type": 2
},
{
"bubbleId": "0571256a-4a60-4368-a004-75f1563783bf",
"type": 2
},
{
"bubbleId": "d39862e0-6163-4f2f-98bd-e93021e84974",
"type": 2
},
{
"bubbleId": "71b4bbe3-cd98-4319-8747-9fbf218816a2",
"type": 2
},
{
"bubbleId": "9d18f5dd-f6d2-4e16-af2e-f75b66976559",
"type": 1
},
{
"bubbleId": "5c5358db-d873-41b8-8af0-c370dbaf3d62",
"type": 2
},
{
"bubbleId": "a7a5b57c-b8a3-46f9-b2c0-6cbe2595b7b3",
"type": 2
},
{
"bubbleId": "65cbda54-af0c-47ae-8d5c-63e4909223eb",
"type": 2
},
{
"bubbleId": "0eb1f1ce-1c64-4fcc-96e9-20e013370ba0",
"type": 2
},
{
"bubbleId": "c72c0421-de87-41fd-aadb-509f9af79ce8",
"type": 2
},
{
"bubbleId": "04e02aa0-0c55-42ba-b01a-8584e0894c92",
"type": 2
},
{
"bubbleId": "19c3df66-9af8-405f-ab07-1a7f5adf2024",
"type": 2
},
{
"bubbleId": "c64edd68-d990-4775-bc61-2f80f4aeac03",
"type": 2
},
{
"bubbleId": "d2286a12-fbc1-4ae6-872c-0db5d1f538f1",
"type": 2
},
{
"bubbleId": "fbf72337-3cb4-4d87-9d62-d16484435afe",
"type": 2
},
{
"bubbleId": "22d8fc2c-5555-4581-aad1-2a5e902f9d4f",
"type": 2
},
{
"bubbleId": "e41dd2b6-6954-41ad-a056-3be6b45f1083",
"type": 2
},
{
"bubbleId": "3f1dcb57-443f-4b5e-b7ff-453313b8544c",
"type": 2
},
{
"bubbleId": "8936b51b-dfb1-49e3-a071-9bb8d6823c2d",
"type": 2
},
{
"bubbleId": "35f59f5b-a2ce-459f-8adb-d428d3282332",
"type": 1
},
{
"bubbleId": "36379ac5-7e12-4043-966b-e2ffe2decd95",
"type": 2
},
{
"bubbleId": "83ebe211-cb8d-432b-8568-f6d74c57d025",
"type": 2
},
{
"bubbleId": "8e049696-0ca1-4c0a-9c4d-3dcee84260d5",
"type": 2
},
{
"bubbleId": "b007061c-abfe-4f7a-bdb5-d6f0638871bf",
"type": 2
},
{
"bubbleId": "41c131df-e3c9-4435-8402-57fe7c2cef13",
"type": 2
},
{
"bubbleId": "58709934-5345-4b4b-be74-182fcc8f7fee",
"type": 2
},
{
"bubbleId": "f1b79567-0a31-4698-9df1-4f96a485e2fa",
"type": 1
},
{
"bubbleId": "15234697-a23d-46fb-a98c-f874571de4c0",
"type": 2
},
{
"bubbleId": "cb49e460-ea05-46fa-984a-313814758298",
"type": 2
},
{
"bubbleId": "4850abaf-7c62-4693-a8d3-6cf82f027e03",
"type": 2
},
{
"bubbleId": "a36c2f49-61c9-423a-8cd0-ad5bd510cc24",
"type": 2
},
{
"bubbleId": "5298e8bb-7f8c-438b-83cb-5eeb2973105a",
"type": 2
},
{
"bubbleId": "0210ac7f-292d-42b2-8357-d7f719d298ff",
"type": 2
},
{
"bubbleId": "5c599745-b41f-4abe-a23c-ec32c2140683",
"type": 2
},
{
"bubbleId": "59629c15-f7ee-4723-bfb9-490ad654618e",
"type": 2
},
{
"bubbleId": "df1c2a22-22fd-42c6-93bb-23f0dde79850",
"type": 2
},
{
"bubbleId": "275652b0-49a6-4a7f-9b48-9270792e7001",
"type": 2
},
{
"bubbleId": "1ae54425-c5c1-465e-8c14-d399bd0bc006",
"type": 2
},
{
"bubbleId": "5db6f8c5-7c41-4c38-9510-92f926219769",
"type": 2
},
{
"bubbleId": "90d77ed1-2053-4cc6-b880-b6fb7d268c99",
"type": 2
},
{
"bubbleId": "79ceb8fb-7b94-41c7-bb79-8117fd821b05",
"type": 2
},
{
"bubbleId": "06d01eed-6997-4e01-b11c-4968309bb1db",
"type": 2
},
{
"bubbleId": "f6a288af-b43c-4bc8-bec5-6a849a033558",
"type": 1
},
{
"bubbleId": "bfc207f0-52d5-41d9-8007-f900b1b3ce6b",
"type": 2
},
{
"bubbleId": "038e3aa0-72aa-4c6e-b3c8-fd8de2c57231",
"type": 2
},
{
"bubbleId": "434020a1-0152-4c8f-87ef-2293679971a3",
"type": 1
},
{
"bubbleId": "d9d13b3f-c49c-4d50-8535-34f0d3cecac0",
"type": 2
},
{
"bubbleId": "470fe350-8092-48f0-a049-820b676065ae",
"type": 2
},
{
"bubbleId": "73dd178e-9de7-4293-ad6a-01c42f12457a",
"type": 1
},
{
"bubbleId": "5436460a-568d-4625-98af-891d3cb70c96",
"type": 2
},
{
"bubbleId": "3e023165-3c06-4f9d-9639-dab767c8d5eb",
"type": 2
},
{
"bubbleId": "93ddd2ff-d6e0-4b31-ab61-d5c222898443",
"type": 2
},
{
"bubbleId": "5cf6b036-e1e7-4990-97a2-cb037ac67092",
"type": 2
},
{
"bubbleId": "31c232a2-5237-4df6-844c-10cb7819999f",
"type": 2
},
{
"bubbleId": "da03b55e-9632-4590-9e65-4d1bd0bb2e4e",
"type": 1
},
{
"bubbleId": "c4f2b1f7-b4c5-48f0-9330-f3270e85216a",
"type": 2
},
{
"bubbleId": "659056c0-a2f8-4c1c-bdd1-706d78e8d45a",
"type": 1
},
{
"bubbleId": "4a8987af-930b-4a1c-b9e0-d9b959dac358",
"type": 2
},
{
"bubbleId": "47054a7e-1ff1-4212-95fc-1092626787d1",
"type": 2
},
{
"bubbleId": "7a4cddae-4a77-42fe-a8db-4d9fcde3b579",
"type": 1
},
{
"bubbleId": "c8f05584-3ceb-4740-9b7f-98776c0beb94",
"type": 2
},
{
"bubbleId": "c895fe86-03b2-4b5b-b2be-8b7ab83d276d",
"type": 2
},
{
"bubbleId": "6dbf9f47-e0be-4799-8274-3661c5482fab",
"type": 1
},
{
"bubbleId": "159e0798-4aaf-45fa-9b33-28777601c65f",
"type": 2
},
{
"bubbleId": "a46f3e2c-b6c3-4dde-acfc-28c3efe5177b",
"type": 2
},
{
"bubbleId": "07812967-f1f8-4c57-8be1-49aa12789943",
"type": 2
},
{
"bubbleId": "896264ab-bdf5-4e4a-b919-758def99d019",
"type": 2
},
{
"bubbleId": "ba7b6c38-6f9c-4450-8b3c-daf9fa9e964d",
"type": 2
},
{
"bubbleId": "84541d01-caa1-4c12-b417-85870e5b5c20",
"type": 1
},
{
"bubbleId": "b4a7491d-092d-4d0c-80d3-eefec4ef21d2",
"type": 2
},
{
"bubbleId": "dd0fa6eb-ada7-494f-8d7a-989f201b852a",
"type": 2
},
{
"bubbleId": "50f7c060-ba26-4838-b783-3a75619a57e4",
"type": 1
},
{
"bubbleId": "0f8ec80a-291e-46dd-8a31-93e5648f2fb2",
"type": 2
},
{
"bubbleId": "dd08c2af-db58-469f-bc1b-2a1e41ef4c14",
"type": 2
},
{
"bubbleId": "4d7d2520-54c7-4e04-b215-f5ec6b3bc6b7",
"type": 2
},
{
"bubbleId": "6423dd93-2684-42dc-b842-7f0c90b5049c",
"type": 2
},
{
"bubbleId": "0b8c723e-810d-4cca-a52c-6d1eb55372c1",
"type": 2
},
{
"bubbleId": "64e7ea43-aaaa-4a1a-aa68-8759a7ea812f",
"type": 1
},
{
"bubbleId": "7c63b44f-4787-44cb-a080-e998c52e4f4a",
"type": 2
},
{
"bubbleId": "3ad9cda0-dfa9-452d-a922-b810abfcb4f7",
"type": 2
},
{
"bubbleId": "a6120a34-611d-4618-b84b-8b04574f47a6",
"type": 1
},
{
"bubbleId": "259573ed-0bc2-463f-9ffc-e0d4104514a7",
"type": 2
},
{
"bubbleId": "02480c59-98f4-4158-85c2-cf2697443938",
"type": 1
},
{
"bubbleId": "b81dc6e6-361f-4b05-bfd4-ea5ce40afa0a",
"type": 2
},
{
"bubbleId": "afed65e1-1d0d-4d06-8b13-8aae56c8fc9e",
"type": 2
},
{
"bubbleId": "083f76d2-a306-4c03-9093-5f0b0e163105",
"type": 1
},
{
"bubbleId": "6fbd1c3c-e172-400f-9d66-37b47b5684d2",
"type": 2
},
{
"bubbleId": "a373603d-a841-48da-bb68-275951fe2f10",
"type": 1
},
{
"bubbleId": "60ba2fed-1b5b-4418-98f6-ded7389cb048",
"type": 2
},
{
"bubbleId": "3305e962-bf7d-42cf-87f6-a04a47674ef7",
"type": 1
},
{
"bubbleId": "f18d6b0c-759d-4719-b918-7462a1fc111f",
"type": 2
},
{
"bubbleId": "522dfe9c-c132-459e-a55e-3ddf87c961c0",
"type": 2
},
{
"bubbleId": "69044e7b-6ebc-4730-9886-2b8199923a69",
"type": 2
},
{
"bubbleId": "13f67328-c8f5-4e83-baf1-ec5407a2eead",
"type": 1
},
{
"bubbleId": "80f3f0c6-2858-485f-867e-c96863558ca7",
"type": 2
},
{
"bubbleId": "c2a9ad32-deb5-413e-bb23-7344f7c291c9",
"type": 2
}
],
"conversationMap": {},
"status": "completed",
"context": {
"composers": [],
"selectedCommits": [],
"selectedPullRequests": [],
"selectedImages": [],
"folderSelections": [],
"fileSelections": [],
"selections": [],
"terminalSelections": [],
"selectedDocs": [],
"externalLinks": [],
"cursorRules": [],
"cursorCommands": [],
"gitPRDiffSelections": [],
"subagentSelections": [],
"browserSelections": [],
"mentions": {
"composers": {},
"selectedCommits": {},
"selectedPullRequests": {},
"gitDiff": [],
"gitDiffFromBranchToMain": [],
"selectedImages": {},
"folderSelections": {
"{\"relativePath\":\"common/custom-admission-policy\",\"addedWithoutMention\":false}": [],
"{\"relativePath\":\"common/prometheus-remote-write\",\"addedWithoutMention\":false}": []
},
"fileSelections": {
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/prod/templates/collector/configmap.yaml": [],
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/deckhouse-modules/namespace-configurator/templates/namespace-configurator.yaml": []
},
"terminalFiles": {},
"selections": {
"{\"uri\":\"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/prod/values/values-global.yaml\",\"range\":{\"selectionStartLineNumber\":260,\"selectionStartColumn\":1,\"positionLineNumber\":261,\"positionColumn\":28},\"text\":\"```yaml\\nrefreshIntervalSeconds: 120\\nrequestTimeoutSeconds: 30\\n```\"}": [
{
"uuid": "1a322d10-569e-4415-b536-fa2b699a244b"
}
],
"{\"uri\":\"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/stage/values/values-global.yaml\",\"range\":{\"selectionStartLineNumber\":665,\"selectionStartColumn\":1,\"positionLineNumber\":670,\"positionColumn\":18},\"text\":\"```yaml\\ncompliance:\\n # -- failEntriesLimit the flag to limit the number of fail entries per control check in the cluster compliance detail report\\n # this limit is for preventing the report from being too large per control checks\\n failEntriesLimit: 10\\n # -- reportType this flag control the type of report generated (summary or all)\\n reportType: all\\n```\"}": [
{
"uuid": "280d857d-5761-4afd-9953-8e8bef43c7a6"
}
],
"{\"uri\":\"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/prod/templates/report-metrics-remote-write.yaml\",\"range\":{\"selectionStartLineNumber\":6,\"selectionStartColumn\":1,\"positionLineNumber\":7,\"positionColumn\":1},\"text\":\"```yaml\\nname: {{ default (printf \\\"%s-remote-write\\\" (include \\\"trivy-operator.reportMetricsName\\\" .)) .Values.reportMetrics.remoteWrite.name | trunc 63 | trimSuffix \\\"-\\\" }}\\n\\n```\"}": [
{
"uuid": "c6193e86-dc28-4bb1-acb2-90a933bc9f10"
}
],
"{\"uri\":\"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/prod/dashboards/trivy-crd-shared-dashboard.json\",\"range\":{\"selectionStartLineNumber\":2,\"selectionStartColumn\":1,\"positionLineNumber\":11,\"positionColumn\":5},\"text\":\"```json\\n\\\"__inputs\\\": [\\n {\\n \\\"name\\\": \\\"DS_MAIN\\\",\\n \\\"label\\\": \\\"main\\\",\\n \\\"description\\\": \\\"\\\",\\n \\\"type\\\": \\\"datasource\\\",\\n \\\"pluginId\\\": \\\"prometheus\\\",\\n \\\"pluginName\\\": \\\"Prometheus\\\"\\n }\\n],\\n```\"}": [
{
"uuid": "3ed9d8a5-9f83-4395-a18c-8ee4504bdcbf"
}
],
"{\"uri\":\"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/prod/dashboards/trivy-crd-shared-dashboard.json\",\"range\":{\"selectionStartLineNumber\":1,\"selectionStartColumn\":1,\"positionLineNumber\":1736,\"positionColumn\":1},\"text\":\"```json\\n{\\n \\\"__inputs\\\": [],\\n \\\"__elements\\\": {},\\n \\\"__requires\\\": [\\n {\\n \\\"type\\\": \\\"grafana\\\",\\n \\\"id\\\": \\\"grafana\\\",\\n \\\"name\\\": \\\"Grafana\\\",\\n \\\"version\\\": \\\"10.4.15\\\"\\n },\\n {\\n \\\"type\\\": \\\"datasource\\\",\\n \\\"id\\\": \\\"prometheus\\\",\\n \\\"name\\\": \\\"Prometheus\\\",\\n \\\"version\\\": \\\"1.0.0\\\"\\n },\\n {\\n \\\"type\\\": \\\"panel\\\",\\n \\\"id\\\": \\\"stat\\\",\\n \\\"name\\\": \\\"Stat\\\",\\n \\\"version\\\": \\\"\\\"\\n },\\n {\\n \\\"type\\\": \\\"panel\\\",\\n \\\"id\\\": \\\"table\\\",\\n \\\"name\\\": \\\"Table\\\",\\n \\\"version\\\": \\\"\\\"\\n },\\n {\\n \\\"type\\\": \\\"panel\\\",\\n \\\"id\\\": \\\"row\\\",\\n \\\"name\\\": \\\"Row\\\",\\n \\\"version\\\": \\\"\\\"\\n }\\n ],\\n \\\"annotations\\\": {\\n \\\"list\\\": [\\n {\\n \\\"builtIn\\\": 1,\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"datasource\\\",\\n \\\"uid\\\": \\\"grafana\\\"\\n },\\n \\\"enable\\\": true,\\n \\\"hide\\\": true,\\n \\\"iconColor\\\": \\\"rgba(0, 211, 255, 1)\\\",\\n \\\"name\\\": \\\"Annotations & Alerts\\\",\\n \\\"target\\\": {\\n \\\"limit\\\": 100,\\n \\\"matchAny\\\": false,\\n \\\"tags\\\": [],\\n \\\"type\\\": \\\"dashboard\\\"\\n },\\n \\\"type\\\": \\\"dashboard\\\"\\n }\\n ]\\n },\\n \\\"editable\\\": true,\\n \\\"fiscalYearStartMonth\\\": 0,\\n \\\"graphTooltip\\\": 0,\\n \\\"id\\\": null,\\n \\\"links\\\": [],\\n \\\"liveNow\\\": false,\\n \\\"panels\\\": [\\n {\\n \\\"collapsed\\\": false,\\n \\\"gridPos\\\": {\\n \\\"h\\\": 1,\\n \\\"w\\\": 24,\\n \\\"x\\\": 0,\\n \\\"y\\\": 0\\n },\\n \\\"id\\\": 1,\\n \\\"panels\\\": [],\\n \\\"title\\\": \\\"Cluster Compliance\\\",\\n \\\"type\\\": \\\"row\\\",\\n \\\"description\\\": \\\"\\\\u041a\\\\u043b\\\\u044e\\\\u0447\\\\u0435\\\\u0432\\\\u044b\\\\u0435 \\\\u0430\\\\u0433\\\\u0440\\\\u0435\\\\u0433\\\\u0430\\\\u0442\\\\u044b compliance \\\\u043f\\\\u043e \\\\u0432\\\\u044b\\\\u0431\\\\u0440\\\\u0430\\\\u043d\\\\u043d\\\\u044b\\\\u043c benchmark: fail, pass, score \\\\u0438 \\\\u0432\\\\u043e\\\\u0437\\\\u0440\\\\u0430\\\\u0441\\\\u0442 \\\\u043f\\\\u043e\\\\u0441\\\\u043b\\\\u0435\\\\u0434\\\\u043d\\\\u0435\\\\u0433\\\\u043e \\\\u043e\\\\u0442\\\\u0447\\\\u0435\\\\u0442\\\\u0430.\\\"\\n },\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"fieldConfig\\\": {\\n \\\"defaults\\\": {\\n \\\"color\\\": {\\n \\\"mode\\\": \\\"thresholds\\\"\\n },\\n \\\"thresholds\\\": {\\n \\\"mode\\\": \\\"absolute\\\",\\n \\\"steps\\\": [\\n {\\n \\\"color\\\": \\\"green\\\",\\n \\\"value\\\": null\\n },\\n {\\n \\\"color\\\": \\\"red\\\",\\n \\\"value\\\": 1\\n }\\n ]\\n }\\n },\\n \\\"overrides\\\": []\\n },\\n \\\"gridPos\\\": {\\n \\\"h\\\": 4,\\n \\\"w\\\": 6,\\n \\\"x\\\": 0,\\n \\\"y\\\": 1\\n },\\n \\\"id\\\": 2,\\n \\\"options\\\": {\\n \\\"colorMode\\\": \\\"value\\\",\\n \\\"graphMode\\\": \\\"none\\\",\\n \\\"justifyMode\\\": \\\"auto\\\",\\n \\\"orientation\\\": \\\"auto\\\",\\n \\\"reduceOptions\\\": {\\n \\\"calcs\\\": [\\n \\\"lastNotNull\\\"\\n ],\\n \\\"fields\\\": \\\"\\\",\\n \\\"values\\\": false\\n },\\n \\\"showPercentChange\\\": false,\\n \\\"textMode\\\": \\\"auto\\\",\\n \\\"wideLayout\\\": true\\n },\\n \\\"pluginVersion\\\": \\\"10.4.15\\\",\\n \\\"targets\\\": [\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"editorMode\\\": \\\"code\\\",\\n \\\"expr\\\": \\\"sum(trivy_cluster_compliance_fail_count{k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"})\\\",\\n \\\"instant\\\": true,\\n \\\"legendFormat\\\": \\\"__auto\\\",\\n \\\"refId\\\": \\\"A\\\"\\n }\\n ],\\n \\\"title\\\": \\\"Compliance: Failed Checks\\\",\\n \\\"type\\\": \\\"stat\\\",\\n \\\"description\\\": \\\"\\\\u041e\\\\u0431\\\\u0449\\\\u0435\\\\u0435 \\\\u0447\\\\u0438\\\\u0441\\\\u043b\\\\u043e \\\\u043f\\\\u0440\\\\u043e\\\\u0432\\\\u0430\\\\u043b\\\\u0435\\\\u043d\\\\u043d\\\\u044b\\\\u0445 compliance-checks \\\\u0432 \\\\u0442\\\\u0435\\\\u043a\\\\u0443\\\\u0449\\\\u0435\\\\u043c \\\\u0444\\\\u0438\\\\u043b\\\\u044c\\\\u0442\\\\u0440\\\\u0435 benchmark.\\\"\\n },\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"fieldConfig\\\": {\\n \\\"defaults\\\": {\\n \\\"color\\\": {\\n \\\"mode\\\": \\\"thresholds\\\"\\n },\\n \\\"thresholds\\\": {\\n \\\"mode\\\": \\\"absolute\\\",\\n \\\"steps\\\": [\\n {\\n \\\"color\\\": \\\"red\\\",\\n \\\"value\\\": null\\n },\\n {\\n \\\"color\\\": \\\"green\\\",\\n \\\"value\\\": 1\\n }\\n ]\\n }\\n },\\n \\\"overrides\\\": []\\n },\\n \\\"gridPos\\\": {\\n \\\"h\\\": 4,\\n \\\"w\\\": 6,\\n \\\"x\\\": 6,\\n \\\"y\\\": 1\\n },\\n \\\"id\\\": 3,\\n \\\"options\\\": {\\n \\\"colorMode\\\": \\\"value\\\",\\n \\\"graphMode\\\": \\\"none\\\",\\n \\\"justifyMode\\\": \\\"auto\\\",\\n \\\"orientation\\\": \\\"auto\\\",\\n \\\"reduceOptions\\\": {\\n \\\"calcs\\\": [\\n \\\"lastNotNull\\\"\\n ],\\n \\\"fields\\\": \\\"\\\",\\n \\\"values\\\": false\\n },\\n \\\"showPercentChange\\\": false,\\n \\\"textMode\\\": \\\"auto\\\",\\n \\\"wideLayout\\\": true\\n },\\n \\\"pluginVersion\\\": \\\"10.4.15\\\",\\n \\\"targets\\\": [\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"editorMode\\\": \\\"code\\\",\\n \\\"expr\\\": \\\"sum(trivy_cluster_compliance_pass_count{k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"})\\\",\\n \\\"instant\\\": true,\\n \\\"legendFormat\\\": \\\"__auto\\\",\\n \\\"refId\\\": \\\"A\\\"\\n }\\n ],\\n \\\"title\\\": \\\"Compliance: Passed Checks\\\",\\n \\\"type\\\": \\\"stat\\\",\\n \\\"description\\\": \\\"\\\\u041e\\\\u0431\\\\u0449\\\\u0435\\\\u0435 \\\\u0447\\\\u0438\\\\u0441\\\\u043b\\\\u043e \\\\u0443\\\\u0441\\\\u043f\\\\u0435\\\\u0448\\\\u043d\\\\u043e \\\\u043f\\\\u0440\\\\u043e\\\\u0439\\\\u0434\\\\u0435\\\\u043d\\\\u043d\\\\u044b\\\\u0445 compliance-checks \\\\u0432 \\\\u0442\\\\u0435\\\\u043a\\\\u0443\\\\u0449\\\\u0435\\\\u043c \\\\u0444\\\\u0438\\\\u043b\\\\u044c\\\\u0442\\\\u0440\\\\u0435 benchmark.\\\"\\n },\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"fieldConfig\\\": {\\n \\\"defaults\\\": {\\n \\\"color\\\": {\\n \\\"mode\\\": \\\"thresholds\\\"\\n },\\n \\\"decimals\\\": 2,\\n \\\"unit\\\": \\\"percent\\\",\\n \\\"thresholds\\\": {\\n \\\"mode\\\": \\\"absolute\\\",\\n \\\"steps\\\": [\\n {\\n \\\"color\\\": \\\"red\\\",\\n \\\"value\\\": null\\n },\\n {\\n \\\"color\\\": \\\"yellow\\\",\\n \\\"value\\\": 80\\n },\\n {\\n \\\"color\\\": \\\"green\\\",\\n \\\"value\\\": 95\\n }\\n ]\\n }\\n },\\n \\\"overrides\\\": []\\n },\\n \\\"gridPos\\\": {\\n \\\"h\\\": 4,\\n \\\"w\\\": 6,\\n \\\"x\\\": 12,\\n \\\"y\\\": 1\\n },\\n \\\"id\\\": 4,\\n \\\"options\\\": {\\n \\\"colorMode\\\": \\\"value\\\",\\n \\\"graphMode\\\": \\\"none\\\",\\n \\\"justifyMode\\\": \\\"auto\\\",\\n \\\"orientation\\\": \\\"auto\\\",\\n \\\"reduceOptions\\\": {\\n \\\"calcs\\\": [\\n \\\"lastNotNull\\\"\\n ],\\n \\\"fields\\\": \\\"\\\",\\n \\\"values\\\": false\\n },\\n \\\"showPercentChange\\\": false,\\n \\\"textMode\\\": \\\"auto\\\",\\n \\\"wideLayout\\\": true\\n },\\n \\\"pluginVersion\\\": \\\"10.4.15\\\",\\n \\\"targets\\\": [\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"editorMode\\\": \\\"code\\\",\\n \\\"expr\\\": \\\"100 * sum(trivy_cluster_compliance_pass_count{k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"}) / clamp_min(sum(trivy_cluster_compliance_pass_count{k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"}) + sum(trivy_cluster_compliance_fail_count{k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"}), 1)\\\",\\n \\\"instant\\\": true,\\n \\\"legendFormat\\\": \\\"__auto\\\",\\n \\\"refId\\\": \\\"A\\\"\\n }\\n ],\\n \\\"title\\\": \\\"Compliance: Score\\\",\\n \\\"type\\\": \\\"stat\\\",\\n \\\"description\\\": \\\"\\\\u0418\\\\u0442\\\\u043e\\\\u0433\\\\u043e\\\\u0432\\\\u044b\\\\u0439 \\\\u043f\\\\u0440\\\\u043e\\\\u0446\\\\u0435\\\\u043d\\\\u0442 \\\\u043f\\\\u0440\\\\u043e\\\\u0445\\\\u043e\\\\u0436\\\\u0434\\\\u0435\\\\u043d\\\\u0438\\\\u044f compliance: pass / (pass + fail) * 100.\\\"\\n },\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"fieldConfig\\\": {\\n \\\"defaults\\\": {\\n \\\"color\\\": {\\n \\\"mode\\\": \\\"thresholds\\\"\\n },\\n \\\"decimals\\\": 0,\\n \\\"unit\\\": \\\"s\\\",\\n \\\"thresholds\\\": {\\n \\\"mode\\\": \\\"absolute\\\",\\n \\\"steps\\\": [\\n {\\n \\\"color\\\": \\\"green\\\",\\n \\\"value\\\": null\\n },\\n {\\n \\\"color\\\": \\\"yellow\\\",\\n \\\"value\\\": 21600\\n },\\n {\\n \\\"color\\\": \\\"red\\\",\\n \\\"value\\\": 43200\\n }\\n ]\\n }\\n },\\n \\\"overrides\\\": []\\n },\\n \\\"gridPos\\\": {\\n \\\"h\\\": 4,\\n \\\"w\\\": 6,\\n \\\"x\\\": 18,\\n \\\"y\\\": 1\\n },\\n \\\"id\\\": 5,\\n \\\"options\\\": {\\n \\\"colorMode\\\": \\\"value\\\",\\n \\\"graphMode\\\": \\\"none\\\",\\n \\\"justifyMode\\\": \\\"auto\\\",\\n \\\"orientation\\\": \\\"auto\\\",\\n \\\"reduceOptions\\\": {\\n \\\"calcs\\\": [\\n \\\"lastNotNull\\\"\\n ],\\n \\\"fields\\\": \\\"\\\",\\n \\\"values\\\": false\\n },\\n \\\"showPercentChange\\\": false,\\n \\\"textMode\\\": \\\"auto\\\",\\n \\\"wideLayout\\\": true\\n },\\n \\\"pluginVersion\\\": \\\"10.4.15\\\",\\n \\\"targets\\\": [\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"editorMode\\\": \\\"code\\\",\\n \\\"expr\\\": \\\"time() - max(trivy_cluster_compliance_updated{k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"})\\\",\\n \\\"instant\\\": true,\\n \\\"legendFormat\\\": \\\"__auto\\\",\\n \\\"refId\\\": \\\"A\\\"\\n }\\n ],\\n \\\"title\\\": \\\"Compliance: Last Report Age\\\",\\n \\\"type\\\": \\\"stat\\\",\\n \\\"description\\\": \\\"\\\\u0412\\\\u043e\\\\u0437\\\\u0440\\\\u0430\\\\u0441\\\\u0442 \\\\u043f\\\\u043e\\\\u0441\\\\u043b\\\\u0435\\\\u0434\\\\u043d\\\\u0435\\\\u0433\\\\u043e \\\\u043e\\\\u0431\\\\u043d\\\\u043e\\\\u0432\\\\u043b\\\\u0435\\\\u043d\\\\u0438\\\\u044f compliance-\\\\u043e\\\\u0442\\\\u0447\\\\u0435\\\\u0442\\\\u0430 \\\\u0432 \\\\u0447\\\\u0430\\\\u0441\\\\u0430\\\\u0445; \\\\u0440\\\\u043e\\\\u0441\\\\u0442 \\\\u0437\\\\u043d\\\\u0430\\\\u0447\\\\u0435\\\\u043d\\\\u0438\\\\u044f \\\\u043e\\\\u0437\\\\u043d\\\\u0430\\\\u0447\\\\u0430\\\\u0435\\\\u0442 \\\\u0443\\\\u0441\\\\u0442\\\\u0430\\\\u0440\\\\u0435\\\\u0432\\\\u0448\\\\u0438\\\\u0435 \\\\u0434\\\\u0430\\\\u043d\\\\u043d\\\\u044b\\\\u0435.\\\"\\n },\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"fieldConfig\\\": {\\n \\\"defaults\\\": {\\n \\\"custom\\\": {\\n \\\"align\\\": \\\"auto\\\",\\n \\\"cellOptions\\\": {\\n \\\"type\\\": \\\"auto\\\"\\n },\\n \\\"filterable\\\": true,\\n \\\"inspect\\\": false\\n }\\n },\\n \\\"overrides\\\": []\\n },\\n \\\"gridPos\\\": {\\n \\\"h\\\": 6,\\n \\\"w\\\": 24,\\n \\\"x\\\": 0,\\n \\\"y\\\": 5\\n },\\n \\\"id\\\": 6,\\n \\\"options\\\": {\\n \\\"cellHeight\\\": \\\"sm\\\",\\n \\\"footer\\\": {\\n \\\"show\\\": false\\n },\\n \\\"showHeader\\\": true,\\n \\\"sortBy\\\": [\\n {\\n \\\"desc\\\": true,\\n \\\"displayName\\\": \\\"Value\\\"\\n }\\n ],\\n \\\"columnFilter\\\": true\\n },\\n \\\"pluginVersion\\\": \\\"10.4.15\\\",\\n \\\"targets\\\": [\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"editorMode\\\": \\\"code\\\",\\n \\\"expr\\\": \\\"sort_desc(sum by (benchmark) (trivy_cluster_compliance_fail_count{k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"}))\\\",\\n \\\"format\\\": \\\"table\\\",\\n \\\"instant\\\": true,\\n \\\"refId\\\": \\\"A\\\"\\n }\\n ],\\n \\\"transformations\\\": [\\n {\\n \\\"id\\\": \\\"organize\\\",\\n \\\"options\\\": {\\n \\\"excludeByName\\\": {\\n \\\"Time\\\": true\\n },\\n \\\"indexByName\\\": {\\n \\\"benchmark\\\": 0,\\n \\\"Value\\\": 1\\n },\\n \\\"renameByName\\\": {\\n \\\"benchmark\\\": \\\"Framework\\\",\\n \\\"Value\\\": \\\"Failed Checks\\\"\\n }\\n }\\n }\\n ],\\n \\\"title\\\": \\\"Compliance: Failed Checks by Framework\\\",\\n \\\"type\\\": \\\"table\\\",\\n \\\"description\\\": \\\"\\\\u0421\\\\u0440\\\\u0430\\\\u0432\\\\u043d\\\\u0435\\\\u043d\\\\u0438\\\\u0435 \\\\u043a\\\\u043e\\\\u043b\\\\u0438\\\\u0447\\\\u0435\\\\u0441\\\\u0442\\\\u0432\\\\u0430 \\\\u043f\\\\u0440\\\\u043e\\\\u0432\\\\u0430\\\\u043b\\\\u043e\\\\u0432 \\\\u043f\\\\u043e framework (benchmark) \\\\u0434\\\\u043b\\\\u044f \\\\u043f\\\\u0440\\\\u0438\\\\u043e\\\\u0440\\\\u0438\\\\u0442\\\\u0438\\\\u0437\\\\u0430\\\\u0446\\\\u0438\\\\u0438 \\\\u0440\\\\u0430\\\\u0431\\\\u043e\\\\u0442.\\\"\\n },\\n {\\n \\\"collapsed\\\": false,\\n \\\"description\\\": \\\"\\\\u0414\\\\u0435\\\\u0442\\\\u0430\\\\u043b\\\\u0438\\\\u0437\\\\u0430\\\\u0446\\\\u0438\\\\u044f \\\\u043f\\\\u0440\\\\u043e\\\\u0432\\\\u0430\\\\u043b\\\\u0435\\\\u043d\\\\u043d\\\\u044b\\\\u0445 \\\\u043a\\\\u043e\\\\u043d\\\\u0442\\\\u0440\\\\u043e\\\\u043b\\\\u043e\\\\u0432 \\\\u0441 \\\\u0444\\\\u043e\\\\u043a\\\\u0443\\\\u0441\\\\u043e\\\\u043c \\\\u043d\\\\u0430 impact: fails \\\\u0438 \\\\u0434\\\\u043e\\\\u043b\\\\u044f \\\\u043e\\\\u0442 \\\\u043e\\\\u0431\\\\u0449\\\\u0435\\\\u0433\\\\u043e \\\\u043a\\\\u043e\\\\u043b\\\\u0438\\\\u0447\\\\u0435\\\\u0441\\\\u0442\\\\u0432\\\\u0430 fail.\\\",\\n \\\"gridPos\\\": {\\n \\\"h\\\": 1,\\n \\\"w\\\": 24,\\n \\\"x\\\": 0,\\n \\\"y\\\": 11\\n },\\n \\\"id\\\": 48,\\n \\\"panels\\\": [],\\n \\\"title\\\": \\\"Control Drilldown\\\",\\n \\\"type\\\": \\\"row\\\"\\n },\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"description\\\": \\\"\\\\u0415\\\\u0434\\\\u0438\\\\u043d\\\\u0430\\\\u044f \\\\u043f\\\\u043e\\\\u0434\\\\u0440\\\\u043e\\\\u0431\\\\u043d\\\\u0430\\\\u044f \\\\u0442\\\\u0430\\\\u0431\\\\u043b\\\\u0438\\\\u0446\\\\u0430 \\\\u043f\\\\u0440\\\\u043e\\\\u0432\\\\u0430\\\\u043b\\\\u0435\\\\u043d\\\\u043d\\\\u044b\\\\u0445 compliance-checks \\\\u0441 \\\\u043a\\\\u043e\\\\u043d\\\\u043a\\\\u0440\\\\u0435\\\\u0442\\\\u043d\\\\u044b\\\\u043c target/\\\\u0440\\\\u0435\\\\u0441\\\\u0443\\\\u0440\\\\u0441\\\\u043e\\\\u043c.\\\",\\n \\\"fieldConfig\\\": {\\n \\\"defaults\\\": {\\n \\\"custom\\\": {\\n \\\"align\\\": \\\"auto\\\",\\n \\\"cellOptions\\\": {\\n \\\"type\\\": \\\"auto\\\"\\n },\\n \\\"filterable\\\": true,\\n \\\"inspect\\\": false\\n }\\n },\\n \\\"overrides\\\": []\\n },\\n \\\"gridPos\\\": {\\n \\\"h\\\": 22,\\n \\\"w\\\": 24,\\n \\\"x\\\": 0,\\n \\\"y\\\": 12\\n },\\n \\\"id\\\": 49,\\n \\\"options\\\": {\\n \\\"cellHeight\\\": \\\"sm\\\",\\n \\\"footer\\\": {\\n \\\"show\\\": false\\n },\\n \\\"showHeader\\\": true,\\n \\\"sortBy\\\": [\\n {\\n \\\"desc\\\": true,\\n \\\"displayName\\\": \\\"Fails\\\"\\n }\\n ],\\n \\\"columnFilter\\\": true\\n },\\n \\\"pluginVersion\\\": \\\"10.4.15\\\",\\n \\\"targets\\\": [\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"editorMode\\\": \\\"code\\\",\\n \\\"expr\\\": \\\"sort_desc(sum by (benchmark, control_id, control_name, control_severity, check_id, check_title, check_target, check_namespace, resource_kind, resource_name) (trivy_cluster_compliance_fail_check_total{k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"}))\\\",\\n \\\"format\\\": \\\"table\\\",\\n \\\"instant\\\": true,\\n \\\"refId\\\": \\\"A\\\"\\n }\\n ],\\n \\\"title\\\": \\\"Compliance: Fail Checks Drilldown (Detailed)\\\",\\n \\\"type\\\": \\\"table\\\",\\n \\\"transformations\\\": [\\n {\\n \\\"id\\\": \\\"organize\\\",\\n \\\"options\\\": {\\n \\\"excludeByName\\\": {\\n \\\"Time\\\": true,\\n \\\"benchmark_id\\\": true,\\n \\\"benchmark_type\\\": true,\\n \\\"benchmark_version\\\": true,\\n \\\"customresource_group\\\": true,\\n \\\"customresource_kind\\\": true,\\n \\\"customresource_version\\\": true,\\n \\\"instance\\\": true,\\n \\\"job\\\": true,\\n \\\"name\\\": true,\\n \\\"namespace\\\": true,\\n \\\"pod\\\": true,\\n \\\"service\\\": true\\n },\\n \\\"indexByName\\\": {\\n \\\"benchmark\\\": 0,\\n \\\"control_id\\\": 1,\\n \\\"control_name\\\": 2,\\n \\\"control_severity\\\": 3,\\n \\\"check_id\\\": 4,\\n \\\"check_title\\\": 5,\\n \\\"check_target\\\": 6,\\n \\\"check_namespace\\\": 7,\\n \\\"resource_kind\\\": 8,\\n \\\"resource_name\\\": 9,\\n \\\"Value\\\": 10\\n },\\n \\\"renameByName\\\": {\\n \\\"benchmark\\\": \\\"Framework\\\",\\n \\\"control_id\\\": \\\"Control ID\\\",\\n \\\"control_name\\\": \\\"Control\\\",\\n \\\"control_severity\\\": \\\"Severity\\\",\\n \\\"check_id\\\": \\\"Check ID\\\",\\n \\\"check_title\\\": \\\"Check\\\",\\n \\\"check_target\\\": \\\"Target\\\",\\n \\\"check_namespace\\\": \\\"Namespace\\\",\\n \\\"resource_kind\\\": \\\"Kind\\\",\\n \\\"resource_name\\\": \\\"Resource\\\",\\n \\\"Value\\\": \\\"Fails\\\"\\n }\\n }\\n }\\n ]\\n },\\n {\\n \\\"collapsed\\\": false,\\n \\\"description\\\": \\\"Risk view \\\\u0434\\\\u043b\\\\u044f namespaced-\\\\u043e\\\\u0442\\\\u0447\\\\u0435\\\\u0442\\\\u043e\\\\u0432: \\\\u043e\\\\u0431\\\\u0449\\\\u0438\\\\u0439 \\\\u043e\\\\u0431\\\\u044a\\\\u0451\\\\u043c findings \\\\u0438 \\\\u043f\\\\u0440\\\\u0438\\\\u043e\\\\u0440\\\\u0438\\\\u0442\\\\u0435\\\\u0442\\\\u044b \\\\u043f\\\\u043e namespace/\\\\u0440\\\\u0435\\\\u0441\\\\u0443\\\\u0440\\\\u0441\\\\u0430\\\\u043c.\\\",\\n \\\"gridPos\\\": {\\n \\\"h\\\": 1,\\n \\\"w\\\": 24,\\n \\\"x\\\": 0,\\n \\\"y\\\": 23\\n },\\n \\\"id\\\": 50,\\n \\\"panels\\\": [],\\n \\\"title\\\": \\\"Namespaced Risk\\\",\\n \\\"type\\\": \\\"row\\\"\\n },\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"description\\\": \\\"\\\\u0421\\\\u0443\\\\u043c\\\\u043c\\\\u0430\\\\u0440\\\\u043d\\\\u044b\\\\u0435 critical+high findings \\\\u0432 ConfigAuditReport \\\\u043f\\\\u043e \\\\u0432\\\\u044b\\\\u0431\\\\u0440\\\\u0430\\\\u043d\\\\u043d\\\\u044b\\\\u043c namespace.\\\",\\n \\\"fieldConfig\\\": {\\n \\\"defaults\\\": {\\n \\\"color\\\": {\\n \\\"mode\\\": \\\"thresholds\\\"\\n },\\n \\\"thresholds\\\": {\\n \\\"mode\\\": \\\"absolute\\\",\\n \\\"steps\\\": [\\n {\\n \\\"color\\\": \\\"green\\\",\\n \\\"value\\\": null\\n },\\n {\\n \\\"color\\\": \\\"yellow\\\",\\n \\\"value\\\": 1\\n },\\n {\\n \\\"color\\\": \\\"red\\\",\\n \\\"value\\\": 10\\n }\\n ]\\n }\\n },\\n \\\"overrides\\\": []\\n },\\n \\\"gridPos\\\": {\\n \\\"h\\\": 4,\\n \\\"w\\\": 8,\\n \\\"x\\\": 0,\\n \\\"y\\\": 24\\n },\\n \\\"id\\\": 51,\\n \\\"options\\\": {\\n \\\"colorMode\\\": \\\"value\\\",\\n \\\"graphMode\\\": \\\"none\\\",\\n \\\"justifyMode\\\": \\\"auto\\\",\\n \\\"orientation\\\": \\\"auto\\\",\\n \\\"reduceOptions\\\": {\\n \\\"calcs\\\": [\\n \\\"lastNotNull\\\"\\n ],\\n \\\"fields\\\": \\\"\\\",\\n \\\"values\\\": false\\n },\\n \\\"showPercentChange\\\": false,\\n \\\"textMode\\\": \\\"auto\\\",\\n \\\"wideLayout\\\": true\\n },\\n \\\"pluginVersion\\\": \\\"10.4.15\\\",\\n \\\"targets\\\": [\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"editorMode\\\": \\\"code\\\",\\n \\\"expr\\\": \\\"sum(trivy_config_audit_critical_count{exported_namespace=~\\\\\\\"$exported_namespace\\\\\\\", k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"} + trivy_config_audit_high_count{exported_namespace=~\\\\\\\"$exported_namespace\\\\\\\", k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"}) or vector(0)\\\",\\n \\\"instant\\\": true,\\n \\\"refId\\\": \\\"A\\\"\\n }\\n ],\\n \\\"title\\\": \\\"Config: Critical + High Findings\\\",\\n \\\"type\\\": \\\"stat\\\"\\n },\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"description\\\": \\\"\\\\u0421\\\\u0443\\\\u043c\\\\u043c\\\\u0430\\\\u0440\\\\u043d\\\\u044b\\\\u0435 critical+high findings \\\\u0432 InfraAssessmentReport \\\\u043f\\\\u043e \\\\u0432\\\\u044b\\\\u0431\\\\u0440\\\\u0430\\\\u043d\\\\u043d\\\\u044b\\\\u043c namespace.\\\",\\n \\\"fieldConfig\\\": {\\n \\\"defaults\\\": {\\n \\\"color\\\": {\\n \\\"mode\\\": \\\"thresholds\\\"\\n },\\n \\\"thresholds\\\": {\\n \\\"mode\\\": \\\"absolute\\\",\\n \\\"steps\\\": [\\n {\\n \\\"color\\\": \\\"green\\\",\\n \\\"value\\\": null\\n },\\n {\\n \\\"color\\\": \\\"yellow\\\",\\n \\\"value\\\": 1\\n },\\n {\\n \\\"color\\\": \\\"red\\\",\\n \\\"value\\\": 10\\n }\\n ]\\n }\\n },\\n \\\"overrides\\\": []\\n },\\n \\\"gridPos\\\": {\\n \\\"h\\\": 4,\\n \\\"w\\\": 8,\\n \\\"x\\\": 8,\\n \\\"y\\\": 24\\n },\\n \\\"id\\\": 52,\\n \\\"options\\\": {\\n \\\"colorMode\\\": \\\"value\\\",\\n \\\"graphMode\\\": \\\"none\\\",\\n \\\"justifyMode\\\": \\\"auto\\\",\\n \\\"orientation\\\": \\\"auto\\\",\\n \\\"reduceOptions\\\": {\\n \\\"calcs\\\": [\\n \\\"lastNotNull\\\"\\n ],\\n \\\"fields\\\": \\\"\\\",\\n \\\"values\\\": false\\n },\\n \\\"showPercentChange\\\": false,\\n \\\"textMode\\\": \\\"auto\\\",\\n \\\"wideLayout\\\": true\\n },\\n \\\"pluginVersion\\\": \\\"10.4.15\\\",\\n \\\"targets\\\": [\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"editorMode\\\": \\\"code\\\",\\n \\\"expr\\\": \\\"sum(trivy_infra_assessment_critical_count{exported_namespace=~\\\\\\\"$exported_namespace\\\\\\\", k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"} + trivy_infra_assessment_high_count{exported_namespace=~\\\\\\\"$exported_namespace\\\\\\\", k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"}) or vector(0)\\\",\\n \\\"instant\\\": true,\\n \\\"refId\\\": \\\"A\\\"\\n }\\n ],\\n \\\"title\\\": \\\"Infra: Critical + High Findings\\\",\\n \\\"type\\\": \\\"stat\\\"\\n },\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"description\\\": \\\"\\\\u041a\\\\u043e\\\\u043b\\\\u0438\\\\u0447\\\\u0435\\\\u0441\\\\u0442\\\\u0432\\\\u043e namespace, \\\\u0433\\\\u0434\\\\u0435 \\\\u0435\\\\u0441\\\\u0442\\\\u044c \\\\u0445\\\\u043e\\\\u0442\\\\u044f \\\\u0431\\\\u044b \\\\u043e\\\\u0434\\\\u0438\\\\u043d critical/high finding (ConfigAudit + InfraAssessment).\\\",\\n \\\"fieldConfig\\\": {\\n \\\"defaults\\\": {\\n \\\"color\\\": {\\n \\\"mode\\\": \\\"thresholds\\\"\\n },\\n \\\"thresholds\\\": {\\n \\\"mode\\\": \\\"absolute\\\",\\n \\\"steps\\\": [\\n {\\n \\\"color\\\": \\\"green\\\",\\n \\\"value\\\": null\\n },\\n {\\n \\\"color\\\": \\\"yellow\\\",\\n \\\"value\\\": 1\\n },\\n {\\n \\\"color\\\": \\\"red\\\",\\n \\\"value\\\": 5\\n }\\n ]\\n }\\n },\\n \\\"overrides\\\": []\\n },\\n \\\"gridPos\\\": {\\n \\\"h\\\": 4,\\n \\\"w\\\": 8,\\n \\\"x\\\": 16,\\n \\\"y\\\": 24\\n },\\n \\\"id\\\": 55,\\n \\\"options\\\": {\\n \\\"colorMode\\\": \\\"value\\\",\\n \\\"graphMode\\\": \\\"none\\\",\\n \\\"justifyMode\\\": \\\"auto\\\",\\n \\\"orientation\\\": \\\"auto\\\",\\n \\\"reduceOptions\\\": {\\n \\\"calcs\\\": [\\n \\\"lastNotNull\\\"\\n ],\\n \\\"fields\\\": \\\"\\\",\\n \\\"values\\\": false\\n },\\n \\\"showPercentChange\\\": false,\\n \\\"textMode\\\": \\\"auto\\\",\\n \\\"wideLayout\\\": true\\n },\\n \\\"pluginVersion\\\": \\\"10.4.15\\\",\\n \\\"targets\\\": [\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"editorMode\\\": \\\"code\\\",\\n \\\"expr\\\": \\\"count(sum by (exported_namespace) ({__name__=~\\\\\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\\\\\", exported_namespace=~\\\\\\\"$exported_namespace\\\\\\\", k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"}) > 0) or vector(0)\\\",\\n \\\"instant\\\": true,\\n \\\"refId\\\": \\\"A\\\"\\n }\\n ],\\n \\\"title\\\": \\\"Namespaces With Findings\\\",\\n \\\"type\\\": \\\"stat\\\"\\n },\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"description\\\": \\\"\\\\u041f\\\\u0440\\\\u0438\\\\u043e\\\\u0440\\\\u0438\\\\u0442\\\\u0438\\\\u0437\\\\u0438\\\\u0440\\\\u043e\\\\u0432\\\\u0430\\\\u043d\\\\u043d\\\\u044b\\\\u0439 \\\\u0441\\\\u043f\\\\u0438\\\\u0441\\\\u043e\\\\u043a namespace \\\\u043f\\\\u043e \\\\u0441\\\\u0443\\\\u043c\\\\u043c\\\\u0430\\\\u0440\\\\u043d\\\\u043e\\\\u043c\\\\u0443 \\\\u0440\\\\u0438\\\\u0441\\\\u043a\\\\u0443 (critical+high \\\\u0438\\\\u0437 ConfigAudit + InfraAssessment).\\\",\\n \\\"fieldConfig\\\": {\\n \\\"defaults\\\": {\\n \\\"custom\\\": {\\n \\\"align\\\": \\\"auto\\\",\\n \\\"cellOptions\\\": {\\n \\\"type\\\": \\\"auto\\\"\\n },\\n \\\"filterable\\\": true,\\n \\\"inspect\\\": false\\n }\\n },\\n \\\"overrides\\\": []\\n },\\n \\\"gridPos\\\": {\\n \\\"h\\\": 8,\\n \\\"w\\\": 12,\\n \\\"x\\\": 0,\\n \\\"y\\\": 28\\n },\\n \\\"id\\\": 53,\\n \\\"options\\\": {\\n \\\"cellHeight\\\": \\\"sm\\\",\\n \\\"footer\\\": {\\n \\\"show\\\": false\\n },\\n \\\"showHeader\\\": true,\\n \\\"sortBy\\\": [\\n {\\n \\\"desc\\\": true,\\n \\\"displayName\\\": \\\"Critical + High\\\"\\n }\\n ],\\n \\\"columnFilter\\\": true\\n },\\n \\\"pluginVersion\\\": \\\"10.4.15\\\",\\n \\\"targets\\\": [\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"editorMode\\\": \\\"code\\\",\\n \\\"expr\\\": \\\"sort_desc((sum by (exported_namespace) ({__name__=~\\\\\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\\\\\", exported_namespace=~\\\\\\\"$exported_namespace\\\\\\\", k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"})) unless (sum by (exported_namespace) ({__name__=~\\\\\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\\\\\", exported_namespace=~\\\\\\\"$exported_namespace\\\\\\\", k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"}) == 0))\\\",\\n \\\"format\\\": \\\"table\\\",\\n \\\"instant\\\": true,\\n \\\"refId\\\": \\\"A\\\"\\n }\\n ],\\n \\\"title\\\": \\\"Top Namespaces by Critical + High Findings\\\",\\n \\\"type\\\": \\\"table\\\",\\n \\\"transformations\\\": [\\n {\\n \\\"id\\\": \\\"organize\\\",\\n \\\"options\\\": {\\n \\\"excludeByName\\\": {\\n \\\"Time\\\": true,\\n \\\"instance\\\": true,\\n \\\"job\\\": true,\\n \\\"namespace\\\": true,\\n \\\"pod\\\": true,\\n \\\"service\\\": true\\n },\\n \\\"indexByName\\\": {\\n \\\"exported_namespace\\\": 0,\\n \\\"Value\\\": 1\\n },\\n \\\"renameByName\\\": {\\n \\\"exported_namespace\\\": \\\"Namespace\\\",\\n \\\"Value\\\": \\\"Critical + High\\\"\\n }\\n }\\n }\\n ]\\n },\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"description\\\": \\\"\\\\u0422\\\\u043e\\\\u043f \\\\u043a\\\\u043e\\\\u043d\\\\u043a\\\\u0440\\\\u0435\\\\u0442\\\\u043d\\\\u044b\\\\u0445 workload-\\\\u043e\\\\u0431\\\\u044a\\\\u0435\\\\u043a\\\\u0442\\\\u043e\\\\u0432 (namespace/kind/resource) \\\\u043f\\\\u043e \\\\u0441\\\\u0443\\\\u043c\\\\u043c\\\\u0435 critical+high findings.\\\",\\n \\\"fieldConfig\\\": {\\n \\\"defaults\\\": {\\n \\\"custom\\\": {\\n \\\"align\\\": \\\"auto\\\",\\n \\\"cellOptions\\\": {\\n \\\"type\\\": \\\"auto\\\"\\n },\\n \\\"filterable\\\": true,\\n \\\"inspect\\\": false\\n }\\n },\\n \\\"overrides\\\": []\\n },\\n \\\"gridPos\\\": {\\n \\\"h\\\": 8,\\n \\\"w\\\": 12,\\n \\\"x\\\": 12,\\n \\\"y\\\": 28\\n },\\n \\\"id\\\": 54,\\n \\\"options\\\": {\\n \\\"cellHeight\\\": \\\"sm\\\",\\n \\\"footer\\\": {\\n \\\"show\\\": false\\n },\\n \\\"showHeader\\\": true,\\n \\\"sortBy\\\": [\\n {\\n \\\"desc\\\": true,\\n \\\"displayName\\\": \\\"Critical + High\\\"\\n }\\n ],\\n \\\"columnFilter\\\": true\\n },\\n \\\"pluginVersion\\\": \\\"10.4.15\\\",\\n \\\"targets\\\": [\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"editorMode\\\": \\\"code\\\",\\n \\\"expr\\\": \\\"sort_desc((sum by (exported_namespace, resource_kind, resource_name) ({__name__=~\\\\\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\\\\\", exported_namespace=~\\\\\\\"$exported_namespace\\\\\\\", k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"})) unless (sum by (exported_namespace, resource_kind, resource_name) ({__name__=~\\\\\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\\\\\", exported_namespace=~\\\\\\\"$exported_namespace\\\\\\\", k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"}) == 0))\\\",\\n \\\"format\\\": \\\"table\\\",\\n \\\"instant\\\": true,\\n \\\"refId\\\": \\\"A\\\"\\n }\\n ],\\n \\\"title\\\": \\\"Top Targets by Namespace (Critical + High)\\\",\\n \\\"type\\\": \\\"table\\\",\\n \\\"transformations\\\": [\\n {\\n \\\"id\\\": \\\"organize\\\",\\n \\\"options\\\": {\\n \\\"excludeByName\\\": {\\n \\\"Time\\\": true,\\n \\\"instance\\\": true,\\n \\\"job\\\": true,\\n \\\"namespace\\\": true,\\n \\\"pod\\\": true,\\n \\\"service\\\": true\\n },\\n \\\"indexByName\\\": {\\n \\\"exported_namespace\\\": 0,\\n \\\"resource_kind\\\": 1,\\n \\\"resource_name\\\": 2,\\n \\\"Value\\\": 3\\n },\\n \\\"renameByName\\\": {\\n \\\"exported_namespace\\\": \\\"Namespace\\\",\\n \\\"resource_kind\\\": \\\"Kind\\\",\\n \\\"resource_name\\\": \\\"Resource\\\",\\n \\\"Value\\\": \\\"Critical + High\\\"\\n }\\n }\\n }\\n ]\\n },\\n {\\n \\\"collapsed\\\": false,\\n \\\"description\\\": \\\"\\\\u041f\\\\u043e\\\\u0447\\\\u0435\\\\u043c\\\\u0443 \\\\u0441\\\\u0440\\\\u0430\\\\u0431\\\\u0430\\\\u0442\\\\u044b\\\\u0432\\\\u0430\\\\u0435\\\\u0442 Config/Infra: \\\\u0430\\\\u0433\\\\u0440\\\\u0435\\\\u0433\\\\u0438\\\\u0440\\\\u043e\\\\u0432\\\\u0430\\\\u043d\\\\u043d\\\\u044b\\\\u0435 \\\\u043f\\\\u0440\\\\u0438\\\\u0447\\\\u0438\\\\u043d\\\\u044b \\\\u043f\\\\u043e check ID \\\\u0438 \\\\u043d\\\\u0430\\\\u0437\\\\u0432\\\\u0430\\\\u043d\\\\u0438\\\\u044e (\\\\u0431\\\\u0435\\\\u0437 \\\\u0434\\\\u043b\\\\u0438\\\\u043d\\\\u043d\\\\u044b\\\\u0445 message).\\\",\\n \\\"gridPos\\\": {\\n \\\"x\\\": 0,\\n \\\"y\\\": 36,\\n \\\"w\\\": 24,\\n \\\"h\\\": 1\\n },\\n \\\"id\\\": 58,\\n \\\"panels\\\": [],\\n \\\"title\\\": \\\"Findings Reasons\\\",\\n \\\"type\\\": \\\"row\\\"\\n },\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"description\\\": \\\"\\\\u0422\\\\u043e\\\\u043f \\\\u043f\\\\u0440\\\\u0438\\\\u0447\\\\u0438\\\\u043d \\\\u0441\\\\u0440\\\\u0430\\\\u0431\\\\u0430\\\\u0442\\\\u044b\\\\u0432\\\\u0430\\\\u043d\\\\u0438\\\\u044f \\\\u0432 ConfigAuditReport: \\\\u043a\\\\u0430\\\\u043a\\\\u0438\\\\u0435 \\\\u043f\\\\u0440\\\\u043e\\\\u0432\\\\u0435\\\\u0440\\\\u043a\\\\u0438 \\\\u0434\\\\u0430\\\\u044e\\\\u0442 \\\\u043d\\\\u0430\\\\u0438\\\\u0431\\\\u043e\\\\u043b\\\\u044c\\\\u0448\\\\u0438\\\\u0439 \\\\u0432\\\\u043a\\\\u043b\\\\u0430\\\\u0434.\\\",\\n \\\"fieldConfig\\\": {\\n \\\"defaults\\\": {\\n \\\"custom\\\": {\\n \\\"align\\\": \\\"auto\\\",\\n \\\"cellOptions\\\": {\\n \\\"type\\\": \\\"auto\\\"\\n },\\n \\\"filterable\\\": true,\\n \\\"inspect\\\": false\\n }\\n },\\n \\\"overrides\\\": []\\n },\\n \\\"gridPos\\\": {\\n \\\"x\\\": 0,\\n \\\"y\\\": 37,\\n \\\"w\\\": 24,\\n \\\"h\\\": 8\\n },\\n \\\"id\\\": 59,\\n \\\"options\\\": {\\n \\\"cellHeight\\\": \\\"sm\\\",\\n \\\"footer\\\": {\\n \\\"show\\\": false\\n },\\n \\\"showHeader\\\": true,\\n \\\"sortBy\\\": [\\n {\\n \\\"desc\\\": true,\\n \\\"displayName\\\": \\\"Findings\\\"\\n }\\n ],\\n \\\"columnFilter\\\": true\\n },\\n \\\"pluginVersion\\\": \\\"10.4.15\\\",\\n \\\"targets\\\": [\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"editorMode\\\": \\\"code\\\",\\n \\\"expr\\\": \\\"sort_desc(sum by (check_id, check_title, check_severity, check_category) (trivy_config_audit_check_fail_total{exported_namespace=~\\\\\\\"$exported_namespace\\\\\\\", k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"}))\\\",\\n \\\"format\\\": \\\"table\\\",\\n \\\"instant\\\": true,\\n \\\"refId\\\": \\\"A\\\"\\n }\\n ],\\n \\\"title\\\": \\\"Config: Top Trigger Reasons\\\",\\n \\\"type\\\": \\\"table\\\",\\n \\\"transformations\\\": [\\n {\\n \\\"id\\\": \\\"organize\\\",\\n \\\"options\\\": {\\n \\\"excludeByName\\\": {\\n \\\"Time\\\": true,\\n \\\"customresource_group\\\": true,\\n \\\"customresource_kind\\\": true,\\n \\\"customresource_version\\\": true,\\n \\\"exported_namespace\\\": true,\\n \\\"instance\\\": true,\\n \\\"job\\\": true,\\n \\\"name\\\": true,\\n \\\"namespace\\\": true,\\n \\\"pod\\\": true,\\n \\\"resource_kind\\\": true,\\n \\\"resource_name\\\": true,\\n \\\"service\\\": true,\\n \\\"scanner_name\\\": true,\\n \\\"scanner_vendor\\\": true,\\n \\\"scanner_version\\\": true\\n },\\n \\\"indexByName\\\": {\\n \\\"check_id\\\": 0,\\n \\\"check_title\\\": 1,\\n \\\"check_severity\\\": 2,\\n \\\"check_category\\\": 3,\\n \\\"Value\\\": 4\\n },\\n \\\"renameByName\\\": {\\n \\\"check_id\\\": \\\"Check ID\\\",\\n \\\"check_title\\\": \\\"Check\\\",\\n \\\"check_severity\\\": \\\"Severity\\\",\\n \\\"check_category\\\": \\\"Category\\\",\\n \\\"Value\\\": \\\"Findings\\\"\\n }\\n }\\n }\\n ]\\n },\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"description\\\": \\\"\\\\u0422\\\\u043e\\\\u043f \\\\u043f\\\\u0440\\\\u0438\\\\u0447\\\\u0438\\\\u043d \\\\u0441\\\\u0440\\\\u0430\\\\u0431\\\\u0430\\\\u0442\\\\u044b\\\\u0432\\\\u0430\\\\u043d\\\\u0438\\\\u044f \\\\u0432 InfraAssessmentReport + ClusterInfraAssessmentReport.\\\",\\n \\\"fieldConfig\\\": {\\n \\\"defaults\\\": {\\n \\\"custom\\\": {\\n \\\"align\\\": \\\"auto\\\",\\n \\\"cellOptions\\\": {\\n \\\"type\\\": \\\"auto\\\"\\n },\\n \\\"filterable\\\": true,\\n \\\"inspect\\\": false\\n }\\n },\\n \\\"overrides\\\": []\\n },\\n \\\"gridPos\\\": {\\n \\\"x\\\": 0,\\n \\\"y\\\": 45,\\n \\\"w\\\": 24,\\n \\\"h\\\": 8\\n },\\n \\\"id\\\": 60,\\n \\\"options\\\": {\\n \\\"cellHeight\\\": \\\"sm\\\",\\n \\\"footer\\\": {\\n \\\"show\\\": false\\n },\\n \\\"showHeader\\\": true,\\n \\\"sortBy\\\": [\\n {\\n \\\"desc\\\": true,\\n \\\"displayName\\\": \\\"Findings\\\"\\n }\\n ],\\n \\\"columnFilter\\\": true\\n },\\n \\\"pluginVersion\\\": \\\"10.4.15\\\",\\n \\\"targets\\\": [\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"editorMode\\\": \\\"code\\\",\\n \\\"expr\\\": \\\"sort_desc((sum by (check_id, check_title, check_severity, check_category) (trivy_infra_assessment_check_fail_total{exported_namespace=~\\\\\\\"$exported_namespace\\\\\\\", k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"})) or (sum by (check_id, check_title, check_severity, check_category) (trivy_cluster_infra_assessment_check_fail_total{k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"})))\\\",\\n \\\"format\\\": \\\"table\\\",\\n \\\"instant\\\": true,\\n \\\"refId\\\": \\\"A\\\"\\n }\\n ],\\n \\\"title\\\": \\\"Infra: Top Trigger Reasons\\\",\\n \\\"type\\\": \\\"table\\\",\\n \\\"transformations\\\": [\\n {\\n \\\"id\\\": \\\"organize\\\",\\n \\\"options\\\": {\\n \\\"excludeByName\\\": {\\n \\\"Time\\\": true,\\n \\\"customresource_group\\\": true,\\n \\\"customresource_kind\\\": true,\\n \\\"customresource_version\\\": true,\\n \\\"exported_namespace\\\": true,\\n \\\"instance\\\": true,\\n \\\"job\\\": true,\\n \\\"name\\\": true,\\n \\\"namespace\\\": true,\\n \\\"pod\\\": true,\\n \\\"resource_kind\\\": true,\\n \\\"resource_name\\\": true,\\n \\\"service\\\": true,\\n \\\"scanner_name\\\": true,\\n \\\"scanner_vendor\\\": true,\\n \\\"scanner_version\\\": true\\n },\\n \\\"indexByName\\\": {\\n \\\"check_id\\\": 0,\\n \\\"check_title\\\": 1,\\n \\\"check_severity\\\": 2,\\n \\\"check_category\\\": 3,\\n \\\"Value\\\": 4\\n },\\n \\\"renameByName\\\": {\\n \\\"check_id\\\": \\\"Check ID\\\",\\n \\\"check_title\\\": \\\"Check\\\",\\n \\\"check_severity\\\": \\\"Severity\\\",\\n \\\"check_category\\\": \\\"Category\\\",\\n \\\"Value\\\": \\\"Findings\\\"\\n }\\n }\\n }\\n ]\\n },\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"description\\\": \\\"\\\\u041a\\\\u043e\\\\u043d\\\\u043a\\\\u0440\\\\u0435\\\\u0442\\\\u043d\\\\u044b\\\\u0435 \\\\u0440\\\\u0435\\\\u0441\\\\u0443\\\\u0440\\\\u0441\\\\u044b \\\\u0434\\\\u043b\\\\u044f \\\\u0432\\\\u044b\\\\u0431\\\\u0440\\\\u0430\\\\u043d\\\\u043d\\\\u043e\\\\u0439 \\\\u043f\\\\u0440\\\\u0438\\\\u0447\\\\u0438\\\\u043d\\\\u044b (check_id) \\\\u0438\\\\u0437 ConfigAuditReport.\\\",\\n \\\"fieldConfig\\\": {\\n \\\"defaults\\\": {\\n \\\"custom\\\": {\\n \\\"align\\\": \\\"auto\\\",\\n \\\"cellOptions\\\": {\\n \\\"type\\\": \\\"auto\\\"\\n },\\n \\\"filterable\\\": true,\\n \\\"inspect\\\": false\\n }\\n },\\n \\\"overrides\\\": []\\n },\\n \\\"gridPos\\\": {\\n \\\"x\\\": 0,\\n \\\"y\\\": 53,\\n \\\"w\\\": 24,\\n \\\"h\\\": 8\\n },\\n \\\"id\\\": 61,\\n \\\"options\\\": {\\n \\\"cellHeight\\\": \\\"sm\\\",\\n \\\"footer\\\": {\\n \\\"show\\\": false\\n },\\n \\\"showHeader\\\": true,\\n \\\"sortBy\\\": [\\n {\\n \\\"desc\\\": true,\\n \\\"displayName\\\": \\\"Findings\\\"\\n }\\n ],\\n \\\"columnFilter\\\": true\\n },\\n \\\"pluginVersion\\\": \\\"10.4.15\\\",\\n \\\"targets\\\": [\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"editorMode\\\": \\\"code\\\",\\n \\\"expr\\\": \\\"sort_desc(sum by (check_id, check_title, check_severity, check_category, exported_namespace, resource_kind, resource_name) (trivy_config_audit_check_fail_total{exported_namespace=~\\\\\\\"$exported_namespace\\\\\\\", k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"}))\\\",\\n \\\"format\\\": \\\"table\\\",\\n \\\"instant\\\": true,\\n \\\"refId\\\": \\\"A\\\"\\n }\\n ],\\n \\\"title\\\": \\\"Config: Affected Resources by Check\\\",\\n \\\"type\\\": \\\"table\\\",\\n \\\"transformations\\\": [\\n {\\n \\\"id\\\": \\\"organize\\\",\\n \\\"options\\\": {\\n \\\"excludeByName\\\": {\\n \\\"Time\\\": true,\\n \\\"check_category\\\": false,\\n \\\"check_id\\\": false,\\n \\\"check_severity\\\": false,\\n \\\"check_title\\\": false,\\n \\\"customresource_group\\\": true,\\n \\\"customresource_kind\\\": true,\\n \\\"customresource_version\\\": true,\\n \\\"instance\\\": true,\\n \\\"job\\\": true,\\n \\\"name\\\": true,\\n \\\"namespace\\\": true,\\n \\\"pod\\\": true,\\n \\\"scanner\\\": true,\\n \\\"scanner_name\\\": true,\\n \\\"scanner_vendor\\\": true,\\n \\\"scanner_version\\\": true,\\n \\\"service\\\": true\\n },\\n \\\"indexByName\\\": {\\n \\\"exported_namespace\\\": 4,\\n \\\"resource_kind\\\": 5,\\n \\\"resource_name\\\": 6,\\n \\\"Value\\\": 7,\\n \\\"check_id\\\": 0,\\n \\\"check_title\\\": 1,\\n \\\"check_severity\\\": 2,\\n \\\"check_category\\\": 3\\n },\\n \\\"renameByName\\\": {\\n \\\"exported_namespace\\\": \\\"Namespace\\\",\\n \\\"resource_kind\\\": \\\"Kind\\\",\\n \\\"resource_name\\\": \\\"Resource\\\",\\n \\\"Value\\\": \\\"Findings\\\",\\n \\\"check_id\\\": \\\"Check ID\\\",\\n \\\"check_title\\\": \\\"Check\\\",\\n \\\"check_severity\\\": \\\"Severity\\\",\\n \\\"check_category\\\": \\\"Category\\\"\\n }\\n }\\n }\\n ]\\n },\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"description\\\": \\\"\\\\u041a\\\\u043e\\\\u043d\\\\u043a\\\\u0440\\\\u0435\\\\u0442\\\\u043d\\\\u044b\\\\u0435 \\\\u0440\\\\u0435\\\\u0441\\\\u0443\\\\u0440\\\\u0441\\\\u044b \\\\u0434\\\\u043b\\\\u044f \\\\u043f\\\\u0440\\\\u0438\\\\u0447\\\\u0438\\\\u043d \\\\u0438\\\\u0437 InfraAssessmentReport + ClusterInfraAssessmentReport.\\\",\\n \\\"fieldConfig\\\": {\\n \\\"defaults\\\": {\\n \\\"custom\\\": {\\n \\\"align\\\": \\\"auto\\\",\\n \\\"cellOptions\\\": {\\n \\\"type\\\": \\\"auto\\\"\\n },\\n \\\"filterable\\\": true,\\n \\\"inspect\\\": false\\n }\\n },\\n \\\"overrides\\\": []\\n },\\n \\\"gridPos\\\": {\\n \\\"x\\\": 0,\\n \\\"y\\\": 61,\\n \\\"w\\\": 24,\\n \\\"h\\\": 8\\n },\\n \\\"id\\\": 62,\\n \\\"options\\\": {\\n \\\"cellHeight\\\": \\\"sm\\\",\\n \\\"footer\\\": {\\n \\\"show\\\": false\\n },\\n \\\"showHeader\\\": true,\\n \\\"sortBy\\\": [\\n {\\n \\\"desc\\\": true,\\n \\\"displayName\\\": \\\"Findings\\\"\\n }\\n ],\\n \\\"columnFilter\\\": true\\n },\\n \\\"pluginVersion\\\": \\\"10.4.15\\\",\\n \\\"targets\\\": [\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"editorMode\\\": \\\"code\\\",\\n \\\"expr\\\": \\\"sort_desc((sum by (check_id, check_title, check_severity, check_category, exported_namespace, resource_kind, resource_name) (trivy_infra_assessment_check_fail_total{exported_namespace=~\\\\\\\"$exported_namespace\\\\\\\", k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"})) or (sum by (check_id, check_title, check_severity, check_category, exported_namespace, resource_kind, resource_name) (trivy_cluster_infra_assessment_check_fail_total{k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"})))\\\",\\n \\\"format\\\": \\\"table\\\",\\n \\\"instant\\\": true,\\n \\\"refId\\\": \\\"A\\\"\\n }\\n ],\\n \\\"title\\\": \\\"Infra: Affected Resources by Check\\\",\\n \\\"type\\\": \\\"table\\\",\\n \\\"transformations\\\": [\\n {\\n \\\"id\\\": \\\"organize\\\",\\n \\\"options\\\": {\\n \\\"excludeByName\\\": {\\n \\\"Time\\\": true,\\n \\\"check_category\\\": false,\\n \\\"check_id\\\": false,\\n \\\"check_severity\\\": false,\\n \\\"check_title\\\": false,\\n \\\"customresource_group\\\": true,\\n \\\"customresource_kind\\\": true,\\n \\\"customresource_version\\\": true,\\n \\\"instance\\\": true,\\n \\\"job\\\": true,\\n \\\"name\\\": true,\\n \\\"namespace\\\": true,\\n \\\"pod\\\": true,\\n \\\"scanner\\\": true,\\n \\\"scanner_name\\\": true,\\n \\\"scanner_vendor\\\": true,\\n \\\"scanner_version\\\": true,\\n \\\"service\\\": true\\n },\\n \\\"indexByName\\\": {\\n \\\"exported_namespace\\\": 4,\\n \\\"resource_kind\\\": 5,\\n \\\"resource_name\\\": 6,\\n \\\"Value\\\": 7,\\n \\\"check_id\\\": 0,\\n \\\"check_title\\\": 1,\\n \\\"check_severity\\\": 2,\\n \\\"check_category\\\": 3\\n },\\n \\\"renameByName\\\": {\\n \\\"exported_namespace\\\": \\\"Namespace\\\",\\n \\\"resource_kind\\\": \\\"Kind\\\",\\n \\\"resource_name\\\": \\\"Resource\\\",\\n \\\"Value\\\": \\\"Findings\\\",\\n \\\"check_id\\\": \\\"Check ID\\\",\\n \\\"check_title\\\": \\\"Check\\\",\\n \\\"check_severity\\\": \\\"Severity\\\",\\n \\\"check_category\\\": \\\"Category\\\"\\n }\\n }\\n }\\n ]\\n },\\n {\\n \\\"collapsed\\\": false,\\n \\\"description\\\": \\\"\\\\u0421\\\\u043b\\\\u0443\\\\u0436\\\\u0435\\\\u0431\\\\u043d\\\\u044b\\\\u0439 \\\\u0431\\\\u043b\\\\u043e\\\\u043a \\\\u0441\\\\u043e\\\\u0441\\\\u0442\\\\u043e\\\\u044f\\\\u043d\\\\u0438\\\\u044f exporter: \\\\u0434\\\\u043e\\\\u0441\\\\u0442\\\\u0443\\\\u043f\\\\u043d\\\\u043e\\\\u0441\\\\u0442\\\\u044c, \\\\u0441\\\\u0432\\\\u0435\\\\u0436\\\\u0435\\\\u0441\\\\u0442\\\\u044c \\\\u0434\\\\u0430\\\\u043d\\\\u043d\\\\u044b\\\\u0445 \\\\u0438 \\\\u043d\\\\u0430\\\\u043b\\\\u0438\\\\u0447\\\\u0438\\\\u0435 \\\\u043e\\\\u0448\\\\u0438\\\\u0431\\\\u043e\\\\u043a refresh.\\\",\\n \\\"gridPos\\\": {\\n \\\"h\\\": 1,\\n \\\"w\\\": 24,\\n \\\"x\\\": 0,\\n \\\"y\\\": 69\\n },\\n \\\"id\\\": 43,\\n \\\"panels\\\": [],\\n \\\"title\\\": \\\"Exporter Runtime Health\\\",\\n \\\"type\\\": \\\"row\\\"\\n },\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"description\\\": \\\"1 = exporter \\\\u0443\\\\u0441\\\\u043f\\\\u0435\\\\u0448\\\\u043d\\\\u043e \\\\u043e\\\\u0431\\\\u043d\\\\u043e\\\\u0432\\\\u043b\\\\u044f\\\\u043b \\\\u043c\\\\u0435\\\\u0442\\\\u0440\\\\u0438\\\\u043a\\\\u0438 \\\\u043d\\\\u0435\\\\u0434\\\\u0430\\\\u0432\\\\u043d\\\\u043e; 0 = refresh \\\\u0443\\\\u0441\\\\u0442\\\\u0430\\\\u0440\\\\u0435\\\\u043b \\\\u0438\\\\u043b\\\\u0438 \\\\u043e\\\\u0441\\\\u0442\\\\u0430\\\\u043d\\\\u043e\\\\u0432\\\\u0438\\\\u043b\\\\u0441\\\\u044f.\\\",\\n \\\"fieldConfig\\\": {\\n \\\"defaults\\\": {\\n \\\"color\\\": {\\n \\\"mode\\\": \\\"thresholds\\\"\\n },\\n \\\"thresholds\\\": {\\n \\\"mode\\\": \\\"absolute\\\",\\n \\\"steps\\\": [\\n {\\n \\\"color\\\": \\\"red\\\",\\n \\\"value\\\": null\\n },\\n {\\n \\\"color\\\": \\\"green\\\",\\n \\\"value\\\": 1\\n }\\n ]\\n },\\n \\\"mappings\\\": [\\n {\\n \\\"type\\\": \\\"value\\\",\\n \\\"options\\\": {\\n \\\"0\\\": {\\n \\\"text\\\": \\\"DOWN\\\"\\n },\\n \\\"1\\\": {\\n \\\"text\\\": \\\"UP\\\"\\n }\\n }\\n }\\n ]\\n },\\n \\\"overrides\\\": []\\n },\\n \\\"gridPos\\\": {\\n \\\"h\\\": 4,\\n \\\"w\\\": 6,\\n \\\"x\\\": 0,\\n \\\"y\\\": 70\\n },\\n \\\"id\\\": 44,\\n \\\"options\\\": {\\n \\\"colorMode\\\": \\\"value\\\",\\n \\\"graphMode\\\": \\\"none\\\",\\n \\\"justifyMode\\\": \\\"auto\\\",\\n \\\"orientation\\\": \\\"auto\\\",\\n \\\"reduceOptions\\\": {\\n \\\"calcs\\\": [\\n \\\"lastNotNull\\\"\\n ],\\n \\\"fields\\\": \\\"\\\",\\n \\\"values\\\": false\\n },\\n \\\"showPercentChange\\\": false,\\n \\\"textMode\\\": \\\"auto\\\",\\n \\\"wideLayout\\\": true\\n },\\n \\\"pluginVersion\\\": \\\"10.4.15\\\",\\n \\\"targets\\\": [\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"editorMode\\\": \\\"code\\\",\\n \\\"expr\\\": \\\"(max(trivy_report_metrics_exporter_up{k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"})) or vector(0)\\\",\\n \\\"instant\\\": true,\\n \\\"refId\\\": \\\"A\\\"\\n }\\n ],\\n \\\"title\\\": \\\"Exporter: Up\\\",\\n \\\"type\\\": \\\"stat\\\"\\n },\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"description\\\": \\\"\\\\u0412\\\\u043e\\\\u0437\\\\u0440\\\\u0430\\\\u0441\\\\u0442 \\\\u043f\\\\u043e\\\\u0441\\\\u043b\\\\u0435\\\\u0434\\\\u043d\\\\u0435\\\\u0433\\\\u043e \\\\u0443\\\\u0441\\\\u043f\\\\u0435\\\\u0448\\\\u043d\\\\u043e\\\\u0433\\\\u043e refresh \\\\u0432 \\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u0442\\\\u0430\\\\u0445; \\\\u0440\\\\u043e\\\\u0441\\\\u0442 \\\\u043f\\\\u043e\\\\u043a\\\\u0430\\\\u0437\\\\u044b\\\\u0432\\\\u0430\\\\u0435\\\\u0442 \\\\u0434\\\\u0435\\\\u0433\\\\u0440\\\\u0430\\\\u0434\\\\u0430\\\\u0446\\\\u0438\\\\u044e \\\\u0438\\\\u0441\\\\u0442\\\\u043e\\\\u0447\\\\u043d\\\\u0438\\\\u043a\\\\u0430 \\\\u0434\\\\u0430\\\\u043d\\\\u043d\\\\u044b\\\\u0445.\\\",\\n \\\"fieldConfig\\\": {\\n \\\"defaults\\\": {\\n \\\"color\\\": {\\n \\\"mode\\\": \\\"thresholds\\\"\\n },\\n \\\"unit\\\": \\\"m\\\",\\n \\\"decimals\\\": 1,\\n \\\"thresholds\\\": {\\n \\\"mode\\\": \\\"absolute\\\",\\n \\\"steps\\\": [\\n {\\n \\\"color\\\": \\\"green\\\",\\n \\\"value\\\": null\\n },\\n {\\n \\\"color\\\": \\\"yellow\\\",\\n \\\"value\\\": 5\\n },\\n {\\n \\\"color\\\": \\\"red\\\",\\n \\\"value\\\": 15\\n }\\n ]\\n }\\n },\\n \\\"overrides\\\": []\\n },\\n \\\"gridPos\\\": {\\n \\\"h\\\": 4,\\n \\\"w\\\": 6,\\n \\\"x\\\": 6,\\n \\\"y\\\": 70\\n },\\n \\\"id\\\": 45,\\n \\\"options\\\": {\\n \\\"colorMode\\\": \\\"value\\\",\\n \\\"graphMode\\\": \\\"none\\\",\\n \\\"justifyMode\\\": \\\"auto\\\",\\n \\\"orientation\\\": \\\"auto\\\",\\n \\\"reduceOptions\\\": {\\n \\\"calcs\\\": [\\n \\\"lastNotNull\\\"\\n ],\\n \\\"fields\\\": \\\"\\\",\\n \\\"values\\\": false\\n },\\n \\\"showPercentChange\\\": false,\\n \\\"textMode\\\": \\\"auto\\\",\\n \\\"wideLayout\\\": true\\n },\\n \\\"pluginVersion\\\": \\\"10.4.15\\\",\\n \\\"targets\\\": [\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"editorMode\\\": \\\"code\\\",\\n \\\"expr\\\": \\\"(time() - ((max(trivy_report_metrics_last_success_timestamp{k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"})) or vector(0))) / 60\\\",\\n \\\"instant\\\": true,\\n \\\"refId\\\": \\\"A\\\"\\n }\\n ],\\n \\\"title\\\": \\\"Exporter: Last Success Age\\\",\\n \\\"type\\\": \\\"stat\\\"\\n },\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"description\\\": \\\"\\\\u0421\\\\u0447\\\\u0435\\\\u0442\\\\u0447\\\\u0438\\\\u043a \\\\u043e\\\\u0448\\\\u0438\\\\u0431\\\\u043e\\\\u043a refresh \\\\u0441 \\\\u043c\\\\u043e\\\\u043c\\\\u0435\\\\u043d\\\\u0442\\\\u0430 \\\\u0437\\\\u0430\\\\u043f\\\\u0443\\\\u0441\\\\u043a\\\\u0430 pod; \\\\u043d\\\\u0435 \\\\u0434\\\\u043e\\\\u043b\\\\u0436\\\\u0435\\\\u043d \\\\u0441\\\\u0442\\\\u0430\\\\u0431\\\\u0438\\\\u043b\\\\u044c\\\\u043d\\\\u043e \\\\u0440\\\\u0430\\\\u0441\\\\u0442\\\\u0438.\\\",\\n \\\"fieldConfig\\\": {\\n \\\"defaults\\\": {\\n \\\"color\\\": {\\n \\\"mode\\\": \\\"thresholds\\\"\\n },\\n \\\"thresholds\\\": {\\n \\\"mode\\\": \\\"absolute\\\",\\n \\\"steps\\\": [\\n {\\n \\\"color\\\": \\\"green\\\",\\n \\\"value\\\": null\\n },\\n {\\n \\\"color\\\": \\\"red\\\",\\n \\\"value\\\": 1\\n }\\n ]\\n }\\n },\\n \\\"overrides\\\": []\\n },\\n \\\"gridPos\\\": {\\n \\\"h\\\": 4,\\n \\\"w\\\": 6,\\n \\\"x\\\": 12,\\n \\\"y\\\": 70\\n },\\n \\\"id\\\": 46,\\n \\\"options\\\": {\\n \\\"colorMode\\\": \\\"value\\\",\\n \\\"graphMode\\\": \\\"none\\\",\\n \\\"justifyMode\\\": \\\"auto\\\",\\n \\\"orientation\\\": \\\"auto\\\",\\n \\\"reduceOptions\\\": {\\n \\\"calcs\\\": [\\n \\\"lastNotNull\\\"\\n ],\\n \\\"fields\\\": \\\"\\\",\\n \\\"values\\\": false\\n },\\n \\\"showPercentChange\\\": false,\\n \\\"textMode\\\": \\\"auto\\\",\\n \\\"wideLayout\\\": true\\n },\\n \\\"pluginVersion\\\": \\\"10.4.15\\\",\\n \\\"targets\\\": [\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"editorMode\\\": \\\"code\\\",\\n \\\"expr\\\": \\\"(max(trivy_report_metrics_refresh_errors_total{k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"})) or vector(0)\\\",\\n \\\"instant\\\": true,\\n \\\"refId\\\": \\\"A\\\"\\n }\\n ],\\n \\\"title\\\": \\\"Exporter: Refresh Errors Total\\\",\\n \\\"type\\\": \\\"stat\\\"\\n },\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"description\\\": \\\"\\\\u0424\\\\u043b\\\\u0430\\\\u0433 \\\\u043d\\\\u0430\\\\u043b\\\\u0438\\\\u0447\\\\u0438\\\\u044f \\\\u043f\\\\u043e\\\\u0441\\\\u043b\\\\u0435\\\\u0434\\\\u043d\\\\u0435\\\\u0439 \\\\u043e\\\\u0448\\\\u0438\\\\u0431\\\\u043a\\\\u0438 refresh (1 = \\\\u0435\\\\u0441\\\\u0442\\\\u044c \\\\u043e\\\\u0448\\\\u0438\\\\u0431\\\\u043a\\\\u0430, 0 = \\\\u043e\\\\u0448\\\\u0438\\\\u0431\\\\u043e\\\\u043a \\\\u043d\\\\u0435\\\\u0442).\\\",\\n \\\"fieldConfig\\\": {\\n \\\"defaults\\\": {\\n \\\"color\\\": {\\n \\\"mode\\\": \\\"thresholds\\\"\\n },\\n \\\"thresholds\\\": {\\n \\\"mode\\\": \\\"absolute\\\",\\n \\\"steps\\\": [\\n {\\n \\\"color\\\": \\\"green\\\",\\n \\\"value\\\": null\\n },\\n {\\n \\\"color\\\": \\\"red\\\",\\n \\\"value\\\": 1\\n }\\n ]\\n },\\n \\\"mappings\\\": [\\n {\\n \\\"type\\\": \\\"value\\\",\\n \\\"options\\\": {\\n \\\"0\\\": {\\n \\\"text\\\": \\\"OK\\\"\\n },\\n \\\"1\\\": {\\n \\\"text\\\": \\\"ERROR\\\"\\n }\\n }\\n }\\n ]\\n },\\n \\\"overrides\\\": []\\n },\\n \\\"gridPos\\\": {\\n \\\"h\\\": 4,\\n \\\"w\\\": 6,\\n \\\"x\\\": 18,\\n \\\"y\\\": 70\\n },\\n \\\"id\\\": 47,\\n \\\"options\\\": {\\n \\\"colorMode\\\": \\\"value\\\",\\n \\\"graphMode\\\": \\\"none\\\",\\n \\\"justifyMode\\\": \\\"auto\\\",\\n \\\"orientation\\\": \\\"auto\\\",\\n \\\"reduceOptions\\\": {\\n \\\"calcs\\\": [\\n \\\"lastNotNull\\\"\\n ],\\n \\\"fields\\\": \\\"\\\",\\n \\\"values\\\": false\\n },\\n \\\"showPercentChange\\\": false,\\n \\\"textMode\\\": \\\"auto\\\",\\n \\\"wideLayout\\\": true\\n },\\n \\\"pluginVersion\\\": \\\"10.4.15\\\",\\n \\\"targets\\\": [\\n {\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"editorMode\\\": \\\"code\\\",\\n \\\"expr\\\": \\\"(max(trivy_report_metrics_last_error_info{k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"})) or vector(0)\\\",\\n \\\"instant\\\": true,\\n \\\"refId\\\": \\\"A\\\"\\n }\\n ],\\n \\\"title\\\": \\\"Exporter: Last Error Present\\\",\\n \\\"type\\\": \\\"stat\\\"\\n }\\n ],\\n \\\"refresh\\\": \\\"10m\\\",\\n \\\"schemaVersion\\\": 41,\\n \\\"tags\\\": [\\n \\\"Prometheus\\\",\\n \\\"Trivy-operator\\\",\\n \\\"CRD\\\"\\n ],\\n \\\"templating\\\": {\\n \\\"list\\\": [\\n {\\n \\\"allValue\\\": \\\".*\\\",\\n \\\"current\\\": {},\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"definition\\\": \\\"label_values(trivy_cluster_compliance, k8s_cluster)\\\",\\n \\\"hide\\\": 0,\\n \\\"includeAll\\\": true,\\n \\\"multi\\\": true,\\n \\\"name\\\": \\\"k8s_cluster\\\",\\n \\\"options\\\": [],\\n \\\"query\\\": {\\n \\\"qryType\\\": 1,\\n \\\"query\\\": \\\"label_values(trivy_cluster_compliance, k8s_cluster)\\\",\\n \\\"refId\\\": \\\"PrometheusVariableQueryEditor-VariableQuery\\\"\\n },\\n \\\"refresh\\\": 1,\\n \\\"regex\\\": \\\"\\\",\\n \\\"skipUrlSync\\\": false,\\n \\\"sort\\\": 1,\\n \\\"type\\\": \\\"query\\\"\\n },\\n {\\n \\\"allValue\\\": \\\".*\\\",\\n \\\"current\\\": {},\\n \\\"datasource\\\": {\\n \\\"type\\\": \\\"prometheus\\\",\\n \\\"uid\\\": \\\"fewcox453ve2od\\\"\\n },\\n \\\"definition\\\": \\\"label_values(trivy_config_audit_created{k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"},exported_namespace)\\\",\\n \\\"hide\\\": 0,\\n \\\"includeAll\\\": true,\\n \\\"multi\\\": true,\\n \\\"name\\\": \\\"exported_namespace\\\",\\n \\\"options\\\": [],\\n \\\"query\\\": {\\n \\\"qryType\\\": 1,\\n \\\"query\\\": \\\"label_values(trivy_config_audit_created{k8s_cluster=~\\\\\\\"$k8s_cluster\\\\\\\"},exported_namespace)\\\",\\n \\\"refId\\\": \\\"PrometheusVariableQueryEditor-VariableQuery\\\"\\n },\\n \\\"refresh\\\": 1,\\n \\\"regex\\\": \\\"\\\",\\n \\\"skipUrlSync\\\": false,\\n \\\"sort\\\": 1,\\n \\\"type\\\": \\\"query\\\"\\n }\\n ]\\n },\\n \\\"time\\\": {\\n \\\"from\\\": \\\"now-7d\\\",\\n \\\"to\\\": \\\"now\\\"\\n },\\n \\\"timepicker\\\": {},\\n \\\"timezone\\\": \\\"\\\",\\n \\\"title\\\": \\\"Trivy Operator - CRD Results\\\",\\n \\\"uid\\\": \\\"security_trivy_operator_crd\\\",\\n \\\"version\\\": 32,\\n \\\"weekStart\\\": \\\"\\\"\\n}\\n\\n```\"}": [],
"{\"uri\":\"vscode-terminal:/home-ruslanpi-Documents-repos-lmru-devops-argocd-apps/1\",\"range\":{\"selectionStartColumn\":7,\"selectionStartLineNumber\":1006,\"positionColumn\":1,\"positionLineNumber\":1012},\"text\":\"```bash\\nkubectl delete configauditreports.aquasecurity.github.io -A --all\\\\nkubectl delete clusterconfigauditreports.aquasecurity.github.io --all\\\\nkubectl delete infraassessmentreports.aquasecurity.github.io -A --all\\\\nkubectl delete clusterinfraassessmentreports.aquasecurity.github.io --all\\\\nkubectl delete vulnerabilityreports.aquasecurity.github.io -A --all\\\\nkubectl delete clustervulnerabilityreports.aquasecurity.github.io --all\\\\nkubectl delete rbacassessmentreports.aquasecurity.github.io -A --all\\\\nkubectl delete clusterrbacassessmentreports.aquasecurity.github.io --all\\\\nkubectl delete exposedsecretreports.aquasecurity.github.io -A --all\\\\nkubectl delete sbomreports.aquasecurity.github.io -A --all\\\\nkubectl delete clustersbomreports.aquasecurity.github.io --all\\\\nkubectl rollout restart deploy/trivy-operator -n devsecops-trivy-operator\\n \\n```\"}": [
{
"uuid": "53c22052-8005-4c96-bd62-b16e06c9a77f"
}
]
},
"terminalSelections": {
"{\"uri\":\"vscode-terminal:/home-ruslanpi-Documents-repos-lmru-devops-argocd-apps/1\",\"range\":{\"selectionStartColumn\":94,\"selectionStartLineNumber\":1007,\"positionColumn\":113,\"positionLineNumber\":1019},\"text\":\"```bash\\nkubectl get clustercompliancereport k8s-cis-1.23 -o json \\\\\\n| jq -r '\\n (.status.detailReport.results // [])[]\\n | select(((.checks // []) | map(select(.success==false)) | length) > 0)\\n | \\\"\\\\(.id)\\\\tFAIL=\\\" + (((.checks // []) | map(select(.success==false)) | length) | tostring) + \\\"\\\\t\\\\(.severity)\\\\t\\\\(.name)\\\"\\n' | sort -V\\n4.2.8 FAIL=6 HIGH Ensure that the --hostname-override argument is not set\\n5.2.2 FAIL=10 HIGH Minimize the admission of privileged containers\\n5.2.3 FAIL=2 HIGH Minimize the admission of containers wishing to share the host process ID namespace\\n5.2.5 FAIL=38 HIGH Minimize the admission of containers wishing to share the host network namespace\\n5.2.13 FAIL=2 MEDIUM Minimize the admission of containers which use HostPorts\\n5.7.3 FAIL=4 HIGH Apply Security Context to Your Pods and Containers\\n```\"}": [
{
"uuid": "391b739c-6a0c-4e1e-9dcd-92f989e06995"
}
],
"{\"uri\":\"vscode-terminal:/home-ruslanpi-Documents-repos-lmru-devops-argocd-apps/1\",\"range\":{\"selectionStartColumn\":92,\"selectionStartLineNumber\":1008,\"positionColumn\":115,\"positionLineNumber\":1014},\"text\":\"```bash\\nkubectl get clustercompliancereport k8s-cis-1.23 -o json \\\\ \\n| jq -r '\\n (.status.detailReport.results // [])[]\\n | select(((.checks // []) | map(select(.success==false)) | length) > 0)\\n | \\\"\\\\(.id)\\\\tFAIL=\\\" + (((.checks // []) | map(select(.success==false)) | length) | tostring) + \\\"\\\\t\\\\(.severity)\\\\t\\\\(.name)\\\"\\n' | sort -V\\n```\"}": [
{
"uuid": "7cbaba43-1a18-471c-a5b0-1bc9f1e53197"
}
],
"{\"uri\":\"vscode-terminal:/home-ruslanpi-Documents-repos-lmru-devops-argocd-apps/1\",\"range\":{\"selectionStartColumn\":90,\"selectionStartLineNumber\":976,\"positionColumn\":109,\"positionLineNumber\":1014},\"text\":\"```bash\\nkubectl -ti -n d8-system exec svc/deckhouse-leader -c deckhouse -- deckhouse-controller module --help \\nusage: deckhouse-controller module [<flags>] <command> [<args> ...]\\n\\nList modules and dump their values\\n\\nFlags:\\n --help Show context-sensitive help (also try --help-long and --help-man).\\n -o, --output=yaml Output format: json|yaml.\\n\\nSubcommands:\\n module list\\n List available modules and their enabled status.\\n\\n module values [<flags>] <module_name>\\n Dump module values by name.\\n\\n module render [<flags>] <module_name>\\n Render module manifests.\\n\\n module config [<flags>] <module_name>\\n Dump module config values by name.\\n\\n module patches <module_name>\\n Dump module value patches by name.\\n\\n module resource-monitor [<module_name>]\\n Dump resource monitors.\\n\\n module snapshots <module_name>\\n Dump snapshots for all hooks.\\n\\n module enable <module_name>\\n Enable module via spec.enabled flag in the ModuleConfig resource. Use snake-case for the module name.\\n\\n module disable <module_name>\\n Disable module via spec.enabled flag in the ModuleConfig resource. Use snake-case for the module name.\\n\\n\\n```\"}": [
{
"uuid": "8dbfefac-2f3e-4f75-8c95-ef8ade62efa1"
}
],
"{\"uri\":\"vscode-terminal:/home-ruslanpi-Documents-repos-lmru-devops-argocd-apps/1\",\"range\":{\"selectionStartColumn\":7,\"selectionStartLineNumber\":1006,\"positionColumn\":1,\"positionLineNumber\":1012},\"text\":\"```bash\\nkubectl delete configauditreports.aquasecurity.github.io -A --all\\\\nkubectl delete clusterconfigauditreports.aquasecurity.github.io --all\\\\nkubectl delete infraassessmentreports.aquasecurity.github.io -A --all\\\\nkubectl delete clusterinfraassessmentreports.aquasecurity.github.io --all\\\\nkubectl delete vulnerabilityreports.aquasecurity.github.io -A --all\\\\nkubectl delete clustervulnerabilityreports.aquasecurity.github.io --all\\\\nkubectl delete rbacassessmentreports.aquasecurity.github.io -A --all\\\\nkubectl delete clusterrbacassessmentreports.aquasecurity.github.io --all\\\\nkubectl delete exposedsecretreports.aquasecurity.github.io -A --all\\\\nkubectl delete sbomreports.aquasecurity.github.io -A --all\\\\nkubectl delete clustersbomreports.aquasecurity.github.io --all\\\\nkubectl rollout restart deploy/trivy-operator -n devsecops-trivy-operator\\n \\n```\"}": [
{
"uuid": "53c22052-8005-4c96-bd62-b16e06c9a77f"
}
]
},
"selectedDocs": {},
"externalLinks": {},
"diffHistory": [],
"cursorRules": {},
"cursorCommands": {},
"uiElementSelections": [],
"consoleLogs": [],
"ideEditorsState": [],
"gitPRDiffSelections": {},
"subagentSelections": {},
"browserSelections": {}
}
},
"generatingBubbleIds": [],
"isReadingLongFile": false,
"codeBlockData": {},
"originalFileStates": {
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/stage/templates/_helpers.tpl": {
"content": "{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"trivy-operator.name\" -}}\n {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix \"-\" }}\n{{- end }}\n\n{{/*\nCreate a default fully qualified app name.\nWe truncate at 63 chars because some Kubernetes name fields are limited to this\n(by the DNS naming spec). If release name contains chart name it will be used\nas a full name.\n*/}}\n{{- define \"trivy-operator.fullname\" -}}\n {{- if .Values.fullnameOverride }}\n {{- .Values.fullnameOverride | trunc 63 | trimSuffix \"-\" }}\n {{- else }}\n {{- $name := default .Chart.Name .Values.nameOverride }}\n {{- if contains $name .Release.Name }}\n {{- .Release.Name | trunc 63 | trimSuffix \"-\" }}\n {{- else }}\n {{- printf \"%s-%s\" .Release.Name $name | trunc 63 | trimSuffix \"-\" }}\n {{- end }}\n {{- end }}\n{{- end }}\n\n{{/*\nCreate chart name and version as used by the chart label.\n*/}}\n{{- define \"trivy-operator.chart\" -}}\n {{- printf \"%s-%s\" .Chart.Name .Chart.Version | replace \"+\" \"_\" | trunc 63 | trimSuffix \"-\" }}\n{{- end }}\n\n{{/*\nCommon labels\n*/}}\n{{- define \"trivy-operator.labels\" -}}\n{{- if eq .Values.managedBy \"Helm\" -}}\nhelm.sh/chart: {{ include \"trivy-operator.chart\" . }}\n{{ end -}}\n{{ include \"trivy-operator.selectorLabels\" . }}\n{{- if .Chart.AppVersion }}\napp.kubernetes.io/version: {{ .Chart.AppVersion | quote }}\n{{- end }}\napp.kubernetes.io/managed-by: {{ .Values.managedBy }}\n{{- end }}\n\n{{/*\nSelector labels.\n*/}}\n{{- define \"trivy-operator.selectorLabels\" -}}\napp.kubernetes.io/name: {{ include \"trivy-operator.name\" . }}\napp.kubernetes.io/instance: {{ .Release.Name }}\n{{- end }}\n\n{{/*\nCreate the name of the service account to use.\n*/}}\n{{- define \"trivy-operator.serviceAccountName\" -}}\n {{- if .Values.serviceAccount.create }}\n {{- default (include \"trivy-operator.fullname\" .) .Values.serviceAccount.name }}\n {{- else }}\n {{- default \"default\" .Values.serviceAccount.name }}\n {{- end }}\n{{- end }}\n\n{{/*\nCreate the name of the service account to use.\n*/}}\n{{- define \"trivy-operator.namespace\" -}}\n {{- default .Release.Namespace .Values.operator.namespace }}\n{{- end }}\n\n{{/*\nName for the Trivy CRD metrics collector.\n*/}}\n{{- define \"trivy-operator.reportMetricsName\" -}}\n {{- printf \"%s-kube-state-metrics\" (include \"trivy-operator.fullname\" .) | trunc 63 | trimSuffix \"-\" }}\n{{- end }}\n\n{{/*\nSelector labels for the Trivy CRD metrics collector.\n*/}}\n{{- define \"trivy-operator.reportMetricsSelectorLabels\" -}}\n{{ include \"trivy-operator.selectorLabels\" . }}\napp.kubernetes.io/component: report-metrics\n{{- end }}\n\n{{/*\nService account name for the Trivy CRD metrics collector.\n*/}}\n{{- define \"trivy-operator.reportMetricsServiceAccountName\" -}}\n {{- if .Values.reportMetrics.serviceAccount.create }}\n {{- default (include \"trivy-operator.reportMetricsName\" .) .Values.reportMetrics.serviceAccount.name }}\n {{- else }}\n {{- default \"default\" .Values.reportMetrics.serviceAccount.name }}\n {{- end }}\n{{- end }}\n\n{{/*\nDefine the image registry to use if global values are set.\n*/}}\n{{- define \"global.imageRegistry\" -}}\n{{- if ((.Values.global).image).registry -}}\n {{- .Values.global.image.registry }}\n{{- end }}\n{{- end }}\n",
"firstEditBubbleId": "60048483-fd32-4dd2-9a18-9cae0dcdd5ef",
"isNewlyCreated": false,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/prod/templates/_helpers.tpl": {
"content": "{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"trivy-operator.name\" -}}\n {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix \"-\" }}\n{{- end }}\n\n{{/*\nCreate a default fully qualified app name.\nWe truncate at 63 chars because some Kubernetes name fields are limited to this\n(by the DNS naming spec). If release name contains chart name it will be used\nas a full name.\n*/}}\n{{- define \"trivy-operator.fullname\" -}}\n {{- if .Values.fullnameOverride }}\n {{- .Values.fullnameOverride | trunc 63 | trimSuffix \"-\" }}\n {{- else }}\n {{- $name := default .Chart.Name .Values.nameOverride }}\n {{- if contains $name .Release.Name }}\n {{- .Release.Name | trunc 63 | trimSuffix \"-\" }}\n {{- else }}\n {{- printf \"%s-%s\" .Release.Name $name | trunc 63 | trimSuffix \"-\" }}\n {{- end }}\n {{- end }}\n{{- end }}\n\n{{/*\nCreate chart name and version as used by the chart label.\n*/}}\n{{- define \"trivy-operator.chart\" -}}\n {{- printf \"%s-%s\" .Chart.Name .Chart.Version | replace \"+\" \"_\" | trunc 63 | trimSuffix \"-\" }}\n{{- end }}\n\n{{/*\nCommon labels\n*/}}\n{{- define \"trivy-operator.labels\" -}}\n{{- if eq .Values.managedBy \"Helm\" -}}\nhelm.sh/chart: {{ include \"trivy-operator.chart\" . }}\n{{ end -}}\n{{ include \"trivy-operator.selectorLabels\" . }}\n{{- if .Chart.AppVersion }}\napp.kubernetes.io/version: {{ .Chart.AppVersion | quote }}\n{{- end }}\napp.kubernetes.io/managed-by: {{ .Values.managedBy }}\n{{- end }}\n\n{{/*\nSelector labels.\n*/}}\n{{- define \"trivy-operator.selectorLabels\" -}}\napp.kubernetes.io/name: {{ include \"trivy-operator.name\" . }}\napp.kubernetes.io/instance: {{ .Release.Name }}\n{{- end }}\n\n{{/*\nCreate the name of the service account to use.\n*/}}\n{{- define \"trivy-operator.serviceAccountName\" -}}\n {{- if .Values.serviceAccount.create }}\n {{- default (include \"trivy-operator.fullname\" .) .Values.serviceAccount.name }}\n {{- else }}\n {{- default \"default\" .Values.serviceAccount.name }}\n {{- end }}\n{{- end }}\n\n{{/*\nCreate the name of the service account to use.\n*/}}\n{{- define \"trivy-operator.namespace\" -}}\n {{- default .Release.Namespace .Values.operator.namespace }}\n{{- end }}\n\n{{/*\nName for the Trivy CRD metrics collector.\n*/}}\n{{- define \"trivy-operator.reportMetricsName\" -}}\n {{- printf \"%s-kube-state-metrics\" (include \"trivy-operator.fullname\" .) | trunc 63 | trimSuffix \"-\" }}\n{{- end }}\n\n{{/*\nSelector labels for the Trivy CRD metrics collector.\n*/}}\n{{- define \"trivy-operator.reportMetricsSelectorLabels\" -}}\n{{ include \"trivy-operator.selectorLabels\" . }}\napp.kubernetes.io/component: report-metrics\n{{- end }}\n\n{{/*\nService account name for the Trivy CRD metrics collector.\n*/}}\n{{- define \"trivy-operator.reportMetricsServiceAccountName\" -}}\n {{- if .Values.reportMetrics.serviceAccount.create }}\n {{- default (include \"trivy-operator.reportMetricsName\" .) .Values.reportMetrics.serviceAccount.name }}\n {{- else }}\n {{- default \"default\" .Values.reportMetrics.serviceAccount.name }}\n {{- end }}\n{{- end }}\n\n{{/*\nDefine the image registry to use if global values are set.\n*/}}\n{{- define \"global.imageRegistry\" -}}\n{{- if ((.Values.global).image).registry -}}\n {{- .Values.global.image.registry }}\n{{- end }}\n{{- end }}\n",
"firstEditBubbleId": "6a8d5915-bb84-4d8c-bd05-95bdd5221622",
"isNewlyCreated": false,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/stage/values/values-global.yaml": {
"content": "# Default values for the trivy-operator Helm chart, these are used to render\n# the templates into valid k8s Resources.\n\n# -- global values provide a centralized configuration for 'image.registry', reducing the potential for errors.\n# If left blank, the chart will default to the individually set 'image.registry' values\nglobal:\n image:\n registry: \"docker-security.art.lmru.tech\"\n\n# -- managedBy is similar to .Release.Service but allows to overwrite the value\nmanagedBy: Helm\n\n# -- targetNamespace defines where you want trivy-operator to operate. By\n# default, it's a blank string to select all namespaces, but you can specify\n# another namespace, or a comma separated list of namespaces.\ntargetNamespaces: \"\"\n\n# -- excludeNamespaces is a comma separated list of namespaces (or glob patterns)\n# to be excluded from scanning. Only applicable in the all namespaces install\n# mode, i.e. when the targetNamespaces values is a blank string.\nexcludeNamespaces:\n#- kube-system\n- kube-public\n- kube-node-lease\n- ingress-nginx\n\n# -- extraEnv is a list of extra environment variables for the trivy-operator.\nextraEnv: []\n\n# -- hostAliases for `deployment` (TrivyOperator) and `statefulset` (TrivyServer)\n\nhostAliases: []\n# - ip: \"127.0.0.1\"\n# hostnames:\n# - \"foo.local\"\n# - \"bar.local\"\n# - ip: \"10.1.2.3\"\n# hostnames:\n# - \"foo.remote\"\n# - \"bar.remote\"\n\n# -- targetWorkloads is a comma seperated list of Kubernetes workload resources\n# to be included in the vulnerability and config-audit scans\n# if left blank, all workload resources will be scanned\ntargetWorkloads: \"pod,replicaset,replicationcontroller,statefulset,daemonset,cronjob,job\"\n\n# -- nameOverride override operator name\nnameOverride: \"\"\n\n# -- fullnameOverride override operator full name\nfullnameOverride: \"trivy-operator\"\n\noperator:\n # -- namespace to install the operator, defaults to the .Release.Namespace\n namespace: \"\"\n # -- replicas the number of replicas of the operator's pod\n replicas: 1\n\n # -- number of old history to retain to allow rollback (if not set, default Kubernetes value is set to 10)\n revisionHistoryLimit: 5\n\n # -- additional annotations for the operator deployment\n annotations: {}\n\n # -- additional labels for the operator deployment\n labels: {}\n\n # -- additional labels for the operator pod\n podLabels:\n prometheus.deckhouse.io/custom-target: trivy-operator\n\n # -- leaderElectionId determines the name of the resource that leader election\n # will use for holding the leader lock.\n leaderElectionId: \"trivyoperator-lock\"\n\n # -- logDevMode the flag to enable development mode (more human-readable output, extra stack traces and logging information, etc)\n logDevMode: false\n\n # -- scanJobTTL the set automatic cleanup time after the job is completed\n scanJobTTL: \"\"\n\n # -- scanSecretTTL set an automatic cleanup for scan job secrets\n scanSecretTTL: \"\"\n\n # -- scanJobTimeout the length of time to wait before giving up on a scan job\n scanJobTimeout: 5m\n\n # -- scanJobsConcurrentLimit the maximum number of scan jobs create by the operator\n scanJobsConcurrentLimit: 5\n\n # -- scanNodeCollectorLimit the maximum number of node collector jobs create by the operator\n scanNodeCollectorLimit: 1\n\n # -- scanJobsRetryDelay the duration to wait before retrying a failed scan job\n scanJobsRetryDelay: 30s\n\n # -- the flag to enable vulnerability scanner\n vulnerabilityScannerEnabled: false\n # -- the flag to enable sbom generation, required for enabling ClusterVulnerabilityReports\n sbomGenerationEnabled: false\n # -- the flag to enable cluster sbom cache generation\n clusterSbomCacheEnabled: false\n # -- scannerReportTTL the flag to set how long a report should exist. \"\" means that the ScannerReportTTL feature is disabled\n scannerReportTTL: \"20h\"\n # -- cacheReportTTL the flag to set how long a cluster sbom report should exist. \"\" means that the cacheReportTTL feature is disabled\n cacheReportTTL: \"48h\"\n # -- configAuditScannerEnabled the flag to enable configuration audit scanner\n configAuditScannerEnabled: true\n # -- rbacAssessmentScannerEnabled the flag to enable rbac assessment scanner\n rbacAssessmentScannerEnabled: false\n # -- infraAssessmentScannerEnabled the flag to enable infra assessment scanner\n infraAssessmentScannerEnabled: true\n # -- clusterComplianceEnabled the flag to enable cluster compliance scanner\n clusterComplianceEnabled: true\n # -- batchDeleteLimit the maximum number of config audit reports deleted by the operator when the plugin's config has changed.\n batchDeleteLimit: 10\n # -- vulnerabilityScannerScanOnlyCurrentRevisions the flag to only create vulnerability scans on the current revision of a deployment.\n vulnerabilityScannerScanOnlyCurrentRevisions: false\n # -- configAuditScannerScanOnlyCurrentRevisions the flag to only create config audit scans on the current revision of a deployment.\n configAuditScannerScanOnlyCurrentRevisions: true\n # -- batchDeleteDelay the duration to wait before deleting another batch of config audit reports.\n batchDeleteDelay: 10s\n # -- accessGlobalSecretsAndServiceAccount The flag to enable access to global secrets/service accounts to allow `vulnerability scan job` to pull images from private registries\n accessGlobalSecretsAndServiceAccount: false\n # -- builtInTrivyServer The flag enables the usage of built-in trivy server in cluster. It also overrides the following trivy params with built-in values\n # trivy.mode = ClientServer and serverURL = http://<serverServiceName>.<trivy operator namespace>:4975\n builtInTrivyServer: false\n # -- builtInServerRegistryInsecure is the flag to enable insecure connection from the built-in Trivy server to the registry.\n builtInServerRegistryInsecure: false\n # -- controllerCacheSyncTimeout the duration to wait for controller resources cache sync (default: 5m).\n controllerCacheSyncTimeout: \"5m\"\n\n # -- trivyServerHealthCheckCacheExpiration The flag to set the interval for trivy server health cache before it invalidate\n trivyServerHealthCheckCacheExpiration: 10h\n\n # -- metricsFindingsEnabled the flag to enable metrics for findings\n metricsFindingsEnabled: true\n\n # -- metricsVulnIdEnabled the flag to enable metrics about cve vulns id\n # be aware of metrics cardinality is significantly increased with this feature enabled.\n metricsVulnIdEnabled: false\n\n # -- exposedSecretScannerEnabled the flag to enable exposed secret scanner\n exposedSecretScannerEnabled: false\n\n # -- MetricsExposedSecretInfo the flag to enable metrics about exposed secrets\n # be aware of metrics cardinality is significantly increased with this feature enabled.\n metricsExposedSecretInfo: false\n\n # -- MetricsConfigAuditInfo the flag to enable metrics about configuration audits\n # be aware of metrics cardinality is significantly increased with this feature enabled.\n metricsConfigAuditInfo: false\n\n # -- MetricsRbacAssessmentInfo the flag to enable metrics about Rbac Assessment\n # be aware of metrics cardinality is significantly increased with this feature enabled.\n metricsRbacAssessmentInfo: false\n\n # -- MetricsInfraAssessmentInfo the flag to enable metrics about Infra Assessment\n # be aware of metrics cardinality is significantly increased with this feature enabled.\n metricsInfraAssessmentInfo: false\n\n # -- MetricsImageInfo the flag to enable metrics about Image Information of scanned images\n # This information has image os information including os family, name/version, and if end of service life has been reached\n # be aware of metrics cardinality is significantly increased with this feature enabled.\n metricsImageInfo: false\n\n # -- MetricsClusterComplianceInfo the flag to enable metrics about Cluster Compliance\n # be aware of metrics cardinality is significantly increased with this feature enabled.\n metricsClusterComplianceInfo: true\n\n # -- serverAdditionalAnnotations the flag to set additional annotations for the trivy server pod\n serverAdditionalAnnotations: {}\n\n # -- webhookBroadcastURL the flag to set reports should be sent to a webhook endpoint. \"\" means that the webhookBroadcastURL feature is disabled\n webhookBroadcastURL: \"\"\n\n # -- webhookBroadcastTimeout the flag to set timeout for webhook requests if webhookBroadcastURL is enabled\n webhookBroadcastTimeout: 30s\n\n # -- webhookBroadcastCustomHeaders the flag to set webhook endpoint sent with custom defined headers if webhookBroadcastURL is enabled\n webhookBroadcastCustomHeaders: \"\"\n\n # -- webhookSendDeletedReports the flag to enable sending deleted reports if webhookBroadcastURL is enabled\n webhookSendDeletedReports: false\n\n # -- privateRegistryScanSecretsNames is map of namespace:secrets, secrets are comma seperated which can be used to authenticate in private registries in case if there no imagePullSecrets provided example : {\"mynamespace\":\"mySecrets,anotherSecret\"}\n privateRegistryScanSecretsNames: {}\n\n # -- mergeRbacFindingWithConfigAudit the flag to enable merging rbac finding with config-audit report\n mergeRbacFindingWithConfigAudit: false\n\n # -- httpProxy is the HTTP proxy used by Trivy operator to download the default policies from GitHub.\n httpProxy: ~\n\n # -- httpsProxy is the HTTPS proxy used by Trivy operator to download the default policies from GitHub.\n httpsProxy: ~\n\n # -- noProxy is a comma separated list of IPs and domain names that are not subject to proxy settings.\n noProxy: ~\n\n # -- vaulesFromConfigMap name of a ConfigMap to apply OPERATOR_* environment variables. Will override Helm values.\n valuesFromConfigMap: \"\"\n\n # -- valuesFromSecret name of a Secret to apply OPERATOR_* environment variables. Will override Helm AND ConfigMap values.\n valuesFromSecret: \"\"\n\nimage:\n registry: \"mirror.gcr.io\"\n repository: \"aquasec/trivy-operator\"\n # -- tag is an override of the image tag, which is by default set by the\n # appVersion field in Chart.yaml.\n tag: \"\"\n # -- pullPolicy set the operator pullPolicy\n pullPolicy: IfNotPresent\n # -- pullSecrets set the operator pullSecrets\n pullSecrets: []\n\n# -- service only expose a metrics endpoint for prometheus to scrape,\n# trivy-operator does not have a user interface.\nservice:\n # -- if true, the Service doesn't allocate any IP\n headless: false\n # -- port exposed by the Service\n metricsPort: 80\n # -- annotations added to the operator's service\n annotations: {}\n # -- appProtocol of the monitoring service\n metricsAppProtocol: TCP\n # -- the Service type\n type: ClusterIP\n # -- the nodeport to use when service type is LoadBalancer or NodePort. If not set, Kubernetes automatically select one.\n nodePort:\n\n # -- Prometheus ServiceMonitor configuration -- to install the trivy operator with the ServiceMonitor\n # you must have Prometheus already installed and running. If you do not have Prometheus installed, enabling this will\n # have no effect.\nserviceMonitor:\n # -- enabled determines whether a serviceMonitor should be deployed\n enabled: false\n # -- The namespace where Prometheus expects to find service monitors\n namespace: ~\n # -- Interval at which metrics should be scraped. If not specified Prometheus global scrape interval is used.\n interval: ~\n # -- Additional annotations for the serviceMonitor\n annotations: {}\n # -- Additional labels for the serviceMonitor\n labels: {}\n # -- HonorLabels chooses the metrics labels on collisions with target labels\n honorLabels: true\n # -- EndpointAdditionalProperties allows setting additional properties on the endpoint such as relabelings, metricRelabelings etc.\n endpointAdditionalProperties: {}\n\nreportMetrics:\n enabled: true\n image:\n registry: docker.io\n repository: library/python\n tag: 3.12-alpine\n pullPolicy: IfNotPresent\n refreshIntervalSeconds: 120\n requestTimeoutSeconds: 30\n serviceAccount:\n create: true\n name: \"\"\n podAnnotations: {}\n podLabels: {}\n service:\n customTarget: custom-trivy-kube-state-metrics\n port: 8080\n path: /metrics\n sampleLimit: 15000\n resources:\n requests:\n cpu: 50m\n memory: 128Mi\n limits:\n cpu: 200m\n memory: 256Mi\n\ntrivyOperator:\n # -- vulnerabilityReportsPlugin the name of the plugin that generates vulnerability reports `Trivy`\n vulnerabilityReportsPlugin: \"Trivy\"\n # -- configAuditReportsPlugin the name of the plugin that generates config audit reports.\n configAuditReportsPlugin: \"Trivy\"\n # -- scanJobCompressLogs control whether scanjob output should be compressed or plain\n scanJobCompressLogs: false\n # -- scanJobAffinity affinity to be applied to the scanner pods and node-collector\n scanJobAffinity: {}\n # -- scanJobTolerations tolerations to be applied to the scanner pods so that they can run on nodes with matching taints\n scanJobTolerations: []\n # -- If you do want to specify tolerations, uncomment the following lines, adjust them as necessary, and remove the\n # square brackets after 'scanJobTolerations:'.\n # - key: \"key1\"\n # operator: \"Equal\"\n # value: \"value1\"\n # effect: \"NoSchedule\"\n # -- scanJobNodeSelector nodeSelector to be applied to the scanner pods so that they can run on nodes with matching labels\n scanJobNodeSelector: {}\n # -- If you do want to specify nodeSelector, uncomment the following lines, adjust them as necessary, and remove the\n # square brackets after 'scanJobNodeSelector:'.\n # nodeType: worker\n # cpu: sandylake\n # teamOwner: operators\n\n # -- scanJobCustomVolumesMount add custom volumes mount to the scan job\n scanJobCustomVolumesMount: []\n # - name: var-lib-etcd\n # mountPath: /var/lib/etcd\n # readOnly: true\n\n # -- scanJobCustomVolumes add custom volumes to the scan job\n scanJobCustomVolumes: []\n # - name: var-lib-etcd\n # hostPath:\n # path: /var/lib/etcd\n\n # -- useGCRServiceAccount the flag to enable the usage of GCR service account for scanning images in GCR\n useGCRServiceAccount: true\n # -- scanJobAutomountServiceAccountToken the flag to enable automount for service account token on scan job\n scanJobAutomountServiceAccountToken: false\n\n # -- scanJobAnnotations comma-separated representation of the annotations which the user wants the scanner jobs and pods to be\n # annotated with. Example: `foo=bar,env=stage` will annotate the scanner jobs and pods with the annotations `foo: bar` and `env: stage`\n scanJobAnnotations: \"\"\n\n # -- scanJobPodTemplateLabels comma-separated representation of the labels which the user wants the scanner pods to be\n # labeled with. Example: `foo=bar,env=stage` will labeled the scanner pods with the labels `foo: bar` and `env: stage`\n scanJobPodTemplateLabels: \"\"\n\n # -- skipInitContainers when this flag is set to true, the initContainers will be skipped for the scanner and node collector pods\n skipInitContainers: false\n\n # -- scanJobPodTemplatePodSecurityContext podSecurityContext the user wants the scanner and node collector pods to be amended with.\n # Example:\n # RunAsUser: 10000\n # RunAsGroup: 10000\n # RunAsNonRoot: true\n scanJobPodTemplatePodSecurityContext: {}\n\n # -- scanJobPodTemplateContainerSecurityContext SecurityContext the user wants the scanner and node collector containers (and their\n # initContainers) to be amended with.\n scanJobPodTemplateContainerSecurityContext:\n allowPrivilegeEscalation: false\n capabilities:\n drop:\n - ALL\n privileged: false\n readOnlyRootFilesystem: true\n # -- For filesystem scanning, Trivy needs to run as the root user\n # runAsUser: 0\n\n # -- scanJobPodPriorityClassName Priority class name to be set on the pods created by trivy operator jobs. This accepts a string value\n scanJobPodPriorityClassName: \"\"\n\n # -- reportResourceLabels comma-separated scanned resource labels which the user wants to include in the Prometheus\n # metrics report. Example: `owner,app`\n reportResourceLabels: \"\"\n\n # -- reportRecordFailedChecksOnly flag is to record only failed checks on misconfiguration reports (config-audit and rbac assessment)\n reportRecordFailedChecksOnly: true\n\n # -- skipResourceByLabels comma-separated labels keys which trivy-operator will skip scanning on resources with matching labels\n skipResourceByLabels: \"\"\n\n # -- metricsResourceLabelsPrefix Prefix that will be prepended to the labels names indicated in `reportResourceLabels`\n # when including them in the Prometheus metrics\n metricsResourceLabelsPrefix: \"k8s_label_\"\n\n # -- additionalReportLabels comma-separated representation of the labels which the user wants the scanner pods to be\n # labeled with. Example: `foo=bar,env=stage` will labeled the reports with the labels `foo: bar` and `env: stage`\n additionalReportLabels: \"\"\n\n # -- policiesConfig Custom Rego Policies to be used by the config audit scanner\n # See https://github.com/aquasecurity/trivy-operator/blob/main/docs/tutorials/writing-custom-configuration-audit-policies.md for more details.\n policiesConfig: \"\"\n\n # -- excludeImages is comma separated glob patterns for excluding images from scanning.\n # Example: pattern: `k8s.gcr.io/*/*` will exclude image: `k8s.gcr.io/coredns/coredns:v1.8.0`.\n excludeImages: \"\"\n\ntrivy:\n # -- createConfig indicates whether to create config objects\n createConfig: true\n image:\n # -- registry of the Trivy image\n registry: mirror.gcr.io\n # -- repository of the Trivy image\n repository: aquasec/trivy\n # -- tag version of the Trivy image\n tag: 0.60.0\n # -- imagePullSecret is the secret name to be used when pulling trivy image from private registries example : reg-secret\n # It is the user responsibility to create the secret for the private registry in `trivy-operator` namespace\n imagePullSecret: ~\n\n # -- pullPolicy is the imge pull policy used for trivy image , valid values are (Always, Never, IfNotPresent)\n pullPolicy: IfNotPresent\n\n # -- mode is the Trivy client mode. Either Standalone or ClientServer. Depending\n # on the active mode other settings might be applicable or required.\n mode: Standalone\n\n # -- sbomSources trivy will try to retrieve SBOM from the specified sources (oci,rekor)\n sbomSources: \"\"\n\n # -- includeDevDeps include development dependencies in the report (supported: npm, yarn) (default: false)\n # note: this flag is only applicable when trivy.command is set to filesystem\n includeDevDeps: false\n\n # -- whether to use a storage class for trivy server or emptydir (one mey want to use ephemeral storage)\n storageClassEnabled: true\n\n # -- storageClassName is the name of the storage class to be used for trivy server PVC. If empty, tries to find default storage class\n storageClassName: \"\"\n\n # -- storageSize is the size of the trivy server PVC\n storageSize: \"5Gi\"\n\n # -- labels is the extra labels to be used for trivy server statefulset\n labels: {}\n\n # -- podLabels is the extra pod labels to be used for trivy server\n podLabels: {}\n\n # -- priorityClassName is the name of the priority class used for trivy server\n priorityClassName: \"\"\n\n # -- additionalVulnerabilityReportFields is a comma separated list of additional fields which\n # can be added to the VulnerabilityReport. Supported parameters: Description, Links, CVSS, Target, Class, PackagePath and PackageType\n additionalVulnerabilityReportFields: \"\"\n\n # -- httpProxy is the HTTP proxy used by Trivy to download the vulnerabilities database from GitHub.\n httpProxy: ~\n\n # -- httpsProxy is the HTTPS proxy used by Trivy to download the vulnerabilities database from GitHub.\n httpsProxy: ~\n\n # -- noProxy is a comma separated list of IPs and domain names that are not subject to proxy settings.\n noProxy: ~\n\n # -- Registries without SSL. There can be multiple registries with different keys.\n nonSslRegistries: {}\n # pocRegistry: poc.myregistry.harbor.com.pl\n # qaRegistry: qa.registry.aquasec.com\n # internalRegistry: registry.registry.svc:5000\n\n # -- sslCertDir can be used to override the system default locations for SSL certificate files directory, example: /ssl/certs\n sslCertDir: ~\n\n # -- The registry to which insecure connections are allowed. There can be multiple registries with different keys.\n insecureRegistries: {}\n # pocRegistry: poc.myregistry.harbor.com.pl\n # qaRegistry: qa.registry.aquasec.com\n # internalRegistry: registry.registry.svc:5000\n\n # -- Mirrored registries. There can be multiple registries with different keys.\n # Make sure to quote registries containing dots\n registry:\n mirror: {}\n # \"docker.io\": docker-mirror.example.com\n\n # -- severity is a comma separated list of severity levels reported by Trivy.\n severity: UNKNOWN,HIGH,CRITICAL\n\n # -- slow this flag is to use less CPU/memory for scanning though it takes more time than normal scanning. It fits small-footprint\n slow: true\n # -- ignoreUnfixed is the flag to show only fixed vulnerabilities in\n # vulnerabilities reported by Trivy. Set to true to enable it.\n #\n ignoreUnfixed: true\n # -- a comma separated list of file paths for Trivy to skip\n skipFiles: # -- a comma separated list of directories for Trivy to skip\n\n skipDirs:\n\n # -- offlineScan is the flag to enable the offline scan functionality in Trivy\n # This will prevent outgoing HTTP requests, e.g. to search.maven.org\n offlineScan: false\n\n # -- timeout is the duration to wait for scan completion.\n timeout: \"5m0s\"\n\n # -- ignoreFile can be used to tell Trivy to ignore vulnerabilities by ID (one per line)\n ignoreFile: ~\n # ignoreFile:\n # - CVE-1970-0001\n # - CVE-1970-0002\n\n # -- ignorePolicy can be used to tell Trivy to ignore vulnerabilities by a policy\n # If multiple policies would match, then the most specific one has precedence over the others.\n # See https://aquasecurity.github.io/trivy/latest/docs/configuration/filtering/#by-open-policy-agent for more details.\n # See https://github.com/aquasecurity/trivy/blob/v0.19.2/contrib/example_policy/basic.rego for more details on ignorePolicy filtering.\n #\n # ignorePolicy.application.my-app-.: |\n # package trivy\n\n # import data.lib.trivy\n\n # default ignore = true\n # applies to all workloads in namespace \"application\" with the name pattern \"my-app-*\"\n # ignorePolicy.kube-system: |\n # package trivy\n\n # import data.lib.trivy\n\n # default ignore = true\n # applies to all workloads in namespace \"kube-system\"\n # ignorePolicy: |\n # package trivy\n\n # import data.lib.trivy\n\n # default ignore = true\n # applies to all other workloads\n\n # -- vulnType can be used to tell Trivy to filter vulnerabilities by a pkg-type (library, os)\n vulnType: ~\n\n # -- resources resource requests and limits for scan job containers\n resources:\n requests:\n cpu: 100m\n memory: 100M\n # ephemeralStorage: \"2Gi\"\n limits:\n cpu: 500m\n memory: 1Gi\n # ephemeralStorage: \"2Gi\"\n\n # -- githubToken is the GitHub access token used by Trivy to download the vulnerabilities\n # database from GitHub. Only applicable in Standalone mode.\n githubToken: ~\n\n # -- serverURL is the endpoint URL of the Trivy server. Required in ClientServer mode.\n #\n # serverURL: \"https://trivy.trivy:4975\"\n\n # -- clientServerSkipUpdate is the flag to enable skip databases update for Trivy client.\n # Only applicable in ClientServer mode.\n clientServerSkipUpdate: false\n\n # -- skipJavaDBUpdate is the flag to enable skip Java index databases update for Trivy client.\n skipJavaDBUpdate: false\n\n # -- serverInsecure is the flag to enable insecure connection to the Trivy server.\n serverInsecure: false\n\n # -- serverToken is the token to authenticate Trivy client with Trivy server. Only\n # applicable in ClientServer mode.\n serverToken: ~\n\n # -- existingSecret if a secret containing gitHubToken, serverToken or serverCustomHeaders has been created outside the chart (e.g external-secrets, sops, etc...).\n # Keys must be at least one of the following: trivy.githubToken, trivy.serverToken, trivy.serverCustomHeaders\n # Overrides trivy.gitHubToken, trivy.serverToken, trivy.serverCustomHeaders values.\n # Note: The secret has to be named \"trivy-operator-trivy-config\".\n # existingSecret: true\n\n # -- serverTokenHeader is the name of the HTTP header used to send the authentication\n # token to Trivy server. Only application in ClientServer mode when\n # trivy.serverToken is specified.\n serverTokenHeader: \"Trivy-Token\"\n\n # -- serverCustomHeaders is a comma separated list of custom HTTP headers sent by\n # Trivy client to Trivy server. Only applicable in ClientServer mode.\n serverCustomHeaders: ~\n # serverCustomHeaders: \"foo=bar\"\n\n dbRegistry: \"mirror.gcr.io\"\n dbRepository: \"aquasec/trivy-db\"\n\n # -- The username for dbRepository authentication\n #\n dbRepositoryUsername: ~\n\n # -- The password for dbRepository authentication\n #\n dbRepositoryPassword: ~\n\n # -- javaDbRegistry is the registry for the Java vulnerability database.\n javaDbRegistry: \"mirror.gcr.io\"\n javaDbRepository: \"aquasec/trivy-java-db\"\n\n # -- The Flag to enable insecure connection for downloading trivy-db via proxy (air-gaped env)\n #\n dbRepositoryInsecure: \"false\"\n\n # -- The Flag to enable the usage of builtin rego policies by default, these policies are downloaded by default from mirror.gcr.io/aquasec/trivy-checks\n #\n useBuiltinRegoPolicies: \"false\"\n # -- The Flag to enable the usage of external rego policies config-map, this should be used when the user wants to use their own rego policies\n #\n externalRegoPoliciesEnabled: false\n # -- To enable the usage of embedded rego policies, set the flag useEmbeddedRegoPolicies. This should serve as a fallback for air-gapped environments.\n # When useEmbeddedRegoPolicies is set to true, useBuiltinRegoPolicies should be set to false.\n useEmbeddedRegoPolicies: \"true\"\n\n # -- The Flag is the list of supported kinds separated by comma delimiter to be scanned by the config audit scanner\n #\n supportedConfigAuditKinds: \"Workload,Service,Role,ClusterRole,NetworkPolicy,Ingress,LimitRange,ResourceQuota\"\n\n # -- command. One of `image`, `filesystem` or `rootfs` scanning, depending on the target type required for the scan.\n # For 'filesystem' and `rootfs` scanning, ensure that the `trivyOperator.scanJobPodTemplateContainerSecurityContext` is configured\n # to run as the root user (runAsUser = 0).\n command: image\n # -- imageScanCacheDir the flag to set custom path for trivy image scan `cache-dir` parameter.\n # Only applicable in image scan mode.\n imageScanCacheDir: \"/tmp/trivy/.cache\"\n # -- filesystemScanCacheDir the flag to set custom path for trivy filesystem scan `cache-dir` parameter.\n # Only applicable in filesystem scan mode.\n filesystemScanCacheDir: \"/var/trivyoperator/trivy-db\"\n # -- serverUser this param is the server user to be used to download db from private registry\n serverUser: \"\"\n # -- serverPassword this param is the server user to be used to download db from private registry\n serverPassword: \"\"\n # -- serverServiceName this param is the server service name to be used in cluster\n serverServiceName: \"trivy-service\"\n # -- debug One of `true` or `false`. Enables debug mode.\n debug: false\n\n server:\n # -- resources set trivy-server resource\n resources:\n requests:\n cpu: 200m\n memory: 512Mi\n # ephemeral-storage: \"2Gi\"\n limits:\n cpu: 1\n memory: 1Gi\n # ephemeral-storage: \"2Gi\"\n\n # -- podSecurityContext set trivy-server podSecurityContext\n podSecurityContext:\n runAsUser: 65534\n runAsNonRoot: true\n fsGroup: 65534\n\n # -- securityContext set trivy-server securityContext\n securityContext:\n privileged: false\n readOnlyRootFilesystem: true\n\n # -- the number of replicas of the trivy-server\n replicas: 1\n\n # -- vaulesFromConfigMap name of a ConfigMap to apply TRIVY_* environment variables. Will override Helm values.\n valuesFromConfigMap: \"\"\n\n # -- valuesFromSecret name of a Secret to apply TRIVY_* environment variables. Will override Helm AND ConfigMap values.\n valuesFromSecret: \"\"\n\ncompliance:\n # -- failEntriesLimit the flag to limit the number of fail entries per control check in the cluster compliance detail report\n # this limit is for preventing the report from being too large per control checks\n failEntriesLimit: 10\n # -- reportType this flag control the type of report generated (summary or all)\n reportType: summary\n # -- cron this flag control the cron interval for compliance report generation\n cron: 0 */6 * * *\n # -- specs is a list of compliance specs to be used by the cluster compliance scanner\n # - k8s-cis-1.23\n # - k8s-nsa-1.0\n # - k8s-pss-baseline-0.1\n # - k8s-pss-restricted-0.1\n # - eks-cis-1.4\n # - rke2-cis-1.24\n specs:\n - k8s-cis-1.23\n - k8s-nsa-1.0\n - k8s-pss-baseline-0.1\n - k8s-pss-restricted-0.1\n\nrbac:\n create: true\nserviceAccount:\n # -- Specifies whether a service account should be created.\n create: true\n annotations: {}\n # -- name specifies the name of the k8s Service Account. If not set and create is\n # true, a name is generated using the fullname template.\n name: \"\"\n\n# -- podAnnotations annotations added to the operator's pod\npodAnnotations:\n prometheus.deckhouse.io/port: \"8080\"\n\npodSecurityContext: {}\n# fsGroup: 2000\n\n# -- securityContext security context\nsecurityContext:\n privileged: false\n allowPrivilegeEscalation: false\n readOnlyRootFilesystem: true\n capabilities:\n drop:\n - ALL\n\nvolumeMounts:\n# do not remove , required for policies bundle\n- mountPath: /tmp\n name: cache-policies\n readOnly: false\n\nvolumes:\n# do not remove , required for policies bundle\n- name: cache-policies\n emptyDir: {}\n\nresources: {}\n# -- We usually recommend not to specify default resources and to leave this as a conscious\n# choice for the user. This also increases chances charts run on environments with little\n# resources, such as Minikube. If you do want to specify resources, uncomment the following\n# lines, adjust them as necessary, and remove the curly braces after 'resources:'.\n# limits:\n# cpu: 100m\n# memory: 128Mi\n# requests:\n# cpu: 100m\n# memory: 128Mi\n\n# -- nodeSelector set the operator nodeSelector\n#nodeSelector: {}\n\nnodeSelector:\n node-role.k8s.lmru.tech/application: ''\n\n# -- tolerations set the operator tolerations\ntolerations: []\n\n# -- affinity set the operator affinity\naffinity: {}\n\n# -- priorityClassName set the operator priorityClassName\npriorityClassName: \"\"\n\n# -- automountServiceAccountToken the flag to enable automount for service account token\nautomountServiceAccountToken: true\n\npoliciesBundle:\n # -- registry of the policies bundle\n registry: mirror.gcr.io\n # -- repository of the policies bundle\n repository: aquasec/trivy-checks\n # -- tag version of the policies bundle\n tag: 1\n # -- registryUser is the user for the registry\n registryUser: ~\n # -- registryPassword is the password for the registry\n registryPassword: ~\n # -- existingSecret if a secret containing registry credentials that have been created outside the chart (e.g external-secrets, sops, etc...).\n # Keys must be at least one of the following: policies.bundle.oci.user, policies.bundle.oci.password\n # Overrides policiesBundle.registryUser, policiesBundle.registryPassword values.\n # Note: The secret has to be named \"trivy-operator\".\n existingSecret: false\n # -- insecure is the flag to enable insecure connection to the policy bundle registry\n insecure: false\n\nnodeCollector:\n # -- useNodeSelector determine if to use nodeSelector (by auto detecting node name) with node-collector scan job\n useNodeSelector: false\n # -- registry of the node-collector image\n registry: docker-security.art.lmru.tech\n # -- repository of the node-collector image\n repository: aquasec/node-collector\n # -- tag version of the node-collector image\n tag: 0.3.1\n # -- imagePullSecret is the secret name to be used when pulling node-collector image from private registries example : reg-secret\n # It is the user responsibility to create the secret for the private registry in `trivy-operator` namespace\n imagePullSecret: ~\n # -- excludeNodes comma-separated node labels that the node-collector job should exclude from scanning (example kubernetes.io/arch=arm64,team=dev)\n excludeNodes: # -- tolerations to be applied to the node-collector so that they can run on nodes with matching taints\n\n tolerations: []\n # -- If you do want to specify tolerations, uncomment the following lines, adjust them as necessary, and remove the\n # square brackets after 'scanJobTolerations:'.\n # - key: \"key1\"\n # operator: \"Equal\"\n # value: \"value1\"\n # effect: \"NoSchedule\"\n # -- node-collector pod volume mounts definition for collecting config files information\n volumeMounts:\n - name: var-lib-etcd\n mountPath: /var/lib/etcd\n readOnly: true\n - name: var-lib-kubelet\n mountPath: /var/lib/kubelet\n readOnly: true\n - name: var-lib-kube-scheduler\n mountPath: /var/lib/kube-scheduler\n readOnly: true\n - name: var-lib-kube-controller-manager\n mountPath: /var/lib/kube-controller-manager\n readOnly: true\n - name: etc-systemd\n mountPath: /etc/systemd\n readOnly: true\n - name: lib-systemd\n mountPath: /lib/systemd/\n readOnly: true\n - name: etc-kubernetes\n mountPath: /etc/kubernetes\n readOnly: true\n - name: etc-cni-netd\n mountPath: /etc/cni/net.d/\n readOnly: true\n # -- node-collector pod volumes definition for collecting config files information\n volumes:\n - name: var-lib-etcd\n hostPath:\n path: /var/lib/etcd\n - name: var-lib-kubelet\n hostPath:\n path: /var/lib/kubelet\n - name: var-lib-kube-scheduler\n hostPath:\n path: /var/lib/kube-scheduler\n - name: var-lib-kube-controller-manager\n hostPath:\n path: /var/lib/kube-controller-manager\n - name: etc-systemd\n hostPath:\n path: /etc/systemd\n - name: lib-systemd\n hostPath:\n path: /lib/systemd\n - name: etc-kubernetes\n hostPath:\n path: /etc/kubernetes\n - name: etc-cni-netd\n hostPath:\n path: /etc/cni/net.d/\n",
"firstEditBubbleId": "6739b091-5708-4b9c-af87-e097032fb199",
"isNewlyCreated": false,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/prod/values/values-global.yaml": {
"content": "# Default values for the trivy-operator Helm chart, these are used to render\n# the templates into valid k8s Resources.\n\n# -- global values provide a centralized configuration for 'image.registry', reducing the potential for errors.\n# If left blank, the chart will default to the individually set 'image.registry' values\nglobal:\n image:\n registry: \"docker-security.art.lmru.tech\"\n\n# -- managedBy is similar to .Release.Service but allows to overwrite the value\nmanagedBy: Helm\n\n# -- targetNamespace defines where you want trivy-operator to operate. By\n# default, it's a blank string to select all namespaces, but you can specify\n# another namespace, or a comma separated list of namespaces.\ntargetNamespaces: \"\"\n\n# -- excludeNamespaces is a comma separated list of namespaces (or glob patterns)\n# to be excluded from scanning. Only applicable in the all namespaces install\n# mode, i.e. when the targetNamespaces values is a blank string.\nexcludeNamespaces:\n#- kube-system\n- kube-public\n- kube-node-lease\n- ingress-nginx\n\n# -- extraEnv is a list of extra environment variables for the trivy-operator.\nextraEnv: []\n\n# -- hostAliases for `deployment` (TrivyOperator) and `statefulset` (TrivyServer)\n\nhostAliases: []\n# - ip: \"127.0.0.1\"\n# hostnames:\n# - \"foo.local\"\n# - \"bar.local\"\n# - ip: \"10.1.2.3\"\n# hostnames:\n# - \"foo.remote\"\n# - \"bar.remote\"\n\n# -- targetWorkloads is a comma seperated list of Kubernetes workload resources\n# to be included in the vulnerability and config-audit scans\n# if left blank, all workload resources will be scanned\ntargetWorkloads: \"pod,replicaset,replicationcontroller,statefulset,daemonset,cronjob,job\"\n\n# -- nameOverride override operator name\nnameOverride: \"\"\n\n# -- fullnameOverride override operator full name\nfullnameOverride: \"trivy-operator\"\n\noperator:\n # -- namespace to install the operator, defaults to the .Release.Namespace\n namespace: \"\"\n # -- replicas the number of replicas of the operator's pod\n replicas: 1\n\n # -- number of old history to retain to allow rollback (if not set, default Kubernetes value is set to 10)\n revisionHistoryLimit: 5\n\n # -- additional annotations for the operator deployment\n annotations: {}\n\n # -- additional labels for the operator deployment\n labels: {}\n\n # -- additional labels for the operator pod\n podLabels:\n prometheus.deckhouse.io/custom-target: trivy-operator\n\n # -- leaderElectionId determines the name of the resource that leader election\n # will use for holding the leader lock.\n leaderElectionId: \"trivyoperator-lock\"\n\n # -- logDevMode the flag to enable development mode (more human-readable output, extra stack traces and logging information, etc)\n logDevMode: false\n\n # -- scanJobTTL the set automatic cleanup time after the job is completed\n scanJobTTL: \"\"\n\n # -- scanSecretTTL set an automatic cleanup for scan job secrets\n scanSecretTTL: \"\"\n\n # -- scanJobTimeout the length of time to wait before giving up on a scan job\n scanJobTimeout: 5m\n\n # -- scanJobsConcurrentLimit the maximum number of scan jobs create by the operator\n scanJobsConcurrentLimit: 5\n\n # -- scanNodeCollectorLimit the maximum number of node collector jobs create by the operator\n scanNodeCollectorLimit: 1\n\n # -- scanJobsRetryDelay the duration to wait before retrying a failed scan job\n scanJobsRetryDelay: 30s\n\n # -- the flag to enable vulnerability scanner\n vulnerabilityScannerEnabled: false\n # -- the flag to enable sbom generation, required for enabling ClusterVulnerabilityReports\n sbomGenerationEnabled: false\n # -- the flag to enable cluster sbom cache generation\n clusterSbomCacheEnabled: false\n # -- scannerReportTTL the flag to set how long a report should exist. \"\" means that the ScannerReportTTL feature is disabled\n scannerReportTTL: \"20h\"\n # -- cacheReportTTL the flag to set how long a cluster sbom report should exist. \"\" means that the cacheReportTTL feature is disabled\n cacheReportTTL: \"48h\"\n # -- configAuditScannerEnabled the flag to enable configuration audit scanner\n configAuditScannerEnabled: true\n # -- rbacAssessmentScannerEnabled the flag to enable rbac assessment scanner\n rbacAssessmentScannerEnabled: false\n # -- infraAssessmentScannerEnabled the flag to enable infra assessment scanner\n infraAssessmentScannerEnabled: true\n # -- clusterComplianceEnabled the flag to enable cluster compliance scanner\n clusterComplianceEnabled: true\n # -- batchDeleteLimit the maximum number of config audit reports deleted by the operator when the plugin's config has changed.\n batchDeleteLimit: 10\n # -- vulnerabilityScannerScanOnlyCurrentRevisions the flag to only create vulnerability scans on the current revision of a deployment.\n vulnerabilityScannerScanOnlyCurrentRevisions: false\n # -- configAuditScannerScanOnlyCurrentRevisions the flag to only create config audit scans on the current revision of a deployment.\n configAuditScannerScanOnlyCurrentRevisions: true\n # -- batchDeleteDelay the duration to wait before deleting another batch of config audit reports.\n batchDeleteDelay: 10s\n # -- accessGlobalSecretsAndServiceAccount The flag to enable access to global secrets/service accounts to allow `vulnerability scan job` to pull images from private registries\n accessGlobalSecretsAndServiceAccount: false\n # -- builtInTrivyServer The flag enables the usage of built-in trivy server in cluster. It also overrides the following trivy params with built-in values\n # trivy.mode = ClientServer and serverURL = http://<serverServiceName>.<trivy operator namespace>:4975\n builtInTrivyServer: false\n # -- builtInServerRegistryInsecure is the flag to enable insecure connection from the built-in Trivy server to the registry.\n builtInServerRegistryInsecure: false\n # -- controllerCacheSyncTimeout the duration to wait for controller resources cache sync (default: 5m).\n controllerCacheSyncTimeout: \"5m\"\n\n # -- trivyServerHealthCheckCacheExpiration The flag to set the interval for trivy server health cache before it invalidate\n trivyServerHealthCheckCacheExpiration: 10h\n\n # -- metricsFindingsEnabled the flag to enable metrics for findings\n metricsFindingsEnabled: true\n\n # -- metricsVulnIdEnabled the flag to enable metrics about cve vulns id\n # be aware of metrics cardinality is significantly increased with this feature enabled.\n metricsVulnIdEnabled: false\n\n # -- exposedSecretScannerEnabled the flag to enable exposed secret scanner\n exposedSecretScannerEnabled: false\n\n # -- MetricsExposedSecretInfo the flag to enable metrics about exposed secrets\n # be aware of metrics cardinality is significantly increased with this feature enabled.\n metricsExposedSecretInfo: false\n\n # -- MetricsConfigAuditInfo the flag to enable metrics about configuration audits\n # be aware of metrics cardinality is significantly increased with this feature enabled.\n metricsConfigAuditInfo: false\n\n # -- MetricsRbacAssessmentInfo the flag to enable metrics about Rbac Assessment\n # be aware of metrics cardinality is significantly increased with this feature enabled.\n metricsRbacAssessmentInfo: false\n\n # -- MetricsInfraAssessmentInfo the flag to enable metrics about Infra Assessment\n # be aware of metrics cardinality is significantly increased with this feature enabled.\n metricsInfraAssessmentInfo: false\n\n # -- MetricsImageInfo the flag to enable metrics about Image Information of scanned images\n # This information has image os information including os family, name/version, and if end of service life has been reached\n # be aware of metrics cardinality is significantly increased with this feature enabled.\n metricsImageInfo: false\n\n # -- MetricsClusterComplianceInfo the flag to enable metrics about Cluster Compliance\n # be aware of metrics cardinality is significantly increased with this feature enabled.\n metricsClusterComplianceInfo: true\n\n # -- serverAdditionalAnnotations the flag to set additional annotations for the trivy server pod\n serverAdditionalAnnotations: {}\n\n # -- webhookBroadcastURL the flag to set reports should be sent to a webhook endpoint. \"\" means that the webhookBroadcastURL feature is disabled\n webhookBroadcastURL: \"\"\n\n # -- webhookBroadcastTimeout the flag to set timeout for webhook requests if webhookBroadcastURL is enabled\n webhookBroadcastTimeout: 30s\n\n # -- webhookBroadcastCustomHeaders the flag to set webhook endpoint sent with custom defined headers if webhookBroadcastURL is enabled\n webhookBroadcastCustomHeaders: \"\"\n\n # -- webhookSendDeletedReports the flag to enable sending deleted reports if webhookBroadcastURL is enabled\n webhookSendDeletedReports: false\n\n # -- privateRegistryScanSecretsNames is map of namespace:secrets, secrets are comma seperated which can be used to authenticate in private registries in case if there no imagePullSecrets provided example : {\"mynamespace\":\"mySecrets,anotherSecret\"}\n privateRegistryScanSecretsNames: {}\n\n # -- mergeRbacFindingWithConfigAudit the flag to enable merging rbac finding with config-audit report\n mergeRbacFindingWithConfigAudit: false\n\n # -- httpProxy is the HTTP proxy used by Trivy operator to download the default policies from GitHub.\n httpProxy: ~\n\n # -- httpsProxy is the HTTPS proxy used by Trivy operator to download the default policies from GitHub.\n httpsProxy: ~\n\n # -- noProxy is a comma separated list of IPs and domain names that are not subject to proxy settings.\n noProxy: ~\n\n # -- vaulesFromConfigMap name of a ConfigMap to apply OPERATOR_* environment variables. Will override Helm values.\n valuesFromConfigMap: \"\"\n\n # -- valuesFromSecret name of a Secret to apply OPERATOR_* environment variables. Will override Helm AND ConfigMap values.\n valuesFromSecret: \"\"\n\nimage:\n registry: \"mirror.gcr.io\"\n repository: \"aquasec/trivy-operator\"\n # -- tag is an override of the image tag, which is by default set by the\n # appVersion field in Chart.yaml.\n tag: \"\"\n # -- pullPolicy set the operator pullPolicy\n pullPolicy: IfNotPresent\n # -- pullSecrets set the operator pullSecrets\n pullSecrets: []\n\n# -- service only expose a metrics endpoint for prometheus to scrape,\n# trivy-operator does not have a user interface.\nservice:\n # -- if true, the Service doesn't allocate any IP\n headless: false\n # -- port exposed by the Service\n metricsPort: 80\n # -- annotations added to the operator's service\n annotations: {}\n # -- appProtocol of the monitoring service\n metricsAppProtocol: TCP\n # -- the Service type\n type: ClusterIP\n # -- the nodeport to use when service type is LoadBalancer or NodePort. If not set, Kubernetes automatically select one.\n nodePort:\n\n # -- Prometheus ServiceMonitor configuration -- to install the trivy operator with the ServiceMonitor\n # you must have Prometheus already installed and running. If you do not have Prometheus installed, enabling this will\n # have no effect.\nserviceMonitor:\n # -- enabled determines whether a serviceMonitor should be deployed\n enabled: false\n # -- The namespace where Prometheus expects to find service monitors\n namespace: ~\n # -- Interval at which metrics should be scraped. If not specified Prometheus global scrape interval is used.\n interval: ~\n # -- Additional annotations for the serviceMonitor\n annotations: {}\n # -- Additional labels for the serviceMonitor\n labels: {}\n # -- HonorLabels chooses the metrics labels on collisions with target labels\n honorLabels: true\n # -- EndpointAdditionalProperties allows setting additional properties on the endpoint such as relabelings, metricRelabelings etc.\n endpointAdditionalProperties: {}\n\nreportMetrics:\n enabled: true\n image:\n registry: docker.art.lmru.tech\n repository: library/python\n tag: 3.12-alpine\n pullPolicy: IfNotPresent\n refreshIntervalSeconds: 120\n requestTimeoutSeconds: 30\n serviceAccount:\n create: true\n name: \"\"\n podAnnotations: {}\n podLabels: {}\n service:\n customTarget: custom-trivy-kube-state-metrics\n port: 8080\n path: /metrics\n sampleLimit: 15000\n resources:\n requests:\n cpu: 50m\n memory: 128Mi\n limits:\n cpu: 200m\n memory: 256Mi\n\ntrivyOperator:\n # -- vulnerabilityReportsPlugin the name of the plugin that generates vulnerability reports `Trivy`\n vulnerabilityReportsPlugin: \"Trivy\"\n # -- configAuditReportsPlugin the name of the plugin that generates config audit reports.\n configAuditReportsPlugin: \"Trivy\"\n # -- scanJobCompressLogs control whether scanjob output should be compressed or plain\n scanJobCompressLogs: false\n # -- scanJobAffinity affinity to be applied to the scanner pods and node-collector\n scanJobAffinity: {}\n # -- scanJobTolerations tolerations to be applied to the scanner pods so that they can run on nodes with matching taints\n scanJobTolerations: []\n # -- If you do want to specify tolerations, uncomment the following lines, adjust them as necessary, and remove the\n # square brackets after 'scanJobTolerations:'.\n # - key: \"key1\"\n # operator: \"Equal\"\n # value: \"value1\"\n # effect: \"NoSchedule\"\n # -- scanJobNodeSelector nodeSelector to be applied to the scanner pods so that they can run on nodes with matching labels\n scanJobNodeSelector: {}\n # -- If you do want to specify nodeSelector, uncomment the following lines, adjust them as necessary, and remove the\n # square brackets after 'scanJobNodeSelector:'.\n # nodeType: worker\n # cpu: sandylake\n # teamOwner: operators\n\n # -- scanJobCustomVolumesMount add custom volumes mount to the scan job\n scanJobCustomVolumesMount: []\n # - name: var-lib-etcd\n # mountPath: /var/lib/etcd\n # readOnly: true\n\n # -- scanJobCustomVolumes add custom volumes to the scan job\n scanJobCustomVolumes: []\n # - name: var-lib-etcd\n # hostPath:\n # path: /var/lib/etcd\n\n # -- useGCRServiceAccount the flag to enable the usage of GCR service account for scanning images in GCR\n useGCRServiceAccount: true\n # -- scanJobAutomountServiceAccountToken the flag to enable automount for service account token on scan job\n scanJobAutomountServiceAccountToken: false\n\n # -- scanJobAnnotations comma-separated representation of the annotations which the user wants the scanner jobs and pods to be\n # annotated with. Example: `foo=bar,env=stage` will annotate the scanner jobs and pods with the annotations `foo: bar` and `env: stage`\n scanJobAnnotations: \"\"\n\n # -- scanJobPodTemplateLabels comma-separated representation of the labels which the user wants the scanner pods to be\n # labeled with. Example: `foo=bar,env=stage` will labeled the scanner pods with the labels `foo: bar` and `env: stage`\n scanJobPodTemplateLabels: \"\"\n\n # -- skipInitContainers when this flag is set to true, the initContainers will be skipped for the scanner and node collector pods\n skipInitContainers: false\n\n # -- scanJobPodTemplatePodSecurityContext podSecurityContext the user wants the scanner and node collector pods to be amended with.\n # Example:\n # RunAsUser: 10000\n # RunAsGroup: 10000\n # RunAsNonRoot: true\n scanJobPodTemplatePodSecurityContext: {}\n\n # -- scanJobPodTemplateContainerSecurityContext SecurityContext the user wants the scanner and node collector containers (and their\n # initContainers) to be amended with.\n scanJobPodTemplateContainerSecurityContext:\n allowPrivilegeEscalation: false\n capabilities:\n drop:\n - ALL\n privileged: false\n readOnlyRootFilesystem: true\n # -- For filesystem scanning, Trivy needs to run as the root user\n # runAsUser: 0\n\n # -- scanJobPodPriorityClassName Priority class name to be set on the pods created by trivy operator jobs. This accepts a string value\n scanJobPodPriorityClassName: \"\"\n\n # -- reportResourceLabels comma-separated scanned resource labels which the user wants to include in the Prometheus\n # metrics report. Example: `owner,app`\n reportResourceLabels: \"\"\n\n # -- reportRecordFailedChecksOnly flag is to record only failed checks on misconfiguration reports (config-audit and rbac assessment)\n reportRecordFailedChecksOnly: true\n\n # -- skipResourceByLabels comma-separated labels keys which trivy-operator will skip scanning on resources with matching labels\n skipResourceByLabels: \"\"\n\n # -- metricsResourceLabelsPrefix Prefix that will be prepended to the labels names indicated in `reportResourceLabels`\n # when including them in the Prometheus metrics\n metricsResourceLabelsPrefix: \"k8s_label_\"\n\n # -- additionalReportLabels comma-separated representation of the labels which the user wants the scanner pods to be\n # labeled with. Example: `foo=bar,env=stage` will labeled the reports with the labels `foo: bar` and `env: stage`\n additionalReportLabels: \"\"\n\n # -- policiesConfig Custom Rego Policies to be used by the config audit scanner\n # See https://github.com/aquasecurity/trivy-operator/blob/main/docs/tutorials/writing-custom-configuration-audit-policies.md for more details.\n policiesConfig: \"\"\n\n # -- excludeImages is comma separated glob patterns for excluding images from scanning.\n # Example: pattern: `k8s.gcr.io/*/*` will exclude image: `k8s.gcr.io/coredns/coredns:v1.8.0`.\n excludeImages: \"\"\n\ntrivy:\n # -- createConfig indicates whether to create config objects\n createConfig: true\n image:\n # -- registry of the Trivy image\n registry: mirror.gcr.io\n # -- repository of the Trivy image\n repository: aquasec/trivy\n # -- tag version of the Trivy image\n tag: 0.60.0\n # -- imagePullSecret is the secret name to be used when pulling trivy image from private registries example : reg-secret\n # It is the user responsibility to create the secret for the private registry in `trivy-operator` namespace\n imagePullSecret: ~\n\n # -- pullPolicy is the imge pull policy used for trivy image , valid values are (Always, Never, IfNotPresent)\n pullPolicy: IfNotPresent\n\n # -- mode is the Trivy client mode. Either Standalone or ClientServer. Depending\n # on the active mode other settings might be applicable or required.\n mode: Standalone\n\n # -- sbomSources trivy will try to retrieve SBOM from the specified sources (oci,rekor)\n sbomSources: \"\"\n\n # -- includeDevDeps include development dependencies in the report (supported: npm, yarn) (default: false)\n # note: this flag is only applicable when trivy.command is set to filesystem\n includeDevDeps: false\n\n # -- whether to use a storage class for trivy server or emptydir (one mey want to use ephemeral storage)\n storageClassEnabled: true\n\n # -- storageClassName is the name of the storage class to be used for trivy server PVC. If empty, tries to find default storage class\n storageClassName: \"\"\n\n # -- storageSize is the size of the trivy server PVC\n storageSize: \"5Gi\"\n\n # -- labels is the extra labels to be used for trivy server statefulset\n labels: {}\n\n # -- podLabels is the extra pod labels to be used for trivy server\n podLabels: {}\n\n # -- priorityClassName is the name of the priority class used for trivy server\n priorityClassName: \"\"\n\n # -- additionalVulnerabilityReportFields is a comma separated list of additional fields which\n # can be added to the VulnerabilityReport. Supported parameters: Description, Links, CVSS, Target, Class, PackagePath and PackageType\n additionalVulnerabilityReportFields: \"\"\n\n # -- httpProxy is the HTTP proxy used by Trivy to download the vulnerabilities database from GitHub.\n httpProxy: ~\n\n # -- httpsProxy is the HTTPS proxy used by Trivy to download the vulnerabilities database from GitHub.\n httpsProxy: ~\n\n # -- noProxy is a comma separated list of IPs and domain names that are not subject to proxy settings.\n noProxy: ~\n\n # -- Registries without SSL. There can be multiple registries with different keys.\n nonSslRegistries: {}\n # pocRegistry: poc.myregistry.harbor.com.pl\n # qaRegistry: qa.registry.aquasec.com\n # internalRegistry: registry.registry.svc:5000\n\n # -- sslCertDir can be used to override the system default locations for SSL certificate files directory, example: /ssl/certs\n sslCertDir: ~\n\n # -- The registry to which insecure connections are allowed. There can be multiple registries with different keys.\n insecureRegistries: {}\n # pocRegistry: poc.myregistry.harbor.com.pl\n # qaRegistry: qa.registry.aquasec.com\n # internalRegistry: registry.registry.svc:5000\n\n # -- Mirrored registries. There can be multiple registries with different keys.\n # Make sure to quote registries containing dots\n registry:\n mirror: {}\n # \"docker.io\": docker-mirror.example.com\n\n # -- severity is a comma separated list of severity levels reported by Trivy.\n severity: UNKNOWN,HIGH,CRITICAL\n\n # -- slow this flag is to use less CPU/memory for scanning though it takes more time than normal scanning. It fits small-footprint\n slow: true\n # -- ignoreUnfixed is the flag to show only fixed vulnerabilities in\n # vulnerabilities reported by Trivy. Set to true to enable it.\n #\n ignoreUnfixed: true\n # -- a comma separated list of file paths for Trivy to skip\n skipFiles: # -- a comma separated list of directories for Trivy to skip\n\n skipDirs:\n\n # -- offlineScan is the flag to enable the offline scan functionality in Trivy\n # This will prevent outgoing HTTP requests, e.g. to search.maven.org\n offlineScan: false\n\n # -- timeout is the duration to wait for scan completion.\n timeout: \"5m0s\"\n\n # -- ignoreFile can be used to tell Trivy to ignore vulnerabilities by ID (one per line)\n ignoreFile: ~\n # ignoreFile:\n # - CVE-1970-0001\n # - CVE-1970-0002\n\n # -- ignorePolicy can be used to tell Trivy to ignore vulnerabilities by a policy\n # If multiple policies would match, then the most specific one has precedence over the others.\n # See https://aquasecurity.github.io/trivy/latest/docs/configuration/filtering/#by-open-policy-agent for more details.\n # See https://github.com/aquasecurity/trivy/blob/v0.19.2/contrib/example_policy/basic.rego for more details on ignorePolicy filtering.\n #\n # ignorePolicy.application.my-app-.: |\n # package trivy\n\n # import data.lib.trivy\n\n # default ignore = true\n # applies to all workloads in namespace \"application\" with the name pattern \"my-app-*\"\n # ignorePolicy.kube-system: |\n # package trivy\n\n # import data.lib.trivy\n\n # default ignore = true\n # applies to all workloads in namespace \"kube-system\"\n # ignorePolicy: |\n # package trivy\n\n # import data.lib.trivy\n\n # default ignore = true\n # applies to all other workloads\n\n # -- vulnType can be used to tell Trivy to filter vulnerabilities by a pkg-type (library, os)\n vulnType: ~\n\n # -- resources resource requests and limits for scan job containers\n resources:\n requests:\n cpu: 100m\n memory: 100M\n # ephemeralStorage: \"2Gi\"\n limits:\n cpu: 500m\n memory: 1Gi\n # ephemeralStorage: \"2Gi\"\n\n # -- githubToken is the GitHub access token used by Trivy to download the vulnerabilities\n # database from GitHub. Only applicable in Standalone mode.\n githubToken: ~\n\n # -- serverURL is the endpoint URL of the Trivy server. Required in ClientServer mode.\n #\n # serverURL: \"https://trivy.trivy:4975\"\n\n # -- clientServerSkipUpdate is the flag to enable skip databases update for Trivy client.\n # Only applicable in ClientServer mode.\n clientServerSkipUpdate: false\n\n # -- skipJavaDBUpdate is the flag to enable skip Java index databases update for Trivy client.\n skipJavaDBUpdate: false\n\n # -- serverInsecure is the flag to enable insecure connection to the Trivy server.\n serverInsecure: false\n\n # -- serverToken is the token to authenticate Trivy client with Trivy server. Only\n # applicable in ClientServer mode.\n serverToken: ~\n\n # -- existingSecret if a secret containing gitHubToken, serverToken or serverCustomHeaders has been created outside the chart (e.g external-secrets, sops, etc...).\n # Keys must be at least one of the following: trivy.githubToken, trivy.serverToken, trivy.serverCustomHeaders\n # Overrides trivy.gitHubToken, trivy.serverToken, trivy.serverCustomHeaders values.\n # Note: The secret has to be named \"trivy-operator-trivy-config\".\n # existingSecret: true\n\n # -- serverTokenHeader is the name of the HTTP header used to send the authentication\n # token to Trivy server. Only application in ClientServer mode when\n # trivy.serverToken is specified.\n serverTokenHeader: \"Trivy-Token\"\n\n # -- serverCustomHeaders is a comma separated list of custom HTTP headers sent by\n # Trivy client to Trivy server. Only applicable in ClientServer mode.\n serverCustomHeaders: ~\n # serverCustomHeaders: \"foo=bar\"\n\n dbRegistry: \"mirror.gcr.io\"\n dbRepository: \"aquasec/trivy-db\"\n\n # -- The username for dbRepository authentication\n #\n dbRepositoryUsername: ~\n\n # -- The password for dbRepository authentication\n #\n dbRepositoryPassword: ~\n\n # -- javaDbRegistry is the registry for the Java vulnerability database.\n javaDbRegistry: \"mirror.gcr.io\"\n javaDbRepository: \"aquasec/trivy-java-db\"\n\n # -- The Flag to enable insecure connection for downloading trivy-db via proxy (air-gaped env)\n #\n dbRepositoryInsecure: \"false\"\n\n # -- The Flag to enable the usage of builtin rego policies by default, these policies are downloaded by default from mirror.gcr.io/aquasec/trivy-checks\n #\n useBuiltinRegoPolicies: \"false\"\n # -- The Flag to enable the usage of external rego policies config-map, this should be used when the user wants to use their own rego policies\n #\n externalRegoPoliciesEnabled: false\n # -- To enable the usage of embedded rego policies, set the flag useEmbeddedRegoPolicies. This should serve as a fallback for air-gapped environments.\n # When useEmbeddedRegoPolicies is set to true, useBuiltinRegoPolicies should be set to false.\n useEmbeddedRegoPolicies: \"true\"\n\n # -- The Flag is the list of supported kinds separated by comma delimiter to be scanned by the config audit scanner\n #\n supportedConfigAuditKinds: \"Workload,Service,Role,ClusterRole,NetworkPolicy,Ingress,LimitRange,ResourceQuota\"\n\n # -- command. One of `image`, `filesystem` or `rootfs` scanning, depending on the target type required for the scan.\n # For 'filesystem' and `rootfs` scanning, ensure that the `trivyOperator.scanJobPodTemplateContainerSecurityContext` is configured\n # to run as the root user (runAsUser = 0).\n command: image\n # -- imageScanCacheDir the flag to set custom path for trivy image scan `cache-dir` parameter.\n # Only applicable in image scan mode.\n imageScanCacheDir: \"/tmp/trivy/.cache\"\n # -- filesystemScanCacheDir the flag to set custom path for trivy filesystem scan `cache-dir` parameter.\n # Only applicable in filesystem scan mode.\n filesystemScanCacheDir: \"/var/trivyoperator/trivy-db\"\n # -- serverUser this param is the server user to be used to download db from private registry\n serverUser: \"\"\n # -- serverPassword this param is the server user to be used to download db from private registry\n serverPassword: \"\"\n # -- serverServiceName this param is the server service name to be used in cluster\n serverServiceName: \"trivy-service\"\n # -- debug One of `true` or `false`. Enables debug mode.\n debug: false\n\n server:\n # -- resources set trivy-server resource\n resources:\n requests:\n cpu: 200m\n memory: 512Mi\n # ephemeral-storage: \"2Gi\"\n limits:\n cpu: 1\n memory: 1Gi\n # ephemeral-storage: \"2Gi\"\n\n # -- podSecurityContext set trivy-server podSecurityContext\n podSecurityContext:\n runAsUser: 65534\n runAsNonRoot: true\n fsGroup: 65534\n\n # -- securityContext set trivy-server securityContext\n securityContext:\n privileged: false\n readOnlyRootFilesystem: true\n\n # -- the number of replicas of the trivy-server\n replicas: 1\n\n # -- vaulesFromConfigMap name of a ConfigMap to apply TRIVY_* environment variables. Will override Helm values.\n valuesFromConfigMap: \"\"\n\n # -- valuesFromSecret name of a Secret to apply TRIVY_* environment variables. Will override Helm AND ConfigMap values.\n valuesFromSecret: \"\"\n\ncompliance:\n # -- failEntriesLimit the flag to limit the number of fail entries per control check in the cluster compliance detail report\n # this limit is for preventing the report from being too large per control checks\n failEntriesLimit: 10\n # -- reportType this flag control the type of report generated (summary or all)\n reportType: summary\n # -- cron this flag control the cron interval for compliance report generation\n cron: 0 */6 * * *\n # -- specs is a list of compliance specs to be used by the cluster compliance scanner\n # - k8s-cis-1.23\n # - k8s-nsa-1.0\n # - k8s-pss-baseline-0.1\n # - k8s-pss-restricted-0.1\n # - eks-cis-1.4\n # - rke2-cis-1.24\n specs:\n - k8s-cis-1.23\n - k8s-nsa-1.0\n - k8s-pss-baseline-0.1\n - k8s-pss-restricted-0.1\n\nrbac:\n create: true\nserviceAccount:\n # -- Specifies whether a service account should be created.\n create: true\n annotations: {}\n # -- name specifies the name of the k8s Service Account. If not set and create is\n # true, a name is generated using the fullname template.\n name: \"\"\n\n# -- podAnnotations annotations added to the operator's pod\npodAnnotations:\n prometheus.deckhouse.io/port: \"8080\"\n\npodSecurityContext: {}\n# fsGroup: 2000\n\n# -- securityContext security context\nsecurityContext:\n privileged: false\n allowPrivilegeEscalation: false\n readOnlyRootFilesystem: true\n capabilities:\n drop:\n - ALL\n\nvolumeMounts:\n# do not remove , required for policies bundle\n- mountPath: /tmp\n name: cache-policies\n readOnly: false\n\nvolumes:\n# do not remove , required for policies bundle\n- name: cache-policies\n emptyDir: {}\n\nresources: {}\n# -- We usually recommend not to specify default resources and to leave this as a conscious\n# choice for the user. This also increases chances charts run on environments with little\n# resources, such as Minikube. If you do want to specify resources, uncomment the following\n# lines, adjust them as necessary, and remove the curly braces after 'resources:'.\n# limits:\n# cpu: 100m\n# memory: 128Mi\n# requests:\n# cpu: 100m\n# memory: 128Mi\n\n# -- nodeSelector set the operator nodeSelector\n#nodeSelector: {}\n\nnodeSelector:\n node-role.k8s.lmru.tech/application: ''\n\n# -- tolerations set the operator tolerations\ntolerations: []\n\n# -- affinity set the operator affinity\naffinity: {}\n\n# -- priorityClassName set the operator priorityClassName\npriorityClassName: \"\"\n\n# -- automountServiceAccountToken the flag to enable automount for service account token\nautomountServiceAccountToken: true\n\npoliciesBundle:\n # -- registry of the policies bundle\n registry: mirror.gcr.io\n # -- repository of the policies bundle\n repository: aquasec/trivy-checks\n # -- tag version of the policies bundle\n tag: 1\n # -- registryUser is the user for the registry\n registryUser: ~\n # -- registryPassword is the password for the registry\n registryPassword: ~\n # -- existingSecret if a secret containing registry credentials that have been created outside the chart (e.g external-secrets, sops, etc...).\n # Keys must be at least one of the following: policies.bundle.oci.user, policies.bundle.oci.password\n # Overrides policiesBundle.registryUser, policiesBundle.registryPassword values.\n # Note: The secret has to be named \"trivy-operator\".\n existingSecret: false\n # -- insecure is the flag to enable insecure connection to the policy bundle registry\n insecure: false\n\nnodeCollector:\n # -- useNodeSelector determine if to use nodeSelector (by auto detecting node name) with node-collector scan job\n useNodeSelector: false\n # -- registry of the node-collector image\n registry: docker-security.art.lmru.tech\n # -- repository of the node-collector image\n repository: aquasec/node-collector\n # -- tag version of the node-collector image\n tag: 0.3.1\n # -- imagePullSecret is the secret name to be used when pulling node-collector image from private registries example : reg-secret\n # It is the user responsibility to create the secret for the private registry in `trivy-operator` namespace\n imagePullSecret: ~\n # -- excludeNodes comma-separated node labels that the node-collector job should exclude from scanning (example kubernetes.io/arch=arm64,team=dev)\n excludeNodes: # -- tolerations to be applied to the node-collector so that they can run on nodes with matching taints\n\n tolerations: []\n # -- If you do want to specify tolerations, uncomment the following lines, adjust them as necessary, and remove the\n # square brackets after 'scanJobTolerations:'.\n # - key: \"key1\"\n # operator: \"Equal\"\n # value: \"value1\"\n # effect: \"NoSchedule\"\n # -- node-collector pod volume mounts definition for collecting config files information\n volumeMounts:\n - name: var-lib-etcd\n mountPath: /var/lib/etcd\n readOnly: true\n - name: var-lib-kubelet\n mountPath: /var/lib/kubelet\n readOnly: true\n - name: var-lib-kube-scheduler\n mountPath: /var/lib/kube-scheduler\n readOnly: true\n - name: var-lib-kube-controller-manager\n mountPath: /var/lib/kube-controller-manager\n readOnly: true\n - name: etc-systemd\n mountPath: /etc/systemd\n readOnly: true\n - name: lib-systemd\n mountPath: /lib/systemd/\n readOnly: true\n - name: etc-kubernetes\n mountPath: /etc/kubernetes\n readOnly: true\n - name: etc-cni-netd\n mountPath: /etc/cni/net.d/\n readOnly: true\n # -- node-collector pod volumes definition for collecting config files information\n volumes:\n - name: var-lib-etcd\n hostPath:\n path: /var/lib/etcd\n - name: var-lib-kubelet\n hostPath:\n path: /var/lib/kubelet\n - name: var-lib-kube-scheduler\n hostPath:\n path: /var/lib/kube-scheduler\n - name: var-lib-kube-controller-manager\n hostPath:\n path: /var/lib/kube-controller-manager\n - name: etc-systemd\n hostPath:\n path: /etc/systemd\n - name: lib-systemd\n hostPath:\n path: /lib/systemd\n - name: etc-kubernetes\n hostPath:\n path: /etc/kubernetes\n - name: etc-cni-netd\n hostPath:\n path: /etc/cni/net.d/\n",
"firstEditBubbleId": "c702ac7b-f3ea-4dc3-be01-b32bdfae4db3",
"isNewlyCreated": false,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/stage/templates/collector/deployment.yaml": {
"content": "{{- if .Values.reportMetrics.enabled }}\n{{- $registry := .Values.reportMetrics.image.registry }}\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: {{ include \"trivy-operator.reportMetricsName\" . }}\n namespace: {{ include \"trivy-operator.namespace\" . }}\n labels:\n {{- include \"trivy-operator.labels\" . | nindent 4 }}\n app.kubernetes.io/component: report-metrics\nspec:\n replicas: 1\n selector:\n matchLabels:\n {{- include \"trivy-operator.reportMetricsSelectorLabels\" . | nindent 6 }}\n template:\n metadata:\n labels:\n {{- include \"trivy-operator.reportMetricsSelectorLabels\" . | nindent 8 }}\n {{- with .Values.reportMetrics.podLabels }}\n {{- toYaml . | nindent 8 }}\n {{- end }}\n {{- with .Values.reportMetrics.podAnnotations }}\n annotations:\n {{- toYaml . | nindent 8 }}\n {{- end }}\n spec:\n serviceAccountName: {{ include \"trivy-operator.reportMetricsServiceAccountName\" . }}\n automountServiceAccountToken: true\n {{- with .Values.image.pullSecrets }}\n imagePullSecrets:\n {{- toYaml . | nindent 8 }}\n {{- end }}\n securityContext:\n {{- toYaml .Values.podSecurityContext | nindent 8 }}\n containers:\n - name: trivy-report-metrics-exporter\n image: \"{{ $registry }}/{{ .Values.reportMetrics.image.repository }}:{{ .Values.reportMetrics.image.tag }}\"\n imagePullPolicy: {{ .Values.reportMetrics.image.pullPolicy }}\n command:\n - python3\n - /etc/trivy-report-exporter/exporter.py\n env:\n - name: REPORT_METRICS_PORT\n value: {{ .Values.reportMetrics.service.port | quote }}\n - name: REPORT_METRICS_REFRESH_SECONDS\n value: {{ .Values.reportMetrics.refreshIntervalSeconds | quote }}\n - name: REPORT_METRICS_REQUEST_TIMEOUT_SECONDS\n value: {{ .Values.reportMetrics.requestTimeoutSeconds | quote }}\n ports:\n - name: metrics\n containerPort: {{ .Values.reportMetrics.service.port }}\n protocol: TCP\n livenessProbe:\n httpGet:\n path: /healthz\n port: metrics\n initialDelaySeconds: 10\n readinessProbe:\n httpGet:\n path: /healthz\n port: metrics\n initialDelaySeconds: 5\n resources:\n {{- toYaml .Values.reportMetrics.resources | nindent 12 }}\n securityContext:\n {{- toYaml .Values.securityContext | nindent 12 }}\n volumeMounts:\n - name: custom-resource-state\n mountPath: /etc/trivy-report-exporter\n readOnly: true\n volumes:\n - name: custom-resource-state\n configMap:\n name: {{ include \"trivy-operator.reportMetricsName\" . }}-config\n {{- with .Values.nodeSelector }}\n nodeSelector:\n {{- toYaml . | nindent 8 }}\n {{- end }}\n {{- with .Values.affinity }}\n affinity:\n {{- toYaml . | nindent 8 }}\n {{- end }}\n {{- with .Values.tolerations }}\n tolerations:\n {{- toYaml . | nindent 8 }}\n {{- end }}\n priorityClassName: {{ .Values.priorityClassName | quote }}\n{{- end }}\n",
"firstEditBubbleId": "c8986515-dd6a-408d-a2d6-cf6cdbc5e7ce",
"isNewlyCreated": false,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/prod/templates/collector/deployment.yaml": {
"content": "{{- if .Values.reportMetrics.enabled }}\n{{- $registry := .Values.reportMetrics.image.registry }}\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: {{ include \"trivy-operator.reportMetricsName\" . }}\n namespace: {{ include \"trivy-operator.namespace\" . }}\n labels:\n {{- include \"trivy-operator.labels\" . | nindent 4 }}\n app.kubernetes.io/component: report-metrics\nspec:\n replicas: 1\n selector:\n matchLabels:\n {{- include \"trivy-operator.reportMetricsSelectorLabels\" . | nindent 6 }}\n template:\n metadata:\n labels:\n {{- include \"trivy-operator.reportMetricsSelectorLabels\" . | nindent 8 }}\n {{- with .Values.reportMetrics.podLabels }}\n {{- toYaml . | nindent 8 }}\n {{- end }}\n {{- with .Values.reportMetrics.podAnnotations }}\n annotations:\n {{- toYaml . | nindent 8 }}\n {{- end }}\n spec:\n serviceAccountName: {{ include \"trivy-operator.reportMetricsServiceAccountName\" . }}\n automountServiceAccountToken: true\n {{- with .Values.image.pullSecrets }}\n imagePullSecrets:\n {{- toYaml . | nindent 8 }}\n {{- end }}\n securityContext:\n {{- toYaml .Values.podSecurityContext | nindent 8 }}\n containers:\n - name: trivy-report-metrics-exporter\n image: \"{{ $registry }}/{{ .Values.reportMetrics.image.repository }}:{{ .Values.reportMetrics.image.tag }}\"\n imagePullPolicy: {{ .Values.reportMetrics.image.pullPolicy }}\n command:\n - python3\n - /etc/trivy-report-exporter/exporter.py\n env:\n - name: REPORT_METRICS_PORT\n value: {{ .Values.reportMetrics.service.port | quote }}\n - name: REPORT_METRICS_REFRESH_SECONDS\n value: {{ .Values.reportMetrics.refreshIntervalSeconds | quote }}\n - name: REPORT_METRICS_REQUEST_TIMEOUT_SECONDS\n value: {{ .Values.reportMetrics.requestTimeoutSeconds | quote }}\n ports:\n - name: metrics\n containerPort: {{ .Values.reportMetrics.service.port }}\n protocol: TCP\n livenessProbe:\n httpGet:\n path: /healthz\n port: metrics\n initialDelaySeconds: 10\n readinessProbe:\n httpGet:\n path: /healthz\n port: metrics\n initialDelaySeconds: 5\n resources:\n {{- toYaml .Values.reportMetrics.resources | nindent 12 }}\n securityContext:\n {{- toYaml .Values.securityContext | nindent 12 }}\n volumeMounts:\n - name: custom-resource-state\n mountPath: /etc/trivy-report-exporter\n readOnly: true\n volumes:\n - name: custom-resource-state\n configMap:\n name: {{ include \"trivy-operator.reportMetricsName\" . }}-config\n {{- with .Values.nodeSelector }}\n nodeSelector:\n {{- toYaml . | nindent 8 }}\n {{- end }}\n {{- with .Values.affinity }}\n affinity:\n {{- toYaml . | nindent 8 }}\n {{- end }}\n {{- with .Values.tolerations }}\n tolerations:\n {{- toYaml . | nindent 8 }}\n {{- end }}\n priorityClassName: {{ .Values.priorityClassName | quote }}\n{{- end }}\n",
"firstEditBubbleId": "8f77bb64-37d9-4dda-ae88-19036301f002",
"isNewlyCreated": false,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/stage/templates/grafana-crd-dashboard.yaml": {
"content": "{{- if .Values.reportMetrics.enabled }}\n---\napiVersion: deckhouse.io/v1\nkind: GrafanaDashboardDefinition\nmetadata:\n name: trivy-operator-crd-results-dashboard\nspec:\n folder: Security\n definition: |\n{{ .Files.Get \"dashboards/trivy-crd-dashboard.json\" | indent 4 }}\n---\napiVersion: deckhouse.io/v1\nkind: GrafanaDashboardDefinition\nmetadata:\n name: trivy-operator-crd-explorer-dashboard\nspec:\n folder: Security\n definition: |\n{{ .Files.Get \"dashboards/trivy-crd-explorer-dashboard.json\" | indent 4 }}\n{{- end }}\n",
"firstEditBubbleId": "ec6fa950-e319-42cc-943a-7cc826a4f383",
"isNewlyCreated": false,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/prod/templates/grafana-crd-dashboard.yaml": {
"content": "{{- if .Values.reportMetrics.enabled }}\n---\napiVersion: deckhouse.io/v1\nkind: GrafanaDashboardDefinition\nmetadata:\n name: trivy-operator-crd-results-dashboard\nspec:\n folder: Security\n definition: |\n{{ .Files.Get \"dashboards/trivy-crd-dashboard.json\" | indent 4 }}\n---\napiVersion: deckhouse.io/v1\nkind: GrafanaDashboardDefinition\nmetadata:\n name: trivy-operator-crd-explorer-dashboard\nspec:\n folder: Security\n definition: |\n{{ .Files.Get \"dashboards/trivy-crd-explorer-dashboard.json\" | indent 4 }}\n{{- end }}\n",
"firstEditBubbleId": "bc55fd7d-f35f-4035-bcf0-80c861e78895",
"isNewlyCreated": false,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/stage/templates/collector/configmap.yaml": {
"content": "{{- if .Values.reportMetrics.enabled }}\napiVersion: v1\nkind: ConfigMap\nmetadata:\n name: {{ include \"trivy-operator.reportMetricsName\" . }}-config\n namespace: {{ include \"trivy-operator.namespace\" . }}\n labels:\n {{- include \"trivy-operator.labels\" . | nindent 4 }}\n app.kubernetes.io/component: report-metrics\ndata:\n exporter.py: |\n import datetime\n import http.server\n import json\n import os\n import ssl\n import threading\n import time\n import urllib.parse\n import urllib.request\n\n\n API_HOST = os.getenv(\"KUBERNETES_SERVICE_HOST\", \"kubernetes.default.svc\")\n API_PORT = os.getenv(\"KUBERNETES_SERVICE_PORT\", \"443\")\n BASE_URL = \"https://%s:%s\" % (API_HOST, API_PORT)\n TOKEN_PATH = \"/var/run/secrets/kubernetes.io/serviceaccount/token\"\n CA_PATH = \"/var/run/secrets/kubernetes.io/serviceaccount/ca.crt\"\n METRICS_PORT = int(os.getenv(\"REPORT_METRICS_PORT\", \"8080\"))\n REFRESH_SECONDS = max(15, int(os.getenv(\"REPORT_METRICS_REFRESH_SECONDS\", \"120\")))\n REQUEST_TIMEOUT_SECONDS = int(os.getenv(\"REPORT_METRICS_REQUEST_TIMEOUT_SECONDS\", \"30\"))\n\n STATE = {\n \"metrics\": \"\",\n \"last_success\": 0.0,\n \"last_error\": \"\",\n \"refresh_errors_total\": 0,\n }\n LOCK = threading.Lock()\n\n\n with open(TOKEN_PATH, \"r\", encoding=\"utf-8\") as token_file:\n TOKEN = token_file.read().strip()\n\n SSL_CONTEXT = ssl.create_default_context(cafile=CA_PATH)\n\n\n def get_path(obj, path, default=None):\n current = obj\n for key in path:\n if not isinstance(current, dict) or key not in current:\n return default\n current = current[key]\n return current\n\n\n def to_unix_timestamp(value):\n if not value:\n return None\n parsed = str(value).strip()\n if not parsed:\n return None\n if parsed.endswith(\"Z\"):\n parsed = parsed[:-1] + \"+00:00\"\n try:\n return datetime.datetime.fromisoformat(parsed).timestamp()\n except ValueError:\n return None\n\n\n def escape_label_value(value):\n return str(value).replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\n\", \"\\\\n\").replace(\"\\\"\", \"\\\\\\\"\")\n\n\n def list_crd_objects(plural):\n items = []\n continuation = \"\"\n while True:\n query = {\"limit\": \"500\"}\n if continuation:\n query[\"continue\"] = continuation\n url = \"%s/apis/aquasecurity.github.io/v1alpha1/%s?%s\" % (\n BASE_URL,\n plural,\n urllib.parse.urlencode(query),\n )\n request = urllib.request.Request(\n url,\n headers={\"Authorization\": \"Bearer %s\" % TOKEN},\n )\n with urllib.request.urlopen(\n request,\n context=SSL_CONTEXT,\n timeout=REQUEST_TIMEOUT_SECONDS,\n ) as response:\n payload = json.loads(response.read().decode(\"utf-8\"))\n items.extend(payload.get(\"items\", []))\n continuation = get_path(payload, [\"metadata\", \"continue\"], \"\")\n if not continuation:\n break\n return items\n\n\n def build_metric_store():\n return {}\n\n\n def add_sample(store, metric, help_text, labels, value):\n if value is None:\n return\n try:\n numeric_value = float(value)\n except (TypeError, ValueError):\n return\n entry = store.setdefault(\n metric,\n {\"help\": help_text, \"type\": \"gauge\", \"samples\": {}},\n )\n key = tuple(sorted((k, str(v)) for k, v in labels.items() if v is not None and str(v) != \"\"))\n entry[\"samples\"][key] = numeric_value\n\n\n def base_labels(item, kind):\n metadata = item.get(\"metadata\", {})\n return {\n \"customresource_group\": \"aquasecurity.github.io\",\n \"customresource_kind\": kind,\n \"customresource_version\": \"v1alpha1\",\n \"name\": metadata.get(\"name\", \"\"),\n }\n\n\n def attach_workload_labels(labels, item, namespaced, with_scanner):\n metadata = item.get(\"metadata\", {})\n report = item.get(\"report\", {})\n scanner = report.get(\"scanner\", {})\n raw_labels = metadata.get(\"labels\", {})\n result = dict(labels)\n if namespaced:\n result[\"exported_namespace\"] = metadata.get(\"namespace\", \"\")\n result[\"resource_kind\"] = raw_labels.get(\"trivy-operator.resource.kind\", \"\")\n result[\"resource_name\"] = raw_labels.get(\"trivy-operator.resource.name\", \"\")\n if with_scanner:\n result[\"scanner\"] = scanner.get(\"name\", \"\")\n result[\"scanner_vendor\"] = scanner.get(\"vendor\", \"\")\n result[\"scanner_version\"] = scanner.get(\"version\", \"\")\n return result\n\n\n def export_cluster_compliance(store):\n items = list_crd_objects(\"clustercompliancereports\")\n for item in items:\n labels = base_labels(item, \"ClusterComplianceReport\")\n compliance = get_path(item, [\"spec\", \"compliance\"], {}) or {}\n summary = get_path(item, [\"status\", \"summary\"], {}) or {}\n labels[\"benchmark\"] = compliance.get(\"title\", \"\")\n labels[\"benchmark_id\"] = compliance.get(\"id\", \"\")\n labels[\"benchmark_type\"] = compliance.get(\"type\", \"\")\n labels[\"benchmark_version\"] = compliance.get(\"version\", \"\")\n\n add_sample(\n store,\n \"trivy_cluster_compliance_pass_count\",\n \"Passed checks reported by Trivy ClusterComplianceReport.\",\n labels,\n summary.get(\"passCount\"),\n )\n add_sample(\n store,\n \"trivy_cluster_compliance_fail_count\",\n \"Failed checks reported by Trivy ClusterComplianceReport.\",\n labels,\n summary.get(\"failCount\"),\n )\n add_sample(\n store,\n \"trivy_cluster_compliance_updated\",\n \"Last update timestamp for Trivy ClusterComplianceReport.\",\n labels,\n to_unix_timestamp(get_path(item, [\"status\", \"updateTimestamp\"])),\n )\n add_sample(\n store,\n \"trivy_cluster_compliance_created\",\n \"Creation timestamp for Trivy ClusterComplianceReport.\",\n labels,\n to_unix_timestamp(get_path(item, [\"metadata\", \"creationTimestamp\"])),\n )\n\n control_rows = get_path(item, [\"status\", \"summaryReport\", \"controlCheck\"], []) or []\n if control_rows:\n for control in control_rows:\n total_fail = control.get(\"totalFail\", 0)\n if total_fail <= 0:\n continue\n control_labels = dict(labels)\n control_labels[\"control_id\"] = control.get(\"id\", \"\")\n control_labels[\"control_name\"] = control.get(\"name\", \"\")\n control_labels[\"control_severity\"] = control.get(\"severity\", \"\")\n add_sample(\n store,\n \"trivy_cluster_compliance_control_fail_total\",\n \"Failed checks per compliance control from Trivy ClusterComplianceReport.\",\n control_labels,\n total_fail,\n )\n continue\n\n results = get_path(item, [\"status\", \"detailReport\", \"results\"], []) or []\n for result in results:\n checks = result.get(\"checks\", []) or []\n fail_total = 0\n for check in checks:\n if check.get(\"success\") is False:\n fail_total += 1\n if fail_total <= 0:\n continue\n control_labels = dict(labels)\n control_labels[\"control_id\"] = result.get(\"id\", \"\")\n control_labels[\"control_name\"] = result.get(\"name\", \"\")\n control_labels[\"control_severity\"] = result.get(\"severity\", \"\")\n add_sample(\n store,\n \"trivy_cluster_compliance_control_fail_total\",\n \"Failed checks per compliance control from Trivy ClusterComplianceReport.\",\n control_labels,\n fail_total,\n )\n\n\n def export_report_summary(store, plural, kind, prefix, namespaced, with_updated, with_scanner):\n items = list_crd_objects(plural)\n for item in items:\n labels = base_labels(item, kind)\n labels = attach_workload_labels(labels, item, namespaced, with_scanner)\n summary = get_path(item, [\"report\", \"summary\"], {}) or {}\n\n add_sample(\n store,\n \"%s_critical_count\" % prefix,\n \"Critical findings reported by Trivy %s.\" % kind,\n labels,\n summary.get(\"criticalCount\"),\n )\n add_sample(\n store,\n \"%s_high_count\" % prefix,\n \"High findings reported by Trivy %s.\" % kind,\n labels,\n summary.get(\"highCount\"),\n )\n add_sample(\n store,\n \"%s_medium_count\" % prefix,\n \"Medium findings reported by Trivy %s.\" % kind,\n labels,\n summary.get(\"mediumCount\"),\n )\n add_sample(\n store,\n \"%s_low_count\" % prefix,\n \"Low findings reported by Trivy %s.\" % kind,\n labels,\n summary.get(\"lowCount\"),\n )\n if with_updated:\n add_sample(\n store,\n \"%s_updated\" % prefix,\n \"Last update timestamp for Trivy %s.\" % kind,\n labels,\n to_unix_timestamp(get_path(item, [\"report\", \"updateTimestamp\"])),\n )\n add_sample(\n store,\n \"%s_created\" % prefix,\n \"Creation timestamp for Trivy %s.\" % kind,\n labels,\n to_unix_timestamp(get_path(item, [\"metadata\", \"creationTimestamp\"])),\n )\n\n\n def export_created_only(store, plural, kind, prefix, namespaced):\n items = list_crd_objects(plural)\n for item in items:\n labels = base_labels(item, kind)\n labels = attach_workload_labels(labels, item, namespaced, False)\n add_sample(\n store,\n \"%s_created\" % prefix,\n \"Creation timestamp for Trivy %s.\" % kind,\n labels,\n to_unix_timestamp(get_path(item, [\"metadata\", \"creationTimestamp\"])),\n )\n\n\n def render_metrics(store):\n lines = []\n for metric_name in sorted(store):\n metric = store[metric_name]\n lines.append(\"# HELP %s %s\" % (metric_name, metric[\"help\"]))\n lines.append(\"# TYPE %s %s\" % (metric_name, metric[\"type\"]))\n for key in sorted(metric[\"samples\"]):\n value = metric[\"samples\"][key]\n if key:\n label_text = \",\".join('%s=\"%s\"' % (k, escape_label_value(v)) for k, v in key)\n lines.append(\"%s{%s} %s\" % (metric_name, label_text, value))\n else:\n lines.append(\"%s %s\" % (metric_name, value))\n return \"\\n\".join(lines) + \"\\n\"\n\n\n def refresh_metrics():\n store = build_metric_store()\n export_cluster_compliance(store)\n export_report_summary(\n store,\n \"configauditreports\",\n \"ConfigAuditReport\",\n \"trivy_config_audit\",\n True,\n True,\n True,\n )\n export_report_summary(\n store,\n \"clusterconfigauditreports\",\n \"ClusterConfigAuditReport\",\n \"trivy_cluster_config_audit\",\n False,\n True,\n True,\n )\n export_report_summary(\n store,\n \"infraassessmentreports\",\n \"InfraAssessmentReport\",\n \"trivy_infra_assessment\",\n True,\n False,\n True,\n )\n export_report_summary(\n store,\n \"clusterinfraassessmentreports\",\n \"ClusterInfraAssessmentReport\",\n \"trivy_cluster_infra_assessment\",\n False,\n False,\n True,\n )\n export_created_only(\n store,\n \"vulnerabilityreports\",\n \"VulnerabilityReport\",\n \"trivy_vulnerability\",\n True,\n )\n export_created_only(\n store,\n \"clustervulnerabilityreports\",\n \"ClusterVulnerabilityReport\",\n \"trivy_cluster_vulnerability\",\n False,\n )\n export_created_only(\n store,\n \"rbacassessmentreports\",\n \"RbacAssessmentReport\",\n \"trivy_rbac_assessment\",\n True,\n )\n export_created_only(\n store,\n \"clusterrbacassessmentreports\",\n \"ClusterRbacAssessmentReport\",\n \"trivy_cluster_rbac_assessment\",\n False,\n )\n export_created_only(\n store,\n \"exposedsecretreports\",\n \"ExposedSecretReport\",\n \"trivy_exposed_secret\",\n True,\n )\n export_created_only(\n store,\n \"sbomreports\",\n \"SbomReport\",\n \"trivy_sbom\",\n True,\n )\n export_created_only(\n store,\n \"clustersbomreports\",\n \"ClusterSbomReport\",\n \"trivy_cluster_sbom\",\n False,\n )\n return render_metrics(store)\n\n\n def refresh_worker():\n while True:\n try:\n rendered = refresh_metrics()\n with LOCK:\n STATE[\"metrics\"] = rendered\n STATE[\"last_success\"] = time.time()\n STATE[\"last_error\"] = \"\"\n except Exception as error:\n with LOCK:\n STATE[\"refresh_errors_total\"] += 1\n STATE[\"last_error\"] = str(error)\n time.sleep(REFRESH_SECONDS)\n\n\n class MetricsHandler(http.server.BaseHTTPRequestHandler):\n def do_GET(self):\n if self.path == \"/healthz\":\n self.send_response(200)\n self.send_header(\"Content-Type\", \"text/plain; charset=utf-8\")\n self.end_headers()\n self.wfile.write(b\"ok\\n\")\n return\n if self.path != \"/metrics\":\n self.send_response(404)\n self.end_headers()\n return\n\n with LOCK:\n metrics_body = STATE[\"metrics\"]\n last_success = STATE[\"last_success\"]\n refresh_errors_total = STATE[\"refresh_errors_total\"]\n last_error = STATE[\"last_error\"]\n\n now = time.time()\n exporter_up = 1 if last_success > 0 and (now - last_success) < (REFRESH_SECONDS * 3) else 0\n metrics_body += \"# HELP trivy_report_metrics_exporter_up Exporter health status based on successful refresh.\\n\"\n metrics_body += \"# TYPE trivy_report_metrics_exporter_up gauge\\n\"\n metrics_body += \"trivy_report_metrics_exporter_up %d\\n\" % exporter_up\n metrics_body += \"# HELP trivy_report_metrics_last_success_timestamp Last successful refresh Unix timestamp.\\n\"\n metrics_body += \"# TYPE trivy_report_metrics_last_success_timestamp gauge\\n\"\n metrics_body += \"trivy_report_metrics_last_success_timestamp %s\\n\" % float(last_success)\n metrics_body += \"# HELP trivy_report_metrics_refresh_errors_total Total refresh errors.\\n\"\n metrics_body += \"# TYPE trivy_report_metrics_refresh_errors_total counter\\n\"\n metrics_body += \"trivy_report_metrics_refresh_errors_total %d\\n\" % refresh_errors_total\n if last_error:\n escaped_error = escape_label_value(last_error)\n metrics_body += \"# HELP trivy_report_metrics_last_error_info Last refresh error text.\\n\"\n metrics_body += \"# TYPE trivy_report_metrics_last_error_info gauge\\n\"\n metrics_body += \"trivy_report_metrics_last_error_info{error=\\\"%s\\\"} 1\\n\" % escaped_error\n\n encoded = metrics_body.encode(\"utf-8\")\n self.send_response(200)\n self.send_header(\"Content-Type\", \"text/plain; version=0.0.4; charset=utf-8\")\n self.send_header(\"Content-Length\", str(len(encoded)))\n self.end_headers()\n self.wfile.write(encoded)\n\n def log_message(self, format_string, *args):\n return\n\n\n if __name__ == \"__main__\":\n worker = threading.Thread(target=refresh_worker, daemon=True)\n worker.start()\n server = http.server.ThreadingHTTPServer((\"\", METRICS_PORT), MetricsHandler)\n server.serve_forever()\n{{- end }}\n",
"firstEditBubbleId": "ac3b4dde-c13c-44e1-be97-d61df99ef2f3",
"isNewlyCreated": false,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/prod/templates/collector/configmap.yaml": {
"content": "{{- if .Values.reportMetrics.enabled }}\napiVersion: v1\nkind: ConfigMap\nmetadata:\n name: {{ include \"trivy-operator.reportMetricsName\" . }}-config\n namespace: {{ include \"trivy-operator.namespace\" . }}\n labels:\n {{- include \"trivy-operator.labels\" . | nindent 4 }}\n app.kubernetes.io/component: report-metrics\ndata:\n exporter.py: |\n import datetime\n import http.server\n import json\n import os\n import ssl\n import threading\n import time\n import urllib.parse\n import urllib.request\n\n\n API_HOST = os.getenv(\"KUBERNETES_SERVICE_HOST\", \"kubernetes.default.svc\")\n API_PORT = os.getenv(\"KUBERNETES_SERVICE_PORT\", \"443\")\n BASE_URL = \"https://%s:%s\" % (API_HOST, API_PORT)\n TOKEN_PATH = \"/var/run/secrets/kubernetes.io/serviceaccount/token\"\n CA_PATH = \"/var/run/secrets/kubernetes.io/serviceaccount/ca.crt\"\n METRICS_PORT = int(os.getenv(\"REPORT_METRICS_PORT\", \"8080\"))\n REFRESH_SECONDS = max(15, int(os.getenv(\"REPORT_METRICS_REFRESH_SECONDS\", \"120\")))\n REQUEST_TIMEOUT_SECONDS = int(os.getenv(\"REPORT_METRICS_REQUEST_TIMEOUT_SECONDS\", \"30\"))\n\n STATE = {\n \"metrics\": \"\",\n \"last_success\": 0.0,\n \"last_error\": \"\",\n \"refresh_errors_total\": 0,\n }\n LOCK = threading.Lock()\n\n\n with open(TOKEN_PATH, \"r\", encoding=\"utf-8\") as token_file:\n TOKEN = token_file.read().strip()\n\n SSL_CONTEXT = ssl.create_default_context(cafile=CA_PATH)\n\n\n def get_path(obj, path, default=None):\n current = obj\n for key in path:\n if not isinstance(current, dict) or key not in current:\n return default\n current = current[key]\n return current\n\n\n def to_unix_timestamp(value):\n if not value:\n return None\n parsed = str(value).strip()\n if not parsed:\n return None\n if parsed.endswith(\"Z\"):\n parsed = parsed[:-1] + \"+00:00\"\n try:\n return datetime.datetime.fromisoformat(parsed).timestamp()\n except ValueError:\n return None\n\n\n def escape_label_value(value):\n return str(value).replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\n\", \"\\\\n\").replace(\"\\\"\", \"\\\\\\\"\")\n\n\n def list_crd_objects(plural):\n items = []\n continuation = \"\"\n while True:\n query = {\"limit\": \"500\"}\n if continuation:\n query[\"continue\"] = continuation\n url = \"%s/apis/aquasecurity.github.io/v1alpha1/%s?%s\" % (\n BASE_URL,\n plural,\n urllib.parse.urlencode(query),\n )\n request = urllib.request.Request(\n url,\n headers={\"Authorization\": \"Bearer %s\" % TOKEN},\n )\n with urllib.request.urlopen(\n request,\n context=SSL_CONTEXT,\n timeout=REQUEST_TIMEOUT_SECONDS,\n ) as response:\n payload = json.loads(response.read().decode(\"utf-8\"))\n items.extend(payload.get(\"items\", []))\n continuation = get_path(payload, [\"metadata\", \"continue\"], \"\")\n if not continuation:\n break\n return items\n\n\n def build_metric_store():\n return {}\n\n\n def add_sample(store, metric, help_text, labels, value):\n if value is None:\n return\n try:\n numeric_value = float(value)\n except (TypeError, ValueError):\n return\n entry = store.setdefault(\n metric,\n {\"help\": help_text, \"type\": \"gauge\", \"samples\": {}},\n )\n key = tuple(sorted((k, str(v)) for k, v in labels.items() if v is not None and str(v) != \"\"))\n entry[\"samples\"][key] = numeric_value\n\n\n def base_labels(item, kind):\n metadata = item.get(\"metadata\", {})\n return {\n \"customresource_group\": \"aquasecurity.github.io\",\n \"customresource_kind\": kind,\n \"customresource_version\": \"v1alpha1\",\n \"name\": metadata.get(\"name\", \"\"),\n }\n\n\n def attach_workload_labels(labels, item, namespaced, with_scanner):\n metadata = item.get(\"metadata\", {})\n report = item.get(\"report\", {})\n scanner = report.get(\"scanner\", {})\n raw_labels = metadata.get(\"labels\", {})\n result = dict(labels)\n if namespaced:\n result[\"exported_namespace\"] = metadata.get(\"namespace\", \"\")\n result[\"resource_kind\"] = raw_labels.get(\"trivy-operator.resource.kind\", \"\")\n result[\"resource_name\"] = raw_labels.get(\"trivy-operator.resource.name\", \"\")\n if with_scanner:\n result[\"scanner\"] = scanner.get(\"name\", \"\")\n result[\"scanner_vendor\"] = scanner.get(\"vendor\", \"\")\n result[\"scanner_version\"] = scanner.get(\"version\", \"\")\n return result\n\n\n def export_cluster_compliance(store):\n items = list_crd_objects(\"clustercompliancereports\")\n for item in items:\n labels = base_labels(item, \"ClusterComplianceReport\")\n compliance = get_path(item, [\"spec\", \"compliance\"], {}) or {}\n summary = get_path(item, [\"status\", \"summary\"], {}) or {}\n labels[\"benchmark\"] = compliance.get(\"title\", \"\")\n labels[\"benchmark_id\"] = compliance.get(\"id\", \"\")\n labels[\"benchmark_type\"] = compliance.get(\"type\", \"\")\n labels[\"benchmark_version\"] = compliance.get(\"version\", \"\")\n\n add_sample(\n store,\n \"trivy_cluster_compliance_pass_count\",\n \"Passed checks reported by Trivy ClusterComplianceReport.\",\n labels,\n summary.get(\"passCount\"),\n )\n add_sample(\n store,\n \"trivy_cluster_compliance_fail_count\",\n \"Failed checks reported by Trivy ClusterComplianceReport.\",\n labels,\n summary.get(\"failCount\"),\n )\n add_sample(\n store,\n \"trivy_cluster_compliance_updated\",\n \"Last update timestamp for Trivy ClusterComplianceReport.\",\n labels,\n to_unix_timestamp(get_path(item, [\"status\", \"updateTimestamp\"])),\n )\n add_sample(\n store,\n \"trivy_cluster_compliance_created\",\n \"Creation timestamp for Trivy ClusterComplianceReport.\",\n labels,\n to_unix_timestamp(get_path(item, [\"metadata\", \"creationTimestamp\"])),\n )\n\n control_rows = get_path(item, [\"status\", \"summaryReport\", \"controlCheck\"], []) or []\n if control_rows:\n for control in control_rows:\n total_fail = control.get(\"totalFail\", 0)\n if total_fail <= 0:\n continue\n control_labels = dict(labels)\n control_labels[\"control_id\"] = control.get(\"id\", \"\")\n control_labels[\"control_name\"] = control.get(\"name\", \"\")\n control_labels[\"control_severity\"] = control.get(\"severity\", \"\")\n add_sample(\n store,\n \"trivy_cluster_compliance_control_fail_total\",\n \"Failed checks per compliance control from Trivy ClusterComplianceReport.\",\n control_labels,\n total_fail,\n )\n continue\n\n results = get_path(item, [\"status\", \"detailReport\", \"results\"], []) or []\n for result in results:\n checks = result.get(\"checks\", []) or []\n fail_total = 0\n for check in checks:\n if check.get(\"success\") is False:\n fail_total += 1\n if fail_total <= 0:\n continue\n control_labels = dict(labels)\n control_labels[\"control_id\"] = result.get(\"id\", \"\")\n control_labels[\"control_name\"] = result.get(\"name\", \"\")\n control_labels[\"control_severity\"] = result.get(\"severity\", \"\")\n add_sample(\n store,\n \"trivy_cluster_compliance_control_fail_total\",\n \"Failed checks per compliance control from Trivy ClusterComplianceReport.\",\n control_labels,\n fail_total,\n )\n\n\n def export_report_summary(store, plural, kind, prefix, namespaced, with_updated, with_scanner):\n items = list_crd_objects(plural)\n for item in items:\n labels = base_labels(item, kind)\n labels = attach_workload_labels(labels, item, namespaced, with_scanner)\n summary = get_path(item, [\"report\", \"summary\"], {}) or {}\n\n add_sample(\n store,\n \"%s_critical_count\" % prefix,\n \"Critical findings reported by Trivy %s.\" % kind,\n labels,\n summary.get(\"criticalCount\"),\n )\n add_sample(\n store,\n \"%s_high_count\" % prefix,\n \"High findings reported by Trivy %s.\" % kind,\n labels,\n summary.get(\"highCount\"),\n )\n add_sample(\n store,\n \"%s_medium_count\" % prefix,\n \"Medium findings reported by Trivy %s.\" % kind,\n labels,\n summary.get(\"mediumCount\"),\n )\n add_sample(\n store,\n \"%s_low_count\" % prefix,\n \"Low findings reported by Trivy %s.\" % kind,\n labels,\n summary.get(\"lowCount\"),\n )\n if with_updated:\n add_sample(\n store,\n \"%s_updated\" % prefix,\n \"Last update timestamp for Trivy %s.\" % kind,\n labels,\n to_unix_timestamp(get_path(item, [\"report\", \"updateTimestamp\"])),\n )\n add_sample(\n store,\n \"%s_created\" % prefix,\n \"Creation timestamp for Trivy %s.\" % kind,\n labels,\n to_unix_timestamp(get_path(item, [\"metadata\", \"creationTimestamp\"])),\n )\n\n\n def export_created_only(store, plural, kind, prefix, namespaced):\n items = list_crd_objects(plural)\n for item in items:\n labels = base_labels(item, kind)\n labels = attach_workload_labels(labels, item, namespaced, False)\n add_sample(\n store,\n \"%s_created\" % prefix,\n \"Creation timestamp for Trivy %s.\" % kind,\n labels,\n to_unix_timestamp(get_path(item, [\"metadata\", \"creationTimestamp\"])),\n )\n\n\n def render_metrics(store):\n lines = []\n for metric_name in sorted(store):\n metric = store[metric_name]\n lines.append(\"# HELP %s %s\" % (metric_name, metric[\"help\"]))\n lines.append(\"# TYPE %s %s\" % (metric_name, metric[\"type\"]))\n for key in sorted(metric[\"samples\"]):\n value = metric[\"samples\"][key]\n if key:\n label_text = \",\".join('%s=\"%s\"' % (k, escape_label_value(v)) for k, v in key)\n lines.append(\"%s{%s} %s\" % (metric_name, label_text, value))\n else:\n lines.append(\"%s %s\" % (metric_name, value))\n return \"\\n\".join(lines) + \"\\n\"\n\n\n def refresh_metrics():\n store = build_metric_store()\n export_cluster_compliance(store)\n export_report_summary(\n store,\n \"configauditreports\",\n \"ConfigAuditReport\",\n \"trivy_config_audit\",\n True,\n True,\n True,\n )\n export_report_summary(\n store,\n \"clusterconfigauditreports\",\n \"ClusterConfigAuditReport\",\n \"trivy_cluster_config_audit\",\n False,\n True,\n True,\n )\n export_report_summary(\n store,\n \"infraassessmentreports\",\n \"InfraAssessmentReport\",\n \"trivy_infra_assessment\",\n True,\n False,\n True,\n )\n export_report_summary(\n store,\n \"clusterinfraassessmentreports\",\n \"ClusterInfraAssessmentReport\",\n \"trivy_cluster_infra_assessment\",\n False,\n False,\n True,\n )\n export_created_only(\n store,\n \"vulnerabilityreports\",\n \"VulnerabilityReport\",\n \"trivy_vulnerability\",\n True,\n )\n export_created_only(\n store,\n \"clustervulnerabilityreports\",\n \"ClusterVulnerabilityReport\",\n \"trivy_cluster_vulnerability\",\n False,\n )\n export_created_only(\n store,\n \"rbacassessmentreports\",\n \"RbacAssessmentReport\",\n \"trivy_rbac_assessment\",\n True,\n )\n export_created_only(\n store,\n \"clusterrbacassessmentreports\",\n \"ClusterRbacAssessmentReport\",\n \"trivy_cluster_rbac_assessment\",\n False,\n )\n export_created_only(\n store,\n \"exposedsecretreports\",\n \"ExposedSecretReport\",\n \"trivy_exposed_secret\",\n True,\n )\n export_created_only(\n store,\n \"sbomreports\",\n \"SbomReport\",\n \"trivy_sbom\",\n True,\n )\n export_created_only(\n store,\n \"clustersbomreports\",\n \"ClusterSbomReport\",\n \"trivy_cluster_sbom\",\n False,\n )\n return render_metrics(store)\n\n\n def refresh_worker():\n while True:\n try:\n rendered = refresh_metrics()\n with LOCK:\n STATE[\"metrics\"] = rendered\n STATE[\"last_success\"] = time.time()\n STATE[\"last_error\"] = \"\"\n except Exception as error:\n with LOCK:\n STATE[\"refresh_errors_total\"] += 1\n STATE[\"last_error\"] = str(error)\n time.sleep(REFRESH_SECONDS)\n\n\n class MetricsHandler(http.server.BaseHTTPRequestHandler):\n def do_GET(self):\n if self.path == \"/healthz\":\n self.send_response(200)\n self.send_header(\"Content-Type\", \"text/plain; charset=utf-8\")\n self.end_headers()\n self.wfile.write(b\"ok\\n\")\n return\n if self.path != \"/metrics\":\n self.send_response(404)\n self.end_headers()\n return\n\n with LOCK:\n metrics_body = STATE[\"metrics\"]\n last_success = STATE[\"last_success\"]\n refresh_errors_total = STATE[\"refresh_errors_total\"]\n last_error = STATE[\"last_error\"]\n\n now = time.time()\n exporter_up = 1 if last_success > 0 and (now - last_success) < (REFRESH_SECONDS * 3) else 0\n metrics_body += \"# HELP trivy_report_metrics_exporter_up Exporter health status based on successful refresh.\\n\"\n metrics_body += \"# TYPE trivy_report_metrics_exporter_up gauge\\n\"\n metrics_body += \"trivy_report_metrics_exporter_up %d\\n\" % exporter_up\n metrics_body += \"# HELP trivy_report_metrics_last_success_timestamp Last successful refresh Unix timestamp.\\n\"\n metrics_body += \"# TYPE trivy_report_metrics_last_success_timestamp gauge\\n\"\n metrics_body += \"trivy_report_metrics_last_success_timestamp %s\\n\" % float(last_success)\n metrics_body += \"# HELP trivy_report_metrics_refresh_errors_total Total refresh errors.\\n\"\n metrics_body += \"# TYPE trivy_report_metrics_refresh_errors_total counter\\n\"\n metrics_body += \"trivy_report_metrics_refresh_errors_total %d\\n\" % refresh_errors_total\n if last_error:\n escaped_error = escape_label_value(last_error)\n metrics_body += \"# HELP trivy_report_metrics_last_error_info Last refresh error text.\\n\"\n metrics_body += \"# TYPE trivy_report_metrics_last_error_info gauge\\n\"\n metrics_body += \"trivy_report_metrics_last_error_info{error=\\\"%s\\\"} 1\\n\" % escaped_error\n\n encoded = metrics_body.encode(\"utf-8\")\n self.send_response(200)\n self.send_header(\"Content-Type\", \"text/plain; version=0.0.4; charset=utf-8\")\n self.send_header(\"Content-Length\", str(len(encoded)))\n self.end_headers()\n self.wfile.write(encoded)\n\n def log_message(self, format_string, *args):\n return\n\n\n if __name__ == \"__main__\":\n worker = threading.Thread(target=refresh_worker, daemon=True)\n worker.start()\n server = http.server.ThreadingHTTPServer((\"\", METRICS_PORT), MetricsHandler)\n server.serve_forever()\n{{- end }}\n",
"firstEditBubbleId": "ed3f5a47-0c56-49ef-a8b9-246ec7248323",
"isNewlyCreated": false,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/custom-admission-policy/values/cluster/atlas-a-stage-cluster.yaml": {
"content": "---\ndenyCapabilities:\n excludedNamespaces:\n - syn-github-actions-runner-controller #gha runners for synoptic p0602\n - vspspr-*\n - clickhouse-*\n - coroot\n - alfor-*\n - asm-dev\n - billing-preprod\n - intraru-prod\n - wecare-prod\n - wecare-test\n - fudzi\n - carrier-portal-*\n - pickup-point-*\n - del-sell-*\n - gts-tms-*\n - pnr--alfa\n - del-repo-*\n - infra-elklogs*\n - osaas-opensearch*\n - jaeger*\n - gitlab-runner*\n - pim-*\n - search-*\n - mf\n - chaos-mesh\n - intraru-stage\n - intraru-preprod\n - elma-*\n - trivy-operator\n\nallowedHostPaths:\n excludedNamespaces:\n - syn-github-actions-runner-controller #gha runners for synoptic p0602\n - vspspr-*\n - clickhouse-*\n - coroot\n - alfor-*\n - asm-dev\n - billing-preprod\n - intraru-prod\n - wecare-prod\n - wecare-test\n - fudzi\n - carrier-portal-*\n - pickup-point-*\n - del-sell-*\n - gts-tms-*\n - pnr--alfa\n - del-repo-*\n - infra-elklogs*\n - osaas-opensearch*\n - jaeger*\n - gitlab-runner*\n - pim-*\n - search-*\n - mf\n - chaos-mesh\n - intraru-stage\n - intraru-preprod\n - obs-alloy\n - trivy-operator\n - stackrox\n\nallowedVolumeTypes:\n excludedNamespaces:\n - syn-github-actions-runner-controller #gha runners for synoptic p0602\n - vspspr-*\n - clickhouse-*\n - coroot\n - alfor-*\n - asm-dev\n - billing-preprod\n - intraru-prod\n - wecare-prod\n - wecare-test\n - fudzi\n - carrier-portal-*\n - pickup-point-*\n - del-sell-*\n - gts-tms-*\n - pnr--alfa\n - del-repo-*\n - infra-elklogs*\n - osaas-opensearch*\n - jaeger*\n - gitlab-runner*\n - pim-*\n - search-*\n - mf\n - chaos-mesh\n - intraru-stage\n - intraru-preprod\n - obs-alloy\n - trivy-operator\n - stackrox\n\ndenyHostFeatures:\n excludedNamespaces:\n - syn-github-actions-runner-controller # synoptic runners gha p0602\n - vspspr-*\n - clickhouse-*\n - coroot\n - alfor-*\n - asm-dev\n - billing-preprod\n - intraru-prod\n - wecare-prod\n - wecare-test\n - fudzi\n - carrier-portal-*\n - pickup-point-*\n - del-sell-*\n - gts-tms-*\n - pnr--alfa\n - del-repo-*\n - infra-elklogs*\n - osaas-opensearch*\n - jaeger*\n - pim-*\n - search-*\n - mf\n - chaos-mesh\n - intraru-stage\n - intraru-preprod\n - trivy-operator\n\ndenyHostPorts:\n excludedNamespaces:\n - syn-github-actions-runner-controller # synoptic runners gha p0602\n - vspspr-*\n - clickhouse-*\n - coroot\n - alfor-*\n - asm-dev\n - billing-preprod\n - intraru-prod\n - wecare-prod\n - wecare-test\n - fudzi\n - carrier-portal-*\n - pickup-point-*\n - del-sell-*\n - gts-tms-*\n - pnr--alfa\n - del-repo-*\n - infra-elklogs*\n - osaas-opensearch*\n - jaeger*\n - pim-*\n - search-*\n - mf\n - chaos-mesh\n - intraru-stage\n - intraru-preprod\n - trivy-operator\n\ndenyPrivilegedContainers:\n excludedNamespaces:\n - syn-github-actions-runner-controller #gha runners for synoptic p0602\n - vspspr-*\n - clickhouse-*\n - coroot\n - alfor-*\n - asm-dev\n - billing-preprod\n - intraru-prod\n - wecare-prod\n - wecare-test\n - fudzi\n - carrier-portal-*\n - pickup-point-*\n - del-sell-*\n - gts-tms-*\n - pnr--alfa\n - del-repo-*\n - infra-elklogs*\n - osaas-opensearch*\n - jaeger*\n - gitlab-runner*\n - pim-*\n - search-*\n - mf\n - chaos-mesh\n - intraru-stage\n - intraru-preprod\n - elma-*\n - trivy-operator\n - stackrox\n\nallowedReposGlob:\n enforcementAction: deny\n",
"firstEditBubbleId": "0c535d43-cd0d-4966-be55-533c3f9aa6ac",
"isNewlyCreated": false,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/deckhouse-modules/namespace-configurator/values/atlas-a-stage-cluster.yaml": {
"content": "---\nproducts:\n - product-id: P0404\n namespace_pattern:\n - ^itsec-.*\n\n - product-id: P1002\n namespace_pattern:\n - ^dast-ci-cd$\n\n - product-id: P0644\n namespace_pattern:\n - ^opssec-.*\n\n - product-id: P1205\n namespace_pattern:\n - ^sandbox-ksc-.*\n\ndevops-core-vector:\n - security.deckhouse.io/pod-policy-action: warn\n namespace_pattern:\n - ^devops-core-vector$\n",
"firstEditBubbleId": "e36c8d77-6ca8-4eab-b8a6-c834ef3d3299",
"isNewlyCreated": false,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/deckhouse-modules/namespace-configurator/templates/namespace-configurator.yaml": {
"content": "apiVersion: deckhouse.io/v1alpha1\nkind: ModuleConfig\nmetadata:\n name: namespace-configurator\nspec:\n enabled: true\n version: 1\n settings:\n configurations:\n # Actually disabling the ReplicasNotReady alert for non-system namespaces in platformeco\n {{- if hasKey .Values \"platformeco_replicas_not_ready_disable\" }}\n - labels:\n threshold.extended-monitoring.deckhouse.io/replicas-not-ready: \"146\"\n includeNames:\n - .*\n excludeNames:\n - ^d8-.*\n - ^flant.*\n - ^kube.*\n {{- end }}\n {{- $defaultProducts := dict\n \"P0471\" (list \"^kube-.*\" \"^lmru-devops-k8s-.*\" \"^eventrouter\" \"^devops-core-vector$\" \"^devops-core-vm-agent-common$\")\n \"P0137\" (list \"^coroot\")\n \"P1238\" (list \"^d8-.*\" \"^flant-.*\" \"^flant$\" \"^default$\")\n \"P0675\" (list \"^devops-core-k8s-blender-exporter$\")\n \"P0395\" (list \"^obs-alertmanager$\")\n \"P1002\" (list \"^aqua$\" \"^stackrox$\" \"^stackrox-.*\" \"^devsecops-tetragon$\" \"^trivy-operator$\")\n \"TBD\" (list \"^strimzi-kafka-operator$\" \"^redis-operator$\" \"^clickhouse-operator$\" \"^awx-operator$\" \"^jaeger-operator$\" \"^minio-operator$\" \"^mongodb-operator$\" \"^opensearch-operator$\" \"^spark-operator$\" \"^rabbitmq-operator$\" \"^postgres-operator$\" \"^spark-marts-load-operator$\")\n \"P1237\" (list \"^lmru-qa-stress-test$\")\n \"P0729\" (list \"^otel-.*\" \"^charon-.*\")\n \"P0550\" (list \"^infra-elklogs\" \"^chlog-.*\")\n }}\n # will contain all marked ns patterns in cluster to add them to the exclusions for each subject ('product', 'prometheus', etc.)\n {{- $taggedNsPatterns := dict }}\n # iterate over subjects ('product', 'prometheus', etc.)\n {{- range $subject, $values := (omit .Values \"argocd\") }}\n {{- $_ := set $taggedNsPatterns $subject list }}\n {{- range $values }}\n {{- $label := omit . \"namespace_pattern\" \"exclusions\" }}\n - labels:\n {{- range $k, $v := $label }}\n {{ $k }}: {{ $v | quote }}\n {{- end }}\n includeNames:\n {{- range .namespace_pattern }}\n - {{ . }}\n {{- $_ := set $taggedNsPatterns $subject (append (get $taggedNsPatterns $subject) .) }}\n {{- end }}\n excludeNames:\n - ^d8-.*\n {{- range .exclusions }}\n - {{ . }}\n {{- end }}\n {{- end }}\n {{- end }}\n {{- range $productId, $namespacePatterns := $defaultProducts }}\n - labels:\n product-id: {{ $productId }}\n includeNames:\n {{- range $namespacePatterns }}\n - {{ . }}\n {{- end }}\n {{- end }}\n {{- if not (hasKey .Values \"platformeco_exclusion\") }}\n - labels:\n product-id: unknown\n includeNames:\n - .*\n excludeNames:\n {{- with (get $taggedNsPatterns \"products\") }}\n {{- range . }}\n - {{ . }}\n {{- end }}\n {{- end }}\n {{- range $_, $namespacePatterns := $defaultProducts }}\n {{- range $namespacePatterns }}\n - {{ . }}\n {{- end }}\n {{- end }}\n {{- end }}\n - labels:\n extended-monitoring.deckhouse.io/enabled: \"\"\n{{- if hasKey .Values \"extended_monitoring_enable_on_all_ns\" }}\n includeNames:\n - .*\n excludeNames:\n - ^infra-elklogs$\n - ^d8-.*\n - ^upmeter-.$\n - ^kube-.$\n - ^flant-.$\n - ^dynatrace$\n{{- else }}\n includeNames:\n - ^infra-lokilogs$\n{{- end }}\n - labels:\n security.deckhouse.io/pod-policy: privileged\n includeNames:\n - ^lmru-devops-k8s-backup$\n - ^aqua$\n - labels:\n prometheus.deckhouse.io/monitor-watcher-enabled: \"true\"\n includeNames:\n - ^cross-namespace$\n",
"firstEditBubbleId": "bdc17b2f-9b3f-435f-824c-4bdc493d1045",
"isNewlyCreated": false,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/.yamllint": {
"content": "---\nextends: default\n\nyaml-files:\n - '*.yaml'\n - '.yamllint'\n - '*.yml'\n\nignore: |\n templates/\n .github/\n grafana-dashboards/\n grafana-datasources/\n files/\n crds/\n !clusters/**/templates/\n velero/\n !values/*.yaml\n clusters/customer/stage/x2/nodes/templates/instanceclasses.yaml\n common/deckhouse-modules/devops-core-loki-cfg\n apps/**/vector-agent\n apps/victoria-apps\n .argocd-source-*\n common/aqua-kube-enforcer\n common/aqua-enforcer\n apps/gha-runners*/\n apps/minio\n common/stackrox-*\n\n\nrules:\n line-length: disable\n comments: disable\n comments-indentation: disable\n",
"firstEditBubbleId": "80608e0d-4190-403f-bbe0-c0c2d27abd7e",
"isNewlyCreated": false,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/stage/templates/report-metrics-remote-write.yaml": {
"content": "",
"firstEditBubbleId": "c4e04f59-0888-4bd7-b376-cc6ccb299aba",
"isNewlyCreated": true,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/prod/templates/report-metrics-remote-write.yaml": {
"content": "",
"firstEditBubbleId": "99935afe-5974-4185-8880-9e0a47a7d57a",
"isNewlyCreated": true,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/prod/dashboards/trivy-crd-shared-dashboard.json": {
"content": "{\n \"__inputs\": [],\n \"__elements\": {},\n \"__requires\": [\n {\n \"type\": \"grafana\",\n \"id\": \"grafana\",\n \"name\": \"Grafana\",\n \"version\": \"10.4.15\"\n },\n {\n \"type\": \"datasource\",\n \"id\": \"prometheus\",\n \"name\": \"Prometheus\",\n \"version\": \"1.0.0\"\n },\n {\n \"type\": \"panel\",\n \"id\": \"stat\",\n \"name\": \"Stat\",\n \"version\": \"\"\n },\n {\n \"type\": \"panel\",\n \"id\": \"table\",\n \"name\": \"Table\",\n \"version\": \"\"\n },\n {\n \"type\": \"panel\",\n \"id\": \"row\",\n \"name\": \"Row\",\n \"version\": \"\"\n }\n ],\n \"annotations\": {\n \"list\": [\n {\n \"builtIn\": 1,\n \"datasource\": {\n \"type\": \"datasource\",\n \"uid\": \"grafana\"\n },\n \"enable\": true,\n \"hide\": true,\n \"iconColor\": \"rgba(0, 211, 255, 1)\",\n \"name\": \"Annotations & Alerts\",\n \"target\": {\n \"limit\": 100,\n \"matchAny\": false,\n \"tags\": [],\n \"type\": \"dashboard\"\n },\n \"type\": \"dashboard\"\n }\n ]\n },\n \"editable\": true,\n \"fiscalYearStartMonth\": 0,\n \"graphTooltip\": 0,\n \"id\": null,\n \"links\": [],\n \"liveNow\": false,\n \"panels\": [\n {\n \"collapsed\": false,\n \"gridPos\": {\n \"h\": 1,\n \"w\": 24,\n \"x\": 0,\n \"y\": 0\n },\n \"id\": 1,\n \"panels\": [],\n \"title\": \"Cluster Compliance\",\n \"type\": \"row\",\n \"description\": \"\\u041a\\u043b\\u044e\\u0447\\u0435\\u0432\\u044b\\u0435 \\u0430\\u0433\\u0440\\u0435\\u0433\\u0430\\u0442\\u044b compliance \\u043f\\u043e \\u0432\\u044b\\u0431\\u0440\\u0430\\u043d\\u043d\\u044b\\u043c benchmark: fail, pass, score \\u0438 \\u0432\\u043e\\u0437\\u0440\\u0430\\u0441\\u0442 \\u043f\\u043e\\u0441\\u043b\\u0435\\u0434\\u043d\\u0435\\u0433\\u043e \\u043e\\u0442\\u0447\\u0435\\u0442\\u0430.\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"red\",\n \"value\": 1\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 0,\n \"y\": 1\n },\n \"id\": 2,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sum(trivy_cluster_compliance_fail_count{k8s_cluster=~\\\"$k8s_cluster\\\"})\",\n \"instant\": true,\n \"legendFormat\": \"__auto\",\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Compliance: Failed Checks\",\n \"type\": \"stat\",\n \"description\": \"\\u041e\\u0431\\u0449\\u0435\\u0435 \\u0447\\u0438\\u0441\\u043b\\u043e \\u043f\\u0440\\u043e\\u0432\\u0430\\u043b\\u0435\\u043d\\u043d\\u044b\\u0445 compliance-checks \\u0432 \\u0442\\u0435\\u043a\\u0443\\u0449\\u0435\\u043c \\u0444\\u0438\\u043b\\u044c\\u0442\\u0440\\u0435 benchmark.\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"red\",\n \"value\": null\n },\n {\n \"color\": \"green\",\n \"value\": 1\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 6,\n \"y\": 1\n },\n \"id\": 3,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sum(trivy_cluster_compliance_pass_count{k8s_cluster=~\\\"$k8s_cluster\\\"})\",\n \"instant\": true,\n \"legendFormat\": \"__auto\",\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Compliance: Passed Checks\",\n \"type\": \"stat\",\n \"description\": \"\\u041e\\u0431\\u0449\\u0435\\u0435 \\u0447\\u0438\\u0441\\u043b\\u043e \\u0443\\u0441\\u043f\\u0435\\u0448\\u043d\\u043e \\u043f\\u0440\\u043e\\u0439\\u0434\\u0435\\u043d\\u043d\\u044b\\u0445 compliance-checks \\u0432 \\u0442\\u0435\\u043a\\u0443\\u0449\\u0435\\u043c \\u0444\\u0438\\u043b\\u044c\\u0442\\u0440\\u0435 benchmark.\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"decimals\": 2,\n \"unit\": \"percent\",\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"red\",\n \"value\": null\n },\n {\n \"color\": \"yellow\",\n \"value\": 80\n },\n {\n \"color\": \"green\",\n \"value\": 95\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 12,\n \"y\": 1\n },\n \"id\": 4,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"100 * sum(trivy_cluster_compliance_pass_count{k8s_cluster=~\\\"$k8s_cluster\\\"}) / clamp_min(sum(trivy_cluster_compliance_pass_count{k8s_cluster=~\\\"$k8s_cluster\\\"}) + sum(trivy_cluster_compliance_fail_count{k8s_cluster=~\\\"$k8s_cluster\\\"}), 1)\",\n \"instant\": true,\n \"legendFormat\": \"__auto\",\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Compliance: Score\",\n \"type\": \"stat\",\n \"description\": \"\\u0418\\u0442\\u043e\\u0433\\u043e\\u0432\\u044b\\u0439 \\u043f\\u0440\\u043e\\u0446\\u0435\\u043d\\u0442 \\u043f\\u0440\\u043e\\u0445\\u043e\\u0436\\u0434\\u0435\\u043d\\u0438\\u044f compliance: pass / (pass + fail) * 100.\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"decimals\": 0,\n \"unit\": \"s\",\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"yellow\",\n \"value\": 21600\n },\n {\n \"color\": \"red\",\n \"value\": 43200\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 18,\n \"y\": 1\n },\n \"id\": 5,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"time() - max(trivy_cluster_compliance_updated{k8s_cluster=~\\\"$k8s_cluster\\\"})\",\n \"instant\": true,\n \"legendFormat\": \"__auto\",\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Compliance: Last Report Age\",\n \"type\": \"stat\",\n \"description\": \"\\u0412\\u043e\\u0437\\u0440\\u0430\\u0441\\u0442 \\u043f\\u043e\\u0441\\u043b\\u0435\\u0434\\u043d\\u0435\\u0433\\u043e \\u043e\\u0431\\u043d\\u043e\\u0432\\u043b\\u0435\\u043d\\u0438\\u044f compliance-\\u043e\\u0442\\u0447\\u0435\\u0442\\u0430 \\u0432 \\u0447\\u0430\\u0441\\u0430\\u0445; \\u0440\\u043e\\u0441\\u0442 \\u0437\\u043d\\u0430\\u0447\\u0435\\u043d\\u0438\\u044f \\u043e\\u0437\\u043d\\u0430\\u0447\\u0430\\u0435\\u0442 \\u0443\\u0441\\u0442\\u0430\\u0440\\u0435\\u0432\\u0448\\u0438\\u0435 \\u0434\\u0430\\u043d\\u043d\\u044b\\u0435.\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 6,\n \"w\": 24,\n \"x\": 0,\n \"y\": 5\n },\n \"id\": 6,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Value\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc(sum by (benchmark) (trivy_cluster_compliance_fail_count{k8s_cluster=~\\\"$k8s_cluster\\\"}))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true\n },\n \"indexByName\": {\n \"benchmark\": 0,\n \"Value\": 1\n },\n \"renameByName\": {\n \"benchmark\": \"Framework\",\n \"Value\": \"Failed Checks\"\n }\n }\n }\n ],\n \"title\": \"Compliance: Failed Checks by Framework\",\n \"type\": \"table\",\n \"description\": \"\\u0421\\u0440\\u0430\\u0432\\u043d\\u0435\\u043d\\u0438\\u0435 \\u043a\\u043e\\u043b\\u0438\\u0447\\u0435\\u0441\\u0442\\u0432\\u0430 \\u043f\\u0440\\u043e\\u0432\\u0430\\u043b\\u043e\\u0432 \\u043f\\u043e framework (benchmark) \\u0434\\u043b\\u044f \\u043f\\u0440\\u0438\\u043e\\u0440\\u0438\\u0442\\u0438\\u0437\\u0430\\u0446\\u0438\\u0438 \\u0440\\u0430\\u0431\\u043e\\u0442.\"\n },\n {\n \"collapsed\": false,\n \"description\": \"\\u0414\\u0435\\u0442\\u0430\\u043b\\u0438\\u0437\\u0430\\u0446\\u0438\\u044f \\u043f\\u0440\\u043e\\u0432\\u0430\\u043b\\u0435\\u043d\\u043d\\u044b\\u0445 \\u043a\\u043e\\u043d\\u0442\\u0440\\u043e\\u043b\\u043e\\u0432 \\u0441 \\u0444\\u043e\\u043a\\u0443\\u0441\\u043e\\u043c \\u043d\\u0430 impact: fails \\u0438 \\u0434\\u043e\\u043b\\u044f \\u043e\\u0442 \\u043e\\u0431\\u0449\\u0435\\u0433\\u043e \\u043a\\u043e\\u043b\\u0438\\u0447\\u0435\\u0441\\u0442\\u0432\\u0430 fail.\",\n \"gridPos\": {\n \"h\": 1,\n \"w\": 24,\n \"x\": 0,\n \"y\": 11\n },\n \"id\": 48,\n \"panels\": [],\n \"title\": \"Control Drilldown\",\n \"type\": \"row\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u0415\\u0434\\u0438\\u043d\\u0430\\u044f \\u043f\\u043e\\u0434\\u0440\\u043e\\u0431\\u043d\\u0430\\u044f \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u0430 \\u043f\\u0440\\u043e\\u0432\\u0430\\u043b\\u0435\\u043d\\u043d\\u044b\\u0445 compliance-checks \\u0441 \\u043a\\u043e\\u043d\\u043a\\u0440\\u0435\\u0442\\u043d\\u044b\\u043c target/\\u0440\\u0435\\u0441\\u0443\\u0440\\u0441\\u043e\\u043c.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 22,\n \"w\": 24,\n \"x\": 0,\n \"y\": 12\n },\n \"id\": 49,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Fails\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc(sum by (benchmark, control_id, control_name, control_severity, check_id, check_title, check_target, check_namespace, resource_kind, resource_name) (trivy_cluster_compliance_fail_check_total{k8s_cluster=~\\\"$k8s_cluster\\\"}))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Compliance: Fail Checks Drilldown (Detailed)\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"benchmark_id\": true,\n \"benchmark_type\": true,\n \"benchmark_version\": true,\n \"customresource_group\": true,\n \"customresource_kind\": true,\n \"customresource_version\": true,\n \"instance\": true,\n \"job\": true,\n \"name\": true,\n \"namespace\": true,\n \"pod\": true,\n \"service\": true\n },\n \"indexByName\": {\n \"benchmark\": 0,\n \"control_id\": 1,\n \"control_name\": 2,\n \"control_severity\": 3,\n \"check_id\": 4,\n \"check_title\": 5,\n \"check_target\": 6,\n \"check_namespace\": 7,\n \"resource_kind\": 8,\n \"resource_name\": 9,\n \"Value\": 10\n },\n \"renameByName\": {\n \"benchmark\": \"Framework\",\n \"control_id\": \"Control ID\",\n \"control_name\": \"Control\",\n \"control_severity\": \"Severity\",\n \"check_id\": \"Check ID\",\n \"check_title\": \"Check\",\n \"check_target\": \"Target\",\n \"check_namespace\": \"Namespace\",\n \"resource_kind\": \"Kind\",\n \"resource_name\": \"Resource\",\n \"Value\": \"Fails\"\n }\n }\n }\n ]\n },\n {\n \"collapsed\": false,\n \"description\": \"Risk view \\u0434\\u043b\\u044f namespaced-\\u043e\\u0442\\u0447\\u0435\\u0442\\u043e\\u0432: \\u043e\\u0431\\u0449\\u0438\\u0439 \\u043e\\u0431\\u044a\\u0451\\u043c findings \\u0438 \\u043f\\u0440\\u0438\\u043e\\u0440\\u0438\\u0442\\u0435\\u0442\\u044b \\u043f\\u043e namespace/\\u0440\\u0435\\u0441\\u0443\\u0440\\u0441\\u0430\\u043c.\",\n \"gridPos\": {\n \"h\": 1,\n \"w\": 24,\n \"x\": 0,\n \"y\": 23\n },\n \"id\": 50,\n \"panels\": [],\n \"title\": \"Namespaced Risk\",\n \"type\": \"row\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u0421\\u0443\\u043c\\u043c\\u0430\\u0440\\u043d\\u044b\\u0435 critical+high findings \\u0432 ConfigAuditReport \\u043f\\u043e \\u0432\\u044b\\u0431\\u0440\\u0430\\u043d\\u043d\\u044b\\u043c namespace.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"yellow\",\n \"value\": 1\n },\n {\n \"color\": \"red\",\n \"value\": 10\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 8,\n \"x\": 0,\n \"y\": 24\n },\n \"id\": 51,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sum(trivy_config_audit_critical_count{exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"} + trivy_config_audit_high_count{exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"}) or vector(0)\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Config: Critical + High Findings\",\n \"type\": \"stat\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u0421\\u0443\\u043c\\u043c\\u0430\\u0440\\u043d\\u044b\\u0435 critical+high findings \\u0432 InfraAssessmentReport \\u043f\\u043e \\u0432\\u044b\\u0431\\u0440\\u0430\\u043d\\u043d\\u044b\\u043c namespace.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"yellow\",\n \"value\": 1\n },\n {\n \"color\": \"red\",\n \"value\": 10\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 8,\n \"x\": 8,\n \"y\": 24\n },\n \"id\": 52,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sum(trivy_infra_assessment_critical_count{exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"} + trivy_infra_assessment_high_count{exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"}) or vector(0)\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Infra: Critical + High Findings\",\n \"type\": \"stat\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u041a\\u043e\\u043b\\u0438\\u0447\\u0435\\u0441\\u0442\\u0432\\u043e namespace, \\u0433\\u0434\\u0435 \\u0435\\u0441\\u0442\\u044c \\u0445\\u043e\\u0442\\u044f \\u0431\\u044b \\u043e\\u0434\\u0438\\u043d critical/high finding (ConfigAudit + InfraAssessment).\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"yellow\",\n \"value\": 1\n },\n {\n \"color\": \"red\",\n \"value\": 5\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 8,\n \"x\": 16,\n \"y\": 24\n },\n \"id\": 55,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"count(sum by (exported_namespace) ({__name__=~\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\", exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"}) > 0) or vector(0)\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Namespaces With Findings\",\n \"type\": \"stat\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u041f\\u0440\\u0438\\u043e\\u0440\\u0438\\u0442\\u0438\\u0437\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d\\u043d\\u044b\\u0439 \\u0441\\u043f\\u0438\\u0441\\u043e\\u043a namespace \\u043f\\u043e \\u0441\\u0443\\u043c\\u043c\\u0430\\u0440\\u043d\\u043e\\u043c\\u0443 \\u0440\\u0438\\u0441\\u043a\\u0443 (critical+high \\u0438\\u0437 ConfigAudit + InfraAssessment).\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 8,\n \"w\": 12,\n \"x\": 0,\n \"y\": 28\n },\n \"id\": 53,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Critical + High\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc((sum by (exported_namespace) ({__name__=~\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\", exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"})) unless (sum by (exported_namespace) ({__name__=~\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\", exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"}) == 0))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Top Namespaces by Critical + High Findings\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"instance\": true,\n \"job\": true,\n \"namespace\": true,\n \"pod\": true,\n \"service\": true\n },\n \"indexByName\": {\n \"exported_namespace\": 0,\n \"Value\": 1\n },\n \"renameByName\": {\n \"exported_namespace\": \"Namespace\",\n \"Value\": \"Critical + High\"\n }\n }\n }\n ]\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u0422\\u043e\\u043f \\u043a\\u043e\\u043d\\u043a\\u0440\\u0435\\u0442\\u043d\\u044b\\u0445 workload-\\u043e\\u0431\\u044a\\u0435\\u043a\\u0442\\u043e\\u0432 (namespace/kind/resource) \\u043f\\u043e \\u0441\\u0443\\u043c\\u043c\\u0435 critical+high findings.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 8,\n \"w\": 12,\n \"x\": 12,\n \"y\": 28\n },\n \"id\": 54,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Critical + High\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc((sum by (exported_namespace, resource_kind, resource_name) ({__name__=~\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\", exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"})) unless (sum by (exported_namespace, resource_kind, resource_name) ({__name__=~\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\", exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"}) == 0))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Top Targets by Namespace (Critical + High)\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"instance\": true,\n \"job\": true,\n \"namespace\": true,\n \"pod\": true,\n \"service\": true\n },\n \"indexByName\": {\n \"exported_namespace\": 0,\n \"resource_kind\": 1,\n \"resource_name\": 2,\n \"Value\": 3\n },\n \"renameByName\": {\n \"exported_namespace\": \"Namespace\",\n \"resource_kind\": \"Kind\",\n \"resource_name\": \"Resource\",\n \"Value\": \"Critical + High\"\n }\n }\n }\n ]\n },\n {\n \"collapsed\": false,\n \"description\": \"\\u041f\\u043e\\u0447\\u0435\\u043c\\u0443 \\u0441\\u0440\\u0430\\u0431\\u0430\\u0442\\u044b\\u0432\\u0430\\u0435\\u0442 Config/Infra: \\u0430\\u0433\\u0440\\u0435\\u0433\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d\\u043d\\u044b\\u0435 \\u043f\\u0440\\u0438\\u0447\\u0438\\u043d\\u044b \\u043f\\u043e check ID \\u0438 \\u043d\\u0430\\u0437\\u0432\\u0430\\u043d\\u0438\\u044e (\\u0431\\u0435\\u0437 \\u0434\\u043b\\u0438\\u043d\\u043d\\u044b\\u0445 message).\",\n \"gridPos\": {\n \"x\": 0,\n \"y\": 36,\n \"w\": 24,\n \"h\": 1\n },\n \"id\": 58,\n \"panels\": [],\n \"title\": \"Findings Reasons\",\n \"type\": \"row\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u0422\\u043e\\u043f \\u043f\\u0440\\u0438\\u0447\\u0438\\u043d \\u0441\\u0440\\u0430\\u0431\\u0430\\u0442\\u044b\\u0432\\u0430\\u043d\\u0438\\u044f \\u0432 ConfigAuditReport: \\u043a\\u0430\\u043a\\u0438\\u0435 \\u043f\\u0440\\u043e\\u0432\\u0435\\u0440\\u043a\\u0438 \\u0434\\u0430\\u044e\\u0442 \\u043d\\u0430\\u0438\\u0431\\u043e\\u043b\\u044c\\u0448\\u0438\\u0439 \\u0432\\u043a\\u043b\\u0430\\u0434.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"x\": 0,\n \"y\": 37,\n \"w\": 24,\n \"h\": 8\n },\n \"id\": 59,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Findings\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc(sum by (check_id, check_title, check_severity, check_category) (trivy_config_audit_check_fail_total{exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"}))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Config: Top Trigger Reasons\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"customresource_group\": true,\n \"customresource_kind\": true,\n \"customresource_version\": true,\n \"exported_namespace\": true,\n \"instance\": true,\n \"job\": true,\n \"name\": true,\n \"namespace\": true,\n \"pod\": true,\n \"resource_kind\": true,\n \"resource_name\": true,\n \"service\": true,\n \"scanner_name\": true,\n \"scanner_vendor\": true,\n \"scanner_version\": true\n },\n \"indexByName\": {\n \"check_id\": 0,\n \"check_title\": 1,\n \"check_severity\": 2,\n \"check_category\": 3,\n \"Value\": 4\n },\n \"renameByName\": {\n \"check_id\": \"Check ID\",\n \"check_title\": \"Check\",\n \"check_severity\": \"Severity\",\n \"check_category\": \"Category\",\n \"Value\": \"Findings\"\n }\n }\n }\n ]\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u0422\\u043e\\u043f \\u043f\\u0440\\u0438\\u0447\\u0438\\u043d \\u0441\\u0440\\u0430\\u0431\\u0430\\u0442\\u044b\\u0432\\u0430\\u043d\\u0438\\u044f \\u0432 InfraAssessmentReport + ClusterInfraAssessmentReport.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"x\": 0,\n \"y\": 45,\n \"w\": 24,\n \"h\": 8\n },\n \"id\": 60,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Findings\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc((sum by (check_id, check_title, check_severity, check_category) (trivy_infra_assessment_check_fail_total{exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"})) or (sum by (check_id, check_title, check_severity, check_category) (trivy_cluster_infra_assessment_check_fail_total{k8s_cluster=~\\\"$k8s_cluster\\\"})))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Infra: Top Trigger Reasons\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"customresource_group\": true,\n \"customresource_kind\": true,\n \"customresource_version\": true,\n \"exported_namespace\": true,\n \"instance\": true,\n \"job\": true,\n \"name\": true,\n \"namespace\": true,\n \"pod\": true,\n \"resource_kind\": true,\n \"resource_name\": true,\n \"service\": true,\n \"scanner_name\": true,\n \"scanner_vendor\": true,\n \"scanner_version\": true\n },\n \"indexByName\": {\n \"check_id\": 0,\n \"check_title\": 1,\n \"check_severity\": 2,\n \"check_category\": 3,\n \"Value\": 4\n },\n \"renameByName\": {\n \"check_id\": \"Check ID\",\n \"check_title\": \"Check\",\n \"check_severity\": \"Severity\",\n \"check_category\": \"Category\",\n \"Value\": \"Findings\"\n }\n }\n }\n ]\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u041a\\u043e\\u043d\\u043a\\u0440\\u0435\\u0442\\u043d\\u044b\\u0435 \\u0440\\u0435\\u0441\\u0443\\u0440\\u0441\\u044b \\u0434\\u043b\\u044f \\u0432\\u044b\\u0431\\u0440\\u0430\\u043d\\u043d\\u043e\\u0439 \\u043f\\u0440\\u0438\\u0447\\u0438\\u043d\\u044b (check_id) \\u0438\\u0437 ConfigAuditReport.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"x\": 0,\n \"y\": 53,\n \"w\": 24,\n \"h\": 8\n },\n \"id\": 61,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Findings\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc(sum by (check_id, check_title, check_severity, check_category, exported_namespace, resource_kind, resource_name) (trivy_config_audit_check_fail_total{exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"}))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Config: Affected Resources by Check\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"check_category\": false,\n \"check_id\": false,\n \"check_severity\": false,\n \"check_title\": false,\n \"customresource_group\": true,\n \"customresource_kind\": true,\n \"customresource_version\": true,\n \"instance\": true,\n \"job\": true,\n \"name\": true,\n \"namespace\": true,\n \"pod\": true,\n \"scanner\": true,\n \"scanner_name\": true,\n \"scanner_vendor\": true,\n \"scanner_version\": true,\n \"service\": true\n },\n \"indexByName\": {\n \"exported_namespace\": 4,\n \"resource_kind\": 5,\n \"resource_name\": 6,\n \"Value\": 7,\n \"check_id\": 0,\n \"check_title\": 1,\n \"check_severity\": 2,\n \"check_category\": 3\n },\n \"renameByName\": {\n \"exported_namespace\": \"Namespace\",\n \"resource_kind\": \"Kind\",\n \"resource_name\": \"Resource\",\n \"Value\": \"Findings\",\n \"check_id\": \"Check ID\",\n \"check_title\": \"Check\",\n \"check_severity\": \"Severity\",\n \"check_category\": \"Category\"\n }\n }\n }\n ]\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u041a\\u043e\\u043d\\u043a\\u0440\\u0435\\u0442\\u043d\\u044b\\u0435 \\u0440\\u0435\\u0441\\u0443\\u0440\\u0441\\u044b \\u0434\\u043b\\u044f \\u043f\\u0440\\u0438\\u0447\\u0438\\u043d \\u0438\\u0437 InfraAssessmentReport + ClusterInfraAssessmentReport.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"x\": 0,\n \"y\": 61,\n \"w\": 24,\n \"h\": 8\n },\n \"id\": 62,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Findings\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc((sum by (check_id, check_title, check_severity, check_category, exported_namespace, resource_kind, resource_name) (trivy_infra_assessment_check_fail_total{exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"})) or (sum by (check_id, check_title, check_severity, check_category, exported_namespace, resource_kind, resource_name) (trivy_cluster_infra_assessment_check_fail_total{k8s_cluster=~\\\"$k8s_cluster\\\"})))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Infra: Affected Resources by Check\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"check_category\": false,\n \"check_id\": false,\n \"check_severity\": false,\n \"check_title\": false,\n \"customresource_group\": true,\n \"customresource_kind\": true,\n \"customresource_version\": true,\n \"instance\": true,\n \"job\": true,\n \"name\": true,\n \"namespace\": true,\n \"pod\": true,\n \"scanner\": true,\n \"scanner_name\": true,\n \"scanner_vendor\": true,\n \"scanner_version\": true,\n \"service\": true\n },\n \"indexByName\": {\n \"exported_namespace\": 4,\n \"resource_kind\": 5,\n \"resource_name\": 6,\n \"Value\": 7,\n \"check_id\": 0,\n \"check_title\": 1,\n \"check_severity\": 2,\n \"check_category\": 3\n },\n \"renameByName\": {\n \"exported_namespace\": \"Namespace\",\n \"resource_kind\": \"Kind\",\n \"resource_name\": \"Resource\",\n \"Value\": \"Findings\",\n \"check_id\": \"Check ID\",\n \"check_title\": \"Check\",\n \"check_severity\": \"Severity\",\n \"check_category\": \"Category\"\n }\n }\n }\n ]\n },\n {\n \"collapsed\": false,\n \"description\": \"\\u0421\\u043b\\u0443\\u0436\\u0435\\u0431\\u043d\\u044b\\u0439 \\u0431\\u043b\\u043e\\u043a \\u0441\\u043e\\u0441\\u0442\\u043e\\u044f\\u043d\\u0438\\u044f exporter: \\u0434\\u043e\\u0441\\u0442\\u0443\\u043f\\u043d\\u043e\\u0441\\u0442\\u044c, \\u0441\\u0432\\u0435\\u0436\\u0435\\u0441\\u0442\\u044c \\u0434\\u0430\\u043d\\u043d\\u044b\\u0445 \\u0438 \\u043d\\u0430\\u043b\\u0438\\u0447\\u0438\\u0435 \\u043e\\u0448\\u0438\\u0431\\u043e\\u043a refresh.\",\n \"gridPos\": {\n \"h\": 1,\n \"w\": 24,\n \"x\": 0,\n \"y\": 69\n },\n \"id\": 43,\n \"panels\": [],\n \"title\": \"Exporter Runtime Health\",\n \"type\": \"row\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"1 = exporter \\u0443\\u0441\\u043f\\u0435\\u0448\\u043d\\u043e \\u043e\\u0431\\u043d\\u043e\\u0432\\u043b\\u044f\\u043b \\u043c\\u0435\\u0442\\u0440\\u0438\\u043a\\u0438 \\u043d\\u0435\\u0434\\u0430\\u0432\\u043d\\u043e; 0 = refresh \\u0443\\u0441\\u0442\\u0430\\u0440\\u0435\\u043b \\u0438\\u043b\\u0438 \\u043e\\u0441\\u0442\\u0430\\u043d\\u043e\\u0432\\u0438\\u043b\\u0441\\u044f.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"red\",\n \"value\": null\n },\n {\n \"color\": \"green\",\n \"value\": 1\n }\n ]\n },\n \"mappings\": [\n {\n \"type\": \"value\",\n \"options\": {\n \"0\": {\n \"text\": \"DOWN\"\n },\n \"1\": {\n \"text\": \"UP\"\n }\n }\n }\n ]\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 0,\n \"y\": 70\n },\n \"id\": 44,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"(max(trivy_report_metrics_exporter_up{k8s_cluster=~\\\"$k8s_cluster\\\"})) or vector(0)\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Exporter: Up\",\n \"type\": \"stat\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u0412\\u043e\\u0437\\u0440\\u0430\\u0441\\u0442 \\u043f\\u043e\\u0441\\u043b\\u0435\\u0434\\u043d\\u0435\\u0433\\u043e \\u0443\\u0441\\u043f\\u0435\\u0448\\u043d\\u043e\\u0433\\u043e refresh \\u0432 \\u043c\\u0438\\u043d\\u0443\\u0442\\u0430\\u0445; \\u0440\\u043e\\u0441\\u0442 \\u043f\\u043e\\u043a\\u0430\\u0437\\u044b\\u0432\\u0430\\u0435\\u0442 \\u0434\\u0435\\u0433\\u0440\\u0430\\u0434\\u0430\\u0446\\u0438\\u044e \\u0438\\u0441\\u0442\\u043e\\u0447\\u043d\\u0438\\u043a\\u0430 \\u0434\\u0430\\u043d\\u043d\\u044b\\u0445.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"unit\": \"m\",\n \"decimals\": 1,\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"yellow\",\n \"value\": 5\n },\n {\n \"color\": \"red\",\n \"value\": 15\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 6,\n \"y\": 70\n },\n \"id\": 45,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"(time() - ((max(trivy_report_metrics_last_success_timestamp{k8s_cluster=~\\\"$k8s_cluster\\\"})) or vector(0))) / 60\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Exporter: Last Success Age\",\n \"type\": \"stat\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u0421\\u0447\\u0435\\u0442\\u0447\\u0438\\u043a \\u043e\\u0448\\u0438\\u0431\\u043e\\u043a refresh \\u0441 \\u043c\\u043e\\u043c\\u0435\\u043d\\u0442\\u0430 \\u0437\\u0430\\u043f\\u0443\\u0441\\u043a\\u0430 pod; \\u043d\\u0435 \\u0434\\u043e\\u043b\\u0436\\u0435\\u043d \\u0441\\u0442\\u0430\\u0431\\u0438\\u043b\\u044c\\u043d\\u043e \\u0440\\u0430\\u0441\\u0442\\u0438.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"red\",\n \"value\": 1\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 12,\n \"y\": 70\n },\n \"id\": 46,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"(max(trivy_report_metrics_refresh_errors_total{k8s_cluster=~\\\"$k8s_cluster\\\"})) or vector(0)\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Exporter: Refresh Errors Total\",\n \"type\": \"stat\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u0424\\u043b\\u0430\\u0433 \\u043d\\u0430\\u043b\\u0438\\u0447\\u0438\\u044f \\u043f\\u043e\\u0441\\u043b\\u0435\\u0434\\u043d\\u0435\\u0439 \\u043e\\u0448\\u0438\\u0431\\u043a\\u0438 refresh (1 = \\u0435\\u0441\\u0442\\u044c \\u043e\\u0448\\u0438\\u0431\\u043a\\u0430, 0 = \\u043e\\u0448\\u0438\\u0431\\u043e\\u043a \\u043d\\u0435\\u0442).\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"red\",\n \"value\": 1\n }\n ]\n },\n \"mappings\": [\n {\n \"type\": \"value\",\n \"options\": {\n \"0\": {\n \"text\": \"OK\"\n },\n \"1\": {\n \"text\": \"ERROR\"\n }\n }\n }\n ]\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 18,\n \"y\": 70\n },\n \"id\": 47,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"(max(trivy_report_metrics_last_error_info{k8s_cluster=~\\\"$k8s_cluster\\\"})) or vector(0)\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Exporter: Last Error Present\",\n \"type\": \"stat\"\n }\n ],\n \"refresh\": \"10m\",\n \"schemaVersion\": 39,\n \"tags\": [\n \"Prometheus\",\n \"Trivy-operator\",\n \"CRD\"\n ],\n \"templating\": {\n \"list\": [\n {\n \"allValue\": \".*\",\n \"current\": {},\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"definition\": \"label_values(trivy_exporter_up, k8s_cluster)\",\n \"hide\": 0,\n \"includeAll\": true,\n \"multi\": true,\n \"name\": \"k8s_cluster\",\n \"options\": [],\n \"query\": {\n \"qryType\": 1,\n \"query\": \"label_values(trivy_exporter_up, k8s_cluster)\",\n \"refId\": \"PrometheusVariableQueryEditor-VariableQuery\"\n },\n \"refresh\": 1,\n \"regex\": \"\",\n \"skipUrlSync\": false,\n \"sort\": 1,\n \"type\": \"query\"\n },\n {\n \"allValue\": \".*\",\n \"current\": {},\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"definition\": \"label_values(trivy_config_audit_created{k8s_cluster=~\\\"$k8s_cluster\\\"},exported_namespace)\",\n \"hide\": 0,\n \"includeAll\": true,\n \"multi\": true,\n \"name\": \"exported_namespace\",\n \"options\": [],\n \"query\": {\n \"qryType\": 1,\n \"query\": \"label_values(trivy_config_audit_created{k8s_cluster=~\\\"$k8s_cluster\\\"},exported_namespace)\",\n \"refId\": \"PrometheusVariableQueryEditor-VariableQuery\"\n },\n \"refresh\": 1,\n \"regex\": \"\",\n \"skipUrlSync\": false,\n \"sort\": 1,\n \"type\": \"query\"\n }\n ]\n },\n \"time\": {\n \"from\": \"now-7d\",\n \"to\": \"now\"\n },\n \"timepicker\": {},\n \"timezone\": \"\",\n \"title\": \"Trivy Operator - CRD Results\",\n \"uid\": \"security_trivy_operator_crd\",\n \"version\": 32,\n \"weekStart\": \"\"\n}\n",
"firstEditBubbleId": "47aec93b-b74b-481d-9092-ecc3e222daca",
"isNewlyCreated": false,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/stage/dashboards/trivy-crd-shared-dashboard.json": {
"content": "{\n \"__inputs\": [],\n \"__elements\": {},\n \"__requires\": [\n {\n \"type\": \"grafana\",\n \"id\": \"grafana\",\n \"name\": \"Grafana\",\n \"version\": \"10.4.15\"\n },\n {\n \"type\": \"datasource\",\n \"id\": \"prometheus\",\n \"name\": \"Prometheus\",\n \"version\": \"1.0.0\"\n },\n {\n \"type\": \"panel\",\n \"id\": \"stat\",\n \"name\": \"Stat\",\n \"version\": \"\"\n },\n {\n \"type\": \"panel\",\n \"id\": \"table\",\n \"name\": \"Table\",\n \"version\": \"\"\n },\n {\n \"type\": \"panel\",\n \"id\": \"row\",\n \"name\": \"Row\",\n \"version\": \"\"\n }\n ],\n \"annotations\": {\n \"list\": [\n {\n \"builtIn\": 1,\n \"datasource\": {\n \"type\": \"datasource\",\n \"uid\": \"grafana\"\n },\n \"enable\": true,\n \"hide\": true,\n \"iconColor\": \"rgba(0, 211, 255, 1)\",\n \"name\": \"Annotations & Alerts\",\n \"target\": {\n \"limit\": 100,\n \"matchAny\": false,\n \"tags\": [],\n \"type\": \"dashboard\"\n },\n \"type\": \"dashboard\"\n }\n ]\n },\n \"editable\": true,\n \"fiscalYearStartMonth\": 0,\n \"graphTooltip\": 0,\n \"id\": null,\n \"links\": [],\n \"liveNow\": false,\n \"panels\": [\n {\n \"collapsed\": false,\n \"gridPos\": {\n \"h\": 1,\n \"w\": 24,\n \"x\": 0,\n \"y\": 0\n },\n \"id\": 1,\n \"panels\": [],\n \"title\": \"Cluster Compliance\",\n \"type\": \"row\",\n \"description\": \"\\u041a\\u043b\\u044e\\u0447\\u0435\\u0432\\u044b\\u0435 \\u0430\\u0433\\u0440\\u0435\\u0433\\u0430\\u0442\\u044b compliance \\u043f\\u043e \\u0432\\u044b\\u0431\\u0440\\u0430\\u043d\\u043d\\u044b\\u043c benchmark: fail, pass, score \\u0438 \\u0432\\u043e\\u0437\\u0440\\u0430\\u0441\\u0442 \\u043f\\u043e\\u0441\\u043b\\u0435\\u0434\\u043d\\u0435\\u0433\\u043e \\u043e\\u0442\\u0447\\u0435\\u0442\\u0430.\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"red\",\n \"value\": 1\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 0,\n \"y\": 1\n },\n \"id\": 2,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sum(trivy_cluster_compliance_fail_count{k8s_cluster=~\\\"$k8s_cluster\\\"})\",\n \"instant\": true,\n \"legendFormat\": \"__auto\",\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Compliance: Failed Checks\",\n \"type\": \"stat\",\n \"description\": \"\\u041e\\u0431\\u0449\\u0435\\u0435 \\u0447\\u0438\\u0441\\u043b\\u043e \\u043f\\u0440\\u043e\\u0432\\u0430\\u043b\\u0435\\u043d\\u043d\\u044b\\u0445 compliance-checks \\u0432 \\u0442\\u0435\\u043a\\u0443\\u0449\\u0435\\u043c \\u0444\\u0438\\u043b\\u044c\\u0442\\u0440\\u0435 benchmark.\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"red\",\n \"value\": null\n },\n {\n \"color\": \"green\",\n \"value\": 1\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 6,\n \"y\": 1\n },\n \"id\": 3,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sum(trivy_cluster_compliance_pass_count{k8s_cluster=~\\\"$k8s_cluster\\\"})\",\n \"instant\": true,\n \"legendFormat\": \"__auto\",\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Compliance: Passed Checks\",\n \"type\": \"stat\",\n \"description\": \"\\u041e\\u0431\\u0449\\u0435\\u0435 \\u0447\\u0438\\u0441\\u043b\\u043e \\u0443\\u0441\\u043f\\u0435\\u0448\\u043d\\u043e \\u043f\\u0440\\u043e\\u0439\\u0434\\u0435\\u043d\\u043d\\u044b\\u0445 compliance-checks \\u0432 \\u0442\\u0435\\u043a\\u0443\\u0449\\u0435\\u043c \\u0444\\u0438\\u043b\\u044c\\u0442\\u0440\\u0435 benchmark.\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"decimals\": 2,\n \"unit\": \"percent\",\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"red\",\n \"value\": null\n },\n {\n \"color\": \"yellow\",\n \"value\": 80\n },\n {\n \"color\": \"green\",\n \"value\": 95\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 12,\n \"y\": 1\n },\n \"id\": 4,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"100 * sum(trivy_cluster_compliance_pass_count{k8s_cluster=~\\\"$k8s_cluster\\\"}) / clamp_min(sum(trivy_cluster_compliance_pass_count{k8s_cluster=~\\\"$k8s_cluster\\\"}) + sum(trivy_cluster_compliance_fail_count{k8s_cluster=~\\\"$k8s_cluster\\\"}), 1)\",\n \"instant\": true,\n \"legendFormat\": \"__auto\",\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Compliance: Score\",\n \"type\": \"stat\",\n \"description\": \"\\u0418\\u0442\\u043e\\u0433\\u043e\\u0432\\u044b\\u0439 \\u043f\\u0440\\u043e\\u0446\\u0435\\u043d\\u0442 \\u043f\\u0440\\u043e\\u0445\\u043e\\u0436\\u0434\\u0435\\u043d\\u0438\\u044f compliance: pass / (pass + fail) * 100.\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"decimals\": 0,\n \"unit\": \"s\",\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"yellow\",\n \"value\": 21600\n },\n {\n \"color\": \"red\",\n \"value\": 43200\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 18,\n \"y\": 1\n },\n \"id\": 5,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"time() - max(trivy_cluster_compliance_updated{k8s_cluster=~\\\"$k8s_cluster\\\"})\",\n \"instant\": true,\n \"legendFormat\": \"__auto\",\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Compliance: Last Report Age\",\n \"type\": \"stat\",\n \"description\": \"\\u0412\\u043e\\u0437\\u0440\\u0430\\u0441\\u0442 \\u043f\\u043e\\u0441\\u043b\\u0435\\u0434\\u043d\\u0435\\u0433\\u043e \\u043e\\u0431\\u043d\\u043e\\u0432\\u043b\\u0435\\u043d\\u0438\\u044f compliance-\\u043e\\u0442\\u0447\\u0435\\u0442\\u0430 \\u0432 \\u0447\\u0430\\u0441\\u0430\\u0445; \\u0440\\u043e\\u0441\\u0442 \\u0437\\u043d\\u0430\\u0447\\u0435\\u043d\\u0438\\u044f \\u043e\\u0437\\u043d\\u0430\\u0447\\u0430\\u0435\\u0442 \\u0443\\u0441\\u0442\\u0430\\u0440\\u0435\\u0432\\u0448\\u0438\\u0435 \\u0434\\u0430\\u043d\\u043d\\u044b\\u0435.\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 6,\n \"w\": 24,\n \"x\": 0,\n \"y\": 5\n },\n \"id\": 6,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Value\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc(sum by (benchmark) (trivy_cluster_compliance_fail_count{k8s_cluster=~\\\"$k8s_cluster\\\"}))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true\n },\n \"indexByName\": {\n \"benchmark\": 0,\n \"Value\": 1\n },\n \"renameByName\": {\n \"benchmark\": \"Framework\",\n \"Value\": \"Failed Checks\"\n }\n }\n }\n ],\n \"title\": \"Compliance: Failed Checks by Framework\",\n \"type\": \"table\",\n \"description\": \"\\u0421\\u0440\\u0430\\u0432\\u043d\\u0435\\u043d\\u0438\\u0435 \\u043a\\u043e\\u043b\\u0438\\u0447\\u0435\\u0441\\u0442\\u0432\\u0430 \\u043f\\u0440\\u043e\\u0432\\u0430\\u043b\\u043e\\u0432 \\u043f\\u043e framework (benchmark) \\u0434\\u043b\\u044f \\u043f\\u0440\\u0438\\u043e\\u0440\\u0438\\u0442\\u0438\\u0437\\u0430\\u0446\\u0438\\u0438 \\u0440\\u0430\\u0431\\u043e\\u0442.\"\n },\n {\n \"collapsed\": false,\n \"description\": \"\\u0414\\u0435\\u0442\\u0430\\u043b\\u0438\\u0437\\u0430\\u0446\\u0438\\u044f \\u043f\\u0440\\u043e\\u0432\\u0430\\u043b\\u0435\\u043d\\u043d\\u044b\\u0445 \\u043a\\u043e\\u043d\\u0442\\u0440\\u043e\\u043b\\u043e\\u0432 \\u0441 \\u0444\\u043e\\u043a\\u0443\\u0441\\u043e\\u043c \\u043d\\u0430 impact: fails \\u0438 \\u0434\\u043e\\u043b\\u044f \\u043e\\u0442 \\u043e\\u0431\\u0449\\u0435\\u0433\\u043e \\u043a\\u043e\\u043b\\u0438\\u0447\\u0435\\u0441\\u0442\\u0432\\u0430 fail.\",\n \"gridPos\": {\n \"h\": 1,\n \"w\": 24,\n \"x\": 0,\n \"y\": 11\n },\n \"id\": 48,\n \"panels\": [],\n \"title\": \"Control Drilldown\",\n \"type\": \"row\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u0415\\u0434\\u0438\\u043d\\u0430\\u044f \\u043f\\u043e\\u0434\\u0440\\u043e\\u0431\\u043d\\u0430\\u044f \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u0430 \\u043f\\u0440\\u043e\\u0432\\u0430\\u043b\\u0435\\u043d\\u043d\\u044b\\u0445 compliance-checks \\u0441 \\u043a\\u043e\\u043d\\u043a\\u0440\\u0435\\u0442\\u043d\\u044b\\u043c target/\\u0440\\u0435\\u0441\\u0443\\u0440\\u0441\\u043e\\u043c.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 22,\n \"w\": 24,\n \"x\": 0,\n \"y\": 12\n },\n \"id\": 49,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Fails\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc(sum by (benchmark, control_id, control_name, control_severity, check_id, check_title, check_target, check_namespace, resource_kind, resource_name) (trivy_cluster_compliance_fail_check_total{k8s_cluster=~\\\"$k8s_cluster\\\"}))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Compliance: Fail Checks Drilldown (Detailed)\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"benchmark_id\": true,\n \"benchmark_type\": true,\n \"benchmark_version\": true,\n \"customresource_group\": true,\n \"customresource_kind\": true,\n \"customresource_version\": true,\n \"instance\": true,\n \"job\": true,\n \"name\": true,\n \"namespace\": true,\n \"pod\": true,\n \"service\": true\n },\n \"indexByName\": {\n \"benchmark\": 0,\n \"control_id\": 1,\n \"control_name\": 2,\n \"control_severity\": 3,\n \"check_id\": 4,\n \"check_title\": 5,\n \"check_target\": 6,\n \"check_namespace\": 7,\n \"resource_kind\": 8,\n \"resource_name\": 9,\n \"Value\": 10\n },\n \"renameByName\": {\n \"benchmark\": \"Framework\",\n \"control_id\": \"Control ID\",\n \"control_name\": \"Control\",\n \"control_severity\": \"Severity\",\n \"check_id\": \"Check ID\",\n \"check_title\": \"Check\",\n \"check_target\": \"Target\",\n \"check_namespace\": \"Namespace\",\n \"resource_kind\": \"Kind\",\n \"resource_name\": \"Resource\",\n \"Value\": \"Fails\"\n }\n }\n }\n ]\n },\n {\n \"collapsed\": false,\n \"description\": \"Risk view \\u0434\\u043b\\u044f namespaced-\\u043e\\u0442\\u0447\\u0435\\u0442\\u043e\\u0432: \\u043e\\u0431\\u0449\\u0438\\u0439 \\u043e\\u0431\\u044a\\u0451\\u043c findings \\u0438 \\u043f\\u0440\\u0438\\u043e\\u0440\\u0438\\u0442\\u0435\\u0442\\u044b \\u043f\\u043e namespace/\\u0440\\u0435\\u0441\\u0443\\u0440\\u0441\\u0430\\u043c.\",\n \"gridPos\": {\n \"h\": 1,\n \"w\": 24,\n \"x\": 0,\n \"y\": 23\n },\n \"id\": 50,\n \"panels\": [],\n \"title\": \"Namespaced Risk\",\n \"type\": \"row\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u0421\\u0443\\u043c\\u043c\\u0430\\u0440\\u043d\\u044b\\u0435 critical+high findings \\u0432 ConfigAuditReport \\u043f\\u043e \\u0432\\u044b\\u0431\\u0440\\u0430\\u043d\\u043d\\u044b\\u043c namespace.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"yellow\",\n \"value\": 1\n },\n {\n \"color\": \"red\",\n \"value\": 10\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 8,\n \"x\": 0,\n \"y\": 24\n },\n \"id\": 51,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sum(trivy_config_audit_critical_count{exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"} + trivy_config_audit_high_count{exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"}) or vector(0)\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Config: Critical + High Findings\",\n \"type\": \"stat\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u0421\\u0443\\u043c\\u043c\\u0430\\u0440\\u043d\\u044b\\u0435 critical+high findings \\u0432 InfraAssessmentReport \\u043f\\u043e \\u0432\\u044b\\u0431\\u0440\\u0430\\u043d\\u043d\\u044b\\u043c namespace.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"yellow\",\n \"value\": 1\n },\n {\n \"color\": \"red\",\n \"value\": 10\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 8,\n \"x\": 8,\n \"y\": 24\n },\n \"id\": 52,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sum(trivy_infra_assessment_critical_count{exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"} + trivy_infra_assessment_high_count{exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"}) or vector(0)\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Infra: Critical + High Findings\",\n \"type\": \"stat\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u041a\\u043e\\u043b\\u0438\\u0447\\u0435\\u0441\\u0442\\u0432\\u043e namespace, \\u0433\\u0434\\u0435 \\u0435\\u0441\\u0442\\u044c \\u0445\\u043e\\u0442\\u044f \\u0431\\u044b \\u043e\\u0434\\u0438\\u043d critical/high finding (ConfigAudit + InfraAssessment).\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"yellow\",\n \"value\": 1\n },\n {\n \"color\": \"red\",\n \"value\": 5\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 8,\n \"x\": 16,\n \"y\": 24\n },\n \"id\": 55,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"count(sum by (exported_namespace) ({__name__=~\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\", exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"}) > 0) or vector(0)\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Namespaces With Findings\",\n \"type\": \"stat\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u041f\\u0440\\u0438\\u043e\\u0440\\u0438\\u0442\\u0438\\u0437\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d\\u043d\\u044b\\u0439 \\u0441\\u043f\\u0438\\u0441\\u043e\\u043a namespace \\u043f\\u043e \\u0441\\u0443\\u043c\\u043c\\u0430\\u0440\\u043d\\u043e\\u043c\\u0443 \\u0440\\u0438\\u0441\\u043a\\u0443 (critical+high \\u0438\\u0437 ConfigAudit + InfraAssessment).\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 8,\n \"w\": 12,\n \"x\": 0,\n \"y\": 28\n },\n \"id\": 53,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Critical + High\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc((sum by (exported_namespace) ({__name__=~\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\", exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"})) unless (sum by (exported_namespace) ({__name__=~\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\", exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"}) == 0))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Top Namespaces by Critical + High Findings\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"instance\": true,\n \"job\": true,\n \"namespace\": true,\n \"pod\": true,\n \"service\": true\n },\n \"indexByName\": {\n \"exported_namespace\": 0,\n \"Value\": 1\n },\n \"renameByName\": {\n \"exported_namespace\": \"Namespace\",\n \"Value\": \"Critical + High\"\n }\n }\n }\n ]\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u0422\\u043e\\u043f \\u043a\\u043e\\u043d\\u043a\\u0440\\u0435\\u0442\\u043d\\u044b\\u0445 workload-\\u043e\\u0431\\u044a\\u0435\\u043a\\u0442\\u043e\\u0432 (namespace/kind/resource) \\u043f\\u043e \\u0441\\u0443\\u043c\\u043c\\u0435 critical+high findings.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 8,\n \"w\": 12,\n \"x\": 12,\n \"y\": 28\n },\n \"id\": 54,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Critical + High\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc((sum by (exported_namespace, resource_kind, resource_name) ({__name__=~\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\", exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"})) unless (sum by (exported_namespace, resource_kind, resource_name) ({__name__=~\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\", exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"}) == 0))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Top Targets by Namespace (Critical + High)\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"instance\": true,\n \"job\": true,\n \"namespace\": true,\n \"pod\": true,\n \"service\": true\n },\n \"indexByName\": {\n \"exported_namespace\": 0,\n \"resource_kind\": 1,\n \"resource_name\": 2,\n \"Value\": 3\n },\n \"renameByName\": {\n \"exported_namespace\": \"Namespace\",\n \"resource_kind\": \"Kind\",\n \"resource_name\": \"Resource\",\n \"Value\": \"Critical + High\"\n }\n }\n }\n ]\n },\n {\n \"collapsed\": false,\n \"description\": \"\\u041f\\u043e\\u0447\\u0435\\u043c\\u0443 \\u0441\\u0440\\u0430\\u0431\\u0430\\u0442\\u044b\\u0432\\u0430\\u0435\\u0442 Config/Infra: \\u0430\\u0433\\u0440\\u0435\\u0433\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d\\u043d\\u044b\\u0435 \\u043f\\u0440\\u0438\\u0447\\u0438\\u043d\\u044b \\u043f\\u043e check ID \\u0438 \\u043d\\u0430\\u0437\\u0432\\u0430\\u043d\\u0438\\u044e (\\u0431\\u0435\\u0437 \\u0434\\u043b\\u0438\\u043d\\u043d\\u044b\\u0445 message).\",\n \"gridPos\": {\n \"x\": 0,\n \"y\": 36,\n \"w\": 24,\n \"h\": 1\n },\n \"id\": 58,\n \"panels\": [],\n \"title\": \"Findings Reasons\",\n \"type\": \"row\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u0422\\u043e\\u043f \\u043f\\u0440\\u0438\\u0447\\u0438\\u043d \\u0441\\u0440\\u0430\\u0431\\u0430\\u0442\\u044b\\u0432\\u0430\\u043d\\u0438\\u044f \\u0432 ConfigAuditReport: \\u043a\\u0430\\u043a\\u0438\\u0435 \\u043f\\u0440\\u043e\\u0432\\u0435\\u0440\\u043a\\u0438 \\u0434\\u0430\\u044e\\u0442 \\u043d\\u0430\\u0438\\u0431\\u043e\\u043b\\u044c\\u0448\\u0438\\u0439 \\u0432\\u043a\\u043b\\u0430\\u0434.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"x\": 0,\n \"y\": 37,\n \"w\": 24,\n \"h\": 8\n },\n \"id\": 59,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Findings\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc(sum by (check_id, check_title, check_severity, check_category) (trivy_config_audit_check_fail_total{exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"}))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Config: Top Trigger Reasons\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"customresource_group\": true,\n \"customresource_kind\": true,\n \"customresource_version\": true,\n \"exported_namespace\": true,\n \"instance\": true,\n \"job\": true,\n \"name\": true,\n \"namespace\": true,\n \"pod\": true,\n \"resource_kind\": true,\n \"resource_name\": true,\n \"service\": true,\n \"scanner_name\": true,\n \"scanner_vendor\": true,\n \"scanner_version\": true\n },\n \"indexByName\": {\n \"check_id\": 0,\n \"check_title\": 1,\n \"check_severity\": 2,\n \"check_category\": 3,\n \"Value\": 4\n },\n \"renameByName\": {\n \"check_id\": \"Check ID\",\n \"check_title\": \"Check\",\n \"check_severity\": \"Severity\",\n \"check_category\": \"Category\",\n \"Value\": \"Findings\"\n }\n }\n }\n ]\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u0422\\u043e\\u043f \\u043f\\u0440\\u0438\\u0447\\u0438\\u043d \\u0441\\u0440\\u0430\\u0431\\u0430\\u0442\\u044b\\u0432\\u0430\\u043d\\u0438\\u044f \\u0432 InfraAssessmentReport + ClusterInfraAssessmentReport.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"x\": 0,\n \"y\": 45,\n \"w\": 24,\n \"h\": 8\n },\n \"id\": 60,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Findings\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc((sum by (check_id, check_title, check_severity, check_category) (trivy_infra_assessment_check_fail_total{exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"})) or (sum by (check_id, check_title, check_severity, check_category) (trivy_cluster_infra_assessment_check_fail_total{k8s_cluster=~\\\"$k8s_cluster\\\"})))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Infra: Top Trigger Reasons\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"customresource_group\": true,\n \"customresource_kind\": true,\n \"customresource_version\": true,\n \"exported_namespace\": true,\n \"instance\": true,\n \"job\": true,\n \"name\": true,\n \"namespace\": true,\n \"pod\": true,\n \"resource_kind\": true,\n \"resource_name\": true,\n \"service\": true,\n \"scanner_name\": true,\n \"scanner_vendor\": true,\n \"scanner_version\": true\n },\n \"indexByName\": {\n \"check_id\": 0,\n \"check_title\": 1,\n \"check_severity\": 2,\n \"check_category\": 3,\n \"Value\": 4\n },\n \"renameByName\": {\n \"check_id\": \"Check ID\",\n \"check_title\": \"Check\",\n \"check_severity\": \"Severity\",\n \"check_category\": \"Category\",\n \"Value\": \"Findings\"\n }\n }\n }\n ]\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u041a\\u043e\\u043d\\u043a\\u0440\\u0435\\u0442\\u043d\\u044b\\u0435 \\u0440\\u0435\\u0441\\u0443\\u0440\\u0441\\u044b \\u0434\\u043b\\u044f \\u0432\\u044b\\u0431\\u0440\\u0430\\u043d\\u043d\\u043e\\u0439 \\u043f\\u0440\\u0438\\u0447\\u0438\\u043d\\u044b (check_id) \\u0438\\u0437 ConfigAuditReport.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"x\": 0,\n \"y\": 53,\n \"w\": 24,\n \"h\": 8\n },\n \"id\": 61,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Findings\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc(sum by (check_id, check_title, check_severity, check_category, exported_namespace, resource_kind, resource_name) (trivy_config_audit_check_fail_total{exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"}))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Config: Affected Resources by Check\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"check_category\": false,\n \"check_id\": false,\n \"check_severity\": false,\n \"check_title\": false,\n \"customresource_group\": true,\n \"customresource_kind\": true,\n \"customresource_version\": true,\n \"instance\": true,\n \"job\": true,\n \"name\": true,\n \"namespace\": true,\n \"pod\": true,\n \"scanner\": true,\n \"scanner_name\": true,\n \"scanner_vendor\": true,\n \"scanner_version\": true,\n \"service\": true\n },\n \"indexByName\": {\n \"exported_namespace\": 4,\n \"resource_kind\": 5,\n \"resource_name\": 6,\n \"Value\": 7,\n \"check_id\": 0,\n \"check_title\": 1,\n \"check_severity\": 2,\n \"check_category\": 3\n },\n \"renameByName\": {\n \"exported_namespace\": \"Namespace\",\n \"resource_kind\": \"Kind\",\n \"resource_name\": \"Resource\",\n \"Value\": \"Findings\",\n \"check_id\": \"Check ID\",\n \"check_title\": \"Check\",\n \"check_severity\": \"Severity\",\n \"check_category\": \"Category\"\n }\n }\n }\n ]\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u041a\\u043e\\u043d\\u043a\\u0440\\u0435\\u0442\\u043d\\u044b\\u0435 \\u0440\\u0435\\u0441\\u0443\\u0440\\u0441\\u044b \\u0434\\u043b\\u044f \\u043f\\u0440\\u0438\\u0447\\u0438\\u043d \\u0438\\u0437 InfraAssessmentReport + ClusterInfraAssessmentReport.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"x\": 0,\n \"y\": 61,\n \"w\": 24,\n \"h\": 8\n },\n \"id\": 62,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Findings\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc((sum by (check_id, check_title, check_severity, check_category, exported_namespace, resource_kind, resource_name) (trivy_infra_assessment_check_fail_total{exported_namespace=~\\\"$exported_namespace\\\", k8s_cluster=~\\\"$k8s_cluster\\\"})) or (sum by (check_id, check_title, check_severity, check_category, exported_namespace, resource_kind, resource_name) (trivy_cluster_infra_assessment_check_fail_total{k8s_cluster=~\\\"$k8s_cluster\\\"})))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Infra: Affected Resources by Check\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"check_category\": false,\n \"check_id\": false,\n \"check_severity\": false,\n \"check_title\": false,\n \"customresource_group\": true,\n \"customresource_kind\": true,\n \"customresource_version\": true,\n \"instance\": true,\n \"job\": true,\n \"name\": true,\n \"namespace\": true,\n \"pod\": true,\n \"scanner\": true,\n \"scanner_name\": true,\n \"scanner_vendor\": true,\n \"scanner_version\": true,\n \"service\": true\n },\n \"indexByName\": {\n \"exported_namespace\": 4,\n \"resource_kind\": 5,\n \"resource_name\": 6,\n \"Value\": 7,\n \"check_id\": 0,\n \"check_title\": 1,\n \"check_severity\": 2,\n \"check_category\": 3\n },\n \"renameByName\": {\n \"exported_namespace\": \"Namespace\",\n \"resource_kind\": \"Kind\",\n \"resource_name\": \"Resource\",\n \"Value\": \"Findings\",\n \"check_id\": \"Check ID\",\n \"check_title\": \"Check\",\n \"check_severity\": \"Severity\",\n \"check_category\": \"Category\"\n }\n }\n }\n ]\n },\n {\n \"collapsed\": false,\n \"description\": \"\\u0421\\u043b\\u0443\\u0436\\u0435\\u0431\\u043d\\u044b\\u0439 \\u0431\\u043b\\u043e\\u043a \\u0441\\u043e\\u0441\\u0442\\u043e\\u044f\\u043d\\u0438\\u044f exporter: \\u0434\\u043e\\u0441\\u0442\\u0443\\u043f\\u043d\\u043e\\u0441\\u0442\\u044c, \\u0441\\u0432\\u0435\\u0436\\u0435\\u0441\\u0442\\u044c \\u0434\\u0430\\u043d\\u043d\\u044b\\u0445 \\u0438 \\u043d\\u0430\\u043b\\u0438\\u0447\\u0438\\u0435 \\u043e\\u0448\\u0438\\u0431\\u043e\\u043a refresh.\",\n \"gridPos\": {\n \"h\": 1,\n \"w\": 24,\n \"x\": 0,\n \"y\": 69\n },\n \"id\": 43,\n \"panels\": [],\n \"title\": \"Exporter Runtime Health\",\n \"type\": \"row\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"1 = exporter \\u0443\\u0441\\u043f\\u0435\\u0448\\u043d\\u043e \\u043e\\u0431\\u043d\\u043e\\u0432\\u043b\\u044f\\u043b \\u043c\\u0435\\u0442\\u0440\\u0438\\u043a\\u0438 \\u043d\\u0435\\u0434\\u0430\\u0432\\u043d\\u043e; 0 = refresh \\u0443\\u0441\\u0442\\u0430\\u0440\\u0435\\u043b \\u0438\\u043b\\u0438 \\u043e\\u0441\\u0442\\u0430\\u043d\\u043e\\u0432\\u0438\\u043b\\u0441\\u044f.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"red\",\n \"value\": null\n },\n {\n \"color\": \"green\",\n \"value\": 1\n }\n ]\n },\n \"mappings\": [\n {\n \"type\": \"value\",\n \"options\": {\n \"0\": {\n \"text\": \"DOWN\"\n },\n \"1\": {\n \"text\": \"UP\"\n }\n }\n }\n ]\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 0,\n \"y\": 70\n },\n \"id\": 44,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"(max(trivy_report_metrics_exporter_up{k8s_cluster=~\\\"$k8s_cluster\\\"})) or vector(0)\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Exporter: Up\",\n \"type\": \"stat\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u0412\\u043e\\u0437\\u0440\\u0430\\u0441\\u0442 \\u043f\\u043e\\u0441\\u043b\\u0435\\u0434\\u043d\\u0435\\u0433\\u043e \\u0443\\u0441\\u043f\\u0435\\u0448\\u043d\\u043e\\u0433\\u043e refresh \\u0432 \\u043c\\u0438\\u043d\\u0443\\u0442\\u0430\\u0445; \\u0440\\u043e\\u0441\\u0442 \\u043f\\u043e\\u043a\\u0430\\u0437\\u044b\\u0432\\u0430\\u0435\\u0442 \\u0434\\u0435\\u0433\\u0440\\u0430\\u0434\\u0430\\u0446\\u0438\\u044e \\u0438\\u0441\\u0442\\u043e\\u0447\\u043d\\u0438\\u043a\\u0430 \\u0434\\u0430\\u043d\\u043d\\u044b\\u0445.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"unit\": \"m\",\n \"decimals\": 1,\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"yellow\",\n \"value\": 5\n },\n {\n \"color\": \"red\",\n \"value\": 15\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 6,\n \"y\": 70\n },\n \"id\": 45,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"(time() - ((max(trivy_report_metrics_last_success_timestamp{k8s_cluster=~\\\"$k8s_cluster\\\"})) or vector(0))) / 60\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Exporter: Last Success Age\",\n \"type\": \"stat\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u0421\\u0447\\u0435\\u0442\\u0447\\u0438\\u043a \\u043e\\u0448\\u0438\\u0431\\u043e\\u043a refresh \\u0441 \\u043c\\u043e\\u043c\\u0435\\u043d\\u0442\\u0430 \\u0437\\u0430\\u043f\\u0443\\u0441\\u043a\\u0430 pod; \\u043d\\u0435 \\u0434\\u043e\\u043b\\u0436\\u0435\\u043d \\u0441\\u0442\\u0430\\u0431\\u0438\\u043b\\u044c\\u043d\\u043e \\u0440\\u0430\\u0441\\u0442\\u0438.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"red\",\n \"value\": 1\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 12,\n \"y\": 70\n },\n \"id\": 46,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"(max(trivy_report_metrics_refresh_errors_total{k8s_cluster=~\\\"$k8s_cluster\\\"})) or vector(0)\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Exporter: Refresh Errors Total\",\n \"type\": \"stat\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"description\": \"\\u0424\\u043b\\u0430\\u0433 \\u043d\\u0430\\u043b\\u0438\\u0447\\u0438\\u044f \\u043f\\u043e\\u0441\\u043b\\u0435\\u0434\\u043d\\u0435\\u0439 \\u043e\\u0448\\u0438\\u0431\\u043a\\u0438 refresh (1 = \\u0435\\u0441\\u0442\\u044c \\u043e\\u0448\\u0438\\u0431\\u043a\\u0430, 0 = \\u043e\\u0448\\u0438\\u0431\\u043e\\u043a \\u043d\\u0435\\u0442).\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"red\",\n \"value\": 1\n }\n ]\n },\n \"mappings\": [\n {\n \"type\": \"value\",\n \"options\": {\n \"0\": {\n \"text\": \"OK\"\n },\n \"1\": {\n \"text\": \"ERROR\"\n }\n }\n }\n ]\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 18,\n \"y\": 70\n },\n \"id\": 47,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"(max(trivy_report_metrics_last_error_info{k8s_cluster=~\\\"$k8s_cluster\\\"})) or vector(0)\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Exporter: Last Error Present\",\n \"type\": \"stat\"\n }\n ],\n \"refresh\": \"10m\",\n \"schemaVersion\": 39,\n \"tags\": [\n \"Prometheus\",\n \"Trivy-operator\",\n \"CRD\"\n ],\n \"templating\": {\n \"list\": [\n {\n \"allValue\": \".*\",\n \"current\": {},\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"definition\": \"label_values(trivy_exporter_up, k8s_cluster)\",\n \"hide\": 0,\n \"includeAll\": true,\n \"multi\": true,\n \"name\": \"k8s_cluster\",\n \"options\": [],\n \"query\": {\n \"qryType\": 1,\n \"query\": \"label_values(trivy_exporter_up, k8s_cluster)\",\n \"refId\": \"PrometheusVariableQueryEditor-VariableQuery\"\n },\n \"refresh\": 1,\n \"regex\": \"\",\n \"skipUrlSync\": false,\n \"sort\": 1,\n \"type\": \"query\"\n },\n {\n \"allValue\": \".*\",\n \"current\": {},\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"fewcox453ve2od\"\n },\n \"definition\": \"label_values(trivy_config_audit_created{k8s_cluster=~\\\"$k8s_cluster\\\"},exported_namespace)\",\n \"hide\": 0,\n \"includeAll\": true,\n \"multi\": true,\n \"name\": \"exported_namespace\",\n \"options\": [],\n \"query\": {\n \"qryType\": 1,\n \"query\": \"label_values(trivy_config_audit_created{k8s_cluster=~\\\"$k8s_cluster\\\"},exported_namespace)\",\n \"refId\": \"PrometheusVariableQueryEditor-VariableQuery\"\n },\n \"refresh\": 1,\n \"regex\": \"\",\n \"skipUrlSync\": false,\n \"sort\": 1,\n \"type\": \"query\"\n }\n ]\n },\n \"time\": {\n \"from\": \"now-7d\",\n \"to\": \"now\"\n },\n \"timepicker\": {},\n \"timezone\": \"\",\n \"title\": \"Trivy Operator - CRD Results\",\n \"uid\": \"fewcox453ve2od\",\n \"version\": 32,\n \"weekStart\": \"\"\n}\n",
"firstEditBubbleId": "4de1f199-ce81-4dac-8e80-0ef912e1333d",
"isNewlyCreated": false,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/stage/dashboards/trivy-crd-dashboard.json": {
"content": "{\n \"__inputs\": [\n {\n \"name\": \"DS_MAIN\",\n \"label\": \"main\",\n \"description\": \"\",\n \"type\": \"datasource\",\n \"pluginId\": \"prometheus\",\n \"pluginName\": \"Prometheus\"\n }\n ],\n \"__elements\": {},\n \"__requires\": [\n {\n \"type\": \"grafana\",\n \"id\": \"grafana\",\n \"name\": \"Grafana\",\n \"version\": \"10.4.15\"\n },\n {\n \"type\": \"datasource\",\n \"id\": \"prometheus\",\n \"name\": \"Prometheus\",\n \"version\": \"1.0.0\"\n },\n {\n \"type\": \"panel\",\n \"id\": \"stat\",\n \"name\": \"Stat\",\n \"version\": \"\"\n },\n {\n \"type\": \"panel\",\n \"id\": \"table\",\n \"name\": \"Table\",\n \"version\": \"\"\n },\n {\n \"type\": \"panel\",\n \"id\": \"row\",\n \"name\": \"Row\",\n \"version\": \"\"\n }\n ],\n \"annotations\": {\n \"list\": [\n {\n \"builtIn\": 1,\n \"datasource\": {\n \"type\": \"datasource\",\n \"uid\": \"grafana\"\n },\n \"enable\": true,\n \"hide\": true,\n \"iconColor\": \"rgba(0, 211, 255, 1)\",\n \"name\": \"Annotations & Alerts\",\n \"target\": {\n \"limit\": 100,\n \"matchAny\": false,\n \"tags\": [],\n \"type\": \"dashboard\"\n },\n \"type\": \"dashboard\"\n }\n ]\n },\n \"editable\": true,\n \"fiscalYearStartMonth\": 0,\n \"graphTooltip\": 0,\n \"id\": null,\n \"links\": [],\n \"liveNow\": false,\n \"panels\": [\n {\n \"collapsed\": false,\n \"gridPos\": {\n \"h\": 1,\n \"w\": 24,\n \"x\": 0,\n \"y\": 0\n },\n \"id\": 1,\n \"panels\": [],\n \"title\": \"Cluster Compliance\",\n \"type\": \"row\",\n \"description\": \"Ключевые агрегаты compliance по выбранным benchmark: fail, pass, score и возраст последнего отчета.\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"red\",\n \"value\": 1\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 0,\n \"y\": 1\n },\n \"id\": 2,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sum(trivy_cluster_compliance_fail_count)\",\n \"instant\": true,\n \"legendFormat\": \"__auto\",\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Compliance: Failed Checks\",\n \"type\": \"stat\",\n \"description\": \"Общее число проваленных compliance-checks в текущем фильтре benchmark.\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"red\",\n \"value\": null\n },\n {\n \"color\": \"green\",\n \"value\": 1\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 6,\n \"y\": 1\n },\n \"id\": 3,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sum(trivy_cluster_compliance_pass_count)\",\n \"instant\": true,\n \"legendFormat\": \"__auto\",\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Compliance: Passed Checks\",\n \"type\": \"stat\",\n \"description\": \"Общее число успешно пройденных compliance-checks в текущем фильтре benchmark.\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"decimals\": 2,\n \"unit\": \"percent\",\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"red\",\n \"value\": null\n },\n {\n \"color\": \"yellow\",\n \"value\": 80\n },\n {\n \"color\": \"green\",\n \"value\": 95\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 12,\n \"y\": 1\n },\n \"id\": 4,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"100 * sum(trivy_cluster_compliance_pass_count) / clamp_min(sum(trivy_cluster_compliance_pass_count) + sum(trivy_cluster_compliance_fail_count), 1)\",\n \"instant\": true,\n \"legendFormat\": \"__auto\",\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Compliance: Score\",\n \"type\": \"stat\",\n \"description\": \"Итоговый процент прохождения compliance: pass / (pass + fail) * 100.\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"decimals\": 0,\n \"unit\": \"s\",\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"yellow\",\n \"value\": 21600\n },\n {\n \"color\": \"red\",\n \"value\": 43200\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 18,\n \"y\": 1\n },\n \"id\": 5,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"time() - max(trivy_cluster_compliance_updated)\",\n \"instant\": true,\n \"legendFormat\": \"__auto\",\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Compliance: Last Report Age\",\n \"type\": \"stat\",\n \"description\": \"Возраст последнего обновления compliance-отчета в часах; рост значения означает устаревшие данные.\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 6,\n \"w\": 24,\n \"x\": 0,\n \"y\": 5\n },\n \"id\": 6,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Value\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc(sum by (benchmark) (trivy_cluster_compliance_fail_count))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true\n },\n \"indexByName\": {\n \"benchmark\": 0,\n \"Value\": 1\n },\n \"renameByName\": {\n \"benchmark\": \"Framework\",\n \"Value\": \"Failed Checks\"\n }\n }\n }\n ],\n \"title\": \"Compliance: Failed Checks by Framework\",\n \"type\": \"table\",\n \"description\": \"Сравнение количества провалов по framework (benchmark) для приоритизации работ.\"\n },\n {\n \"collapsed\": false,\n \"description\": \"Детализация проваленных контролов с фокусом на impact: fails и доля от общего количества fail.\",\n \"gridPos\": {\n \"h\": 1,\n \"w\": 24,\n \"x\": 0,\n \"y\": 11\n },\n \"id\": 48,\n \"panels\": [],\n \"title\": \"Control Drilldown\",\n \"type\": \"row\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Единая подробная таблица проваленных compliance-checks с конкретным target/ресурсом.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 22,\n \"w\": 24,\n \"x\": 0,\n \"y\": 12\n },\n \"id\": 49,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Fails\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc(sum by (benchmark, control_id, control_name, control_severity, check_id, check_title, check_target, check_namespace, resource_kind, resource_name) (trivy_cluster_compliance_fail_check_total))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Compliance: Fail Checks Drilldown (Detailed)\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"benchmark_id\": true,\n \"benchmark_type\": true,\n \"benchmark_version\": true,\n \"customresource_group\": true,\n \"customresource_kind\": true,\n \"customresource_version\": true,\n \"instance\": true,\n \"job\": true,\n \"name\": true,\n \"namespace\": true,\n \"pod\": true,\n \"service\": true\n },\n \"indexByName\": {\n \"benchmark\": 0,\n \"control_id\": 1,\n \"control_name\": 2,\n \"control_severity\": 3,\n \"check_id\": 4,\n \"check_title\": 5,\n \"check_target\": 6,\n \"check_namespace\": 7,\n \"resource_kind\": 8,\n \"resource_name\": 9,\n \"Value\": 10\n },\n \"renameByName\": {\n \"benchmark\": \"Framework\",\n \"control_id\": \"Control ID\",\n \"control_name\": \"Control\",\n \"control_severity\": \"Severity\",\n \"check_id\": \"Check ID\",\n \"check_title\": \"Check\",\n \"check_target\": \"Target\",\n \"check_namespace\": \"Namespace\",\n \"resource_kind\": \"Kind\",\n \"resource_name\": \"Resource\",\n \"Value\": \"Fails\"\n }\n }\n }\n ]\n },\n {\n \"collapsed\": false,\n \"description\": \"Risk view для namespaced-отчетов: общий объём findings и приоритеты по namespace/ресурсам.\",\n \"gridPos\": {\n \"h\": 1,\n \"w\": 24,\n \"x\": 0,\n \"y\": 23\n },\n \"id\": 50,\n \"panels\": [],\n \"title\": \"Namespaced Risk\",\n \"type\": \"row\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Суммарные critical+high findings в ConfigAuditReport по выбранным namespace.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"yellow\",\n \"value\": 1\n },\n {\n \"color\": \"red\",\n \"value\": 10\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 8,\n \"x\": 0,\n \"y\": 24\n },\n \"id\": 51,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sum(trivy_config_audit_critical_count{exported_namespace=~\\\"$exported_namespace\\\"} + trivy_config_audit_high_count{exported_namespace=~\\\"$exported_namespace\\\"}) or vector(0)\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Config: Critical + High Findings\",\n \"type\": \"stat\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Суммарные critical+high findings в InfraAssessmentReport по выбранным namespace.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"yellow\",\n \"value\": 1\n },\n {\n \"color\": \"red\",\n \"value\": 10\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 8,\n \"x\": 8,\n \"y\": 24\n },\n \"id\": 52,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sum(trivy_infra_assessment_critical_count{exported_namespace=~\\\"$exported_namespace\\\"} + trivy_infra_assessment_high_count{exported_namespace=~\\\"$exported_namespace\\\"}) or vector(0)\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Infra: Critical + High Findings\",\n \"type\": \"stat\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Количество namespace, где есть хотя бы один critical/high finding (ConfigAudit + InfraAssessment).\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"yellow\",\n \"value\": 1\n },\n {\n \"color\": \"red\",\n \"value\": 5\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 8,\n \"x\": 16,\n \"y\": 24\n },\n \"id\": 55,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"count(sum by (exported_namespace) ({__name__=~\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\", exported_namespace=~\\\"$exported_namespace\\\"}) > 0) or vector(0)\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Namespaces With Findings\",\n \"type\": \"stat\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Приоритизированный список namespace по суммарному риску (critical+high из ConfigAudit + InfraAssessment).\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 8,\n \"w\": 12,\n \"x\": 0,\n \"y\": 28\n },\n \"id\": 53,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Critical + High\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc((sum by (exported_namespace) ({__name__=~\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\", exported_namespace=~\\\"$exported_namespace\\\"})) unless (sum by (exported_namespace) ({__name__=~\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\", exported_namespace=~\\\"$exported_namespace\\\"}) == 0))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Top Namespaces by Critical + High Findings\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"instance\": true,\n \"job\": true,\n \"namespace\": true,\n \"pod\": true,\n \"service\": true\n },\n \"indexByName\": {\n \"exported_namespace\": 0,\n \"Value\": 1\n },\n \"renameByName\": {\n \"exported_namespace\": \"Namespace\",\n \"Value\": \"Critical + High\"\n }\n }\n }\n ]\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Топ конкретных workload-объектов (namespace/kind/resource) по сумме critical+high findings.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 8,\n \"w\": 12,\n \"x\": 12,\n \"y\": 28\n },\n \"id\": 54,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Critical + High\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc((sum by (exported_namespace, resource_kind, resource_name) ({__name__=~\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\", exported_namespace=~\\\"$exported_namespace\\\"})) unless (sum by (exported_namespace, resource_kind, resource_name) ({__name__=~\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\", exported_namespace=~\\\"$exported_namespace\\\"}) == 0))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Top Targets by Namespace (Critical + High)\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"instance\": true,\n \"job\": true,\n \"namespace\": true,\n \"pod\": true,\n \"service\": true\n },\n \"indexByName\": {\n \"exported_namespace\": 0,\n \"resource_kind\": 1,\n \"resource_name\": 2,\n \"Value\": 3\n },\n \"renameByName\": {\n \"exported_namespace\": \"Namespace\",\n \"resource_kind\": \"Kind\",\n \"resource_name\": \"Resource\",\n \"Value\": \"Critical + High\"\n }\n }\n }\n ]\n },\n {\n \"collapsed\": false,\n \"description\": \"Почему срабатывает Config/Infra: агрегированные причины по check ID и названию (без длинных message).\",\n \"gridPos\": {\n \"x\": 0,\n \"y\": 36,\n \"w\": 24,\n \"h\": 1\n },\n \"id\": 58,\n \"panels\": [],\n \"title\": \"Findings Reasons\",\n \"type\": \"row\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Топ причин срабатывания в ConfigAuditReport: какие проверки дают наибольший вклад.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"x\": 0,\n \"y\": 37,\n \"w\": 24,\n \"h\": 8\n },\n \"id\": 59,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Findings\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc(sum by (check_id, check_title, check_severity, check_category) (trivy_config_audit_check_fail_total{exported_namespace=~\\\"$exported_namespace\\\"}))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Config: Top Trigger Reasons\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"customresource_group\": true,\n \"customresource_kind\": true,\n \"customresource_version\": true,\n \"exported_namespace\": true,\n \"instance\": true,\n \"job\": true,\n \"name\": true,\n \"namespace\": true,\n \"pod\": true,\n \"resource_kind\": true,\n \"resource_name\": true,\n \"service\": true,\n \"scanner_name\": true,\n \"scanner_vendor\": true,\n \"scanner_version\": true\n },\n \"indexByName\": {\n \"check_id\": 0,\n \"check_title\": 1,\n \"check_severity\": 2,\n \"check_category\": 3,\n \"Value\": 4\n },\n \"renameByName\": {\n \"check_id\": \"Check ID\",\n \"check_title\": \"Check\",\n \"check_severity\": \"Severity\",\n \"check_category\": \"Category\",\n \"Value\": \"Findings\"\n }\n }\n }\n ]\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Топ причин срабатывания в InfraAssessmentReport + ClusterInfraAssessmentReport.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"x\": 0,\n \"y\": 45,\n \"w\": 24,\n \"h\": 8\n },\n \"id\": 60,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Findings\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc((sum by (check_id, check_title, check_severity, check_category) (trivy_infra_assessment_check_fail_total{exported_namespace=~\\\"$exported_namespace\\\"})) or (sum by (check_id, check_title, check_severity, check_category) (trivy_cluster_infra_assessment_check_fail_total)))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Infra: Top Trigger Reasons\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"customresource_group\": true,\n \"customresource_kind\": true,\n \"customresource_version\": true,\n \"exported_namespace\": true,\n \"instance\": true,\n \"job\": true,\n \"name\": true,\n \"namespace\": true,\n \"pod\": true,\n \"resource_kind\": true,\n \"resource_name\": true,\n \"service\": true,\n \"scanner_name\": true,\n \"scanner_vendor\": true,\n \"scanner_version\": true\n },\n \"indexByName\": {\n \"check_id\": 0,\n \"check_title\": 1,\n \"check_severity\": 2,\n \"check_category\": 3,\n \"Value\": 4\n },\n \"renameByName\": {\n \"check_id\": \"Check ID\",\n \"check_title\": \"Check\",\n \"check_severity\": \"Severity\",\n \"check_category\": \"Category\",\n \"Value\": \"Findings\"\n }\n }\n }\n ]\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Конкретные ресурсы для выбранной причины (check_id) из ConfigAuditReport.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"x\": 0,\n \"y\": 53,\n \"w\": 24,\n \"h\": 8\n },\n \"id\": 61,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Findings\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc(sum by (check_id, check_title, check_severity, check_category, exported_namespace, resource_kind, resource_name) (trivy_config_audit_check_fail_total{exported_namespace=~\\\"$exported_namespace\\\"}))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Config: Affected Resources by Check\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"check_category\": false,\n \"check_id\": false,\n \"check_severity\": false,\n \"check_title\": false,\n \"customresource_group\": true,\n \"customresource_kind\": true,\n \"customresource_version\": true,\n \"instance\": true,\n \"job\": true,\n \"name\": true,\n \"namespace\": true,\n \"pod\": true,\n \"scanner\": true,\n \"scanner_name\": true,\n \"scanner_vendor\": true,\n \"scanner_version\": true,\n \"service\": true\n },\n \"indexByName\": {\n \"exported_namespace\": 4,\n \"resource_kind\": 5,\n \"resource_name\": 6,\n \"Value\": 7,\n \"check_id\": 0,\n \"check_title\": 1,\n \"check_severity\": 2,\n \"check_category\": 3\n },\n \"renameByName\": {\n \"exported_namespace\": \"Namespace\",\n \"resource_kind\": \"Kind\",\n \"resource_name\": \"Resource\",\n \"Value\": \"Findings\",\n \"check_id\": \"Check ID\",\n \"check_title\": \"Check\",\n \"check_severity\": \"Severity\",\n \"check_category\": \"Category\"\n }\n }\n }\n ]\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Конкретные ресурсы для причин из InfraAssessmentReport + ClusterInfraAssessmentReport.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"x\": 0,\n \"y\": 61,\n \"w\": 24,\n \"h\": 8\n },\n \"id\": 62,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Findings\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc((sum by (check_id, check_title, check_severity, check_category, exported_namespace, resource_kind, resource_name) (trivy_infra_assessment_check_fail_total{exported_namespace=~\\\"$exported_namespace\\\"})) or (sum by (check_id, check_title, check_severity, check_category, exported_namespace, resource_kind, resource_name) (trivy_cluster_infra_assessment_check_fail_total)))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Infra: Affected Resources by Check\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"check_category\": false,\n \"check_id\": false,\n \"check_severity\": false,\n \"check_title\": false,\n \"customresource_group\": true,\n \"customresource_kind\": true,\n \"customresource_version\": true,\n \"instance\": true,\n \"job\": true,\n \"name\": true,\n \"namespace\": true,\n \"pod\": true,\n \"scanner\": true,\n \"scanner_name\": true,\n \"scanner_vendor\": true,\n \"scanner_version\": true,\n \"service\": true\n },\n \"indexByName\": {\n \"exported_namespace\": 4,\n \"resource_kind\": 5,\n \"resource_name\": 6,\n \"Value\": 7,\n \"check_id\": 0,\n \"check_title\": 1,\n \"check_severity\": 2,\n \"check_category\": 3\n },\n \"renameByName\": {\n \"exported_namespace\": \"Namespace\",\n \"resource_kind\": \"Kind\",\n \"resource_name\": \"Resource\",\n \"Value\": \"Findings\",\n \"check_id\": \"Check ID\",\n \"check_title\": \"Check\",\n \"check_severity\": \"Severity\",\n \"check_category\": \"Category\"\n }\n }\n }\n ]\n },\n {\n \"collapsed\": false,\n \"description\": \"Служебный блок состояния exporter: доступность, свежесть данных и наличие ошибок refresh.\",\n \"gridPos\": {\n \"h\": 1,\n \"w\": 24,\n \"x\": 0,\n \"y\": 69\n },\n \"id\": 43,\n \"panels\": [],\n \"title\": \"Exporter Runtime Health\",\n \"type\": \"row\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"1 = exporter успешно обновлял метрики недавно; 0 = refresh устарел или остановился.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"red\",\n \"value\": null\n },\n {\n \"color\": \"green\",\n \"value\": 1\n }\n ]\n },\n \"mappings\": [\n {\n \"type\": \"value\",\n \"options\": {\n \"0\": {\n \"text\": \"DOWN\"\n },\n \"1\": {\n \"text\": \"UP\"\n }\n }\n }\n ]\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 0,\n \"y\": 70\n },\n \"id\": 44,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"(max(trivy_report_metrics_exporter_up)) or vector(0)\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Exporter: Up\",\n \"type\": \"stat\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Возраст последнего успешного refresh в минутах; рост показывает деградацию источника данных.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"unit\": \"m\",\n \"decimals\": 1,\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"yellow\",\n \"value\": 5\n },\n {\n \"color\": \"red\",\n \"value\": 15\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 6,\n \"y\": 70\n },\n \"id\": 45,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"(time() - ((max(trivy_report_metrics_last_success_timestamp)) or vector(0))) / 60\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Exporter: Last Success Age\",\n \"type\": \"stat\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Счетчик ошибок refresh с момента запуска pod; не должен стабильно расти.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"red\",\n \"value\": 1\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 12,\n \"y\": 70\n },\n \"id\": 46,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"(max(trivy_report_metrics_refresh_errors_total)) or vector(0)\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Exporter: Refresh Errors Total\",\n \"type\": \"stat\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Флаг наличия последней ошибки refresh (1 = есть ошибка, 0 = ошибок нет).\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"red\",\n \"value\": 1\n }\n ]\n },\n \"mappings\": [\n {\n \"type\": \"value\",\n \"options\": {\n \"0\": {\n \"text\": \"OK\"\n },\n \"1\": {\n \"text\": \"ERROR\"\n }\n }\n }\n ]\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 18,\n \"y\": 70\n },\n \"id\": 47,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"(max(trivy_report_metrics_last_error_info)) or vector(0)\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Exporter: Last Error Present\",\n \"type\": \"stat\"\n }\n ],\n \"refresh\": \"10m\",\n \"schemaVersion\": 39,\n \"tags\": [\n \"Prometheus\",\n \"Trivy-operator\",\n \"CRD\"\n ],\n \"templating\": {\n \"list\": [\n {\n \"current\": {\n \"selected\": false,\n \"text\": \"main\",\n \"value\": \"P0D6E4079E36703EB\"\n },\n \"hide\": 0,\n \"includeAll\": false,\n \"multi\": false,\n \"name\": \"datasource\",\n \"options\": [],\n \"query\": \"prometheus\",\n \"queryValue\": \"\",\n \"refresh\": 1,\n \"regex\": \"\",\n \"skipUrlSync\": false,\n \"type\": \"datasource\"\n },\n {\n \"allValue\": \".*\",\n \"current\": {},\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"definition\": \"label_values(trivy_config_audit_created,exported_namespace)\",\n \"hide\": 0,\n \"includeAll\": true,\n \"multi\": true,\n \"name\": \"exported_namespace\",\n \"options\": [],\n \"query\": {\n \"qryType\": 1,\n \"query\": \"label_values(trivy_config_audit_created,exported_namespace)\",\n \"refId\": \"PrometheusVariableQueryEditor-VariableQuery\"\n },\n \"refresh\": 1,\n \"regex\": \"\",\n \"skipUrlSync\": false,\n \"sort\": 1,\n \"type\": \"query\"\n }\n ]\n },\n \"time\": {\n \"from\": \"now-7d\",\n \"to\": \"now\"\n },\n \"timepicker\": {},\n \"timezone\": \"\",\n \"title\": \"Trivy Operator - CRD Results\",\n \"uid\": \"security_trivy_operator_crd\",\n \"version\": 31,\n \"weekStart\": \"\"\n}\n",
"firstEditBubbleId": "d769eb92-0e38-418a-b55d-538177c3ed64",
"isNewlyCreated": false,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/prod/dashboards/trivy-crd-dashboard.json": {
"content": "{\n \"__inputs\": [\n {\n \"name\": \"DS_MAIN\",\n \"label\": \"main\",\n \"description\": \"\",\n \"type\": \"datasource\",\n \"pluginId\": \"prometheus\",\n \"pluginName\": \"Prometheus\"\n }\n ],\n \"__elements\": {},\n \"__requires\": [\n {\n \"type\": \"grafana\",\n \"id\": \"grafana\",\n \"name\": \"Grafana\",\n \"version\": \"10.4.15\"\n },\n {\n \"type\": \"datasource\",\n \"id\": \"prometheus\",\n \"name\": \"Prometheus\",\n \"version\": \"1.0.0\"\n },\n {\n \"type\": \"panel\",\n \"id\": \"stat\",\n \"name\": \"Stat\",\n \"version\": \"\"\n },\n {\n \"type\": \"panel\",\n \"id\": \"table\",\n \"name\": \"Table\",\n \"version\": \"\"\n },\n {\n \"type\": \"panel\",\n \"id\": \"row\",\n \"name\": \"Row\",\n \"version\": \"\"\n }\n ],\n \"annotations\": {\n \"list\": [\n {\n \"builtIn\": 1,\n \"datasource\": {\n \"type\": \"datasource\",\n \"uid\": \"grafana\"\n },\n \"enable\": true,\n \"hide\": true,\n \"iconColor\": \"rgba(0, 211, 255, 1)\",\n \"name\": \"Annotations & Alerts\",\n \"target\": {\n \"limit\": 100,\n \"matchAny\": false,\n \"tags\": [],\n \"type\": \"dashboard\"\n },\n \"type\": \"dashboard\"\n }\n ]\n },\n \"editable\": true,\n \"fiscalYearStartMonth\": 0,\n \"graphTooltip\": 0,\n \"id\": null,\n \"links\": [],\n \"liveNow\": false,\n \"panels\": [\n {\n \"collapsed\": false,\n \"gridPos\": {\n \"h\": 1,\n \"w\": 24,\n \"x\": 0,\n \"y\": 0\n },\n \"id\": 1,\n \"panels\": [],\n \"title\": \"Cluster Compliance\",\n \"type\": \"row\",\n \"description\": \"Ключевые агрегаты compliance по выбранным benchmark: fail, pass, score и возраст последнего отчета.\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"red\",\n \"value\": 1\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 0,\n \"y\": 1\n },\n \"id\": 2,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sum(trivy_cluster_compliance_fail_count)\",\n \"instant\": true,\n \"legendFormat\": \"__auto\",\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Compliance: Failed Checks\",\n \"type\": \"stat\",\n \"description\": \"Общее число проваленных compliance-checks в текущем фильтре benchmark.\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"red\",\n \"value\": null\n },\n {\n \"color\": \"green\",\n \"value\": 1\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 6,\n \"y\": 1\n },\n \"id\": 3,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sum(trivy_cluster_compliance_pass_count)\",\n \"instant\": true,\n \"legendFormat\": \"__auto\",\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Compliance: Passed Checks\",\n \"type\": \"stat\",\n \"description\": \"Общее число успешно пройденных compliance-checks в текущем фильтре benchmark.\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"decimals\": 2,\n \"unit\": \"percent\",\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"red\",\n \"value\": null\n },\n {\n \"color\": \"yellow\",\n \"value\": 80\n },\n {\n \"color\": \"green\",\n \"value\": 95\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 12,\n \"y\": 1\n },\n \"id\": 4,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"100 * sum(trivy_cluster_compliance_pass_count) / clamp_min(sum(trivy_cluster_compliance_pass_count) + sum(trivy_cluster_compliance_fail_count), 1)\",\n \"instant\": true,\n \"legendFormat\": \"__auto\",\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Compliance: Score\",\n \"type\": \"stat\",\n \"description\": \"Итоговый процент прохождения compliance: pass / (pass + fail) * 100.\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"decimals\": 0,\n \"unit\": \"s\",\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"yellow\",\n \"value\": 21600\n },\n {\n \"color\": \"red\",\n \"value\": 43200\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 18,\n \"y\": 1\n },\n \"id\": 5,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"time() - max(trivy_cluster_compliance_updated)\",\n \"instant\": true,\n \"legendFormat\": \"__auto\",\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Compliance: Last Report Age\",\n \"type\": \"stat\",\n \"description\": \"Возраст последнего обновления compliance-отчета в часах; рост значения означает устаревшие данные.\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 6,\n \"w\": 24,\n \"x\": 0,\n \"y\": 5\n },\n \"id\": 6,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Value\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc(sum by (benchmark) (trivy_cluster_compliance_fail_count))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true\n },\n \"indexByName\": {\n \"benchmark\": 0,\n \"Value\": 1\n },\n \"renameByName\": {\n \"benchmark\": \"Framework\",\n \"Value\": \"Failed Checks\"\n }\n }\n }\n ],\n \"title\": \"Compliance: Failed Checks by Framework\",\n \"type\": \"table\",\n \"description\": \"Сравнение количества провалов по framework (benchmark) для приоритизации работ.\"\n },\n {\n \"collapsed\": false,\n \"description\": \"Детализация проваленных контролов с фокусом на impact: fails и доля от общего количества fail.\",\n \"gridPos\": {\n \"h\": 1,\n \"w\": 24,\n \"x\": 0,\n \"y\": 11\n },\n \"id\": 48,\n \"panels\": [],\n \"title\": \"Control Drilldown\",\n \"type\": \"row\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Единая подробная таблица проваленных compliance-checks с конкретным target/ресурсом.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 22,\n \"w\": 24,\n \"x\": 0,\n \"y\": 12\n },\n \"id\": 49,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Fails\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc(sum by (benchmark, control_id, control_name, control_severity, check_id, check_title, check_target, check_namespace, resource_kind, resource_name) (trivy_cluster_compliance_fail_check_total))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Compliance: Fail Checks Drilldown (Detailed)\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"benchmark_id\": true,\n \"benchmark_type\": true,\n \"benchmark_version\": true,\n \"customresource_group\": true,\n \"customresource_kind\": true,\n \"customresource_version\": true,\n \"instance\": true,\n \"job\": true,\n \"name\": true,\n \"namespace\": true,\n \"pod\": true,\n \"service\": true\n },\n \"indexByName\": {\n \"benchmark\": 0,\n \"control_id\": 1,\n \"control_name\": 2,\n \"control_severity\": 3,\n \"check_id\": 4,\n \"check_title\": 5,\n \"check_target\": 6,\n \"check_namespace\": 7,\n \"resource_kind\": 8,\n \"resource_name\": 9,\n \"Value\": 10\n },\n \"renameByName\": {\n \"benchmark\": \"Framework\",\n \"control_id\": \"Control ID\",\n \"control_name\": \"Control\",\n \"control_severity\": \"Severity\",\n \"check_id\": \"Check ID\",\n \"check_title\": \"Check\",\n \"check_target\": \"Target\",\n \"check_namespace\": \"Namespace\",\n \"resource_kind\": \"Kind\",\n \"resource_name\": \"Resource\",\n \"Value\": \"Fails\"\n }\n }\n }\n ]\n },\n {\n \"collapsed\": false,\n \"description\": \"Risk view для namespaced-отчетов: общий объём findings и приоритеты по namespace/ресурсам.\",\n \"gridPos\": {\n \"h\": 1,\n \"w\": 24,\n \"x\": 0,\n \"y\": 23\n },\n \"id\": 50,\n \"panels\": [],\n \"title\": \"Namespaced Risk\",\n \"type\": \"row\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Суммарные critical+high findings в ConfigAuditReport по выбранным namespace.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"yellow\",\n \"value\": 1\n },\n {\n \"color\": \"red\",\n \"value\": 10\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 8,\n \"x\": 0,\n \"y\": 24\n },\n \"id\": 51,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sum(trivy_config_audit_critical_count{exported_namespace=~\\\"$exported_namespace\\\"} + trivy_config_audit_high_count{exported_namespace=~\\\"$exported_namespace\\\"}) or vector(0)\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Config: Critical + High Findings\",\n \"type\": \"stat\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Суммарные critical+high findings в InfraAssessmentReport по выбранным namespace.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"yellow\",\n \"value\": 1\n },\n {\n \"color\": \"red\",\n \"value\": 10\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 8,\n \"x\": 8,\n \"y\": 24\n },\n \"id\": 52,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sum(trivy_infra_assessment_critical_count{exported_namespace=~\\\"$exported_namespace\\\"} + trivy_infra_assessment_high_count{exported_namespace=~\\\"$exported_namespace\\\"}) or vector(0)\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Infra: Critical + High Findings\",\n \"type\": \"stat\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Количество namespace, где есть хотя бы один critical/high finding (ConfigAudit + InfraAssessment).\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"yellow\",\n \"value\": 1\n },\n {\n \"color\": \"red\",\n \"value\": 5\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 8,\n \"x\": 16,\n \"y\": 24\n },\n \"id\": 55,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"count(sum by (exported_namespace) ({__name__=~\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\", exported_namespace=~\\\"$exported_namespace\\\"}) > 0) or vector(0)\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Namespaces With Findings\",\n \"type\": \"stat\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Приоритизированный список namespace по суммарному риску (critical+high из ConfigAudit + InfraAssessment).\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 8,\n \"w\": 12,\n \"x\": 0,\n \"y\": 28\n },\n \"id\": 53,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Critical + High\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc((sum by (exported_namespace) ({__name__=~\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\", exported_namespace=~\\\"$exported_namespace\\\"})) unless (sum by (exported_namespace) ({__name__=~\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\", exported_namespace=~\\\"$exported_namespace\\\"}) == 0))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Top Namespaces by Critical + High Findings\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"instance\": true,\n \"job\": true,\n \"namespace\": true,\n \"pod\": true,\n \"service\": true\n },\n \"indexByName\": {\n \"exported_namespace\": 0,\n \"Value\": 1\n },\n \"renameByName\": {\n \"exported_namespace\": \"Namespace\",\n \"Value\": \"Critical + High\"\n }\n }\n }\n ]\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Топ конкретных workload-объектов (namespace/kind/resource) по сумме critical+high findings.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 8,\n \"w\": 12,\n \"x\": 12,\n \"y\": 28\n },\n \"id\": 54,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Critical + High\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc((sum by (exported_namespace, resource_kind, resource_name) ({__name__=~\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\", exported_namespace=~\\\"$exported_namespace\\\"})) unless (sum by (exported_namespace, resource_kind, resource_name) ({__name__=~\\\"trivy_(config_audit|infra_assessment)_(critical|high)_count\\\", exported_namespace=~\\\"$exported_namespace\\\"}) == 0))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Top Targets by Namespace (Critical + High)\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"instance\": true,\n \"job\": true,\n \"namespace\": true,\n \"pod\": true,\n \"service\": true\n },\n \"indexByName\": {\n \"exported_namespace\": 0,\n \"resource_kind\": 1,\n \"resource_name\": 2,\n \"Value\": 3\n },\n \"renameByName\": {\n \"exported_namespace\": \"Namespace\",\n \"resource_kind\": \"Kind\",\n \"resource_name\": \"Resource\",\n \"Value\": \"Critical + High\"\n }\n }\n }\n ]\n },\n {\n \"collapsed\": false,\n \"description\": \"Почему срабатывает Config/Infra: агрегированные причины по check ID и названию (без длинных message).\",\n \"gridPos\": {\n \"x\": 0,\n \"y\": 36,\n \"w\": 24,\n \"h\": 1\n },\n \"id\": 58,\n \"panels\": [],\n \"title\": \"Findings Reasons\",\n \"type\": \"row\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Топ причин срабатывания в ConfigAuditReport: какие проверки дают наибольший вклад.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"x\": 0,\n \"y\": 37,\n \"w\": 24,\n \"h\": 8\n },\n \"id\": 59,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Findings\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc(sum by (check_id, check_title, check_severity, check_category) (trivy_config_audit_check_fail_total{exported_namespace=~\\\"$exported_namespace\\\"}))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Config: Top Trigger Reasons\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"customresource_group\": true,\n \"customresource_kind\": true,\n \"customresource_version\": true,\n \"exported_namespace\": true,\n \"instance\": true,\n \"job\": true,\n \"name\": true,\n \"namespace\": true,\n \"pod\": true,\n \"resource_kind\": true,\n \"resource_name\": true,\n \"service\": true,\n \"scanner_name\": true,\n \"scanner_vendor\": true,\n \"scanner_version\": true\n },\n \"indexByName\": {\n \"check_id\": 0,\n \"check_title\": 1,\n \"check_severity\": 2,\n \"check_category\": 3,\n \"Value\": 4\n },\n \"renameByName\": {\n \"check_id\": \"Check ID\",\n \"check_title\": \"Check\",\n \"check_severity\": \"Severity\",\n \"check_category\": \"Category\",\n \"Value\": \"Findings\"\n }\n }\n }\n ]\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Топ причин срабатывания в InfraAssessmentReport + ClusterInfraAssessmentReport.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"x\": 0,\n \"y\": 45,\n \"w\": 24,\n \"h\": 8\n },\n \"id\": 60,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Findings\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc((sum by (check_id, check_title, check_severity, check_category) (trivy_infra_assessment_check_fail_total{exported_namespace=~\\\"$exported_namespace\\\"})) or (sum by (check_id, check_title, check_severity, check_category) (trivy_cluster_infra_assessment_check_fail_total)))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Infra: Top Trigger Reasons\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"customresource_group\": true,\n \"customresource_kind\": true,\n \"customresource_version\": true,\n \"exported_namespace\": true,\n \"instance\": true,\n \"job\": true,\n \"name\": true,\n \"namespace\": true,\n \"pod\": true,\n \"resource_kind\": true,\n \"resource_name\": true,\n \"service\": true,\n \"scanner_name\": true,\n \"scanner_vendor\": true,\n \"scanner_version\": true\n },\n \"indexByName\": {\n \"check_id\": 0,\n \"check_title\": 1,\n \"check_severity\": 2,\n \"check_category\": 3,\n \"Value\": 4\n },\n \"renameByName\": {\n \"check_id\": \"Check ID\",\n \"check_title\": \"Check\",\n \"check_severity\": \"Severity\",\n \"check_category\": \"Category\",\n \"Value\": \"Findings\"\n }\n }\n }\n ]\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Конкретные ресурсы для выбранной причины (check_id) из ConfigAuditReport.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"x\": 0,\n \"y\": 53,\n \"w\": 24,\n \"h\": 8\n },\n \"id\": 61,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Findings\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc(sum by (check_id, check_title, check_severity, check_category, exported_namespace, resource_kind, resource_name) (trivy_config_audit_check_fail_total{exported_namespace=~\\\"$exported_namespace\\\"}))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Config: Affected Resources by Check\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"check_category\": false,\n \"check_id\": false,\n \"check_severity\": false,\n \"check_title\": false,\n \"customresource_group\": true,\n \"customresource_kind\": true,\n \"customresource_version\": true,\n \"instance\": true,\n \"job\": true,\n \"name\": true,\n \"namespace\": true,\n \"pod\": true,\n \"scanner\": true,\n \"scanner_name\": true,\n \"scanner_vendor\": true,\n \"scanner_version\": true,\n \"service\": true\n },\n \"indexByName\": {\n \"exported_namespace\": 4,\n \"resource_kind\": 5,\n \"resource_name\": 6,\n \"Value\": 7,\n \"check_id\": 0,\n \"check_title\": 1,\n \"check_severity\": 2,\n \"check_category\": 3\n },\n \"renameByName\": {\n \"exported_namespace\": \"Namespace\",\n \"resource_kind\": \"Kind\",\n \"resource_name\": \"Resource\",\n \"Value\": \"Findings\",\n \"check_id\": \"Check ID\",\n \"check_title\": \"Check\",\n \"check_severity\": \"Severity\",\n \"check_category\": \"Category\"\n }\n }\n }\n ]\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Конкретные ресурсы для причин из InfraAssessmentReport + ClusterInfraAssessmentReport.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"custom\": {\n \"filterable\": true\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"x\": 0,\n \"y\": 61,\n \"w\": 24,\n \"h\": 8\n },\n \"id\": 62,\n \"options\": {\n \"cellHeight\": \"sm\",\n \"footer\": {\n \"show\": false\n },\n \"showHeader\": true,\n \"sortBy\": [\n {\n \"desc\": true,\n \"displayName\": \"Findings\"\n }\n ],\n \"columnFilter\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"sort_desc((sum by (check_id, check_title, check_severity, check_category, exported_namespace, resource_kind, resource_name) (trivy_infra_assessment_check_fail_total{exported_namespace=~\\\"$exported_namespace\\\"})) or (sum by (check_id, check_title, check_severity, check_category, exported_namespace, resource_kind, resource_name) (trivy_cluster_infra_assessment_check_fail_total)))\",\n \"format\": \"table\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Infra: Affected Resources by Check\",\n \"type\": \"table\",\n \"transformations\": [\n {\n \"id\": \"organize\",\n \"options\": {\n \"excludeByName\": {\n \"Time\": true,\n \"check_category\": false,\n \"check_id\": false,\n \"check_severity\": false,\n \"check_title\": false,\n \"customresource_group\": true,\n \"customresource_kind\": true,\n \"customresource_version\": true,\n \"instance\": true,\n \"job\": true,\n \"name\": true,\n \"namespace\": true,\n \"pod\": true,\n \"scanner\": true,\n \"scanner_name\": true,\n \"scanner_vendor\": true,\n \"scanner_version\": true,\n \"service\": true\n },\n \"indexByName\": {\n \"exported_namespace\": 4,\n \"resource_kind\": 5,\n \"resource_name\": 6,\n \"Value\": 7,\n \"check_id\": 0,\n \"check_title\": 1,\n \"check_severity\": 2,\n \"check_category\": 3\n },\n \"renameByName\": {\n \"exported_namespace\": \"Namespace\",\n \"resource_kind\": \"Kind\",\n \"resource_name\": \"Resource\",\n \"Value\": \"Findings\",\n \"check_id\": \"Check ID\",\n \"check_title\": \"Check\",\n \"check_severity\": \"Severity\",\n \"check_category\": \"Category\"\n }\n }\n }\n ]\n },\n {\n \"collapsed\": false,\n \"description\": \"Служебный блок состояния exporter: доступность, свежесть данных и наличие ошибок refresh.\",\n \"gridPos\": {\n \"h\": 1,\n \"w\": 24,\n \"x\": 0,\n \"y\": 69\n },\n \"id\": 43,\n \"panels\": [],\n \"title\": \"Exporter Runtime Health\",\n \"type\": \"row\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"1 = exporter успешно обновлял метрики недавно; 0 = refresh устарел или остановился.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"red\",\n \"value\": null\n },\n {\n \"color\": \"green\",\n \"value\": 1\n }\n ]\n },\n \"mappings\": [\n {\n \"type\": \"value\",\n \"options\": {\n \"0\": {\n \"text\": \"DOWN\"\n },\n \"1\": {\n \"text\": \"UP\"\n }\n }\n }\n ]\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 0,\n \"y\": 70\n },\n \"id\": 44,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"(max(trivy_report_metrics_exporter_up)) or vector(0)\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Exporter: Up\",\n \"type\": \"stat\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Возраст последнего успешного refresh в минутах; рост показывает деградацию источника данных.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"unit\": \"m\",\n \"decimals\": 1,\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"yellow\",\n \"value\": 5\n },\n {\n \"color\": \"red\",\n \"value\": 15\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 6,\n \"y\": 70\n },\n \"id\": 45,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"(time() - ((max(trivy_report_metrics_last_success_timestamp)) or vector(0))) / 60\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Exporter: Last Success Age\",\n \"type\": \"stat\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Счетчик ошибок refresh с момента запуска pod; не должен стабильно расти.\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"red\",\n \"value\": 1\n }\n ]\n }\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 12,\n \"y\": 70\n },\n \"id\": 46,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"(max(trivy_report_metrics_refresh_errors_total)) or vector(0)\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Exporter: Refresh Errors Total\",\n \"type\": \"stat\"\n },\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"description\": \"Флаг наличия последней ошибки refresh (1 = есть ошибка, 0 = ошибок нет).\",\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"thresholds\"\n },\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"red\",\n \"value\": 1\n }\n ]\n },\n \"mappings\": [\n {\n \"type\": \"value\",\n \"options\": {\n \"0\": {\n \"text\": \"OK\"\n },\n \"1\": {\n \"text\": \"ERROR\"\n }\n }\n }\n ]\n },\n \"overrides\": []\n },\n \"gridPos\": {\n \"h\": 4,\n \"w\": 6,\n \"x\": 18,\n \"y\": 70\n },\n \"id\": 47,\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"none\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"auto\",\n \"reduceOptions\": {\n \"calcs\": [\n \"lastNotNull\"\n ],\n \"fields\": \"\",\n \"values\": false\n },\n \"showPercentChange\": false,\n \"textMode\": \"auto\",\n \"wideLayout\": true\n },\n \"pluginVersion\": \"10.4.15\",\n \"targets\": [\n {\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"editorMode\": \"code\",\n \"expr\": \"(max(trivy_report_metrics_last_error_info)) or vector(0)\",\n \"instant\": true,\n \"refId\": \"A\"\n }\n ],\n \"title\": \"Exporter: Last Error Present\",\n \"type\": \"stat\"\n }\n ],\n \"refresh\": \"10m\",\n \"schemaVersion\": 39,\n \"tags\": [\n \"Prometheus\",\n \"Trivy-operator\",\n \"CRD\"\n ],\n \"templating\": {\n \"list\": [\n {\n \"current\": {\n \"selected\": false,\n \"text\": \"main\",\n \"value\": \"P0D6E4079E36703EB\"\n },\n \"hide\": 0,\n \"includeAll\": false,\n \"multi\": false,\n \"name\": \"datasource\",\n \"options\": [],\n \"query\": \"prometheus\",\n \"queryValue\": \"\",\n \"refresh\": 1,\n \"regex\": \"\",\n \"skipUrlSync\": false,\n \"type\": \"datasource\"\n },\n {\n \"allValue\": \".*\",\n \"current\": {},\n \"datasource\": {\n \"type\": \"prometheus\",\n \"uid\": \"main\"\n },\n \"definition\": \"label_values(trivy_config_audit_created,exported_namespace)\",\n \"hide\": 0,\n \"includeAll\": true,\n \"multi\": true,\n \"name\": \"exported_namespace\",\n \"options\": [],\n \"query\": {\n \"qryType\": 1,\n \"query\": \"label_values(trivy_config_audit_created,exported_namespace)\",\n \"refId\": \"PrometheusVariableQueryEditor-VariableQuery\"\n },\n \"refresh\": 1,\n \"regex\": \"\",\n \"skipUrlSync\": false,\n \"sort\": 1,\n \"type\": \"query\"\n }\n ]\n },\n \"time\": {\n \"from\": \"now-7d\",\n \"to\": \"now\"\n },\n \"timepicker\": {},\n \"timezone\": \"\",\n \"title\": \"Trivy Operator - CRD Results\",\n \"uid\": \"security_trivy_operator_crd\",\n \"version\": 31,\n \"weekStart\": \"\"\n}\n",
"firstEditBubbleId": "a8ea0b47-782f-4106-88a8-cec80a05c01c",
"isNewlyCreated": false,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/stage/values/felis-a-stage-cluster.yaml": {
"content": "",
"firstEditBubbleId": "ee731eb1-561d-40c3-a3a9-7564e83a7671",
"isNewlyCreated": true,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/stage/values/wasat-a-stage-cluster.yaml": {
"content": "---\nexcludeNamespaces:\n - kube-public\n - kube-node-lease\n - ingress-nginx\n\noperator:\n podLabels:\n prometheus.deckhouse.io/custom-target: trivy-operator\n\ntrivy:\n # -- severity is a comma separated list of severity levels reported by Trivy.UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL\n severity: \"HIGH,CRITICAL\"\n\n # -- resources resource requests and limits for scan job containers\n resources:\n requests:\n cpu: 100m\n memory: 200M\n # ephemeralStorage: \"2Gi\"\n limits:\n cpu: 200m\n memory: 512Mi\n # ephemeralStorage: \"2Gi\"\n\n server:\n # -- resources set trivy-server resource\n resources:\n requests:\n cpu: 200m\n memory: 100Mi\n # ephemeral-storage: \"2Gi\"\n limits:\n cpu: 1\n memory: 300Mi\n # ephemeral-storage: \"2Gi\"\n\n # -- resources set trivy-operator resource\nresources:\n requests:\n cpu: 200m\n memory: 1Gi\n limits:\n cpu: 1\n memory: 2Gi\n\npodAnnotations:\n prometheus.deckhouse.io/port: \"8080\"\n prometheus.deckhouse.io/sample-limit: \"50000\"\n",
"firstEditBubbleId": "0e44e8ac-97ca-411d-82fc-76eace9e67a5",
"isNewlyCreated": false,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/stage/templates/deployment.yaml": {
"content": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: {{ include \"trivy-operator.fullname\" . }}\n namespace: {{ include \"trivy-operator.namespace\" . }}\n {{- with .Values.operator.annotations }}\n annotations: {{- toYaml . | nindent 4 }}\n {{- end }}\n labels:\n {{- include \"trivy-operator.labels\" . | nindent 4 }}\n {{- with .Values.operator.labels }}\n {{- toYaml . | nindent 4 }}\n {{- end }}\nspec:\n replicas: {{ .Values.operator.replicas }}\n {{- with .Values.operator.revisionHistoryLimit }}\n revisionHistoryLimit: {{ . }}\n {{- end }}\n strategy:\n type: Recreate\n selector:\n matchLabels: {{- include \"trivy-operator.selectorLabels\" . | nindent 6 }}\n template:\n metadata:\n {{- with .Values.podAnnotations }}\n annotations: {{- toYaml . | nindent 8 }}\n {{- end }}\n labels:\n {{- include \"trivy-operator.selectorLabels\" . | nindent 8 }}\n {{- with .Values.operator.podLabels }}\n {{- toYaml . | nindent 8 }}\n {{- end }}\n spec:\n {{- if .Values.hostAliases }}\n hostAliases:\n {{- toYaml .Values.hostAliases | nindent 8 }}\n {{- end }}\n serviceAccountName: {{ include \"trivy-operator.serviceAccountName\" . }}\n automountServiceAccountToken: {{ .Values.automountServiceAccountToken }}\n containers:\n - name: {{ .Chart.Name | quote }}\n image: \"{{ include \"global.imageRegistry\" . | default .Values.image.registry }}/{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}\"\n {{- with .Values.image.pullPolicy }}\n imagePullPolicy: {{ . }}\n {{- end }}\n env:\n - name: OPERATOR_NAMESPACE\n value: {{ include \"trivy-operator.namespace\" . }}\n - name: OPERATOR_TARGET_NAMESPACES\n value: {{ .Values.targetNamespaces | quote }}\n - name: OPERATOR_EXCLUDE_NAMESPACES\n value: {{ .Values.excludeNamespaces | quote }}\n - name: OPERATOR_TARGET_WORKLOADS\n value: {{ tpl .Values.targetWorkloads . | quote }}\n - name: OPERATOR_SERVICE_ACCOUNT\n value: {{ include \"trivy-operator.serviceAccountName\" . | quote }}\n {{- with .Values.extraEnv }}\n {{- toYaml . | nindent 12 }}\n {{- end }}\n envFrom:\n - configMapRef:\n name: trivy-operator-config\n {{- if .Values.operator.valuesFromConfigMap }}\n - configMapRef:\n name: {{ .Values.operator.valuesFromConfigMap }}\n {{- end }}\n {{- if .Values.operator.valuesFromSecret }}\n - secretRef:\n name: {{ .Values.operator.valuesFromSecret }}\n {{- end }}\n ports:\n - name: metrics\n containerPort: 8080\n - name: probes\n containerPort: 9090\n readinessProbe:\n httpGet:\n path: /readyz/\n port: probes\n initialDelaySeconds: 5\n periodSeconds: 10\n successThreshold: 1\n failureThreshold: 3\n livenessProbe:\n httpGet:\n path: /healthz/\n port: probes\n initialDelaySeconds: 5\n periodSeconds: 10\n successThreshold: 1\n failureThreshold: 10\n {{- with .Values.resources }}\n resources: {{- toYaml . | nindent 12 }}\n {{- end }}\n {{- with .Values.securityContext }}\n securityContext: {{- toYaml . | nindent 12 }}\n {{- end }}\n {{- with .Values.volumeMounts }}\n volumeMounts: {{- toYaml . | nindent 12 }}\n {{- end }}\n {{- with .Values.image.pullSecrets }}\n imagePullSecrets: {{- toYaml . | nindent 8 }}\n {{- end }}\n {{- with .Values.podSecurityContext }}\n securityContext: {{- toYaml . | nindent 8 }}\n {{- end }}\n {{- with .Values.volumes }}\n volumes: {{- toYaml . | nindent 8 }}\n {{- end }}\n {{- with .Values.nodeSelector }}\n nodeSelector: {{- toYaml . | nindent 8 }}\n {{- end }}\n {{- with .Values.affinity }}\n affinity: {{- toYaml . | nindent 8 }}\n {{- end }}\n {{- with .Values.tolerations }}\n tolerations: {{- toYaml . | nindent 8 }}\n {{- end }}\n {{- with .Values.priorityClassName }}\n priorityClassName: {{ . }}\n {{- end }}\n",
"firstEditBubbleId": "9b69680f-ad1d-4891-91e8-206d4eaf13ac",
"isNewlyCreated": false,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/stage/templates/trivy-server/statefulset.yaml": {
"content": "{{- if .Values.operator.builtInTrivyServer }}\napiVersion: apps/v1\nkind: StatefulSet\nmetadata:\n name: trivy-server\n namespace: {{ include \"trivy-operator.namespace\" . }}\n labels:\n app.kubernetes.io/name: trivy-server\n app.kubernetes.io/instance: trivy-server\n {{- with .Values.trivy.labels }}\n {{- toYaml . | nindent 4 }}\n {{- end }}\nspec:\n podManagementPolicy: \"Parallel\"\n serviceName: {{ .Values.trivy.serverServiceName }}\n replicas: {{ .Values.trivy.server.replicas }}\n selector:\n matchLabels:\n app.kubernetes.io/name: trivy-server\n app.kubernetes.io/instance: trivy-server\n {{- if .Values.trivy.storageClassEnabled }}\n volumeClaimTemplates:\n - apiVersion: v1\n kind: PersistentVolumeClaim\n metadata:\n name: data\n spec:\n resources:\n requests:\n storage: {{ .Values.trivy.storageSize }}\n accessModes:\n - ReadWriteOnce\n storageClassName: {{ .Values.trivy.storageClassName }}\n {{- end }}\n template:\n metadata:\n annotations:\n checksum/config: 7fcc66ace3f98462349856795765021e7bf7a0106f28439a9f6dc74257404370\n {{- with .Values.operator.serverAdditionalAnnotations }}\n {{- toYaml . | nindent 8 }}\n {{- end }}\n labels:\n {{- with .Values.trivy.podLabels }}\n {{- toYaml . | nindent 8 }}\n {{- end }}\n app.kubernetes.io/name: trivy-server\n app.kubernetes.io/instance: trivy-server\n spec:\n {{- if .Values.hostAliases }}\n hostAliases:\n {{- toYaml .Values.hostAliases | nindent 8 }}\n {{- end }}\n {{- with .Values.trivy.priorityClassName }}\n priorityClassName: {{ . }}\n {{- end }}\n serviceAccountName: {{ include \"trivy-operator.serviceAccountName\" . }}\n automountServiceAccountToken: false\n {{- with .Values.trivy.server.podSecurityContext }}\n securityContext: {{- toYaml . | nindent 8 }}\n {{- end }}\n {{- with .Values.trivy.image.imagePullSecret }}\n imagePullSecrets:\n - name: {{ . }}\n {{- end }}\n containers:\n - name: trivy-server\n image: \"{{ include \"global.imageRegistry\" . | default .Values.trivy.image.registry }}/{{ .Values.trivy.image.repository }}:{{ .Values.trivy.image.tag }}\"\n imagePullPolicy: \"IfNotPresent\"\n {{- with .Values.trivy.server.securityContext }}\n securityContext: {{- toYaml . | nindent 12 }}\n {{- end }}\n args:\n - server\n {{- if or (or .Values.trivy.httpProxy .Values.trivy.httpsProxy) .Values.trivy.noProxy }}\n env:\n {{- with .Values.trivy.httpProxy | quote }}\n - name: HTTP_PROXY\n value: {{ . }}\n {{- end }}\n {{- with .Values.trivy.httpsProxy | quote }}\n - name: HTTPS_PROXY\n value: {{ . }}\n {{- end }}\n {{- with .Values.trivy.noProxy | quote }}\n - name: NO_PROXY\n value: {{ . }}\n {{- end }}\n {{- end }}\n envFrom:\n - configMapRef:\n name: trivy-operator-trivy-config\n - secretRef:\n name: trivy-operator-trivy-config\n {{- if .Values.trivy.valuesFromConfigMap }}\n - configMapRef:\n name: {{ .Values.trivy.valuesFromConfigMap }}\n {{- end }}\n {{- if .Values.trivy.valuesFromSecret }}\n - secretRef:\n name: {{ .Values.trivy.valuesFromSecret }}\n {{- end }}\n ports:\n - name: trivy-http\n containerPort: 4954\n livenessProbe:\n httpGet:\n scheme: HTTP\n path: /healthz\n port: trivy-http\n initialDelaySeconds: 5\n periodSeconds: 10\n successThreshold: 1\n failureThreshold: 10\n readinessProbe:\n httpGet:\n scheme: HTTP\n path: /healthz\n port: trivy-http\n initialDelaySeconds: 5\n periodSeconds: 10\n successThreshold: 1\n failureThreshold: 3\n volumeMounts:\n - mountPath: /tmp\n name: tmp-data\n readOnly: false\n - mountPath: /home/scanner/.cache\n name: data\n readOnly: false\n {{- with .Values.trivy.sslCertDir | quote }}\n - mountPath: {{ . }}\n name: ssl-cert-dir\n readOnly: true\n {{- end }}\n {{- with .Values.trivy.server.resources }}\n resources: {{- toYaml . | nindent 12 }}\n {{- end }}\n volumes:\n - name: tmp-data\n emptyDir: {}\n {{- if not .Values.trivy.storageClassEnabled }}\n - name: data\n emptyDir: {}\n {{- end }}\n {{- with .Values.trivy.sslCertDir | quote }}\n - name: ssl-cert-dir\n hostPath:\n path: {{ . }}\n {{- end }}\n {{- with .Values.tolerations }}\n tolerations: {{- toYaml . | nindent 8 }}\n {{- end }}\n {{- with .Values.nodeSelector }}\n nodeSelector: {{- toYaml . | nindent 8 }}\n {{- end }}\n{{- end }}\n",
"firstEditBubbleId": "1d32ef4b-6531-4352-8c31-5ab92bf9a7c0",
"isNewlyCreated": false,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/prod/templates/deployment.yaml": {
"content": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: {{ include \"trivy-operator.fullname\" . }}\n namespace: {{ include \"trivy-operator.namespace\" . }}\n {{- with .Values.operator.annotations }}\n annotations: {{- toYaml . | nindent 4 }}\n {{- end }}\n labels:\n {{- include \"trivy-operator.labels\" . | nindent 4 }}\n {{- with .Values.operator.labels }}\n {{- toYaml . | nindent 4 }}\n {{- end }}\nspec:\n replicas: {{ .Values.operator.replicas }}\n {{- with .Values.operator.revisionHistoryLimit }}\n revisionHistoryLimit: {{ . }}\n {{- end }}\n strategy:\n type: Recreate\n selector:\n matchLabels: {{- include \"trivy-operator.selectorLabels\" . | nindent 6 }}\n template:\n metadata:\n {{- with .Values.podAnnotations }}\n annotations: {{- toYaml . | nindent 8 }}\n {{- end }}\n labels:\n {{- include \"trivy-operator.selectorLabels\" . | nindent 8 }}\n {{- with .Values.operator.podLabels }}\n {{- toYaml . | nindent 8 }}\n {{- end }}\n spec:\n {{- if .Values.hostAliases }}\n hostAliases:\n {{- toYaml .Values.hostAliases | nindent 8 }}\n {{- end }}\n serviceAccountName: {{ include \"trivy-operator.serviceAccountName\" . }}\n automountServiceAccountToken: {{ .Values.automountServiceAccountToken }}\n containers:\n - name: {{ .Chart.Name | quote }}\n image: \"{{ include \"global.imageRegistry\" . | default .Values.image.registry }}/{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}\"\n {{- with .Values.image.pullPolicy }}\n imagePullPolicy: {{ . }}\n {{- end }}\n env:\n - name: OPERATOR_NAMESPACE\n value: {{ include \"trivy-operator.namespace\" . }}\n - name: OPERATOR_TARGET_NAMESPACES\n value: {{ .Values.targetNamespaces | quote }}\n - name: OPERATOR_EXCLUDE_NAMESPACES\n value: {{ .Values.excludeNamespaces | quote }}\n - name: OPERATOR_TARGET_WORKLOADS\n value: {{ tpl .Values.targetWorkloads . | quote }}\n - name: OPERATOR_SERVICE_ACCOUNT\n value: {{ include \"trivy-operator.serviceAccountName\" . | quote }}\n {{- with .Values.extraEnv }}\n {{- toYaml . | nindent 12 }}\n {{- end }}\n envFrom:\n - configMapRef:\n name: trivy-operator-config\n {{- if .Values.operator.valuesFromConfigMap }}\n - configMapRef:\n name: {{ .Values.operator.valuesFromConfigMap }}\n {{- end }}\n {{- if .Values.operator.valuesFromSecret }}\n - secretRef:\n name: {{ .Values.operator.valuesFromSecret }}\n {{- end }}\n ports:\n - name: metrics\n containerPort: 8080\n - name: probes\n containerPort: 9090\n readinessProbe:\n httpGet:\n path: /readyz/\n port: probes\n initialDelaySeconds: 5\n periodSeconds: 10\n successThreshold: 1\n failureThreshold: 3\n livenessProbe:\n httpGet:\n path: /healthz/\n port: probes\n initialDelaySeconds: 5\n periodSeconds: 10\n successThreshold: 1\n failureThreshold: 10\n {{- with .Values.resources }}\n resources: {{- toYaml . | nindent 12 }}\n {{- end }}\n {{- with .Values.securityContext }}\n securityContext: {{- toYaml . | nindent 12 }}\n {{- end }}\n {{- with .Values.volumeMounts }}\n volumeMounts: {{- toYaml . | nindent 12 }}\n {{- end }}\n {{- with .Values.image.pullSecrets }}\n imagePullSecrets: {{- toYaml . | nindent 8 }}\n {{- end }}\n {{- with .Values.podSecurityContext }}\n securityContext: {{- toYaml . | nindent 8 }}\n {{- end }}\n {{- with .Values.volumes }}\n volumes: {{- toYaml . | nindent 8 }}\n {{- end }}\n {{- with .Values.nodeSelector }}\n nodeSelector: {{- toYaml . | nindent 8 }}\n {{- end }}\n {{- with .Values.affinity }}\n affinity: {{- toYaml . | nindent 8 }}\n {{- end }}\n {{- with .Values.tolerations }}\n tolerations: {{- toYaml . | nindent 8 }}\n {{- end }}\n {{- with .Values.priorityClassName }}\n priorityClassName: {{ . }}\n {{- end }}\n",
"firstEditBubbleId": "9acde8d4-c9f1-4b26-bdb7-223edfee25dc",
"isNewlyCreated": false,
"newlyCreatedFolders": []
},
"file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/prod/templates/trivy-server/statefulset.yaml": {
"content": "{{- if .Values.operator.builtInTrivyServer }}\napiVersion: apps/v1\nkind: StatefulSet\nmetadata:\n name: trivy-server\n namespace: {{ include \"trivy-operator.namespace\" . }}\n labels:\n app.kubernetes.io/name: trivy-server\n app.kubernetes.io/instance: trivy-server\n {{- with .Values.trivy.labels }}\n {{- toYaml . | nindent 4 }}\n {{- end }}\nspec:\n podManagementPolicy: \"Parallel\"\n serviceName: {{ .Values.trivy.serverServiceName }}\n replicas: {{ .Values.trivy.server.replicas }}\n selector:\n matchLabels:\n app.kubernetes.io/name: trivy-server\n app.kubernetes.io/instance: trivy-server\n {{- if .Values.trivy.storageClassEnabled }}\n volumeClaimTemplates:\n - apiVersion: v1\n kind: PersistentVolumeClaim\n metadata:\n name: data\n spec:\n resources:\n requests:\n storage: {{ .Values.trivy.storageSize }}\n accessModes:\n - ReadWriteOnce\n storageClassName: {{ .Values.trivy.storageClassName }}\n {{- end }}\n template:\n metadata:\n annotations:\n checksum/config: 7fcc66ace3f98462349856795765021e7bf7a0106f28439a9f6dc74257404370\n {{- with .Values.operator.serverAdditionalAnnotations }}\n {{- toYaml . | nindent 8 }}\n {{- end }}\n labels:\n {{- with .Values.trivy.podLabels }}\n {{- toYaml . | nindent 8 }}\n {{- end }}\n app.kubernetes.io/name: trivy-server\n app.kubernetes.io/instance: trivy-server\n spec:\n {{- if .Values.hostAliases }}\n hostAliases:\n {{- toYaml .Values.hostAliases | nindent 8 }}\n {{- end }}\n {{- with .Values.trivy.priorityClassName }}\n priorityClassName: {{ . }}\n {{- end }}\n serviceAccountName: {{ include \"trivy-operator.serviceAccountName\" . }}\n automountServiceAccountToken: false\n {{- with .Values.trivy.server.podSecurityContext }}\n securityContext: {{- toYaml . | nindent 8 }}\n {{- end }}\n {{- with .Values.trivy.image.imagePullSecret }}\n imagePullSecrets:\n - name: {{ . }}\n {{- end }}\n containers:\n - name: trivy-server\n image: \"{{ include \"global.imageRegistry\" . | default .Values.trivy.image.registry }}/{{ .Values.trivy.image.repository }}:{{ .Values.trivy.image.tag }}\"\n imagePullPolicy: \"IfNotPresent\"\n {{- with .Values.trivy.server.securityContext }}\n securityContext: {{- toYaml . | nindent 12 }}\n {{- end }}\n args:\n - server\n {{- if or (or .Values.trivy.httpProxy .Values.trivy.httpsProxy) .Values.trivy.noProxy }}\n env:\n {{- with .Values.trivy.httpProxy | quote }}\n - name: HTTP_PROXY\n value: {{ . }}\n {{- end }}\n {{- with .Values.trivy.httpsProxy | quote }}\n - name: HTTPS_PROXY\n value: {{ . }}\n {{- end }}\n {{- with .Values.trivy.noProxy | quote }}\n - name: NO_PROXY\n value: {{ . }}\n {{- end }}\n {{- end }}\n envFrom:\n - configMapRef:\n name: trivy-operator-trivy-config\n - secretRef:\n name: trivy-operator-trivy-config\n {{- if .Values.trivy.valuesFromConfigMap }}\n - configMapRef:\n name: {{ .Values.trivy.valuesFromConfigMap }}\n {{- end }}\n {{- if .Values.trivy.valuesFromSecret }}\n - secretRef:\n name: {{ .Values.trivy.valuesFromSecret }}\n {{- end }}\n ports:\n - name: trivy-http\n containerPort: 4954\n livenessProbe:\n httpGet:\n scheme: HTTP\n path: /healthz\n port: trivy-http\n initialDelaySeconds: 5\n periodSeconds: 10\n successThreshold: 1\n failureThreshold: 10\n readinessProbe:\n httpGet:\n scheme: HTTP\n path: /healthz\n port: trivy-http\n initialDelaySeconds: 5\n periodSeconds: 10\n successThreshold: 1\n failureThreshold: 3\n volumeMounts:\n - mountPath: /tmp\n name: tmp-data\n readOnly: false\n - mountPath: /home/scanner/.cache\n name: data\n readOnly: false\n {{- with .Values.trivy.sslCertDir | quote }}\n - mountPath: {{ . }}\n name: ssl-cert-dir\n readOnly: true\n {{- end }}\n {{- with .Values.trivy.server.resources }}\n resources: {{- toYaml . | nindent 12 }}\n {{- end }}\n volumes:\n - name: tmp-data\n emptyDir: {}\n {{- if not .Values.trivy.storageClassEnabled }}\n - name: data\n emptyDir: {}\n {{- end }}\n {{- with .Values.trivy.sslCertDir | quote }}\n - name: ssl-cert-dir\n hostPath:\n path: {{ . }}\n {{- end }}\n {{- with .Values.tolerations }}\n tolerations: {{- toYaml . | nindent 8 }}\n {{- end }}\n {{- with .Values.nodeSelector }}\n nodeSelector: {{- toYaml . | nindent 8 }}\n {{- end }}\n{{- end }}\n",
"firstEditBubbleId": "cf5b77fb-bf38-4c4b-84cf-71c155054cd4",
"isNewlyCreated": false,
"newlyCreatedFolders": []
}
},
"newlyCreatedFiles": [
{
"uri": {
"$mid": 1,
"external": "file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/stage/templates/report-metrics-remote-write.yaml",
"path": "/home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/stage/templates/report-metrics-remote-write.yaml",
"scheme": "file"
}
},
{
"uri": {
"$mid": 1,
"external": "file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/prod/templates/report-metrics-remote-write.yaml",
"path": "/home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/prod/templates/report-metrics-remote-write.yaml",
"scheme": "file"
}
},
{
"uri": {
"$mid": 1,
"external": "file:///home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/stage/values/felis-a-stage-cluster.yaml",
"path": "/home/ruslanpi/Documents/repos/lmru--devops--argocd-apps/common/trivy-operator/stage/values/felis-a-stage-cluster.yaml",
"scheme": "file"
}
}
],
"newlyCreatedFolders": [],
"lastUpdatedAt": 1773747717069,
"createdAt": 1773313895106,
"hasChangedContext": true,
"activeTabsShouldBeReactive": true,
"editingBubbleId": "13f67328-c8f5-4e83-baf1-ec5407a2eead",
"capabilities": [
{
"type": 30,
"data": {}
},
{
"type": 15,
"data": {
"bubbleDataMap": "{}"
}
},
{
"type": 22,
"data": {}
},
{
"type": 18,
"data": {}
},
{
"type": 19,
"data": {}
},
{
"type": 33,
"data": {}
},
{
"type": 32,
"data": {}
},
{
"type": 23,
"data": {}
},
{
"type": 16,
"data": {}
},
{
"type": 24,
"data": {}
},
{
"type": 21,
"data": {}
},
{
"type": 31,
"data": {}
},
{
"type": 29,
"data": {}
}
],
"name": "Trivy operator custom exporter implementation",
"isFileListExpanded": false,
"browserChipManuallyDisabled": false,
"browserChipManuallyEnabled": false,
"unifiedMode": "agent",
"forceMode": "edit",
"usageData": {},
"contextUsagePercent": 40.47242647058823,
"allAttachedFileCodeChunksUris": [],
"modelConfig": {
"modelName": "composer-1.5",
"maxMode": false
},
"subComposerIds": [],
"subagentComposerIds": [],
"capabilityContexts": [],
"todos": [
{
"id": "1",
"content": "Update values-global.yaml (stage) - nodeSelector to affinity",
"status": "completed",
"dependencies": []
},
{
"id": "2",
"content": "Update values-global.yaml (prod) - nodeSelector to affinity",
"status": "completed",
"dependencies": []
},
{
"id": "3",
"content": "Remove nodeSelector from templates (stage + prod)",
"status": "completed",
"dependencies": []
},
{
"id": "4",
"content": "Update wasat-a-stage - remove nodeSelector, add affinity if needed",
"status": "completed",
"dependencies": []
}
],
"isQueueExpanded": true,
"hasUnreadMessages": false,
"gitHubPromptDismissed": false,
"totalLinesAdded": 286,
"totalLinesRemoved": 6948,
"addedFiles": 0,
"removedFiles": 0,
"isDraft": false,
"isCreatingWorktree": false,
"isApplyingWorktree": false,
"isUndoingWorktree": false,
"applied": false,
"pendingCreateWorktree": false,
"worktreeStartedReadOnly": false,
"isBestOfNSubcomposer": false,
"isBestOfNParent": false,
"bestOfNJudgeWinner": false,
"isSpec": false,
"isProject": false,
"isSpecSubagentDone": false,
"isContinuationInProgress": false,
"stopHookLoopCount": 0,
"committedToBranch": "DSO-102",
"createdOnBranch": "DSO-102",
"activeBranch": {
"branchName": "DSO-102",
"lastInteractionAt": 1773745489604
},
"branches": [
{
"branchName": "DSO-102",
"lastInteractionAt": 1773745489604
},
{
"branchName": "master",
"lastInteractionAt": 1773326755326
}
],
"speculativeSummarizationEncryptionKey": "7ix8KEljH5wtiN8Mp2RRoc1UN8BQa423kKy5C0dCcac=",
"isNAL": true,
"agentBackend": "cursor-agent",
"planModeSuggestionUsed": false,
"debugModeSuggestionUsed": false,
"conversationState": "~CiBFWT8el6SqsYKymtq8wBWWlszFpIllD1wHjBm6wRNVfwogeEbq8iu3RQFTH9Wxefbki02176DwhIHunntFgatcal4KIAthtXncanxnc4cag50++9UStfRDxKOS2M57G41ycHwHCiBuMWlUaG2IGtc5WEBFUi8hPBjrpKjcWPyh/0v+iz9+ewogOaRZjsxQLor66JUDb2gY3Jv1KZ4J3lbGLec/Su7fVPQKILBfdPZU7k5j/oSGchzzcqYtSQ/+JJi8WQRydVV65eYnCiBJ8CVyY4txqs1I602TgsEAik9I8aAGqLiqTmeYlUXKLgoghXoP0A/QjXAdHTXjVZdzS6AgtHaxB4wgpsjggIMgKQ4KINpoGMyPNU5n7995pEy+KssaJZAKlm1LoFAF/qxSq3ecCiAss8Zo968mg7Ixts+tNjIiKjcJ0uwnWZiHow/zFd4NMQoggIVEv64wdAGH0fDR+vo4ejgYrRU/B2Oxw3CBTIGyCM8KIP1SjfQNrAeT+c6NQaWJMkOJi+O/P+pm/GgzRYfmdx+9CiApzija9mnxCjPXO90RWezZSz8W7Ne+r+jloPlfIr3q3Qog8gEHeDft0E6HiBbovmbZsrA5Kp8TFgbKcClJqKJOS9gKIDZez/PE72Oc8sQDicyc8odxoSmTozWk90cDDu57623MCiDhIiaaUk8AXsCX5UbrzIZUAfSKpJpRHeYSNfPqjf83vwoggCPdyNT0ZlGx05ZFE1QhEg5bDUUWdGAwqtM/qszIR6oKIJbfRk54eTZ6uAVz2csTMm5VvpZItyusMPUl8/1Qfi1TCiCh6Ju6eK7SvCVY2o4dx+AON7PCp5UvnmI4FaCO3oY8XwogFRI/QjTq0wKPSQsmcszb4KDWbpRok05ezFXuOjkVHfQKIENLpa17xF2htQtJE+OUvVqWsR1XUhX9snOfMegMXtycCiD82Eupxg3x3V1GBNgocwA3DSnyDdlPKEXC46n9u+7F4Qog6NK0X3bcH7Eo0QV2UIk4uNGaX2joOVOm8jvzMBqnQmcKIEnLNQvclKzXbybRfMEwuIgDt7/BvqvOCKNrVgdN9yc/CiDUF3srOvmlGywLVrPgci6h3tTu3FbIQeQE53UyL9YTsAogFPmLZnTkVZRN2QDg5vDINGdi6Elm7XuasFod2u6hFJ4KIF7dLTpWbeSchq8wdyel/xLikkTAPve4hD5s6yaPTHIuCiCqC0KkpzkIzQPshZqOJu/lGinMfCXCGrz9hpUKkH48jgogykSsC28p4yFV7pXvdFrg/9FfkhVBNratm2tWqDfQ2IAKILvbXSXMNHtI+DBFNFk/iQnRZ2BqCXin+MPbIWO434kECiAF1RF+bsjo9ZCf6V/65pErLDRZcih+9uMlwkX3YDTC8AogSi/2K4c96W8G/xxN4UBGHMfKNzgagTN3dNO0iUzLpm0KIDeYX+QuxHtxu3yRaUu/AvCrnyoT7gUtObIGcMzSyaBaCiAgPkLNN9stq9XOueIAjUMWX04iRoUAGH6YT6M6NOnjpAog65O060wAgDoHjZCMtZGVs32lstedgYWisHBA4bEo0+4KIOLLT2DFaWiITRr9yqWy8KWgspl4gmX5YoRouhfD4hyTCiBY72JdvuUtIqSKtdimA0tNG5yGfxB9K3KGSWSRY1pRPgogZ2XaTTykoLv4cWmHrYINXVeGuBS/YPIv3Nik9qvLMgsKIEsB6ADv+X7v0ztu38xe0cHXQ/xnNPuox91awAbqDgqBCiDM6SSmf2y4Kaq2elOnd+q8CgVSdj1bYGpun9DqfZcTjQoglDfp5eUhNaNRGD8a4Vu2wwZc1Uwk6rfJXCoWzvkICi8KIIIgxXR1AIav3FlY3ZOBsh71LTAjwdG5EpD20oSwNILKCiCGFL0wo3Q9+Ge8Q1FJAxnmQBTIIylsDbc8VtRucY6/6AogRy8s/0s6Ba7Lfay2aMk9zUJJ9K41C6h30E/P/0LsrqQKIB5qLjMTn4lB8S6gEs5CtF3nbQobyPsKSwc3i579VfnbCiD36xbEjL/VDhhcYc3RcrV6wfgwYHkDc65U1VXrT6q1KQogjA29MlaSQsxU03dtv6Z2EDgqiaO9Ivcmgwwk8BAyGzEKINnCA4XCov0RAoKKmL0/zP6PeBt64IJQoLzEYoB/p5KnCiAG7jRd8eNFfcBb51JuLtEOsKy/ZCCs9CQLc2iS6hNJvAogysslNcCPFueYyXV0DbqGUoV4dcWhAWE//UQnRM1xJxcKIFiXurQqV/AUcsQkf0hbel7Tt0wZi+cctD5j5TjvaixoCiDQUcmPZhMspqUtMc2qT7U5rMfUhhrlmPkZbuW8C8pVaAogasUpTDsAew8m1xoTLCd1wed+O6tC8j4YliWIOi25KnkKIPYzQCJMrOJr7xg29wzmjafnzg+jfiRnIy45WkatiY6UCiD79YqSy4FdPBxlKd/8X+kaEhjOA3ajwtPGzyQCE0sW1Qoginj8kTKD1yI5KZ+mOIo4lIz6BB6sqASvytXOALbrYEAKIJI4Gj5tMuFztr/fP25NVsP1TrQqlFSgqja1s1wyOnNxCiCVTe1PEGNjTaSDIbh9p1Z/EWr42RoTRja5wPbCHo/c2wogMrRIAnvx/JmeOb7a68yRE/Ru5ZagsdUuA4qTLlIfvA0KIARjtUXzWNdMBRTifv2jyOo9DpTVkRNpSr2/amJQENv0CiAue+BPTq7ixcM972mVobn2iWaR4/SFnoIxNEQ3w7cZRgogZ3m2XcntyxdREEK4AY/HdoqR6D61lxvViGZhjX2KGl0KIEj3XxBvbyHjgGHIrTHHBxZhVao9WnS7+vS3BXFGkYPsCiDFvw99O0KigmfknHQj21fNYVlgu4z3+w3VonOfb3D56AogdFrODYAIdsaaE6vOauVLgqg1+Jv/Yj6jf8o1bv+uLQ8KIAEFU2wUbD9dlGTDmm+Kah5KgjwnhVQwDLC+3SFIVTvPCiA0njTKSeFqV79FFJBwVtfdVwhSWUzyRke1xk8wnGhV4QogKZmnaWLIKeVsBYEWdYNtWoUj8GChr2uBkT/uD+EW3OcKIPMBbcmBGsRwH7buUfPxb6xT+8Bb2C3hZrmt/Iq8EpE0CiA7F4vdTL16GD3aRxQnkC4VunaMSC8pTPHkrMhlo3jVrgog9Valo+YA8SIj4GiV6qljsZeGUqez8AYNJtIuMa5UXWsKIEmmAISnPs/28sxqPdS9pfWIw+iTNC5FqGO7jrE+h4P4CiBrDsalE28fdC7pLHvt1VaSKSDLi7p23HaHe3Z1L30iWAogE44e5W4Im3HmqdCkNOQuB52dzpoZ++64ewxRp/xobYsKIDjfJMVa2wHWjch6nhnoEPLltn+8Add6w/aWG36ubpAKCiCJvJXM4+2riis1MlvyworetvQoUDfH0ftekglVHGdlgwogcSdCzzSQ0aSVE3unuMGEKWyXYGUZxYqw8xS2Wl1g3uUKIEcbsnaV3GyScG1tVLZRjpDwOUu8q/whvRu59+cFG5gLCiC01kfK8s0cOuoaIIUUqk8ZtIshNmEtrpWvocFOKE+9fgognORKOa7RKoJ5RNSmF04ZSFk1ebMXo+Z65OFjK6qPM6IKIGtYWUNZ91ygmUi7yF7jrEne6LEWUsnDalkh6m6RefJ0CiAiYDgwqgfc8P7ht2uHstVzSDSOgQsJ4ReINrsQZVw7KgogXy4iejQyuUWnY9nSVKpYqwDjYT6jz8fjlO2TukXMGu4KICmmCZZ5NC4xxJGXT6eXV+t10XNtwcC28eOYn/gWH+GICiC6l4V89aEWJmL7ZFNhAGqao30kqbHh38ibzu4IY1fhTgogYeG3M/H6vPdhh/SCS/HTOqnk/xBbFS71+dn17gWR3w4KIFDiC0OasoDmDw9OCKp+FTHB6DbLpTvTWDj85KlUGxGKCiDcyDjKiBluRd4nNY+UVpNs96JnoS2fKzayamakBxhldAog1qJjHeYbV3HfPHiqfNqAENzJB8nD3TbPJyVAJafcVL8KIMdQ/GQm+H+WhNN6irRoLwCACH1pBP6u5Db27EKX/74bCiAJRFL1e9nZBMqwJpzFP6inVl1pBwhpRbKWiQ9f1KLBAQogV82ViSVVo/9Qx68SL13atB8IB6r1PWZISInzq47VwSYKIGg4p0Twsg/AVXHPuCrvbKFjMmQpHRrh3SXPaQTWY9ZRCiBR4oqialT4kP0qEAlRt7G7bFKALuyBVQMTYuofXs7Arwog5Q6FAIn9X7YNzsDa36R88ub9n5+FhYhF/yaeigfayykKIJF8elrySQWBVJ6i4PE+v94XZm/LklqUpVwmn6ISbck5CiBG64JPXfrBOPNEbTc7VH0P/X38b1Pnk/BvvXtFqrSrLAogBubNYXvnrr6TGBaMXdbyrhGMppBf5/mtNxUXww1oTuQKIO/QUX95QQ7u0F5OQ6jHYTrunv534wVn+Yd57FvWdfjtCiBh8pDx8aJTCM7TeMdNYs9J+AJYw8DfskJfhBiA8F0xtwogi2DWR+cjrdPyX0CyxkHWZbB2pc+gvKZ9FbhaqTnhGXMKIMauFIo9HbKc+RLzA0eGByxemW+gCbHSzLAPm2jWGYpGCiAbgNkjNqHytzm6FHn9eZGewwHNugkPiweqIuve7tp8mAogId7VkBG7JeYJ0I71xQQrhCVpNZZerRxfz2eeAbmggmMKIFpj+o70PupYu5Al0mqqD65QKZG72nCeNVSVQKMeCLUqCiD2j8xJMagXJDF3E0RBwnCXCwxacOf/5lMsHl1wzzG/JQogn7ffeEgkvr+y22W5Wz6nTCdERy4ZmlXnPmdDEc3sRucKII2BGQAmyiIRugG+jvbaK1eU7VCi0gUeGQigRhI9a2k0CiCH1pUrT7nDhymY78zxVMwgPGJ0N87Q92PzToAvZ+SqjAogJ+wCDcUxYF9/6OV+G0hlyhKhpzKjXpXQjFWmSsudbQgKIH03IfhgV/aYgH4hD67gei+Lj95yQLgJ8uMa5TrQzWBvCiBykvNeT7VkM1Xl+RuJFN48T4AjlVkufDTWkcYzCyC8LQogOGWwK6PIfrgJ+rvPKtdeJ0YJjVHV+MPJQGorlzw8TgIKIK5nKRzo++4ew/5nvgOmQ493B9RLB2G5WIy1qKpcKZaBCiDdHedIf7gnSAbguxS3AK2AMHZpTlmjtQGvitw7v1Z+BQogWvZV3XRHYkYQsyo4VCxBTBNX2BmVBgiXUb7xBzfEEioKIECNTdifVdNrE1XD5wwq5x+saLJvPdsGn5RgBa4z0lj/CiAHtDNptnfyO1ubrMRh13mnUQBlA+ZRDsTQFRiiww+75wogW8oCL8Ozof3tqfVI6384GtuI3yyVkBh3oE75wUGIjvUKIImjhVK6+txRR6hWjIGVixq5v28wHXs98l9u2W08MQelCiC5If99RD8l0PZ220C8Lann66/L5SjKUybQ7XCjhw/+pwogknbf63l1KqB08fuJ2bbpU+nKQIVAOYnvBRNsmSZNxn4KIFjt8X+wHeBvYAGUYHUA0Qp16w1O2pa0a7qsonX8vsMDCiBK912FSgNcoQ4JRUSNvXMA5L60xrlsTyBleif4rbt0xwogKJRY/VHEje3FTHO2VfFqaKg+GLlE9JJaW2ivEKVUd/IKIAqEi4I6dZEmvAwVV2O9Bfr0/WVbzpsMt6Fc5cBIyBzTCiAgIHcqE00NRgL/v8kHu0ByYKwE7I3d1lJt8aSQIzKO/QogMhgmhR/+vO3+gVYf6nvbWcfRRssqeSsxbyaxvRpzmVwKIIlRqr+cH6CN3KuEEOLA+AdMKHeeg5I5jFjjERZoOabyCiDUoBXYYxkD2vPS0EOx2A9Lpwf6/IUXwplbXCee2nyGLwogcVe2sXWb5JAZRArOFUOviSLJpiEoVzvk7kHMYFQXsGoKIAT9JZGVPzfaMKTX6FzlCaPpmZuJJbeX7DWOoCvC6GN5CiDi/9qWOwe8QhaHDXqgsW1GNyecWT3wUEJgUmn2gck8zwog9l8axa77MtEXgbaN8/Thtr7U7t3+0CW6te0oRrv8AG4KILdlobKHOrt+6tfTR+EKtJxM8IBnIHoWIRXVH32Hg9bmCiCH7qmC2HVQQThKMHY57bca9RrWMCaE+xY2PiBSrD5Hqwog9+Tp3tKJNl5JCMK84C5EgmKFiLGO392E9Rsv2YnKiOUKIFsGa93DG1tOE9cyoS9TIIhTN2r0g/D7icnBnrM4bb9JCiCak9cylNElVWWri5oRKD6MzIqmdMnVuAhRj1JndVkPrQoghmxSzDdG+034Wn88maLsUIQOEHDJi8z0r/PAyDrkgv0KIFVu/W3RW3Xr72WDDTOZ7v7sKP70r1h/vrGfSus6SBC8CiBrwosrmpsA03sj+U8Z11qkDMnQWFPh//+/7HSPcX+ojgogsXh8+5YxqTKhOwDkZgVaqiArjVM0b1mPmNL/Js8Md2QKIAPDWLc7j2cwZEj05ON8Kx/GwX8/YHgsrAuD/dQipkyNCiBT1hkeweRq+xCOp/EpRnhSRFlY+BDaFYgKO8YNKhCMpQogI7BOHk/sk7NruQKMAr2dkODH+/p4DRuZgg4bzkUVTpwKIKLuXYLznmIM1MVPXg0S3pMsGInuSyqws+mCbQdc94X0CiBOvsnSdK32qWdYgkNIl8fjnrSE9JXP/DiZu5sIW67IJAogItrsD8LHyvfUA38sqxl5JbYRpWJ0sIS3Ytkwm8BE+akKILB+ZMyCdgfpFCQIVor5GVefRz8Adzrm7Hh/gcSVqEduCiDsR2bubrgKaNRzn9cgaWdCWNoFowHaZqEY0i5hZapmPQogApQ8PBTkKeqViQCxepN8QspylMYbR51p+5FKkpB8jZ4KIASqgQfpER2OgJlfxRfkGIDwcOHgOixygK2IZOhesL0bCiAWybchmNAp00M8UTuvFLxWxuaitF7M0hByL6LUeuguQAoguLLPLjxgjiwkEeRLeMGPcl+b97ADdfkon7OMdEO7YWQKIEnX6XTkA/jJr6cGUFYJEd0C6fEU7w1IOvyoQSHYhJXoCiDBa8qAPJN90ir0gTyJyiWlF9B0VsDLB9aJGnkD9wXB4wogwfb66whFoBf+/lu8p26qltTixP9kHISSujRbw5yuPm0KIHQWxUPw0QLwI5mD7bUeow/dMsKX8fjU7ZXavT3ei+zgCiAWe5LNTX1kkT8g1P0xa6c0+SfFekZSfAuHuHxqUyOciQogOqF5goCNK3RHoghGD4dag7DvCEzaRici3Gsac7DOe7IKIDqGW4lcS0Cok6MEUkIIUNoxOIqqSe+b4GeNHcsR1ZaCCiDhG6d5wa1HGzEtO06v6m97Z5Ub11juXFn1DT0Goai3lAogb2mr/g08AJQzl2Mrd5etrdhIdekMkvkmAKCZOh7x8MEKIJl77mj2tZzMwn1zIfCqBKt1j1qQvMOHcaQyfDw+44wrCiAdOEmk9GGX7Jydmt9yU4niK7k9UeraA0cTrRVc4/G8vgogZX5BAV0M752rTqOzB9H4jRHzwUzgehcLfoGmFm5CTVoKIHYM+yFG5JItRKuw7DL4qi1htlzJmdSXWQkThclNeJnkCiCRguwrO5f9OCoq5oChPe0/UjD05uap8zsdgvI64HJ/Tgog9/whei6ES3ictxvVWW1WRDnmtFLApRZsIsMqJecbiDcKIEZLxyH2bM5nCxdDLyQSh8gQBvBZmMXDniQhoWFMX4e5CiBU5RJxerb/+iKn7maPPjLZ4+WwqWHsd1TtpRw5s3JyUQogJygUPn8k/760SgNdGOURuLy9cRvEBsnAMAFZumxclW4KIHnAf6UY85qf8u0W5/QpKfD7U8pKkJhjK29RHC2joz/MCiC4Nv+40CLQ9zIe+0bvCJXiAExWlmIdRy0xFiI+NyamPgoghe7xEwWgqPWTz96CB2VdBxMtqIFld/OhJacP9AY2POwKIBIifqipbt4pNCDkXWJsO0zQVa85k5gM927WDBpI64HiCiA8rbxbx9y3r7zQxLzFT8y9ZUIdMwn77isdObg77xo2dAog9rhY83mtAW6D5fgpkiwp4j2THJNsWhNYzWAG5FUd21AKIA3+BxyJH8EiKuMgqAfszfmeJYVBJ6lvjaOJx4QxVUmGCiBRD3c0uJX/BoWygc9Uc1hrQFhvEV6AdziXwpK5Om5zZQog3gCWMa6ddvhqif1aX9O4xHV2WDt1imv/gv2en5NDdKkKIC2mH02H8VTLiglrUQ2bsboJRdmlyLkmGbWVQwbkckSoCiBWiejtCSmL35CAr+mmYeHTKUuZKdm+G6CYHXKTFFmMVwogrcsPhIU3vreIutsk+Gp6rpYZTl4eq+vleasJone4TNsKIGzBlv7Ap+IrSgE6kkN8qFOueEhcFrljC16Um0leETGfCiCEIS4Z0hlYHZZc+MfeBv1dwjmtjHxHHaLVHKCe9P82ggogz6t590azpWuWaEhWSLGy7uacRx1OqbBkr5q/GsYc/H4KIJpBN221I+/BsWge6ltP8/U/VpMN2eFyKGyDavSzrfBuCiA4Ku2tCNnVOIAKZ5VQny5oBhDr36DkPLePSdHBZUlXagogEyLm7NPRKOBKqJZvWnG+NVnP+yPM3hkOIxs8KxV7zCoKIMz97iljfaYtZ6LeCYH2Dw34WUlAgOQ548IgsOxrMjw+CiAmSgAgJhFAP/UZb93OpSgHJFlNIz1K4jnxE9g2lKi9AQog2OCl9cG+NJUAfNpZhtrHMBlrikuCwPRVIR18uS5N5DwKIHwQL3neD4tcbee40HPSdtTjHkV/4IQV7yRfIyVLv2LFCiB07S5DSfXlkjg7DBflHR8Vy8HIhOWONPlFPxObnyPLqQogrBLgtvcZwgG9F7TtkovroLcFy9aPkH+DVJ5k2U2nUHcKICpeNU/D/JvL07pCbR2hBuGy7C/pjPE9g6wmdJ3aLJfUCiBbkCza4widIhsb68ApfG/MyPC2Z8ACARtvAEV2HUm7QgogmWdZpE4fO4fq1bIL2ILXdwR0hoIpE3wZKDzQlQINqP4KINlqtWFeUqg0JOoGv3paoXqTNrywYP05ejvW49WQ5sGDCiBZt+u3ZzkHyHujhEKxT/D4Ok9YcRVb9hIl8E64J4aBCgogRWBwxYdc+0BVyCVNgn7Ik309TqaBg5JzFAGopCi7t4YKILUWXSx4Oixia19McR48UvKS3wv6XamF3kkbjfPQ7TOiCiBluXTyZ6Tv50XSKbNSjqHY10PfCCOhlCDjudrM/VvsggogIGER0Dn8FYeB9mIIudcR5t+MLH+2mw9b2cE6lYf2+vwKIOEkUgwgePYYmKjby5yTE/vX+XVRrNxiP4O/YC2m9SoYCiDB0bA3VlJMm4Fvrz7JBUf7c2mzyjZi35pWDEDLhPCvzQogAftyAJr1rYbXa3YlPP+nEmsX8GKT9XDAoo4hlo0lFc0KINW1DjHWTwJgAJou8K6yCGKXyhKtSIpDEYXFAhvbJhGfCiCWVyezCaYqegAoWHLBTg5PFYLbEUa/6ZR0SZZ8gT1+qgogeuZ+FOZhC3uXL/Y/PThMoeWFJ17ifrX+aqvIIkW9dWgKIJ2dBSePWY8bAlrDF2NCcntrH5bv2n4lLjp0wqHOXCeOCiCJ9wl/Z5ts5WuEE6AKJTjwUqNw/EAoVEG+SNaNS8sHuQogyeY7GuQiRDFNp9Qyz8LzYQCHfS9dYYVOfgMgGM3Qy8oKIP20dht6e6uyECU+bnKyjNsEGekxk1VczoRE4aDW9PUzCiDmx+42FfWJ0eNJmK94M1EPwKPaQSzSaojfuD7+O0YDCQogaZKxLcZxgp5yjSmVCg3KuaCTHrqjMiNub+I9NFrlsw8KID0dKKtALj6kJmTO3EQ4SALBNhw24vdoSah/FAaIsIO9CiA/H+ufjhKpEZLWfPvbQaHd6iKKJtj5aEiMXkHfblaXkQogFTlrIMEFeMhcOGRyKjr2yF8qqIMRbLewKhTnDM6Dfw0KIOvuXCoJQpka1DeZwT+CyINN/nxVogJYRMFI0DokM0z+CiChuiaTyNNLXiyuugQhzNkSarE+tfkSPeHBFSFW70LPoQogUNiKvJZIEqm0Gmc8mpg3T6tghA+/pMaHoppDq2ofcPAKIM30NE0l/TO8FRYumV8HNYlufqDnrnXy1vmxDqBxkmo0CiAJUgIaxsOcRVhpymkpvcizNfm2MrvHoelbPCYWUobCOAoglb4ZNpZfKk2l6im1jIb3vdwgCNhIBxj36OmG3uKAqP8KIOBkLsekoMXAZxCtKscVWvkDggfgrQMiOkYur4AOoKVhCiBtVIVGG7TDTbFcUkaMkuq+IXVyMdiaqcm1F0fjfEHeuQogUF0vkOATnpkxQ3Qv7NDUezhnbp43991zpNvQgCxSKlkaINxO1mAASJNWNOhTjWcoxuCR3e3K0J5QIOIq/MLBCvCQGiBSD6fAuEoa7XQAQ5uAYHkkCUv1u+VQPLu5F0YuuAUrvhog2+E0+z3+534DVVAOI859PrO5GB8u2DMU6Yll5kX3TFoaILJR5vltb91XhahBJnUE+gemLfx3duK2xQ88UTwF53O7KggIhdwGEIDNEEIgPttUWXruAIV0CU6bCjPyTvBX2h2c1N7TcI3LOLjFmqlCIAeebtxX5avSjsrEqQLYmzC4dAOCDmsmboiLWmdW7rKSQiDOKYHbz2BLB/z+cUukHma4RGvr5yBeLLqC8quW746DBkIgl6EWTy/qG27tD7qRB8YPj2uOVfvSuIJylv+WtcE+agFCIFmsbHAC/Zk50VDmXV4HkKnKPAAMHk3aZXDcw4B9x7qHQiB7fLjGQgnvkc6aQX6UudJWnk0SzUBhL76LyztKmQSB+0Igec+OHEZ/oXr3mGTfqx+sBGEQ5n1Zdycuz/grcPy/641CIFOgBeQ+iFn/kasiLeNjGs47kt/cBkN4yUtqJni8ZG0NQiBVM9zLpk/CXk5ZzMwIIksY7VKa6kikHNlukS3HAzW0MkIgb2OQ/AKARA0KRLNuIIRE3aFvwR241+GR/MCn3AMWUkFCIDr3zjGCIcd/mZZskQGGetoQYul1cGDNMH3D2gy+/0mCQiB6NhCGJa0U0r/r85LnlUezgs26X2U/GRIWZdf4TnBaKEIgSHoP09/mjDW4XFuIM1H5acFdOmle7VZ6h7CdUlnj7KVCIB0Blf3gOF+0PU72ys0w+EFq138mNx138yNkQ9ZTduScQiBhJ/cM+JxUb3yPV9oQjwqi9h5D/3FsSO+0451aqbpOgUIgAV9gNJexu3lBpVbvti51GDWDTh+XC12F9LvyqWUJapNCIN4RsxFMywdbvjmulefVdszlkRBSm5WldFewN6zFji2PQiDL70xtd/EumPb1j8vGYYw3wgEScAKK5UV9vmzv74sNV0IgxEK6UlFMR11JZt4dORoeKfXIP7YtJY3dv4pNtVJEC8pCIBAVhNV8KEaWLTE9fZZacM9e+gdk5wXMy35s/6hiU9GrQiBAxiqgLSo6iJjHrulKFCOX7zy+evCQtZUp/xK08DYRh0IgMm9lqdMZR7nqz065X3HUn0HpU3pE65RpQoEiYHKhoKtCIKW4fkm5k5SqmivymTOUYI+4gpZ0qJCxHF/XrYnaEz9jQiBrrqz5L7jUYcCEFCvPqozGZyyVljT9tUgRPN01I4c64kIgGPff/z1v9WoT+9ulYz9D+YNg5ENv2ozwLeZKk5iQTMJCIGzWJ/LDbq5ZfbZtuRLR8/g9pd4J0Pp6R6QwFqZav8U0QiDhzVQouzGfF1GpBleLRGznwejGT3I8N0h7VWWAgBPNXEIgwn6+g+pcsCGwM38yOAg6Wbjvb94DPDChS4PJUaIytFNCIMKN+fVEJNHs1yqg/TYcJ9zf/ZOey4JP7BNEwcdDFpXOQiB0MuY1C8q47DU4WPMJk5AXubZb42f4mHdPTX29uCfmSEIg10Su1Cvm6I/6eUU8QpHPVQy1J3qiir2gRahGhC5Tf8lCIO1YuK1t8qLtM/XMzYZziJ+vadMcoHcGGXgln1GBY+cVQiBkXO/obh/Wx1pwjTRczzPh+7HXeXs9cA7Qoi7H0+V1GkIgagHZOpu2Amquu6TyxOuYlWLq7xYxYMo9hfiTwidVUs1CIDOgU6Sx9xH1FzN8QRfJ+ApmfniG4ZkErN7qxZ2lp7RaQiDSsDeAyFBw7JUHUHiXUsqJq1nRNZ59I+F0Ikhz03X76kIgOH77v32geU2wQA9xpeOERK5l/Dk1U/dpQKWMPoNyHv5CIAiyaI5jUTmLmzqf/dLbQARFImC/fxTKD7XiykJmsolDQiA/sjkrizTE6N6Yst7IhbzgO8cmUXg1esDiVDezbQ6xgUIgSFEB8ek1XT+mCO2IS7RPHAizWuabYVMYUT596Vg+me1CIIWfEBq2BuvfC1uImj+66vAPsHBxOchgWvwlW+yVvtRIQiB4o2YrE0muIIcPhlm75k1mxUI7HKh5iV2F/5Bu1QZzW0IgUjFwCqkRoChn82pRmpeZpaHOxfS/K6l21QwsjnvECStCIOX6Ifu/jwdeJ4LvU06qRSwHtmqE1ZNEydR7Dwz/lD7vQiADbPaz1PP83/PdbsGNj2tTtMsTiyQNS1hwYB7BTe+WSUIg6kA/vBq94YVmJj0NpiSyLT+QbsuoLk96bI0PpO8RkolCIOPgkbC46Zs/C/GaHUtao6vN9515e5H4eHoqjO4L4Lu2QiCVK40wR7wCM8n/+wQs2N6yiLW5fff43de5+GnWIJApT0Ig9PgdPajKczWGP1UgI+RbrWxzItl6wKOgyj96u1GH2PVCIOHFEk2vPNpLSdLd2kpLWzKoOHxJujh4fX5hKil5yByLQiD/Zg4lP54byqUR7ZFB5BiTQ7HwNEnYCNParGlJs+8cxUIgztmrd2uzCWL9sqKlz1HmCRIyNGQgshEfvfGnIJbGjeVCIFV1hPNdD1593L6AnpUx3rqYQe2j4q7/TZaTabhMxPd2QiCuFLq4aTg2r4xGfJkWzqU3QF7EPXLbCtSYKCrs5cmp50IgFvdmpKTiHTOCkhuwMloGIi9bEycrgGH3wnbE8xBeIA9CIBocfykWcpFMUDSrXDSqEJ46vV1tmCJ8g7JOPOgu0aJzQiBOarP00k6XjE5EQGLGoBmcHqW9Nvy5vrSGfNVeGK/AwEIgCChIZKj9ZXfXI7DpNw0aSHd/XddtYXsuvMYSkr8yZatCIIeKlBb0+Z8DJBS4hLx5yPY/mYQUk9c2wjEzXYZzcvjdQiAeuNh1qRHaEDmGNLE6GWZRTe96Br6Rl0IFK0YRo56Z4UIgNsjknsdoKwb82m6CEtii/RRQ5sU9P/sFfmWsvah9dU9CICtFhaA3ZkYZ0i6D6VjuTdWlZ7LzUb9zB29IgFo/S7Y/QiDr+Wt8QokBty8s8CeNSG9Lf9l2fa94G0WkQ1JOeRRPE0Ig6ykQ2Qc1DB8gu7ay9lxNy1YW81Exaap0FAZ8O8mAePJCIJGY0Uk/Y6D4gtAUu9/8lFC3Afs+3LX63FQJh7MdaspoQiDao1D2QWx1Zorvh/Vt3ii99NpLldySpULFsGX80Nj9tUIgrsk1QZSQeiO8rwdVl16pyPu8v6UitbXIFtEluSINDeZCIGdFw9TIKrVScXS93e3bij5QVMtDtSSqX4zq5eHgv42BQiBIbHO6EfjIfDqAz7ifLEwNpGNXCu6WHvFmsbQR//JPRkIgUq1aoC8EXMGHnr81U4nepSrTyCXn+4x+dVMGajGLrCNCIPBBmKUBBQqEYiWe1jP237JXjm95wPhvFSSgkyv5Lux6QiDP9kQiAPMbpCIC1PwbA/TAc9juKKitcC95Q2O2Ldk1SEIgZ+7Y5kb32CZE8nSpcyAZDHzL2c/441R1KytNX5RYPnNCIKVP+uXWbl+JfLxamwHxwGaO36gjs9y+VIk1Zr0BKne0QiDsx6GLMiXaCx21rWl8z4gOF9Y+u0zCQZbCYU1mh15dv0Igtby5Yp2oVpJfE0SvSLWgSXF1u6VN415V4mV3vLbSb+9CIIfifjpI7ufuxYoe7GX6tENUz0ze2zjCetDw9S4fpUq+QiD39I7EDKr2D76OILyfCOufkXEOaFocGXNrNTnSqXBEe0IgBBg5PFGr+ppRZ/oTS0ohyLfOEkCkciOjjMoCXgDUUmNCIKIcZ8cUB4GYweYpql5cdY14zkQFir7taqPf1dUQolHQQiB825HkU1neFElgMCZKKWcyNpnNo9a6PZUJiozY9gZq6kIg9QGVNMP8H3baXvA5Yyf8JQqPAyoI0gGTJdhKyyZ4hvBCIF1IliEZkZHsK/eYKtL6JT84/MHnmEXfSe0HHB8AeyqUQiD4H6GMD7vysE7T3qlZbRIBgJCiE23MnbJ68Y+xA+2ZhkIgJtXFaLOFJKtiDR8K8yZl8kaD+BwtnJ8QxgjytIXPgp5CIEko0jzYZor3WsWYhHUAG/T4lSIYrem7lrg7ZIk0Wgb3QiCyhYttHcte1LZ0v9pmI7NDDIOa9n9lDAqL8O9sLR3g7kIgiQ7p5YNTP8Za5CNQ7pJ5SAh3lLJE+JibKbALLCr7bG5CIByP4BjRXa57jubNlbsIwVGCP5OeUqOGndBLBZK1qWxhSj9maWxlOi8vL2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHNQAWog8AhZvTilizSJel77KUlu3vB0GbBpCWLHOXmdjg83TC9qIBarT/ZaCnUMK4Cr/ax0wWM8aM+y633Gv8JHgVXoqE0daiDzup1QMBiIaL8nXC4W0gtXSH3ZKnba4dJUs1h2Qn0ddmogmp1qNHuWtv7slSu/W+tbY29KfHO5095H1gvtCXvtXdF6vwEKdy9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi90cml2eS1vcGVyYXRvci9wcm9kL2Rhc2hib2FyZHMvdHJpdnktY3JkLWRhc2hib2FyZC5qc29uEkQKIDpHr+YRBv+MG0nQGDPN3ko6YK4+rt8KsI8mwHgzP83PEiCfg4WH8C58lIK1Pt3LdYsEHES1e9CUSdtVMIw77C3mMHrAAQp4L2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL3RyaXZ5LW9wZXJhdG9yL3N0YWdlL2Rhc2hib2FyZHMvdHJpdnktY3JkLWRhc2hib2FyZC5qc29uEkQKIDpHr+YRBv+MG0nQGDPN3ko6YK4+rt8KsI8mwHgzP83PEiCfg4WH8C58lIK1Pt3LdYsEHES1e9CUSdtVMIw77C3mMHrGAQp+L2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL3RyaXZ5LW9wZXJhdG9yL3Byb2QvZGFzaGJvYXJkcy90cml2eS1jcmQtc2hhcmVkLWRhc2hib2FyZC5qc29uEkQKIPpGJLnAop3ynunlJxkIcK+WVOePIr27Dzq8WqbRvxTOEiDuiwNF4lHB6z7sqgEO2wITjYZ++ffE2uR+UVpnZ8AdAHrKAQqBAS9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi9jdXN0b20tYWRtaXNzaW9uLXBvbGljeS92YWx1ZXMvY2x1c3Rlci9hdGxhcy1hLXN0YWdlLWNsdXN0ZXIueWFtbBJECiAdtQ7JCcYHeH3rkPH04dXBRKns4hgpLCcky1JA244KgxIgHbUOyQnGB3h965Dx9OHVwUSp7OIYKSwnJMtSQNuOCoN6wwEKey9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi90cml2eS1vcGVyYXRvci9wcm9kL3RlbXBsYXRlcy90cml2eS1zZXJ2ZXIvc3RhdGVmdWxzZXQueWFtbBJECiDI0GHMUOTR2bXDUe+27+ANHGmqGMcT2fokC1gZjz4zOhIgyNBhzFDk0dm1w1Hvtu/gDRxpqhjHE9n6JAtYGY8+Mzp6xAEKfC9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi90cml2eS1vcGVyYXRvci9zdGFnZS90ZW1wbGF0ZXMvdHJpdnktc2VydmVyL3N0YXRlZnVsc2V0LnlhbWwSRAogyNBhzFDk0dm1w1Hvtu/gDRxpqhjHE9n6JAtYGY8+MzoSIMjQYcxQ5NHZtcNR77bv4A0caaoYxxPZ+iQLWBmPPjM6eqQBCn4vaG9tZS9ydXNsYW5waS9Eb2N1bWVudHMvcmVwb3MvbG1ydS0tZGV2b3BzLS1hcmdvY2QtYXBwcy9jb21tb24vdHJpdnktb3BlcmF0b3IvcHJvZC90ZW1wbGF0ZXMvcmVwb3J0LW1ldHJpY3MtcmVtb3RlLXdyaXRlLnlhbWwSIgogBJgicgIAQQVQ/N7c6pPya+b7u2662mFH4sKq1u7ACLV6pQEKfy9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi90cml2eS1vcGVyYXRvci9zdGFnZS90ZW1wbGF0ZXMvcmVwb3J0LW1ldHJpY3MtcmVtb3RlLXdyaXRlLnlhbWwSIgogBJgicgIAQQVQ/N7c6pPya+b7u2662mFH4sKq1u7ACLV6vgEKdi9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi90cml2eS1vcGVyYXRvci9zdGFnZS92YWx1ZXMvd2FzYXQtYS1zdGFnZS1jbHVzdGVyLnlhbWwSRAogClMigB575aFrAszwdVRGRTm8hQrTCz4ltIsI58qEjyUSIApTIoAee+WhawLM8HVURkU5vIUK0ws+JbSLCOfKhI8lepwBCnYvaG9tZS9ydXNsYW5waS9Eb2N1bWVudHMvcmVwb3MvbG1ydS0tZGV2b3BzLS1hcmdvY2QtYXBwcy9jb21tb24vdHJpdnktb3BlcmF0b3Ivc3RhZ2UvdmFsdWVzL2ZlbGlzLWEtc3RhZ2UtY2x1c3Rlci55YW1sEiIKILKl47AhZHJubPhPQHRzNAaHHI3lq0PK5BO9lrkOumdZerUBCm0vaG9tZS9ydXNsYW5waS9Eb2N1bWVudHMvcmVwb3MvbG1ydS0tZGV2b3BzLS1hcmdvY2QtYXBwcy9jb21tb24vdHJpdnktb3BlcmF0b3IvcHJvZC90ZW1wbGF0ZXMvZGVwbG95bWVudC55YW1sEkQKICJLA+R3Ywfxv+zZak0lnrNftPW/e+X/cznvCKD0F7dPEiAiSwPkd2MH8b/s2WpNJZ6zX7T1v3vl/3M57wig9Be3T3q2AQpuL2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL3RyaXZ5LW9wZXJhdG9yL3N0YWdlL3RlbXBsYXRlcy9kZXBsb3ltZW50LnlhbWwSRAogIksD5HdjB/G/7NlqTSWes1+09b975f9zOe8IoPQXt08SICJLA+R3Ywfxv+zZak0lnrNftPW/e+X/cznvCKD0F7dPerIBCmovaG9tZS9ydXNsYW5waS9Eb2N1bWVudHMvcmVwb3MvbG1ydS0tZGV2b3BzLS1hcmdvY2QtYXBwcy9jb21tb24vdHJpdnktb3BlcmF0b3IvcHJvZC90ZW1wbGF0ZXMvX2hlbHBlcnMudHBsEkQKIJJNLl8S3Z6207/W2AVgi17prupBQBntm3c0QUEY2Mz4EiBPT+/QnYc8WRqjeTRBfr9Y3cBfQDo/RrRDUYjQurwReHqzAQprL2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL3RyaXZ5LW9wZXJhdG9yL3N0YWdlL3RlbXBsYXRlcy9faGVscGVycy50cGwSRAoggG02aBXbFMLr+8ShpFycBOVovgU0ld1deHzmUic0N0USIE9P79CdhzxZGqN5NEF+v1jdwF9AOj9GtENRiNC6vBF4etcBCo4BL2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL2RlY2tob3VzZS1tb2R1bGVzL25hbWVzcGFjZS1jb25maWd1cmF0b3IvdGVtcGxhdGVzL25hbWVzcGFjZS1jb25maWd1cmF0b3IueWFtbBJECiDYq6JnJw+yrUtrsV3BLBG9bPq4yGA/npG2HzumoGD8OBIggpAZJjD5eHiC1mrQp9CzPhmRMlqLcuXbbpKkWAKV48J6vwEKdy9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi90cml2eS1vcGVyYXRvci9wcm9kL3RlbXBsYXRlcy9jb2xsZWN0b3IvZGVwbG95bWVudC55YW1sEkQKIBrZQGJYwDAcrjulOsqq7rGiwdHRLMZXDDDi7dCFAY2NEiAa2UBiWMAwHK47pTrKqu6xosHR0SzGVwww4u3QhQGNjXrAAQp4L2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL3RyaXZ5LW9wZXJhdG9yL3N0YWdlL3RlbXBsYXRlcy9jb2xsZWN0b3IvZGVwbG95bWVudC55YW1sEkQKIBrZQGJYwDAcrjulOsqq7rGiwdHRLMZXDDDi7dCFAY2NEiAa2UBiWMAwHK47pTrKqu6xosHR0SzGVwww4u3QhQGNjXq1AQptL2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL3RyaXZ5LW9wZXJhdG9yL3Byb2QvdmFsdWVzL3ZhbHVlcy1nbG9iYWwueWFtbBJECiBgTKp+9EQ/qL4p1GEh0dpCs7VMNqWg+Wpd+VQZ/s0q7hIgKY3wXaPb6T//ODfTHG9Tt9STtLGLNZpO9qlECnsIXph6tgEKbi9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi90cml2eS1vcGVyYXRvci9zdGFnZS92YWx1ZXMvdmFsdWVzLWdsb2JhbC55YW1sEkQKIGBMqn70RD+ovinUYSHR2kKztUw2paD5al35VBn+zSruEiC4A0ZAT1Fxgd33hkA4VWtNZ2bIH2NXtgWZp2PtEu73I3rHAQp/L2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL3RyaXZ5LW9wZXJhdG9yL3N0YWdlL2Rhc2hib2FyZHMvdHJpdnktY3JkLXNoYXJlZC1kYXNoYm9hcmQuanNvbhJECiDsJnSPjpyQ6sZv2I8aEh8XcnlQnuac7uglgxHL/qqzVxIgiBlGdoE4iEyBiy9bQTtVc2kNQv8sXGkz8bZq1qr8q1t60wEKigEvaG9tZS9ydXNsYW5waS9Eb2N1bWVudHMvcmVwb3MvbG1ydS0tZGV2b3BzLS1hcmdvY2QtYXBwcy9jb21tb24vZGVja2hvdXNlLW1vZHVsZXMvbmFtZXNwYWNlLWNvbmZpZ3VyYXRvci92YWx1ZXMvYXRsYXMtYS1zdGFnZS1jbHVzdGVyLnlhbWwSRAog9NVFlsFG9B7esX/pQ36t01v7o0eXJMZ1KzIIkfc0DY8SIPTVRZbBRvQe3rF/6UN+rdNb+6NHlyTGdSsyCJH3NA2PeooBCkIvaG9tZS9ydXNsYW5waS9Eb2N1bWVudHMvcmVwb3MvbG1ydS0tZGV2b3BzLS1hcmdvY2QtYXBwcy8ueWFtbGxpbnQSRAog8xRKanah9W34vhn26QwLQKO7V5CJWhL2XhzihT5VNxMSIBL605zHFzUsCIOlLeW4MYNtCNRKavpXwQ+PLpj0u+tXkgGKAS9ob21lL3J1c2xhbnBpLy5jdXJzb3IvcHJvamVjdHMvaG9tZS1ydXNsYW5waS1Eb2N1bWVudHMtcmVwb3MtbG1ydS1kZXZvcHMtYXJnb2NkLWFwcHMvYWdlbnQtdG9vbHMvNTQ5NjQ2MjQtN2Q4My00NjZiLWE2ZDgtN2E5ZjcxY2I4NDgwLnR4dJIBeC9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi90cml2eS1vcGVyYXRvci9zdGFnZS9kYXNoYm9hcmRzL3RyaXZ5LWNyZC1kYXNoYm9hcmQuanNvbpIBdi9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi90cml2eS1vcGVyYXRvci9wcm9kL3RlbXBsYXRlcy9jb2xsZWN0b3IvY29uZmlnbWFwLnlhbWySAYEBL2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL3RyaXZ5LW9wZXJhdG9yL3N0YWdlL2Rhc2hib2FyZHMvdHJpdnktY3JkLWV4cGxvcmVyLWRhc2hib2FyZC5qc29ukgFtL2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL3RyaXZ5LW9wZXJhdG9yL3Byb2QvdmFsdWVzL3ZhbHVlcy1nbG9iYWwueWFtbJIBay9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi90cml2eS1vcGVyYXRvci9zdGFnZS90ZW1wbGF0ZXMvX2hlbHBlcnMudHBskgFqL2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL3RyaXZ5LW9wZXJhdG9yL3Byb2QvdGVtcGxhdGVzL19oZWxwZXJzLnRwbJIBbi9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi90cml2eS1vcGVyYXRvci9zdGFnZS92YWx1ZXMvdmFsdWVzLWdsb2JhbC55YW1skgF4L2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL3RyaXZ5LW9wZXJhdG9yL3N0YWdlL3RlbXBsYXRlcy9jb2xsZWN0b3IvZGVwbG95bWVudC55YW1skgF3L2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL3RyaXZ5LW9wZXJhdG9yL3Byb2QvdGVtcGxhdGVzL2NvbGxlY3Rvci9kZXBsb3ltZW50LnlhbWySAXIvaG9tZS9ydXNsYW5waS9Eb2N1bWVudHMvcmVwb3MvbG1ydS0tZGV2b3BzLS1hcmdvY2QtYXBwcy9jb21tb24vZGVja2hvdXNlLW1vZHVsZXMvdmFsdWVzL2thbmctYS1zdGFnZS1jbHVzdGVyLnlhbWySAXQvaG9tZS9ydXNsYW5waS9Eb2N1bWVudHMvcmVwb3MvbG1ydS0tZGV2b3BzLS1hcmdvY2QtYXBwcy9jb21tb24vZGVja2hvdXNlLW1vZHVsZXMvdmFsdWVzL3Npcml1cy1hLXN0YWdlLWNsdXN0ZXIueWFtbJIBdS9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi9kZWNraG91c2UtbW9kdWxlcy92YWx1ZXMvc2V4dGFucy1hLXN0YWdlLWNsdXN0ZXIueWFtbJIBHi90bXAvdHJpdnktc3RhZ2UtcmVuZGVyZWQueWFtbJIBeS9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi90cml2eS1vcGVyYXRvci9zdGFnZS90ZW1wbGF0ZXMvZ3JhZmFuYS1jcmQtZGFzaGJvYXJkLnlhbWySAXgvaG9tZS9ydXNsYW5waS9Eb2N1bWVudHMvcmVwb3MvbG1ydS0tZGV2b3BzLS1hcmdvY2QtYXBwcy9jb21tb24vdHJpdnktb3BlcmF0b3IvcHJvZC90ZW1wbGF0ZXMvZ3JhZmFuYS1jcmQtZGFzaGJvYXJkLnlhbWySAXcvaG9tZS9ydXNsYW5waS9Eb2N1bWVudHMvcmVwb3MvbG1ydS0tZGV2b3BzLS1hcmdvY2QtYXBwcy9jb21tb24vdHJpdnktb3BlcmF0b3Ivc3RhZ2UvdGVtcGxhdGVzL2NvbGxlY3Rvci9jb25maWdtYXAueWFtbJIBdy9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi90cml2eS1vcGVyYXRvci9wcm9kL2Rhc2hib2FyZHMvdHJpdnktY3JkLWRhc2hib2FyZC5qc29ukgGMAS9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi9jdXN0b20tYWRtaXNzaW9uLXBvbGljeS90ZW1wbGF0ZXMvY29uc3RyYWludHRlbXBsYXRlLWFsbG93ZWQtaG9zdC1wYXRocy55YW1skgGEAS9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi9jdXN0b20tYWRtaXNzaW9uLXBvbGljeS90ZW1wbGF0ZXMvY29uc3RyYWludC1hbGxvd2VkLWhvc3QtcGF0aHMueWFtbJIBgQEvaG9tZS9ydXNsYW5waS9Eb2N1bWVudHMvcmVwb3MvbG1ydS0tZGV2b3BzLS1hcmdvY2QtYXBwcy9jb21tb24vY3VzdG9tLWFkbWlzc2lvbi1wb2xpY3kvdmFsdWVzL2NsdXN0ZXIvYXRsYXMtYS1zdGFnZS1jbHVzdGVyLnlhbWySAXEvaG9tZS9ydXNsYW5waS9Eb2N1bWVudHMvcmVwb3MvbG1ydS0tZGV2b3BzLS1hcmdvY2QtYXBwcy9jb21tb24vY3VzdG9tLWFkbWlzc2lvbi1wb2xpY3kvdmFsdWVzL3ZhbHVlcy1nbG9iYWwueWFtbJIBcy9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi9kZWNraG91c2UtbW9kdWxlcy92YWx1ZXMvYXRsYXMtYS1zdGFnZS1jbHVzdGVyLnlhbWySAXgvaG9tZS9ydXNsYW5waS9Eb2N1bWVudHMvcmVwb3MvbG1ydS0tZGV2b3BzLS1hcmdvY2QtYXBwcy9jb21tb24vZGVja2hvdXNlLW1vZHVsZXMvdGVtcGxhdGVzL2FkbWlzc2lvbi1wb2xpY3ktZW5naW5lLnlhbWySAYoBL2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL2RlY2tob3VzZS1tb2R1bGVzL25hbWVzcGFjZS1jb25maWd1cmF0b3IvdmFsdWVzL2F0bGFzLWEtc3RhZ2UtY2x1c3Rlci55YW1skgGJAS9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi9kZWNraG91c2UtbW9kdWxlcy9uYW1lc3BhY2UtY29uZmlndXJhdG9yL3ZhbHVlcy9taXJhLWItc3RhZ2UtY2x1c3Rlci55YW1skgGMAS9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi9kZWNraG91c2UtbW9kdWxlcy9uYW1lc3BhY2UtY29uZmlndXJhdG9yL3ZhbHVlcy95Yy10ZWNobm8tc3RhZ2UtY2x1c3Rlci55YW1skgGOAS9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi9kZWNraG91c2UtbW9kdWxlcy9uYW1lc3BhY2UtY29uZmlndXJhdG9yL3RlbXBsYXRlcy9uYW1lc3BhY2UtY29uZmlndXJhdG9yLnlhbWySAZIBL2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL2dyYWZhbmEtZGFzaGJvYXJkcy9kYXNoYm9hcmRzL21hcmZhay1iL3Byb2Qvb3ZlcnZpZXcvaHR0cC1zdGF0aXN0aWMtZGV0YWlsLXYxLmpzb26SAYoBL2hvbWUvcnVzbGFucGkvLmN1cnNvci9wcm9qZWN0cy9ob21lLXJ1c2xhbnBpLURvY3VtZW50cy1yZXBvcy1sbXJ1LWRldm9wcy1hcmdvY2QtYXBwcy9hZ2VudC10b29scy9hMTY5ZGJjNy00ZjFiLTQ3NTEtYmFhMi1kMmY1YWMxYzIwNWIudHh0kgGEAS9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi90cml2eS1vcGVyYXRvci9zdGFnZS90ZW1wbGF0ZXMvY29uZmlnbWFwcy90cml2eS1vcGVyYXRvci1jb25maWcueWFtbJIBgwEvaG9tZS9ydXNsYW5waS9Eb2N1bWVudHMvcmVwb3MvbG1ydS0tZGV2b3BzLS1hcmdvY2QtYXBwcy9jb21tb24vdHJpdnktb3BlcmF0b3IvcHJvZC90ZW1wbGF0ZXMvY29uZmlnbWFwcy90cml2eS1vcGVyYXRvci1jb25maWcueWFtbJIBdi9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi90cml2eS1vcGVyYXRvci9zdGFnZS90ZW1wbGF0ZXMvc3BlY3MvazhzLWNpcy0xLjIzLnlhbWySAY0BL2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL3RyaXZ5LW9wZXJhdG9yL3Byb2QvY3Jkcy9hcXVhc2VjdXJpdHkuZ2l0aHViLmlvX2NsdXN0ZXJjb21wbGlhbmNlcmVwb3J0cy55YW1skgF2L2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL3RyaXZ5LW9wZXJhdG9yL3N0YWdlL3ZhbHVlcy9hdGxhcy1hLXN0YWdlLWNsdXN0ZXIueWFtbJIBaC9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi90cml2eS1vcGVyYXRvci9zdGFnZS9nZW5lcmF0ZWQvcm9sZS55YW1skgFCL2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvLnlhbWxsaW50kgF3L2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL3RyaXZ5LW9wZXJhdG9yL3N0YWdlL3ZhbHVlcy9jcmF0ZXItYS1zdGFnZS1jbHVzdGVyLnlhbWySAV8vaG9tZS9ydXNsYW5waS9Eb2N1bWVudHMvcmVwb3MvbG1ydS0tZGV2b3BzLS1hcmdvY2QtYXBwcy9jb21tb24vdHJpdnktb3BlcmF0b3Ivc3RhZ2UvQ2hhcnQueWFtbJIBgAEvaG9tZS9ydXNsYW5waS9Eb2N1bWVudHMvcmVwb3MvbG1ydS0tZGV2b3BzLS1hcmdvY2QtYXBwcy9jb21tb24vcHJvbWV0aGV1cy1yZW1vdGUtd3JpdGUvc3RhZ2UvdGVtcGxhdGVzL1ZpY3RvcmlhUmVtb3RlV3JpdGUueWFtbJIBgQEvaG9tZS9ydXNsYW5waS9Eb2N1bWVudHMvcmVwb3MvbG1ydS0tZGV2b3BzLS1hcmdvY2QtYXBwcy9jb21tb24vcHJvbWV0aGV1cy1yZW1vdGUtd3JpdGUvc3RhZ2UvdmFsdWVzL3NleHRhbnMtYS1zdGFnZS1jbHVzdGVyLnlhbWySAX8vaG9tZS9ydXNsYW5waS9Eb2N1bWVudHMvcmVwb3MvbG1ydS0tZGV2b3BzLS1hcmdvY2QtYXBwcy9jb21tb24vcHJvbWV0aGV1cy1yZW1vdGUtd3JpdGUvcHJvZC92YWx1ZXMvc2V4dGFucy1hLXByb2QtY2x1c3Rlci55YW1skgGGAS9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi9wcm9tZXRoZXVzLXJlbW90ZS13cml0ZS9zdGFnZS92YWx1ZXMveWMtb2JzLW1ldHJpY3Mtc3RhZ2UtY2x1c3Rlci55YW1skgF9L2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL3Byb21ldGhldXMtcmVtb3RlLXdyaXRlL3Byb2QvdmFsdWVzL3BheW1lbnQtcHJvZC1jbHVzdGVyLnlhbWySAX8vaG9tZS9ydXNsYW5waS9Eb2N1bWVudHMvcmVwb3MvbG1ydS0tZGV2b3BzLS1hcmdvY2QtYXBwcy9jb21tb24vcHJvbWV0aGV1cy1yZW1vdGUtd3JpdGUvc3RhZ2UvdmFsdWVzL3dlemVuLWEtc3RhZ2UtY2x1c3Rlci55YW1skgF+L2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL3Byb21ldGhldXMtcmVtb3RlLXdyaXRlL3Byb2QvdmFsdWVzL3Npcml1cy1hLXByb2QtY2x1c3Rlci55YW1skgF/L2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL3Byb21ldGhldXMtcmVtb3RlLXdyaXRlL3Byb2QvdmFsdWVzL3ljLXRlY2huby1wcm9kLWNsdXN0ZXIueWFtbJIBHC90bXAvdHJpdnktc3RhZ2UtcmVuZGVyLnlhbWySARsvdG1wL3RyaXZ5LXByb2QtcmVuZGVyLnlhbWySAX8vaG9tZS9ydXNsYW5waS9Eb2N1bWVudHMvcmVwb3MvbG1ydS0tZGV2b3BzLS1hcmdvY2QtYXBwcy9jb21tb24vdHJpdnktb3BlcmF0b3Ivc3RhZ2UvdGVtcGxhdGVzL3JlcG9ydC1tZXRyaWNzLXJlbW90ZS13cml0ZS55YW1skgF+L2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL3RyaXZ5LW9wZXJhdG9yL3Byb2QvdGVtcGxhdGVzL3JlcG9ydC1tZXRyaWNzLXJlbW90ZS13cml0ZS55YW1skgF+L2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL3RyaXZ5LW9wZXJhdG9yL3Byb2QvZGFzaGJvYXJkcy90cml2eS1jcmQtc2hhcmVkLWRhc2hib2FyZC5qc29ukgF/L2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL3RyaXZ5LW9wZXJhdG9yL3N0YWdlL2Rhc2hib2FyZHMvdHJpdnktY3JkLXNoYXJlZC1kYXNoYm9hcmQuanNvbpIBdS9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi90cml2eS1vcGVyYXRvci9zdGFnZS90ZW1wbGF0ZXMvY29sbGVjdG9yL3NlcnZpY2UueWFtbJIBdi9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi90cml2eS1vcGVyYXRvci9zdGFnZS92YWx1ZXMvcG9saXMtYi1zdGFnZS1jbHVzdGVyLnlhbWySAXMvaG9tZS9ydXNsYW5waS9Eb2N1bWVudHMvcmVwb3MvbG1ydS0tZGV2b3BzLS1hcmdvY2QtYXBwcy9jb21tb24vdHJpdnktb3BlcmF0b3Ivc3RhZ2UvdmFsdWVzL2RhY2Mtc3RhZ2UtY2x1c3Rlci55YW1skgF2L2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL3RyaXZ5LW9wZXJhdG9yL3N0YWdlL3ZhbHVlcy93YXNhdC1hLXN0YWdlLWNsdXN0ZXIueWFtbJIBbi9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi90cml2eS1vcGVyYXRvci9zdGFnZS90ZW1wbGF0ZXMvZGVwbG95bWVudC55YW1skgF8L2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL3RyaXZ5LW9wZXJhdG9yL3N0YWdlL3RlbXBsYXRlcy90cml2eS1zZXJ2ZXIvc3RhdGVmdWxzZXQueWFtbJIBdy9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi90cml2eS1vcGVyYXRvci9zdGFnZS90ZW1wbGF0ZXMvY29uZmlnbWFwcy9vcGVyYXRvci55YW1skgFtL2hvbWUvcnVzbGFucGkvRG9jdW1lbnRzL3JlcG9zL2xtcnUtLWRldm9wcy0tYXJnb2NkLWFwcHMvY29tbW9uL3RyaXZ5LW9wZXJhdG9yL3Byb2QvdGVtcGxhdGVzL2RlcGxveW1lbnQueWFtbJIBey9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi90cml2eS1vcGVyYXRvci9wcm9kL3RlbXBsYXRlcy90cml2eS1zZXJ2ZXIvc3RhdGVmdWxzZXQueWFtbJIBdi9ob21lL3J1c2xhbnBpL0RvY3VtZW50cy9yZXBvcy9sbXJ1LS1kZXZvcHMtLWFyZ29jZC1hcHBzL2NvbW1vbi90cml2eS1vcGVyYXRvci9zdGFnZS92YWx1ZXMvZmVsaXMtYS1zdGFnZS1jbHVzdGVyLnlhbWw=",
"queueItems": [],
"blobEncryptionKey": "4zgGIVdqr4ul7LyNe2fS9VKbyg3bc5tcwO6xwLH3Wkk=",
"latestChatGenerationUUID": "2cc4fdeb-702d-4dc4-9362-2671f856cb28",
"isAgentic": true,
"subtitle": "Edited trivy-crd-dashboard.json, trivy-crd-dashboard.json, trivy-crd-shared-dashboard.json, atlas-a-stage-cluster.yaml, statefulset.yaml",
"filesChangedCount": 12,
"firstTodoWriteBubble": "e66abef3-9294-406a-9e57-1afb1a1bed63"
}