From 4c64eac61570b4cfd4e77766639f144a8a93f713 Mon Sep 17 00:00:00 2001
From: vegbir <yangjiaqi16@huawei.com>
Date: Sat, 10 Jun 2023 11:41:04 +0800
Subject: [PATCH 04/13] rubik: add psi design documentation

Signed-off-by: vegbir <yangjiaqi16@huawei.com>
---
 CHANGELOG/CHANGELOG-2.0.0.md        | 29 +++++++--
 docs/design/psi.md                  | 94 +++++++++++++++++++++++++++++
 docs/images/psi/PSI_designation.svg | 16 +++++
 docs/images/psi/PSI_implement.svg   |  4 ++
 4 files changed, 139 insertions(+), 4 deletions(-)
 create mode 100644 docs/design/psi.md
 create mode 100644 docs/images/psi/PSI_designation.svg
 create mode 100644 docs/images/psi/PSI_implement.svg

diff --git a/CHANGELOG/CHANGELOG-2.0.0.md b/CHANGELOG/CHANGELOG-2.0.0.md
index 5cc2cb8..b46fa3d 100644
--- a/CHANGELOG/CHANGELOG-2.0.0.md
+++ b/CHANGELOG/CHANGELOG-2.0.0.md
@@ -1,16 +1,37 @@
-1. Architecture optimization:
+# CHANGELOG
+
+## v2.0.1
+
+### New Feature
+
+Before June 30, 2023
+
+1. **dynMemory** (asynchronous memory classification recovery): implement fssr strategy
+2. **psi**: interference detection based on PSI index
+3. **quotaTurbo**: elastic cpu limit user mode solution
+
+## v2.0.0
+
+### Architecture optimization
+
 refactor rubik through `informer-podmanager-services` mechanism, decoupling modules and improving performance
-2. Interface change:
+
+### Interface change
+
 - configuration file changes
 - use the list-watch mechanism to get the pod instead of the http interface
-3. Feature enhancements:
+
+### Feature enhancements
+
 - support elastic cpu limit user mode scheme-quotaturbo
 - support psi index observation
 - support memory asynchronous recovery feature (fssr optimization)
 - support memory access bandwidth and LLC limit
 - optimize the absolute preemption
 - optimize the elastic cpu limiting kernel mode scheme-quotaburst
-4. Other optimizations:
+
+### Other optimizations
+
 - document optimization
 - typo fix
 - compile option optimization
