From 9a306c5cc50f4461d09e81c56b401f88384fe9f0 Mon Sep 17 00:00:00 2001
From: Paul Pestov <kontakt@paulpestov.de>
Date: Sun, 9 Oct 2022 20:36:49 +0200
Subject: [PATCH] Add dynamic evals color calculation for cer and wall time

---
 src/components/Workflows.vue |  3 +++
 src/helpers/eval-colors.js   | 46 ++++++++++++++++++++++++++++++++----
 2 files changed, 44 insertions(+), 5 deletions(-)

diff --git a/src/components/Workflows.vue b/src/components/Workflows.vue
index 64c9456..7c2ca05 100644
--- a/src/components/Workflows.vue
+++ b/src/components/Workflows.vue
@@ -15,6 +15,7 @@ import { useRouter, useRoute } from "vue-router";
 import WorkflowsList from "@/components/workflows/WorkflowsList.vue";
 import WorkflowsTable from "@/components/workflows/WorkflowsTable.vue";
 import { useI18n } from "vue-i18n";
+import { setEvalColors } from "../helpers/eval-colors";
 
 const { t } = useI18n();
 
@@ -40,6 +41,8 @@ onMounted(async () => {
   data.value = await api.getWorkflows();
   defs.value = await api.getEvalDefinitions();
 
+  setEvalColors(data.value);
+
   const filtered = options.value.filter((option) => {
     return route.query.view && route.query.view === option.value;
   });
diff --git a/src/helpers/eval-colors.js b/src/helpers/eval-colors.js
index f2fb511..7ce287e 100644
--- a/src/helpers/eval-colors.js
+++ b/src/helpers/eval-colors.js
@@ -1,4 +1,6 @@
-const evalColors = {
+import { ref } from 'vue';
+
+const evalColors = ref({
     wall_time: {
         'eval-low': 2000,
         'eval-medium': 4000,
@@ -14,10 +16,10 @@ const evalColors = {
         'eval-medium': 0.8,
         'eval-high': 0.9
     }
-};
+});
 
 const getEvalColor = (name, value) => {
-    const colorMap = evalColors[name];
+    const colorMap = evalColors.value[name];
     if (colorMap) {
         const keys = Object.keys(colorMap);
         return keys.find((key, i) => {
@@ -28,6 +30,40 @@ const getEvalColor = (name, value) => {
     return null;
 };
 
+const setEvalColors = (data) => {
+    const allCERs = [];
+    const allWallTimes = [];
+
+    data.forEach(({ evaluation }) => {
+        const { document_wide: evals } = evaluation;
+        const { cer, wall_time, cer_min_max } = evals;
+
+        if (cer) allCERs.push(cer);
+        if (wall_time) allWallTimes.push(wall_time);
+    });
+
+    const minCER = Math.min(...allCERs);
+    const maxCER = Math.max(...allCERs);
+
+    const minWallTime = Math.min(...allWallTimes);
+    const maxWallTime = Math.max(...allWallTimes);
+
+    const diffCER = maxCER - minCER;
+    const stepCER = diffCER / 3;
+
+    evalColors.value.cer["eval-low"] = minCER + stepCER;
+    evalColors.value.cer["eval-medium"] = minCER + 2 * stepCER;
+    evalColors.value.cer["eval-high"] = minCER + 3 * stepCER;
+
+    const diffallTime = maxWallTime - minWallTime;
+    const stepWallTime = diffallTime / 3;
+
+    evalColors.value.wall_time["eval-low"] = minWallTime + stepWallTime;
+    evalColors.value.wall_time["eval-medium"] = minWallTime + 2 * stepWallTime;
+    evalColors.value.wall_time["eval-high"] = minWallTime + 3 * stepWallTime;
+};
+
 export {
-    getEvalColor
-};
\ No newline at end of file
+    getEvalColor,
+    setEvalColors
+};
-- 
GitLab