diff --git a/docs/design/psi.md b/docs/design/psi.md
new file mode 100644
index 0000000..674a8e0
--- /dev/null
+++ b/docs/design/psi.md
@@ -0,0 +1,94 @@
+# 【需求设计】基于PSI指标的干扰检测
+
+## 需求设计图
+
+![PSI_designation](../images/psi/PSI_designation.svg)
+
+## 实现思路
+
+### PSI简介
+
+PSI是Pressure Stall Information的简称，用于评估当前系统三大基础硬件资源CPU、Memory、IO的压力。顾名思义，当进程无法获得运行所需的资源时将会产生停顿，PSI就是衡量进程停顿时间长度的度量标准。
+
+### 使能cgroupv1 psi特性
+
+首先，检查是否开启cgroup v1的PSI。两种方法，看看文件是否存在或者查看内核启动命令行是否包含psi相关选项。
+
+```bash
+cat /proc/cmdline | grep "psi=1 psi_v1=1"
+```
+
+若无，则新增内核启动命令行
+
+```bash
+# 查看内核版本号
+uname -a
+# Linux openEuler 5.10.0-136.12.0.86.oe2203sp1.x86_64 #1
+# 找到内核的boot文件
+ls /boot/vmlinuz-5.10.0-136.12.0.86.oe2203sp1.x86_64 
+# 新增参数
+grubby --update-kernel="/boot/vmlinuz-5.10.0-136.12.0.86.oe2203sp1.x86_64" --args="psi=1 psi_v1=1"
+# 重启
+reboot
+```
+
+随后便可以在cgroup v1中使用psi的三个文件观测数据。
+例如，在`/sys/fs/cgroup/cpu,cpuacct/kubepods/burstable/<PodUID>/<container-longid>`目录下，涉及如下文件：
+
+- cpu.pressure
+- memory.pressure
+- io.pressure
+
+### 方案流程
+
+针对PSI格式数据，使用`some avg10`作为观测指标。它表示任一任务在10s内的平均阻塞时间占比。
+
+用户通过配置阈值保障在线Pod的资源可用以及高性能。具体来说，当阻塞占比超过某一阈值（默认为5%），则rubik按照一定策略驱逐离线Pod，释放相应资源。
+
+在离线业务由注解`volcano.sh/preemptable="true"/"false"`标识。
+
+```yaml
+annotations:
+    volcano.sh/preemptable: true
+```
+
+在线Pod的CPU和内存利用率偏高，rubik会驱逐当前占用CPU资源/内存资源最多的离线业务。若离线业务I/O高，则会选择驱逐CPU资源占用最多的离线业务。
+> 注1：当前cgroup控制io带宽手段有效，难以精准判断驱逐哪个业务会降低io，因此暂时采用CPU利用率作为标准。
+>
+> 注2：通过cadvisor库实时获取离线业务的CPU利用率、内存占用量、IO带宽等信息，按指标从大到小排序。
+
+需要处理可疑对象时则通过责任链设计模式传递事件处理请求，并执行相应操作。
+
+## 实现设计
+
+![PSI_implement](../images/psi/PSI_implement.svg)
+
+## 接口设计
+
+```yaml
+data:
+  config.json: |
+    {
+      "agent": {
+        "enabledFeatures": [
+          "psi"
+        ]
+      },
+      "psi": {
+        "resource": [
+          "cpu",
+          "memory",
+          "io",
+        ],
+        "interval": 10
+      }
+    }
+```
+
+`psi`字段用于标识基于psi指标的干扰检测特性配置。目前，psi特性支持监测CPU、内存和I/O资源，用户可以按需配置该字段，单独或组合监测资源的PSI取值。
+
+| 配置键[=默认值] | 类型       | 描述                             | 可选值      |
+| --------------- | ---------- | -------------------------------- | ----------- |
+| interval=10 |int|psi指标监测间隔（单位：秒）| [10,30]|
+| resource=[]     | string数组 | 资源类型，声明何种资源需要被访问 | cpu, memory, io |
+| avg10Threshold=5.0     | float | psi some类型资源平均10s内的压制百分比阈值（单位：%），超过该阈值则驱逐离线业务 | [5.0,100]|
diff --git a/docs/images/psi/PSI_designation.svg b/docs/images/psi/PSI_designation.svg
new file mode 100644
index 0000000..8b829e8
--- /dev/null
+++ b/docs/images/psi/PSI_designation.svg
@@ -0,0 +1,16 @@
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1348.1945190429688 1007.3749847412109" width="1348.1945190429688" height="1007.3749847412109" filter="invert(93%) hue-rotate(180deg)">
+  <!-- svg-source:excalidraw -->
+  
+  <defs>
+    <style class="style-fonts">
+      @font-face {
+        font-family: "Virgil";
+        src: url("https://excalidraw.com/Virgil.woff2");
+      }
+      @font-face {
+        font-family: "Cascadia";
+        src: url("https://excalidraw.com/Cascadia.woff2");
+      }
+    </style>
+  </defs>
+  <rect x="0" y="0" width="1348.1945190429688" height="1007.3749847412109" fill="#ffffff"/><g stroke-linecap="round" transform="translate(130.611083984375 10) rotate(0 49 20.5)"><path d="M10.25 0 M10.25 0 C28.3 -2.22, 41.02 -1.56, 87.75 0 M10.25 0 C41.81 0.02, 72.45 -1.44, 87.75 0 M87.75 0 C93.66 -1.68, 97.97 4.19, 98 10.25 M87.75 0 C93.97 -1.69, 96.77 2.23, 98 10.25 M98 10.25 C98.22 18.12, 98.06 26.67, 98 30.75 M98 10.25 C97.81 17.25, 97.4 25.59, 98 30.75 M98 30.75 C98.76 36.53, 96.26 41.35, 87.75 41 M98 30.75 C95.89 39.86, 93.88 38.92, 87.75 41 M87.75 41 C72.63 39.3, 55.58 41.37, 10.25 41 M87.75 41 C69.77 41.35, 53.94 41.69, 10.25 41 M10.25 41 C3.16 42.81, 0.73 35.99, 0 30.75 M10.25 41 C5.18 40.02, -1.6 39.7, 0 30.75 M0 30.75 C-1.8 26.73, -1.46 20.84, 0 10.25 M0 30.75 C-0.64 25.32, 0.15 20.57, 0 10.25 M0 10.25 C1.75 3.72, 2.7 0.66, 10.25 0 M0 10.25 C-1.57 5.24, 2.35 0.94, 10.25 0" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(158.611083984375 19) rotate(0 21 11.5)"><text x="21" y="18" font-family="Helvetica, Segoe UI Emoji" font-size="20px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr">开始</text></g><g stroke-linecap="round" transform="translate(10.52783203125 272.54173278808594) rotate(0 167.5 51)"><path d="M25.5 0 M25.5 0 C102.23 1.4, 175.02 2.64, 309.5 0 M25.5 0 C101.89 1.59, 179.27 1.13, 309.5 0 M309.5 0 C328.43 0.51, 333.43 9.99, 335 25.5 M309.5 0 C327.13 -1.89, 335.31 9.67, 335 25.5 M335 25.5 C335.67 41.65, 336.47 60.15, 335 76.5 M335 25.5 C334.53 36.69, 334.47 49.47, 335 76.5 M335 76.5 C333.35 93.45, 325.87 101.41, 309.5 102 M335 76.5 C336.32 91.88, 326.66 102.2, 309.5 102 M309.5 102 C200.46 102.84, 91.48 103.54, 25.5 102 M309.5 102 C237.27 102.83, 164.87 103.44, 25.5 102 M25.5 102 C7.62 103.31, -0.35 95.1, 0 76.5 M25.5 102 C8.01 101.64, 0.32 91.85, 0 76.5 M0 76.5 C1.44 56.76, 0.02 38.05, 0 25.5 M0 76.5 C-0.69 61.46, 0.54 47.4, 0 25.5 M0 25.5 C-0.76 8.89, 8.59 1.26, 25.5 0 M0 25.5 C-0.06 7.1, 10.4 -0.3, 25.5 0" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(70.02783203125 300.54173278808594) rotate(0 108 23)"><text x="108" y="18" font-family="Helvetica, Segoe UI Emoji" font-size="20px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr">遍历在线Pod列表</text><text x="108" y="41" font-family="Helvetica, Segoe UI Emoji" font-size="20px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr">读取并解析Pod PSI指标</text></g><g stroke-linecap="round" transform="translate(10.5833740234375 112.263916015625) rotate(0 167 51)"><path d="M25.5 0 M25.5 0 C96.35 0.78, 167.13 1, 308.5 0 M25.5 0 C104.04 2.22, 181.65 0.88, 308.5 0 M308.5 0 C324.28 -1.89, 335.64 8.69, 334 25.5 M308.5 0 C327.29 -1.41, 336.11 8.11, 334 25.5 M334 25.5 C335.47 39.31, 332.59 50.78, 334 76.5 M334 25.5 C334.37 44.3, 333.82 62.76, 334 76.5 M334 76.5 C335.88 92.21, 327.02 100.05, 308.5 102 M334 76.5 C334.52 91.59, 324.31 103.95, 308.5 102 M308.5 102 C228.63 102.84, 148.86 101.45, 25.5 102 M308.5 102 C249.17 102.01, 189.79 101.17, 25.5 102 M25.5 102 C10.08 102.34, -1.32 92.32, 0 76.5 M25.5 102 C6.56 101.39, -2.07 93.74, 0 76.5 M0 76.5 C0.83 62.92, 1.7 46.63, 0 25.5 M0 76.5 C0.39 61.78, 0.97 46.06, 0 25.5 M0 25.5 C-1.92 7.82, 8.15 -0.27, 25.5 0 M0 25.5 C1.7 7.13, 7.63 2.03, 25.5 0" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(17.5833740234375 117.263916015625) rotate(0 160 46)"><text x="160" y="18" font-family="Helvetica, Segoe UI Emoji" font-size="20px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr">是否支持cgroupV1 PSI接口？</text><text x="160" y="41" font-family="Helvetica, Segoe UI Emoji" font-size="20px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr">/sys/fs/cgroup/cpuacct/cpu.pressure</text><text x="160" y="64" font-family="Helvetica, Segoe UI Emoji" font-size="20px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr">...io.pressure  </text><text x="160" y="87" font-family="Helvetica, Segoe UI Emoji" font-size="20px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr">...memory.pressure</text></g><g stroke-linecap="round" transform="translate(11.166748046875 434.31944274902344) rotate(0 174 51)"><path d="M25.5 0 M25.5 0 C141.86 -1.5, 256.46 -0.74, 322.5 0 M25.5 0 C104.69 -1.37, 184.43 -0.65, 322.5 0 M322.5 0 C340.91 -0.41, 347.09 8.82, 348 25.5 M322.5 0 C339.03 1.84, 346.93 9.12, 348 25.5 M348 25.5 C347.09 35.43, 346.67 46.86, 348 76.5 M348 25.5 C348.64 41.63, 347.7 58.14, 348 76.5 M348 76.5 C348.99 93.49, 340.63 103.04, 322.5 102 M348 76.5 C348.78 95.2, 340.13 102.44, 322.5 102 M322.5 102 C225.34 100.91, 127.9 101.61, 25.5 102 M322.5 102 C239.48 103.2, 156.32 104.19, 25.5 102 M25.5 102 C7.98 103.63, 0.68 94.71, 0 76.5 M25.5 102 C8.62 100.87, -1.15 94.15, 0 76.5 M0 76.5 C0.13 59.95, 1.01 46.12, 0 25.5 M0 76.5 C-0.17 59.14, -0.35 42.37, 0 25.5 M0 25.5 C-0.56 7.04, 10.2 -1.79, 25.5 0 M0 25.5 C2.05 8.98, 9.35 1.87, 25.5 0" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(18.166748046875 462.31944274902344) rotate(0 167 23)"><text x="167" y="18" font-family="Helvetica, Segoe UI Emoji" font-size="20px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr">标记PSI指标最大值分别为cpu_max、</text><text x="167" y="41" font-family="Helvetica, Segoe UI Emoji" font-size="20px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr">mem_max、io_max</text></g><g stroke-linecap="round" transform="translate(12.4166259765625 618.6249694824219) rotate(0 175 40)"><path d="M20 0 M20 0 C90.16 -1.94, 163.31 -0.31, 330 0 M20 0 C102.24 0.43, 185.71 0.72, 330 0 M330 0 C341.85 1.09, 351.39 5.65, 350 20 M330 0 C344.39 0.54, 349.56 7.76, 350 20 M350 20 C351.96 31.57, 351.2 41.11, 350 60 M350 20 C349.63 31.23, 349.46 44.1, 350 60 M350 60 C351.12 75.11, 342.86 81.39, 330 80 M350 60 C351.43 74.39, 344.74 80.64, 330 80 M330 80 C247.86 80.53, 166.17 79.88, 20 80 M330 80 C257.15 81.81, 184.63 80.94, 20 80 M20 80 C8.42 79.45, 1.19 73.96, 0 60 M20 80 C4.44 80.35, 0.31 72.15, 0 60 M0 60 C1.98 52.1, -0.04 45.16, 0 20 M0 60 C-0.21 49.7, 0.69 38.28, 0 20 M0 20 C-1.1 5.1, 5.34 -1.58, 20 0 M0 20 C-1.16 6.97, 8.06 0.29, 20 0" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(77.4166259765625 647.1249694824219) rotate(0 110 11.5)"><text x="110" y="18" font-family="Helvetica, Segoe UI Emoji" font-size="20px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr">cpu_max &gt;= threshold？</text></g><g stroke-linecap="round" transform="translate(10.97222900390625 769.9583282470703) rotate(0 176.5 40)"><path d="M20 0 M20 0 C107.63 -1.04, 192.65 -1.27, 333 0 M20 0 C105 -1.27, 191.11 -2.51, 333 0 M333 0 C344.6 0.73, 353.98 8.64, 353 20 M333 0 C347.69 -1.49, 352.5 6.67, 353 20 M353 20 C354.3 30.7, 354.78 45.19, 353 60 M353 20 C353.95 32.75, 353.11 47.34, 353 60 M353 60 C354.75 74.55, 346.86 78.38, 333 80 M353 60 C353.24 73.95, 345.5 81.97, 333 80 M333 80 C270.06 77.4, 206.38 77.14, 20 80 M333 80 C269.07 81.29, 205.64 81.31, 20 80 M20 80 C5.81 79.69, -1.15 74.54, 0 60 M20 80 C6.83 77.94, -1.39 71.22, 0 60 M0 60 C0.55 49.52, -0.69 41.67, 0 20 M0 60 C0.32 50.7, 0.07 42.06, 0 20 M0 20 C-0.92 8.25, 5.67 -1.77, 20 0 M0 20 C1.11 5.89, 8.42 -1.95, 20 0" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(71.47222900390625 798.4583282470703) rotate(0 116 11.5)"><text x="116" y="18" font-family="Helvetica, Segoe UI Emoji" font-size="20px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr">mem_max &gt;= threshold？</text></g><g stroke-linecap="round" transform="translate(10 916.6804962158203) rotate(0 175.5 40)"><path d="M20 0 M20 0 C136 -1.93, 252.41 -0.85, 331 0 M20 0 C114.86 0.97, 211.17 1.59, 331 0 M331 0 C344.97 -0.55, 350.39 8.2, 351 20 M331 0 C342.71 -0.37, 353.3 7.25, 351 20 M351 20 C350.08 33.08, 350.01 41.22, 351 60 M351 20 C350.02 34, 351.84 47.19, 351 60 M351 60 C349.89 74.14, 344.49 79.73, 331 80 M351 60 C350.53 74.99, 342.54 80.4, 331 80 M331 80 C209.13 79.25, 89.41 80.22, 20 80 M331 80 C209.82 82.07, 88.43 81.56, 20 80 M20 80 C5.63 80.75, 1.25 73.15, 0 60 M20 80 C8.89 79.61, 0.22 75.62, 0 60 M0 60 C0.59 46.44, 2.02 32.32, 0 20 M0 60 C-0.81 50.07, -1.11 37.86, 0 20 M0 20 C-0.32 7.39, 7 -0.34, 20 0 M0 20 C-0.48 5.66, 5.6 -0.43, 20 0" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(84 945.1804962158203) rotate(0 101.5 11.5)"><text x="101.5" y="18" font-family="Helvetica, Segoe UI Emoji" font-size="20px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr">io_max &gt;= threshold？</text></g><g stroke-linecap="round" transform="translate(449.55560302734375 615.8472442626953) rotate(0 188.5 40)"><path d="M20 0 M20 0 C100.47 -0.06, 179.91 -1.45, 357 0 M20 0 C154.16 1.53, 288.97 1.86, 357 0 M357 0 C369.16 1.23, 375.45 5.17, 377 20 M357 0 C370.03 -2.3, 377.67 7.17, 377 20 M377 20 C379.03 32.08, 379.02 48.54, 377 60 M377 20 C377.31 35.48, 376.56 50.29, 377 60 M377 60 C378.66 74.52, 370.72 81.5, 357 80 M377 60 C375.34 75.01, 368.06 78.94, 357 80 M357 80 C256.23 82.01, 154.98 80.67, 20 80 M357 80 C226.93 77.54, 95.89 77.4, 20 80 M20 80 C6.57 80.07, -1.74 72.29, 0 60 M20 80 C6.47 78.48, -1.25 71.1, 0 60 M0 60 C1.23 50.97, -1.13 42.61, 0 20 M0 60 C-0.47 50.8, 0.44 40.42, 0 20 M0 20 C-0.95 8.06, 5.56 0.32, 20 0 M0 20 C1.38 6.13, 8.09 -2.11, 20 0" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(476.05560302734375 644.3472442626953) rotate(0 162 11.5)"><text x="162" y="18" font-family="Helvetica, Segoe UI Emoji" font-size="20px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr">按照CPU利用率对离线业务进行排序</text></g><g stroke-linecap="round" transform="translate(448.5277099609375 768.5694427490234) rotate(0 188.5 40)"><path d="M20 0 M20 0 C123.13 -1.1, 226.29 -1.63, 357 0 M20 0 C141.25 1.98, 262.74 2.66, 357 0 M357 0 C368.86 1.31, 378.15 4.91, 377 20 M357 0 C368.16 0.55, 376.16 5.42, 377 20 M377 20 C375.54 32.16, 374.92 44.8, 377 60 M377 20 C376.17 28.55, 376.42 39.85, 377 60 M377 60 C376.1 74.79, 368.65 79.99, 357 80 M377 60 C375.1 72.51, 371.31 81.34, 357 80 M357 80 C265.43 78.11, 176.83 77.63, 20 80 M357 80 C285.45 78.97, 214.63 77.78, 20 80 M20 80 C8.5 78.72, -1.8 71.96, 0 60 M20 80 C7.96 81.95, -0.52 74.75, 0 60 M0 60 C0.56 44.64, -1.72 33.31, 0 20 M0 60 C-0.44 46.14, -0.65 30.54, 0 20 M0 20 C1.94 7.67, 7.1 -1.65, 20 0 M0 20 C1.14 8.7, 5.92 0.59, 20 0" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(476.0277099609375 797.0694427490234) rotate(0 161 11.5)"><text x="161" y="18" font-family="Helvetica, Segoe UI Emoji" font-size="20px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr">按照内存占用量对离线业务进行排序</text></g><g stroke-linecap="round" transform="translate(446.1666259765625 917.3749847412109) rotate(0 188.5 40)"><path d="M20 0 M20 0 C93.39 0.44, 166.78 -1.42, 357 0 M20 0 C123.27 -2.54, 226.96 -1.37, 357 0 M357 0 C371.61 -0.57, 377.36 4.84, 377 20 M357 0 C371.78 1.75, 376.6 8.72, 377 20 M377 20 C378.69 29.36, 375.6 37.23, 377 60 M377 20 C378.05 33.07, 378.08 43.42, 377 60 M377 60 C375.63 73.91, 370.91 79.92, 357 80 M377 60 C378.62 73.86, 371.63 81.09, 357 80 M357 80 C236.93 79.1, 117.11 78.72, 20 80 M357 80 C255.39 79.11, 154.4 79.25, 20 80 M20 80 C7.72 80.03, -1.39 74.11, 0 60 M20 80 C7.72 80.9, -0.29 75.35, 0 60 M0 60 C-0.64 51.05, -0.44 42.6, 0 20 M0 60 C-0.23 46.86, -0.08 34.21, 0 20 M0 20 C0.49 5.37, 6 1.48, 20 0 M0 20 C0.05 7.32, 8.62 1.28, 20 0" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(506.1666259765625 945.8749847412109) rotate(0 128.5 11.5)"><text x="128.5" y="18" font-family="Helvetica, Segoe UI Emoji" font-size="20px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr">按io带宽对离线业务进行排序</text></g><g stroke-linecap="round" transform="translate(931.3472290039062 746.0138397216797) rotate(0 87.5 64)"><path d="M32 0 M32 0 C63.04 -0.39, 98.53 -0.37, 143 0 M32 0 C64.28 0.47, 94.64 -0.82, 143 0 M143 0 C164.9 -1.15, 175.89 11.58, 175 32 M143 0 C165.94 1.66, 173.78 12.07, 175 32 M175 32 C175.9 44.69, 174.53 57.09, 175 96 M175 32 C173.76 44.94, 173.63 58.41, 175 96 M175 96 C174.01 116.74, 166.19 128.67, 143 128 M175 96 C176.13 117.93, 163.41 126.87, 143 128 M143 128 C105.82 127.42, 69.22 128.68, 32 128 M143 128 C118.56 129.26, 93.62 129.87, 32 128 M32 128 C10.42 126.51, 1.1 115.42, 0 96 M32 128 C9.29 125.83, -2.15 119.03, 0 96 M0 96 C1.71 79.66, -1.24 62.11, 0 32 M0 96 C1.09 80.49, -0.43 67.46, 0 32 M0 32 C0.1 11.57, 9.91 1.79, 32 0 M0 32 C0.35 12.15, 10.09 0.66, 32 0" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(957.8472290039062 798.5138397216797) rotate(0 61 11.5)"><text x="61" y="18" font-family="Helvetica, Segoe UI Emoji" font-size="20px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr">处理可疑对象</text></g><g stroke-linecap="round" transform="translate(1194.5278015136719 687.5276794433594) rotate(0 70.5 39.5)"><path d="M19.75 0 M19.75 0 C58.05 -0.8, 96.89 0.1, 121.25 0 M19.75 0 C58.91 0.79, 97.19 0.36, 121.25 0 M121.25 0 C136.21 0.3, 142.29 6.09, 141 19.75 M121.25 0 C135.08 1.61, 141.23 5.93, 141 19.75 M141 19.75 C141.96 30.08, 141.02 42.21, 141 59.25 M141 19.75 C140.44 30.74, 141.3 41.52, 141 59.25 M141 59.25 C141.58 71.47, 135.18 78.72, 121.25 79 M141 59.25 C140.36 72.47, 136.1 78.9, 121.25 79 M121.25 79 C85.77 77.92, 50.57 78.3, 19.75 79 M121.25 79 C96.75 80.04, 71.68 78.25, 19.75 79 M19.75 79 C8.47 77.24, 1.38 73.71, 0 59.25 M19.75 79 C5.25 77.22, -1.23 73.04, 0 59.25 M0 59.25 C1.37 51.87, 1.33 43.09, 0 19.75 M0 59.25 C-0.26 43.39, 0.12 28.35, 0 19.75 M0 19.75 C-1.75 6.72, 7.2 -1.66, 19.75 0 M0 19.75 C-0.36 6.65, 5.92 -0.48, 19.75 0" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(1224.0278015136719 715.5276794433594) rotate(0 41 11.5)"><text x="41" y="18" font-family="Helvetica, Segoe UI Emoji" font-size="20px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr">日志告警</text></g><g stroke-linecap="round" transform="translate(1197.1945190429688 834.458251953125) rotate(0 70.5 39.5)"><path d="M19.75 0 M19.75 0 C54.14 1.75, 88.34 1.39, 121.25 0 M19.75 0 C39.37 0.42, 60.11 -0.84, 121.25 0 M121.25 0 C135.88 0.2, 141.61 8.46, 141 19.75 M121.25 0 C134.52 -1.95, 143.17 4.56, 141 19.75 M141 19.75 C139.71 33.26, 141.79 47.1, 141 59.25 M141 19.75 C141.57 29.66, 141.32 39.43, 141 59.25 M141 59.25 C139.2 73.6, 133.19 78.45, 121.25 79 M141 59.25 C140.46 73.02, 132.41 79.16, 121.25 79 M121.25 79 C87.72 78.27, 53.65 77.02, 19.75 79 M121.25 79 C84.94 77.86, 50.23 79, 19.75 79 M19.75 79 C8.47 77.44, -0.43 72.34, 0 59.25 M19.75 79 C7.21 78.16, 2.19 72.01, 0 59.25 M0 59.25 C2.3 49.08, 1.81 40.98, 0 19.75 M0 59.25 C0.48 51.81, 0.53 43.11, 0 19.75 M0 19.75 C-1.91 6.09, 7.56 -0.84, 19.75 0 M0 19.75 C0.06 6.82, 5.63 2.04, 19.75 0" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(1226.6945190429688 862.458251953125) rotate(0 41 11.5)"><text x="41" y="18" font-family="Helvetica, Segoe UI Emoji" font-size="20px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr">应用驱逐</text></g><g stroke-linecap="round"><g transform="translate(175.16510727826292 52.87619674152461) rotate(0 0.3472290039062358 27.43054962158203)"><path d="M-0.56 0.63 C-0.69 9.82, -0.2 45.75, -0.14 54.65 M1.35 -0.09 C1.54 9.34, 1.98 46.91, 2.13 56.08" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(175.16510727826292 52.87619674152461) rotate(0 0.3472290039062358 27.43054962158203)"><path d="M-6.56 29.04 C-4.63 38.04, -2.25 48.1, 2.02 55.86 M-8.37 30.32 C-4.91 38.21, -1.4 46.74, 1.35 56.29" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(175.16510727826292 52.87619674152461) rotate(0 0.3472290039062358 27.43054962158203)"><path d="M12.2 28.78 C7.51 37.78, 3.28 47.94, 2.02 55.86 M10.39 30.06 C7.85 38.06, 5.36 46.68, 1.35 56.29" stroke="#000000" stroke-width="1" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(175.8595652860754 218.15398299640742) rotate(0 1.04168701171875 26.04167175292968)"><path d="M0.48 0.63 C0.95 9.17, 2.04 42.9, 2.13 51.61 M-0.73 -0.08 C-0.35 8.59, 0.53 44.4, 1.21 52.89" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(175.8595652860754 218.15398299640742) rotate(0 1.04168701171875 26.04167175292968)"><path d="M-7.82 28.94 C-7.14 32.92, -2.64 40.78, -0.52 54.86 M-9.31 29.31 C-6.24 33.87, -4.41 40.75, 0.64 52.63" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(175.8595652860754 218.15398299640742) rotate(0 1.04168701171875 26.04167175292968)"><path d="M9.99 28.09 C6.34 32.34, 6.52 40.41, -0.52 54.86 M8.5 28.46 C7.44 33.27, 5.14 40.35, 0.64 52.63" stroke="#000000" stroke-width="1" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(174.47071030560664 378.57067000812617) rotate(0 0 25.694442749023438)"><path d="M0.28 0.02 C0.26 8.6, -1.05 43.07, -1.02 51.47 M-1.03 -1.02 C-0.6 7.78, 0.99 44.35, 1.16 53.05" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(174.47071030560664 378.57067000812617) rotate(0 0 25.694442749023438)"><path d="M-8.41 27.52 C-6.15 35.32, -5.79 37.96, 0.29 51.24 M-8.79 28.7 C-6.16 37.93, -1.72 44.78, 0.69 52.77" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(174.47071030560664 378.57067000812617) rotate(0 0 25.694442749023438)"><path d="M9.16 26.93 C7.47 34.91, 3.89 37.67, 0.29 51.24 M8.77 28.11 C5.39 37.48, 3.83 44.52, 0.69 52.77" stroke="#000000" stroke-width="1" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(175.8595652860754 543.1539829964074) rotate(0 0.34722900390625 34.72222900390625)"><path d="M0.18 0.9 C0.48 12.48, 0.83 57.52, 0.75 68.93 M-1.19 0.32 C-0.94 12.11, -0.72 58.47, -0.17 70.19" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(175.8595652860754 543.1539829964074) rotate(0 0.34722900390625 34.72222900390625)"><path d="M-9.58 42.33 C-9.78 46.45, -6.76 55.71, 1.25 69.47 M-11.32 41.39 C-8.29 49.53, -5.23 55.89, -1.13 71.02" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(175.8595652860754 543.1539829964074) rotate(0 0.34722900390625 34.72222900390625)"><path d="M10.94 41.86 C6.43 46.11, 5.15 55.46, 1.25 69.47 M9.19 40.92 C7.16 49.22, 5.17 55.69, -1.13 71.02" stroke="#000000" stroke-width="1" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(175.8595652860754 702.8761814827355) rotate(0 -0.694427490234375 31.59722900390625)"><path d="M0.05 0.71 C-0.28 11.13, -1.03 53.12, -1.47 63.43 M-1.38 0.04 C-1.92 9.99, -2.64 50.84, -2.46 61.44" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(175.8595652860754 702.8761814827355) rotate(0 -0.694427490234375 31.59722900390625)"><path d="M-11.44 33.07 C-8.53 40.88, -6.44 52.78, -1.76 62.11 M-12.13 33.65 C-9.88 42.4, -5.36 52.34, -2.71 62.22" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(175.8595652860754 702.8761814827355) rotate(0 -0.694427490234375 31.59722900390625)"><path d="M9.08 33.14 C4.97 40.93, 0.05 52.81, -1.76 62.11 M8.39 33.72 C3.93 42.5, 1.73 52.41, -2.71 62.22" stroke="#000000" stroke-width="1" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(177.2484813017004 853.5706700081262) rotate(0 -1.388885498046875 29.166656494140625)"><path d="M-1.1 -0.96 C-1.84 8.87, -3.53 48.49, -3.68 58.57 M0.52 1.14 C0.09 10.63, -0.97 47.13, -1.44 56.58" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(177.2484813017004 853.5706700081262) rotate(0 -1.388885498046875 29.166656494140625)"><path d="M-11.97 27.27 C-6.83 40.24, -2.01 50.05, -0.76 55.55 M-11.15 28 C-7.84 36.3, -5.13 44.18, -1.23 57.43" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(177.2484813017004 853.5706700081262) rotate(0 -1.388885498046875 29.166656494140625)"><path d="M7.99 28.04 C5.89 40.55, 3.46 50.07, -0.76 55.55 M8.8 28.77 C6.71 36.76, 4 44.43, -1.23 57.43" stroke="#000000" stroke-width="1" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(368.22071030560664 661.209555506173) rotate(0 39.236083984374986 -0.34722137451169033)"><path d="M1.04 -0.93 C14.25 -0.84, 65.6 -0.41, 78.56 -0.2 M0.13 1.19 C13.26 0.99, 64.64 -1.61, 77.66 -2.06" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(368.22071030560664 661.209555506173) rotate(0 39.236083984374986 -0.34722137451169033)"><path d="M48.38 9.55 C57.51 6.96, 65.08 3.49, 76.05 -0.31 M50.77 10.33 C60.48 5.63, 68.36 1.62, 77.95 -1.65" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(368.22071030560664 661.209555506173) rotate(0 39.236083984374986 -0.34722137451169033)"><path d="M47.5 -10.95 C56.71 -8.62, 64.49 -7.15, 76.05 -0.31 M49.89 -10.17 C60.05 -7.74, 68.24 -4.61, 77.95 -1.65" stroke="#000000" stroke-width="1" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(370.3040232938879 811.9039829964074) rotate(0 37.15277099609374 -1.041656494140625)"><path d="M-0.1 0.04 C12.27 -0.37, 62.06 -1.99, 74.33 -2.26 M-1.61 -0.99 C10.6 -1.22, 60.46 -0.36, 73.39 -0.81" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(370.3040232938879 811.9039829964074) rotate(0 37.15277099609374 -1.041656494140625)"><path d="M45.32 9.65 C53.67 5.12, 63.49 4.82, 74.76 -2.8 M46.19 8.98 C53.93 6.76, 62.73 2.72, 74.26 -0.72" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(370.3040232938879 811.9039829964074) rotate(0 37.15277099609374 -1.041656494140625)"><path d="M45.2 -10.87 C53.61 -9.05, 63.48 -3, 74.76 -2.8 M46.07 -11.54 C53.84 -7.49, 62.68 -5.26, 74.26 -0.72" stroke="#000000" stroke-width="1" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(365.44287827435664 959.1261814827358) rotate(0 37.847229003906236 -0.347198486328125)"><path d="M0.95 0.33 C13.82 0.54, 63.72 0.28, 76.09 0.07 M-0.01 -0.54 C12.83 -0.57, 63 -1.79, 75.35 -1.65" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(365.44287827435664 959.1261814827358) rotate(0 37.847229003906236 -0.347198486328125)"><path d="M47.81 9.52 C54.49 5.54, 58.69 5.68, 77.29 -0.07 M47.65 9.29 C56.51 4.64, 65.87 2.64, 74.67 -1.72" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(365.44287827435664 959.1261814827358) rotate(0 37.847229003906236 -0.347198486328125)"><path d="M47.62 -11 C54.14 -10.7, 58.38 -6.28, 77.29 -0.07 M47.46 -11.23 C56.32 -8.75, 65.74 -3.64, 74.67 -1.72" stroke="#000000" stroke-width="1" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(832.8040232938879 657.0428990120324) rotate(0 43.749969482421875 74.65277099609375)"><path d="M-0.98 1.18 C13.55 26.07, 72.22 125.67, 87.15 150.42 M0.71 0.76 C15.06 25.85, 71.39 124.41, 86.02 148.89" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(832.8040232938879 657.0428990120324) rotate(0 43.749969482421875 74.65277099609375)"><path d="M64.93 129.11 C71.81 137.41, 77.47 140.64, 85.04 149.07 M63.3 129.27 C68.84 135.67, 75.31 139.88, 85.94 149.61" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(832.8040232938879 657.0428990120324) rotate(0 43.749969482421875 74.65277099609375)"><path d="M82.66 118.78 C84.4 129.99, 84.82 136.27, 85.04 149.07 M81.03 118.94 C81.83 127.88, 83.66 134.78, 85.94 149.61" stroke="#000000" stroke-width="1" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(830.7206492704505 811.9040135139855) rotate(0 43.05557250976557 0.6944427490234375)"><path d="M-0.29 0.76 C13.68 1, 70.62 0.1, 84.93 0.28 M1.76 0.11 C15.98 0.56, 73.23 1.29, 87.01 1.23" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(830.7206492704505 811.9040135139855) rotate(0 43.05557250976557 0.6944427490234375)"><path d="M60.02 9.35 C68.1 6.48, 81.79 3.12, 89.01 1.03 M59.76 10.46 C68.35 7.31, 76.16 4.91, 86.73 0.82" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(830.7206492704505 811.9040135139855) rotate(0 43.05557250976557 0.6944427490234375)"><path d="M60.15 -11.17 C67.97 -5.99, 81.61 -1.29, 89.01 1.03 M59.88 -10.06 C68.62 -6.88, 76.4 -2.93, 86.73 0.82" stroke="#000000" stroke-width="1" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(830.7206492704504 957.0428684944543) rotate(0 45.138885498046875 -69.09721374511719)"><path d="M0.02 -0.28 C15.04 -23.45, 75.41 -115.72, 90.4 -138.81 M-1.43 -1.47 C13.42 -24.51, 74.44 -114.87, 89.52 -137.6" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(830.7206492704504 957.0428684944543) rotate(0 45.138885498046875 -69.09721374511719)"><path d="M81.9 -108.26 C83.57 -118.39, 85.82 -125.58, 88.03 -138.15 M81.76 -108.65 C85.74 -117.65, 86.3 -126.92, 88.78 -137.04" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(830.7206492704504 957.0428684944543) rotate(0 45.138885498046875 -69.09721374511719)"><path d="M64.85 -119.68 C72.01 -126.14, 79.73 -129.67, 88.03 -138.15 M64.71 -120.06 C73.88 -125.38, 79.74 -131.1, 88.78 -137.04" stroke="#000000" stroke-width="1" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(1113.3595652860754 802.8762120003137) rotate(0 37.5 -37.5)"><path d="M0.55 -0.53 C13.01 -13.12, 62.47 -63.16, 75.04 -75.53 M-0.62 1.8 C11.66 -10.63, 61.38 -61.76, 74.11 -74.28" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(1113.3595652860754 802.8762120003137) rotate(0 37.5 -37.5)"><path d="M60.66 -46.97 C64.69 -54.21, 70.01 -64.37, 74.36 -72.46 M62.4 -47.67 C66.11 -54.62, 69.09 -63.3, 73.13 -75.07" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(1113.3595652860754 802.8762120003137) rotate(0 37.5 -37.5)"><path d="M46.09 -61.42 C54.8 -64.09, 64.8 -69.6, 74.36 -72.46 M47.83 -62.12 C56.15 -64.37, 63.74 -68.48, 73.13 -75.07" stroke="#000000" stroke-width="1" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(1115.4428782743566 813.2928990120324) rotate(0 36.8055419921875 29.861099243164062)"><path d="M-0.15 -1.12 C12.19 8.81, 60.44 50.17, 72.9 60.34 M-1.69 0.9 C11.14 10.43, 62.56 48.47, 75.24 58.54" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(1115.4428782743566 813.2928990120324) rotate(0 36.8055419921875 29.861099243164062)"><path d="M44.73 48.42 C53.6 53.17, 58.74 53.45, 76.29 57.3 M46.94 48.93 C55.77 52.47, 63.49 54.32, 75.7 57.79" stroke="#000000" stroke-width="1" fill="none"/></g><g transform="translate(1115.4428782743566 813.2928990120324) rotate(0 36.8055419921875 29.861099243164062)"><path d="M57.18 32.1 C63.57 40.21, 66.14 43.86, 76.29 57.3 M59.39 32.61 C64.35 41.16, 68.33 47.92, 75.7 57.79" stroke="#000000" stroke-width="1" fill="none"/></g></g><mask/></svg>
\ No newline at end of file
diff --git a/docs/images/psi/PSI_implement.svg b/docs/images/psi/PSI_implement.svg
new file mode 100644
index 0000000..9704504
--- /dev/null
+++ b/docs/images/psi/PSI_implement.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Do not edit this file with editors other than diagrams.net -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1386px" height="771px" viewBox="-0.5 -0.5 1386 771" content="&lt;mxfile host=&quot;Electron&quot; modified=&quot;2023-06-09T03:31:36.369Z&quot; agent=&quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.2.8 Chrome/112.0.5615.165 Electron/24.2.0 Safari/537.36&quot; etag=&quot;hMdrX38smwDcLm7Ib4KD&quot; version=&quot;21.2.8&quot; type=&quot;device&quot; pages=&quot;5&quot;&gt;&lt;diagram id=&quot;07kHJZS3hwJW5_4EwsxT&quot; name=&quot;rubik重构&quot;&gt;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&lt;/diagram&gt;&lt;diagram id=&quot;kWRgZKNvc_THbxEiSdgt&quot; name=&quot;Page-4&quot;&gt;[encoded data, 7668 characters]&lt;/diagram&gt;&lt;diagram id=&quot;-Kyxz0P4pjuFrocwjX6N&quot; name=&quot;Page-1&quot;&gt;1ZrBbqMwEIafhusK2xCHa7Ld7qWnHHp2YQIWBlNjmrBPv6YxDawjZbdaVRopUsLPMLbnGwQ/JGL75vxoRFc96QJUROPiHLHvEaVkSzfua1LGi8K39CKURhY+6Coc5C/wYuzVQRbQrwKt1srKbi3mum0htytNGKNP67CjVutRO1FCIBxyoUL1WRa28uomTa47foIsKz80ZcyvuBFztF9KX4lCnxYSe4im8rCziNgumrT1h+2N1vZu2BzcnPegpurPhb2M++PzCT4Wb6C1/ymnx/8m1OBLbIYXWbucXV36QtlxLr/RQ1vAdKhLtjtV0sKhE/m09+QazmmVbZTbIu/T+HO2fgFvYCycF9Lfzf66hkfQDVgzuu05DfdUfV+nNP2WXpTTok/mNq4WLZJ4TfjWLD+S/1NlXawv7qdZsICFGKx2p9JRIkLBkjWKueZ4OCQBhxdVS40XASfYEKQBglzkFSjZSIuXA2HoQGxCEBXkdadlixlERrGB4CEI5BcGd5HGBmF7C0JvBeZzgRGGDUMWYJDuNqnHDIEn2CDMs1tQaKDRfiooKSQMHwUSUOjAHBEzyND5NhKa6Ffd40WQpvgQhN75ddBW4IWwIRt0EELj7B8moYXA8UEIrXM/tjleBpxxdAxC12xlOyqN2K3xbIsOQ+iZLebb022KD0HomO3YQQGI71AzkqHDEDrmwUqFmAFHx4DGAQNXqF7qFi8GEs8CIg6hVQgA9JXopp/5YNS4MyKvwd4nccX21VxotuZy4z0DvQGFxPOjtC/D8h575z26z7f4CwN7+A0=&lt;/diagram&gt;&lt;diagram id=&quot;H41B7zk6X4BUBCsjhlfd&quot; name=&quot;Page-2&quot;&gt;[encoded data, 4496 characters]&lt;/diagram&gt;&lt;diagram id=&quot;uoNyBviDe9WB4nL20GPg&quot; name=&quot;Page-5&quot;&gt;[encoded data, 4184 characters]&lt;/diagram&gt;&lt;/mxfile&gt;" style="background-color: rgb(255, 255, 255);"><defs><clipPath id="mx-clip-734-656-132-44-0"><rect x="734" y="656" width="132" height="44"/></clipPath></defs><g><path d="M 1099.5 370 L 1384.5 370 L 1384.5 590 L 1099.5 590 L 1099.5 410 L 1089.5 410 L 1089.5 400 L 1099.5 400 L 1099.5 390 L 1089.5 390 L 1089.5 380 L 1099.5 380 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 1099.5 380 L 1109.5 380 L 1109.5 390 L 1099.5 390 M 1099.5 400 L 1109.5 400 L 1109.5 410 L 1099.5 410" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g fill="rgb(0, 0, 0)" font-family="Helvetica" text-anchor="middle" font-size="12px"><text x="1246.5" y="387.5">cadvisor</text></g><rect x="336.5" y="300" width="274" height="100" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 276px; height: 100px; padding-top: 300px; margin-left: 337px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 274px; height: 100px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><i>&lt;&lt;Interface&gt;&gt;</i><br /><b>Metric</b></p><hr size="1" /><p style="margin: 0px ; margin-left: 4px">+ Update() error</p><p style="margin: 0px ; margin-left: 4px">+ AddTrigger(...Trigger) Metric</p><p style="margin: 0px ; margin-left: 4px"><br /></p></div></div></div></foreignObject><text x="337" y="312" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">&lt;&lt;Interface&gt;&gt;...</text></switch></g><path d="M 40 320 L 40 265 L 220 265 L 220 320" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 40 320 L 40 435 L 220 435 L 220 320" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 40 320 L 220 320" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 272px; margin-left: 130px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;"><b>BaseMetric</b></div></div></div></foreignObject><text x="130" y="284" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">BaseMetric</text></switch></g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 170px; height: 1px; padding-top: 330px; margin-left: 45px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center; max-height: 16px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;">attributes</div></div></div></foreignObject><text x="130" y="334" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">attributes</text></switch></g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 170px; height: 1px; padding-top: 350px; margin-left: 46px;"><div data-drawio-colors="color: #808080; " style="box-sizing: border-box; font-size: 0px; text-align: left; max-height: 16px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(128, 128, 128); line-height: 1.2; pointer-events: none; white-space: nowrap;">trigger []Trigger</div></div></div></foreignObject><text x="46" y="354" fill="#808080" font-family="Helvetica" font-size="12px">trigger []Trigger</text></switch></g><path d="M 40 364 L 220 364" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 170px; height: 1px; padding-top: 378px; margin-left: 45px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center; max-height: 16px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;">operations</div></div></div></foreignObject><text x="130" y="382" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">operations</text></switch></g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 170px; height: 1px; padding-top: 412px; margin-left: 46px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left; max-height: 43px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;">AddTrigger(...Trigger) Metric<br />Update() error</div></div></div></foreignObject><text x="46" y="415" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">AddTrigger(...Trigger) Metri...</text></switch></g><path d="M 396.5 605 L 396.5 550 L 656.5 550 L 656.5 605" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 396.5 605 L 396.5 765 L 656.5 765 L 656.5 605" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 396.5 605 L 656.5 605" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 557px; margin-left: 527px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;"><br /><b>Manager</b></div></div></div></foreignObject><text x="527" y="569" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">&#xa;Manager</text></switch></g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 250px; height: 1px; padding-top: 615px; margin-left: 402px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center; max-height: 16px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;">attributes</div></div></div></foreignObject><text x="527" y="619" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">attributes</text></switch></g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 250px; height: 1px; padding-top: 643px; margin-left: 403px;"><div data-drawio-colors="color: #808080; " style="box-sizing: border-box; font-size: 0px; text-align: left; max-height: 31px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(128, 128, 128); line-height: 1.2; pointer-events: none; white-space: nowrap;">PSIConfig<br />Viewer</div></div></div></foreignObject><text x="403" y="646" fill="#808080" font-family="Helvetica" font-size="12px">PSIConfig...</text></switch></g><path d="M 396.5 664 L 656.5 664" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 250px; height: 1px; padding-top: 678px; margin-left: 402px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center; max-height: 16px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;">operations</div></div></div></foreignObject><text x="527" y="682" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">operations</text></switch></g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 250px; height: 1px; padding-top: 727px; margin-left: 403px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left; max-height: 73px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;">IsRunner() bool<br />Run(context.Context)<br />SetConfig(helper.CnfigHandler) error<br />PreStart(api.Viewer) error<br />Terminate(api.Viewer) error</div></div></div></foreignObject><text x="403" y="730" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">IsRunner() bool...</text></switch></g><rect x="680.75" y="152" width="323.5" height="40" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 326px; height: 40px; padding-top: 152px; margin-left: 681px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 324px; height: 40px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; width: 100%; height: 100%; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><i style="border-color: var(--border-color);">&lt;&lt;Singleton&gt;&gt;</i><b><br /></b></p><p style="margin: 0px ; margin-top: 4px ; text-align: center">expulsionExec</p><hr size="1" /><p style="margin: 0px ; margin-left: 4px"><br /></p></div></div></div></foreignObject><text x="681" y="164" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">&lt;&lt;Singleton&gt;&gt;...</text></switch></g><rect x="680.75" y="192" width="323.5" height="40" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 326px; height: 40px; padding-top: 192px; margin-left: 681px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 324px; height: 40px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; width: 100%; height: 100%; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><i style="border-color: var(--border-color);">&lt;&lt;Singleton&gt;&gt;</i><b><br /></b></p><p style="margin: 0px ; margin-top: 4px ; text-align: center">resourceAnalysisExec</p><hr size="1" /><p style="margin: 0px ; margin-left: 4px"><br /></p></div></div></div></foreignObject><text x="681" y="204" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">&lt;&lt;Singleton&gt;&gt;...</text></switch></g><path d="M 680.75 192 L 620.62 192.34" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 611.62 192.39 L 620.59 187.84 L 620.64 196.84 Z" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 220 350 L 326.38 350" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 335.38 350 L 326.38 354.5 L 326.38 345.5 Z" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 730 651 L 730 625 L 870 625 L 870 651" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 730 651 L 730 695 L 870 695 L 870 651" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 730 651 L 870 651" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g fill="rgb(0, 0, 0)" font-family="Helvetica" font-weight="bold" pointer-events="none" text-anchor="middle" font-size="11px"><text x="799.5" y="642">PSIConfig</text></g><g fill="rgb(0, 0, 0)" font-family="Helvetica" pointer-events="none" clip-path="url(#mx-clip-734-656-132-44-0)" font-size="12px"><text x="735.5" y="668.5">+ Interval: int</text><text x="735.5" y="682.5">+ Resource: []string</text></g><rect x="1100" y="162" width="274" height="100" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 276px; height: 100px; padding-top: 162px; margin-left: 1100px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 274px; height: 100px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; width: 100%; height: 100%; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><i>&lt;&lt;Interface&gt;&gt;</i><br /><b>Analyzer</b></p><hr size="1" /><p style="margin: 0px ; margin-left: 4px">+ MaxCPUUtil([]*PodInfo) *PodInfo</p><p style="margin: 0px ; margin-left: 4px">+ MaxIOBandWidth([]*PodInfo) *PodInfo</p><p style="margin: 0px ; margin-left: 4px">+ MaxMemUtil([]*PodInfo)*PodInfo</p><p style="margin: 0px ; margin-left: 4px"><br /></p></div></div></div></foreignObject><text x="1100" y="174" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">&lt;&lt;Interface&gt;&gt;...</text></switch></g><rect x="336.5" y="150" width="274" height="100" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 276px; height: 100px; padding-top: 150px; margin-left: 337px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 274px; height: 100px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; width: 100%; height: 100%; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><i>&lt;&lt;Interface&gt;&gt;</i><br /><b>Trigger</b></p><hr size="1" /><p style="margin: 0px ; margin-left: 4px">+ Execute(<span style="border-color: var(--border-color); text-align: center;">TriggerFactor</span>) error</p><p style="margin: 0px ; margin-left: 4px">+ SetNext(...Trigger) Trigger</p><p style="margin: 0px ; margin-left: 4px">+ Name() string</p></div></div></div></foreignObject><text x="337" y="162" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">&lt;&lt;Interface&gt;&gt;...</text></switch></g><rect x="336.5" y="0" width="274" height="100" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 276px; height: 100px; padding-top: 0px; margin-left: 337px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 274px; height: 100px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; width: 100%; height: 100%; white-space: nowrap;"><p style="margin: 0px ; margin-top: 4px ; text-align: center"><i>&lt;&lt;Interface&gt;&gt;</i><br /><b>TriggerFactor</b></p><hr size="1" /><p style="margin: 0px ; margin-left: 4px">+ Message() string</p><p style="margin: 0px ; margin-left: 4px">+ TargetPods() map[string]*typedef.PodInfo</p><p style="margin: 0px ; margin-left: 4px"><br /></p></div></div></div></foreignObject><text x="337" y="12" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">&lt;&lt;Interface&gt;&gt;...</text></switch></g><path d="M 473.5 300 L 473.5 252.24" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 480 264.12 L 473.5 251.12 L 467 264.12" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 274px; margin-left: 474px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">Use</div></div></div></foreignObject><text x="474" y="277" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">Use</text></switch></g><path d="M 473.5 150 L 473.5 102.24" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 480 114.12 L 473.5 101.12 L 467 114.12" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 124px; margin-left: 474px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">Use</div></div></div></foreignObject><text x="474" y="127" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">Use</text></switch></g><path d="M 1120 430 L 1120 400 L 1370 400 L 1370 430" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 1120 430 L 1120 570 L 1370 570 L 1370 430" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 1120 430 L 1370 430" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 407px; margin-left: 1245px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;">Manager</div></div></div></foreignObject><text x="1245" y="419" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Manager</text></switch></g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 240px; height: 1px; padding-top: 440px; margin-left: 1125px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center; max-height: 16px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;">attributes</div></div></div></foreignObject><text x="1245" y="444" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">attributes</text></switch></g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 240px; height: 1px; padding-top: 465px; margin-left: 1126px;"><div data-drawio-colors="color: #808080; " style="box-sizing: border-box; font-size: 0px; text-align: left; max-height: 26px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(128, 128, 128); line-height: 1.2; pointer-events: none; white-space: nowrap;">manager.Manager</div></div></div></foreignObject><text x="1126" y="469" fill="#808080" font-family="Helvetica" font-size="12px">manager.Manager</text></switch></g><path d="M 1120 484 L 1370 484" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 240px; height: 1px; padding-top: 498px; margin-left: 1125px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center; max-height: 16px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;">operations</div></div></div></foreignObject><text x="1245" y="502" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">operations</text></switch></g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 240px; height: 1px; padding-top: 539px; margin-left: 1126px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left; max-height: 58px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;"><p>+ New()<br />+ Start() error<br />+ ContainerInfoV2()<span style="background-color: initial;"> </span></p></div></div></div></foreignObject><text x="1126" y="543" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">+ New()...</text></switch></g><path d="M 0 605 L 0 550 L 250 550 L 250 605" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 0 605 L 0 770 L 250 770 L 250 605" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 0 605 L 250 605" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 557px; margin-left: 125px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;"><b>BasePSIMetric</b></div></div></div></foreignObject><text x="125" y="569" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">BasePSIMetric</text></switch></g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 240px; height: 1px; padding-top: 615px; margin-left: 5px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center; max-height: 16px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;">attributes</div></div></div></foreignObject><text x="125" y="619" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">attributes</text></switch></g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 240px; height: 1px; padding-top: 668px; margin-left: 6px;"><div data-drawio-colors="color: #808080; " style="box-sizing: border-box; font-size: 0px; text-align: left; max-height: 81px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(128, 128, 128); line-height: 1.2; pointer-events: none; white-space: nowrap;">*metric.BaseMetric<br />avg10Threshold float64<br />resources []string<br />conservation map[string]*typedef.PodInfo<br />suspicion map[string]*typedef.PodInfo</div></div></div></foreignObject><text x="6" y="671" fill="#808080" font-family="Helvetica" font-size="12px">*metric.BaseMetric...</text></switch></g><path d="M 0 714 L 250 714" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 240px; height: 1px; padding-top: 728px; margin-left: 5px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center; max-height: 16px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;">operations</div></div></div></foreignObject><text x="125" y="732" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">operations</text></switch></g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 240px; height: 1px; padding-top: 754px; margin-left: 6px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left; max-height: 28px; overflow: hidden;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;">Update() error</div></div></div></foreignObject><text x="6" y="758" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">Update() error</text></switch></g><path d="M 393.64 714.03 L 250.24 716.36" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 262.01 709.67 L 249.12 716.38 L 262.22 722.67" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 715px; margin-left: 322px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">Use</div></div></div></foreignObject><text x="322" y="718" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">Use</text></switch></g><path d="M 656.5 642.5 L 727.76 642.5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 715.88 649 L 728.88 642.5 L 715.88 636" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 643px; margin-left: 693px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">Use</div></div></div></foreignObject><text x="693" y="646" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">Use</text></switch></g><path d="M 125 550 L 124.61 437.09" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 131.15 448.95 L 124.6 435.98 L 118.15 449" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 492px; margin-left: 125px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">Use</div></div></div></foreignObject><text x="125" y="495" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">Use</text></switch></g><path d="M 1237 262 L 1237 367.76" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 1230.5 355.88 L 1237 368.88 L 1243.5 355.88" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 316px; margin-left: 1237px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">Use</div></div></div></foreignObject><text x="1237" y="319" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">Use</text></switch></g><path d="M 1004.25 212 L 1097.76 212" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 1085.88 218.5 L 1098.88 212 L 1085.88 205.5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 200px; margin-left: 1050px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">Use</div></div></div></foreignObject><text x="1050" y="203" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">Use</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>
\ No newline at end of file
-- 
2.41.0

