From 03a033e3c732a7b23c3a987643d0778ac1c3606e Mon Sep 17 00:00:00 2001 From: Dannon Baker Date: Thu, 9 Nov 2017 08:53:56 -0500 Subject: [PATCH] More cleanup for reports/run_stats --- .../scripts/reports_webapp/run_stats.js | 74 ++++++++++--------- static/maps/reports_webapp/run_stats.js.map | 2 +- static/scripts/reports_webapp/run_stats.js | 2 +- 3 files changed, 41 insertions(+), 37 deletions(-) diff --git a/client/galaxy/scripts/reports_webapp/run_stats.js b/client/galaxy/scripts/reports_webapp/run_stats.js index 73af61f23ad..8c1ff2e9337 100644 --- a/client/galaxy/scripts/reports_webapp/run_stats.js +++ b/client/galaxy/scripts/reports_webapp/run_stats.js @@ -62,10 +62,11 @@ export function create_chart(inp_data, name, time, title) { var chart_zoom = 1.75; var height = 150; - if (d3.max(data) != 0) { - var zoom = height / d3.max(data); + var zoom; + if (d3.max(data) !== 0) { + zoom = height / d3.max(data); } else { - var zoom = 1.0; + zoom = 1.0; } var chart_height = height + margin.top + margin.bottom; @@ -111,7 +112,7 @@ export function create_chart(inp_data, name, time, title) { .append("g") .attr("transform", (d, i) => { // Place the bar in the correct place - var curr_margin = +margin.left; + var curr_margin = margin.left; curr_margin += +(i * barWidth); return `translate(${curr_margin},${margin.top})`; }) @@ -130,7 +131,7 @@ export function create_chart(inp_data, name, time, title) { .select(currentEvent.path[1]) .select(".tool_tip") .select("text") - .attr("transform", `translate( ${margin.left - 5}, ${height - d * zoom + +margin.top + 10} )`) + .attr("transform", `translate( ${margin.left - 5}, ${height - d * zoom + margin.top + 10} )`) .attr("visibility", "visible") .text(d); @@ -140,7 +141,7 @@ export function create_chart(inp_data, name, time, title) { .attr("width", `${wdth}px`) .attr("height", "15px") .select("rect") - .attr("transform", `translate( ${+margin.left - wdth}, ${height - d * zoom + +margin.top} )`) + .attr("transform", `translate( ${margin.left - wdth}, ${height - d * zoom + margin.top} )`) .attr("width", `${wdth}px`) .attr("height", "15px") .attr("fill", "#ebd9b2"); @@ -169,7 +170,7 @@ export function create_chart(inp_data, name, time, title) { .append("text") .attr("class", "title") .attr("text-anchor", "end") - .attr("transform", e => `translate( ${width},15 )`) + .attr("transform", () => `translate( ${width},15 )`) .text(title); // Add an x axis line to the chart @@ -178,9 +179,9 @@ export function create_chart(inp_data, name, time, title) { .attr("class", "axis") .append("path") .attr("class", "x") - .attr("d", d => { + .attr("d", () => { var m_x = margin.left; - var m_y = +margin.top + height; + var m_y = margin.top + height; var l_x = m_x + width; var l_y = m_y; @@ -212,10 +213,10 @@ export function create_chart(inp_data, name, time, title) { .append("g") .append("text") .attr("class", "ax_title") - .attr("transform", e => { + .attr("transform", () => { var axis = d3.select(`#y_${name}`).node(); - var left_pad = +margin.left - axis.getBoundingClientRect().width - 5; - var top_pad = +margin.top + axis.getBoundingClientRect().height / 2 - 30; + var left_pad = margin.left - axis.getBoundingClientRect().width - 5; + var top_pad = margin.top + axis.getBoundingClientRect().height / 2 - 30; var trans = `translate(${left_pad},${top_pad})rotate(-90)`; return trans; @@ -229,6 +230,8 @@ export function create_chart(inp_data, name, time, title) { .attr("height", d => d * zoom) .attr("width", barWidth - 1); + var first = false; + // Append x axis if (time == "hours") { // Append hour lines @@ -241,7 +244,7 @@ export function create_chart(inp_data, name, time, title) { .attr("stroke", "black") .attr("stroke-width", 1) .attr("pointer-events", "none") - .attr("transform", (d, i) => `translate( ${barWidth / 2}, ${height})`); + .attr("transform", () => `translate( ${barWidth / 2}, ${height})`); // Append hour numbers bar @@ -262,7 +265,7 @@ export function create_chart(inp_data, name, time, title) { // Append day lines var curr_day = ""; - var first = false; + first = false; bar .append("line") .attr("x1", 0) @@ -287,7 +290,7 @@ export function create_chart(inp_data, name, time, title) { .attr("stroke", "black") .attr("stroke-width", 1) .attr("pointer-events", "none") - .attr("transform", (d, i) => `translate( 0, ${height})`); + .attr("transform", () => `translate( 0, ${height})`); // Append day numbers curr_day = ""; @@ -341,7 +344,7 @@ export function create_chart(inp_data, name, time, title) { .attr("stroke", "black") .attr("stroke-width", 1) .attr("pointer-events", "none") - .attr("transform", (d, i) => `translate( ${barWidth / 2}, ${height})`); + .attr("transform", () => `translate( ${barWidth / 2}, ${height})`); // Append day numbers bar @@ -362,7 +365,7 @@ export function create_chart(inp_data, name, time, title) { // Append month lines var curr_month = ""; - var first = false; + first = false; bar .append("line") .attr("x1", 0) @@ -387,7 +390,7 @@ export function create_chart(inp_data, name, time, title) { .attr("stroke", "black") .attr("stroke-width", 1) .attr("pointer-events", "none") - .attr("transform", (d, i) => `translate( 0, ${height})`); + .attr("transform", () => `translate( 0, ${height})`); // Append month numbers curr_month = ""; @@ -473,7 +476,7 @@ export function create_histogram(inp_data, name, title) { .range([0, width]); // Generate a histogram using twenty uniformly-spaced bins. - var data = d3.layout.histogram().bins(x.ticks(20))(data); + data = d3.layout.histogram().bins(x.ticks(20))(data); // Create an array of the sizes of the bars var lengths = []; @@ -481,11 +484,12 @@ export function create_histogram(inp_data, name, title) { lengths.push(data[i].length); } + var zoom; // Find the amount needed to magnify the bars - if (d3.max(data) != 0) { - var zoom = height / d3.max(lengths); + if (d3.max(data) !== 0) { + zoom = height / d3.max(lengths); } else { - var zoom = 1.0; + zoom = 1.0; } // Create y axis metadata @@ -546,7 +550,7 @@ export function create_histogram(inp_data, name, title) { .append("g") .append("text") .attr("class", "title") - .attr("transform", e => `translate( ${width},15 )`) + .attr("transform", () => `translate( ${width},15 )`) .text(title); // Put bars on chart @@ -556,7 +560,7 @@ export function create_histogram(inp_data, name, title) { .enter() .append("g") .attr("class", "bar") - .attr("transform", d => `translate(${+x(d.x) + +margin.left},${+y(d.y) + +margin.top})`) + .attr("transform", d => `translate(${+x(d.x) + margin.left},${+y(d.y) + margin.top})`) .on("mouseenter", d => { // Show tool tip var i = 0; @@ -572,7 +576,7 @@ export function create_histogram(inp_data, name, title) { .select(currentEvent.path[1]) .select(".tool_tip") .select("text") - .attr("transform", `translate( ${margin.left - 5}, ${height - d.length * zoom + +margin.top + 10} )`) + .attr("transform", `translate( ${margin.left - 5}, ${height - d.length * zoom + margin.top + 10} )`) .attr("visibility", "visible") .text(d.length); @@ -582,12 +586,12 @@ export function create_histogram(inp_data, name, title) { .attr("width", `${wdth}px`) .attr("height", "15px") .select("rect") - .attr("transform", `translate( ${+margin.left - wdth}, ${height - d.length * zoom + +margin.top} )`) + .attr("transform", `translate( ${margin.left - wdth}, ${height - d.length * zoom + margin.top} )`) .attr("width", `${wdth}px`) .attr("height", "15px") .attr("fill", "#ebd9b2"); }) - .on("mouseleave", d => { + .on("mouseleave", () => { // Remove tool tip d3 .select(currentEvent.path[1]) @@ -606,7 +610,7 @@ export function create_histogram(inp_data, name, title) { // Create bar width var bar_x; - if (data[0] == undefined) { + if (data[0] === undefined) { bar_x = 1; } else { bar_x = x(data[0].dx); @@ -631,7 +635,7 @@ export function create_histogram(inp_data, name, title) { .append("g") .attr("class", "x axis") .attr("id", `x_${name}`) - .attr("transform", `translate( ${margin.left},${+height + +margin.top})`) + .attr("transform", `translate( ${margin.left},${+height + margin.top})`) .call(xAxis); // Add a title to the x axis @@ -639,10 +643,10 @@ export function create_histogram(inp_data, name, title) { .append("g") .append("text") .attr("class", "ax_title") - .attr("transform", e => { + .attr("transform", () => { var axis = d3.select(`#x_${name}`).node(); - var left_pad = +margin.left + axis.getBoundingClientRect().width / 2 + 30; - var top_pad = +margin.top + height + axis.getBoundingClientRect().height + 10; + var left_pad = margin.left + axis.getBoundingClientRect().width / 2 + 30; + var top_pad = margin.top + height + axis.getBoundingClientRect().height + 10; var trans = `translate(${left_pad},${top_pad})`; return trans; @@ -668,10 +672,10 @@ export function create_histogram(inp_data, name, title) { .append("g") .append("text") .attr("class", "ax_title") - .attr("transform", e => { + .attr("transform", () => { var axis = d3.select(`#y_${name}`).node(); - var left_pad = +margin.left - axis.getBoundingClientRect().width - 5; - var top_pad = +margin.top + axis.getBoundingClientRect().height / 2 - 30; + var left_pad = margin.left - axis.getBoundingClientRect().width - 5; + var top_pad = margin.top + axis.getBoundingClientRect().height / 2 - 30; var trans = `translate(${left_pad},${top_pad})rotate(-90)`; return trans; diff --git a/static/maps/reports_webapp/run_stats.js.map b/static/maps/reports_webapp/run_stats.js.map index ba1356a61d3..52f4ec1cb35 100644 --- a/static/maps/reports_webapp/run_stats.js.map +++ b/static/maps/reports_webapp/run_stats.js.map @@ -1 +1 @@ -{"version":3,"sources":["reports_webapp/run_stats.js"],"names":["date_by_subtracting_days","date","days","Date","getFullYear","create_chart","create_histogram","getHours","d3","getMinutes","getSeconds","getMilliseconds","date_by_subtracting_hours","hours","getMonth","getDate","get_utc_time_hours","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","inp_data","name","time","title","i","data","hours_array","now","push","days_array","margin","top","bottom","left","barWidth","chart_width","right","chart_zoom","max","width","chart_height","$","css","chart","select","curr_margin","attr","on","this","classes","zoom","height","selectAll","filter","transition","duration","click","style","bar","size","enter","append","d","path","wdth","m_x","m_y","l_x","l_y","text","_d","event","yAxis","svg","round","axis","left_pad","top_pad","trans","e","curr_day","y","scale","linear","range","_y2","first","tickFormat","text_height","call","locale","node","String","getBoundingClientRect","month","curr_month","curr_month_text","this_width","curr_day_text","toLocaleString","getBBox","lengths","formatMinutes","minutes","xAxis","x","layout","histogram","bins","ticks","length","domain","split","bar_x","undefined","dx","orient","Math","floor"],"mappings":"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","file":"../../scripts/reports_webapp/run_stats.js","sourcesContent":["import * as d3 from \"../libs/d3\";\nimport { event as currentEvent } from \"../libs/d3\";\n\nfunction date_by_subtracting_days(date, days) {\n return new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate() - days,\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds()\n );\n}\n\nfunction date_by_subtracting_hours(date, hours) {\n return new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours() - hours,\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds()\n );\n}\n\n// Gets the utc time without minutes and seconds\nfunction get_utc_time_hours() {\n var date = new Date();\n return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), 0, 0);\n}\n\n// This is commented out until we make Reports more responsive.\n// setTimeout(refresh, 60000); //1 minute = 60000 ms\n\nexport function create_chart(inp_data, name, time, title) {\n // Initialize starting variables\n var data = inp_data;\n\n var hours_array = [];\n var now = get_utc_time_hours();\n var i;\n for (i = 0; i < 24; i++) {\n hours_array.push(date_by_subtracting_hours(now, i));\n }\n\n var days_array = [];\n for (i = 0; i < 30; i++) {\n days_array.push(date_by_subtracting_days(now, i));\n }\n\n var margin = { top: 60, right: 30, bottom: 50, left: 60 };\n var width = 300;\n var barWidth = 0;\n if (time == \"hours\") {\n barWidth = width / 24;\n } else if (time == \"days\") {\n barWidth = width / 30;\n }\n var chart_width = width + margin.left + margin.right;\n\n var chart_zoom = 1.75;\n var height = 150;\n if (d3.max(data) != 0) {\n var zoom = height / d3.max(data);\n } else {\n var zoom = 1.0;\n }\n var chart_height = height + margin.top + margin.bottom;\n\n // Function for zooming in and out of charts\n function click() {\n var classes = d3.select(this).attr(\"class\");\n classes = classes.split(\" \");\n d3\n .selectAll(`.${classes[0]}`)\n .filter(`.${classes[1]}`)\n .style(\"cursor\", \"zoom-in\")\n .transition()\n .duration(750)\n .attr(\"height\", chart_height)\n .attr(\"width\", chart_width);\n\n d3\n .select(this)\n .style(\"cursor\", \"default\")\n .transition()\n .duration(750)\n .attr(\"height\", chart_height * chart_zoom)\n .attr(\"width\", chart_width * chart_zoom);\n }\n\n // Initialize all chart containers to have the correct height\n $(\".charts\").css(\"height\", chart_height * chart_zoom);\n\n // Create the chart object\n var chart = d3\n .select(`#${name}`)\n .attr(\"width\", chart_width)\n .attr(\"height\", chart_height)\n .attr(\"preserveAspectRatio\", \"xMidYMin\")\n .attr(\"viewBox\", `0 0 ${chart_width} ${chart_height}`)\n .on(\"click\", click);\n\n // Create bars on the chart and assosciate data with it\n var bar = chart\n .selectAll(\"g\")\n .data(data)\n .enter()\n .append(\"g\")\n .attr(\"transform\", (d, i) => {\n // Place the bar in the correct place\n var curr_margin = +margin.left;\n curr_margin += +(i * barWidth);\n return `translate(${curr_margin},${margin.top})`;\n })\n .on(\"mouseenter\", d => {\n // Show tool tip\n var i = 1;\n var size = d;\n\n while (size >= 10) {\n size = size / 10;\n i++;\n }\n\n var wdth = i * 4 + 10;\n d3\n .select(currentEvent.path[1])\n .select(\".tool_tip\")\n .select(\"text\")\n .attr(\"transform\", `translate( ${margin.left - 5}, ${height - d * zoom + +margin.top + 10} )`)\n .attr(\"visibility\", \"visible\")\n .text(d);\n\n d3\n .select(currentEvent.path[1])\n .select(\".tool_tip\")\n .attr(\"width\", `${wdth}px`)\n .attr(\"height\", \"15px\")\n .select(\"rect\")\n .attr(\"transform\", `translate( ${+margin.left - wdth}, ${height - d * zoom + +margin.top} )`)\n .attr(\"width\", `${wdth}px`)\n .attr(\"height\", \"15px\")\n .attr(\"fill\", \"#ebd9b2\");\n })\n .on(\"mouseleave\", d => {\n // Remove tool tip\n d3\n .select(currentEvent.path[1])\n .select(\".tool_tip\")\n .select(\"text\")\n .attr(\"visibility\", \"hidden\");\n\n d3\n .select(currentEvent.path[1])\n .select(\".tool_tip\")\n .select(\"rect\")\n .attr(\"width\", \"0\")\n .attr(\"height\", \"0\")\n .attr(\"fill\", \"\")\n .text(d);\n });\n\n // Add a title to the chart\n chart\n .append(\"g\")\n .append(\"text\")\n .attr(\"class\", \"title\")\n .attr(\"text-anchor\", \"end\")\n .attr(\"transform\", e => `translate( ${width},15 )`)\n .text(title);\n\n // Add an x axis line to the chart\n chart\n .append(\"g\")\n .attr(\"class\", \"axis\")\n .append(\"path\")\n .attr(\"class\", \"x\")\n .attr(\"d\", d => {\n var m_x = margin.left;\n var m_y = +margin.top + height;\n var l_x = m_x + width;\n var l_y = m_y;\n\n return `M${m_x} ${m_y} L ${l_x} ${l_y}`;\n });\n\n // Declare how high the y axis goes\n var y = d3.scale.linear().range([height, 0]);\n\n // Create a yAxis object\n var yAxis = d3.svg\n .axis()\n .scale(y)\n .orient(\"left\")\n .tickFormat(d => d3.round(d * d3.max(data), 0));\n\n // Put the y axis on the chart\n chart\n .append(\"g\")\n .attr(\"class\", \"y axis\")\n .attr(\"id\", `y_${name}`)\n .attr(\"text-anchor\", \"end\")\n .attr(\"transform\", `translate( ${margin.left},${margin.top})`)\n .call(yAxis)\n .select(\".domain\");\n\n // Put a title for y axis on chart\n chart\n .append(\"g\")\n .append(\"text\")\n .attr(\"class\", \"ax_title\")\n .attr(\"transform\", e => {\n var axis = d3.select(`#y_${name}`).node();\n var left_pad = +margin.left - axis.getBoundingClientRect().width - 5;\n var top_pad = +margin.top + axis.getBoundingClientRect().height / 2 - 30;\n var trans = `translate(${left_pad},${top_pad})rotate(-90)`;\n\n return trans;\n })\n .text(\"Number of Jobs\");\n\n // Add color to the chart's bars\n bar\n .append(\"rect\")\n .attr(\"y\", d => height - d * zoom)\n .attr(\"height\", d => d * zoom)\n .attr(\"width\", barWidth - 1);\n\n // Append x axis\n if (time == \"hours\") {\n // Append hour lines\n bar\n .append(\"line\")\n .attr(\"x1\", 0)\n .attr(\"y1\", 0)\n .attr(\"x2\", 0)\n .attr(\"y2\", 3)\n .attr(\"stroke\", \"black\")\n .attr(\"stroke-width\", 1)\n .attr(\"pointer-events\", \"none\")\n .attr(\"transform\", (d, i) => `translate( ${barWidth / 2}, ${height})`);\n\n // Append hour numbers\n bar\n .append(\"text\")\n .attr(\"fill\", \"rgb(0,0,0)\")\n .attr(\"transform\", `translate( 10, ${height + 10} )`)\n .text((d, i) => {\n var time = \"0000\";\n\n if (hours_array[i].getHours() < 10) {\n time = `0${String(hours_array[i].getHours())}`;\n } else {\n time = hours_array[i].getHours();\n }\n\n return time;\n });\n\n // Append day lines\n var curr_day = \"\";\n var first = false;\n bar\n .append(\"line\")\n .attr(\"x1\", 0)\n .attr(\"y1\", 0)\n .attr(\"x2\", 0)\n .attr(\"y2\", (d, i) => {\n var _y2 = 0;\n\n if (hours_array[i].getDate() != curr_day) {\n if (!first) {\n _y2 = 27;\n first = true;\n } else {\n _y2 = 20;\n }\n\n curr_day = hours_array[i].getDate();\n }\n\n return _y2;\n })\n .attr(\"stroke\", \"black\")\n .attr(\"stroke-width\", 1)\n .attr(\"pointer-events\", \"none\")\n .attr(\"transform\", (d, i) => `translate( 0, ${height})`);\n\n // Append day numbers\n curr_day = \"\";\n var curr_day_text = \"\";\n first = false;\n bar\n .append(\"text\")\n .attr(\"fill\", \"rgb(0,0,0)\")\n .attr(\"pointer-events\", \"none\")\n .text((d, i) => {\n var time = \"\";\n var locale = \"en-us\";\n\n if (hours_array[i].getDate() != curr_day_text) {\n time = String(hours_array[i].toLocaleString(locale, { month: \"long\" }));\n time += ` ${String(hours_array[i].getDate())}`;\n\n curr_day_text = hours_array[i].getDate();\n }\n\n return time;\n })\n .attr(\"transform\", function(d, i) {\n var text_height = height;\n var this_width = d3\n .select(this)\n .node()\n .getBBox().width;\n\n if (hours_array[i].getDate() != curr_day) {\n if (!first) {\n text_height += 26;\n first = true;\n } else {\n text_height += 18;\n }\n\n curr_day = hours_array[i].getDate();\n }\n\n return `translate( ${this_width + 2}, ${text_height} )`;\n });\n } else if (time == \"days\") {\n // Append day lines\n bar\n .append(\"line\")\n .attr(\"x1\", 0)\n .attr(\"y1\", 0)\n .attr(\"x2\", 0)\n .attr(\"y2\", 3)\n .attr(\"stroke\", \"black\")\n .attr(\"stroke-width\", 1)\n .attr(\"pointer-events\", \"none\")\n .attr(\"transform\", (d, i) => `translate( ${barWidth / 2}, ${height})`);\n\n // Append day numbers\n bar\n .append(\"text\")\n .attr(\"fill\", \"rgb(0,0,0)\")\n .attr(\"transform\", `translate( 9, ${height + 10} )`)\n .text((d, i) => {\n var time = \"0000\";\n\n if (days_array[i].getDate() < 10) {\n time = `0${String(days_array[i].getDate())}`;\n } else {\n time = days_array[i].getDate();\n }\n\n return time;\n });\n\n // Append month lines\n var curr_month = \"\";\n var first = false;\n bar\n .append(\"line\")\n .attr(\"x1\", 0)\n .attr(\"y1\", 0)\n .attr(\"x2\", 0)\n .attr(\"y2\", (d, i) => {\n var _y2 = 0;\n\n if (days_array[i].getMonth() != curr_month) {\n if (!first) {\n _y2 = 27;\n first = true;\n } else {\n _y2 = 20;\n }\n\n curr_month = days_array[i].getMonth();\n }\n\n return _y2;\n })\n .attr(\"stroke\", \"black\")\n .attr(\"stroke-width\", 1)\n .attr(\"pointer-events\", \"none\")\n .attr(\"transform\", (d, i) => `translate( 0, ${height})`);\n\n // Append month numbers\n curr_month = \"\";\n var curr_month_text = \"\";\n first = false;\n bar\n .append(\"text\")\n .attr(\"fill\", \"rgb(0,100,0)\")\n .attr(\"pointer-events\", \"none\")\n .text((d, i) => {\n var time = \"\";\n var locale = \"en-us\";\n\n if (days_array[i].getMonth() != curr_month_text) {\n time = String(days_array[i].toLocaleString(locale, { month: \"long\" }));\n time += ` ${String(days_array[i].getFullYear())}`;\n\n curr_month_text = days_array[i].getMonth();\n }\n\n return time;\n })\n .attr(\"transform\", function(d, i) {\n var text_height = height;\n var this_width = d3\n .select(this)\n .node()\n .getBBox().width;\n\n if (days_array[i].getMonth() != curr_month) {\n if (!first) {\n text_height += 26;\n first = true;\n } else {\n text_height += 18;\n }\n\n curr_month = days_array[i].getMonth();\n }\n\n return `translate( ${this_width + 2}, ${text_height} )`;\n });\n }\n\n // Put an invisible tool tip on the chart\n chart\n .append(\"g\")\n .attr(\"class\", \"tool_tip\")\n .append(\"rect\");\n chart.select(\".tool_tip\").append(\"text\");\n\n // Initialize initial zoomed charts\n if (name == \"jc_dy_chart\" || name == \"jc_hr_chart\") {\n d3\n .select(`#${name}`)\n .attr(\"height\", chart_height * chart_zoom)\n .attr(\"width\", chart_width * chart_zoom)\n .style(\"cursor\", \"default\");\n }\n}\n\n//============================================================================================================\n\nexport function create_histogram(inp_data, name, title) {\n // Initialize initial variables\n // inp_data is an array of numbers that are the amount of minutes per run\n var data = inp_data;\n\n var chart_zoom = 1.75;\n var margin = { top: 60, right: 30, bottom: 50, left: 60 };\n\n var height = 150;\n var chart_height = height + margin.top + margin.bottom;\n\n var width = 300;\n var chart_width = width + margin.left + margin.right;\n\n // Cereate x axis metadata\n // Used for x axis, histogram creation, and bar initialization\n var x = d3.scale\n .linear()\n .domain([0, d3.max(data)])\n .range([0, width]);\n\n // Generate a histogram using twenty uniformly-spaced bins.\n var data = d3.layout.histogram().bins(x.ticks(20))(data);\n\n // Create an array of the sizes of the bars\n var lengths = [];\n for (var i = 0; i < data.length; i++) {\n lengths.push(data[i].length);\n }\n\n // Find the amount needed to magnify the bars\n if (d3.max(data) != 0) {\n var zoom = height / d3.max(lengths);\n } else {\n var zoom = 1.0;\n }\n\n // Create y axis metadata\n // Used for y axis and bar initialization\n var y = d3.scale\n .linear()\n .domain([0, d3.max(data, d => d.y)])\n .range([height, 0]);\n\n // Function for zooming in and out of charts\n function click() {\n var classes = d3.select(this).attr(\"class\");\n classes = classes.split(\" \");\n d3\n .selectAll(`.${classes[0]}`)\n .filter(`.${classes[1]}`)\n .style(\"cursor\", \"zoom-in\")\n .transition()\n .duration(750)\n .attr(\"height\", chart_height)\n .attr(\"width\", chart_width);\n\n d3\n .select(this)\n .style(\"cursor\", \"default\")\n .transition()\n .duration(750)\n .attr(\"height\", chart_height * chart_zoom)\n .attr(\"width\", chart_width * chart_zoom);\n }\n\n // Formatter for x axis times (converting minutes to HH:MM).\n var formatMinutes = d => {\n var hours = Math.floor(d / 60);\n var minutes = Math.floor(d - hours * 60);\n\n if (hours < 10) {\n hours = `0${hours}`;\n }\n if (minutes < 10) {\n minutes = `0${minutes}`;\n }\n\n return `${hours}:${minutes}`;\n };\n\n // Create a chart object\n var chart = d3\n .select(`#${name}`)\n .attr(\"viewBox\", `0 0 ${chart_width} ${chart_height}`)\n .attr(\"width\", chart_width)\n .attr(\"height\", chart_height)\n .attr(\"preserveAspectRatio\", \"xMidYMin\")\n .on(\"click\", click);\n\n // Put title on chart\n chart\n .append(\"g\")\n .append(\"text\")\n .attr(\"class\", \"title\")\n .attr(\"transform\", e => `translate( ${width},15 )`)\n .text(title);\n\n // Put bars on chart\n var bar = chart\n .selectAll(\".bar\")\n .data(data)\n .enter()\n .append(\"g\")\n .attr(\"class\", \"bar\")\n .attr(\"transform\", d => `translate(${+x(d.x) + +margin.left},${+y(d.y) + +margin.top})`)\n .on(\"mouseenter\", d => {\n // Show tool tip\n var i = 0;\n\n var size = d.length;\n\n while (size >= 1) {\n size = size / 10;\n i++;\n }\n var wdth = i * 4 + 10;\n d3\n .select(currentEvent.path[1])\n .select(\".tool_tip\")\n .select(\"text\")\n .attr(\"transform\", `translate( ${margin.left - 5}, ${height - d.length * zoom + +margin.top + 10} )`)\n .attr(\"visibility\", \"visible\")\n .text(d.length);\n\n d3\n .select(currentEvent.path[1])\n .select(\".tool_tip\")\n .attr(\"width\", `${wdth}px`)\n .attr(\"height\", \"15px\")\n .select(\"rect\")\n .attr(\"transform\", `translate( ${+margin.left - wdth}, ${height - d.length * zoom + +margin.top} )`)\n .attr(\"width\", `${wdth}px`)\n .attr(\"height\", \"15px\")\n .attr(\"fill\", \"#ebd9b2\");\n })\n .on(\"mouseleave\", d => {\n // Remove tool tip\n d3\n .select(currentEvent.path[1])\n .select(\".tool_tip\")\n .select(\"text\")\n .attr(\"visibility\", \"hidden\");\n\n d3\n .select(currentEvent.path[1])\n .select(\".tool_tip\")\n .select(\"rect\")\n .attr(\"width\", \"0\")\n .attr(\"height\", \"0\")\n .attr(\"fill\", \"\");\n });\n\n // Create bar width\n var bar_x;\n if (data[0] == undefined) {\n bar_x = 1;\n } else {\n bar_x = x(data[0].dx);\n }\n\n // Add color to bar\n bar\n .append(\"rect\")\n .attr(\"x\", 1)\n .attr(\"width\", bar_x - 1)\n .attr(\"height\", d => height - y(d.y));\n\n // Create x axis\n var xAxis = d3.svg\n .axis()\n .scale(x)\n .orient(\"bottom\")\n .tickFormat(formatMinutes);\n\n // Add x axis to chart\n chart\n .append(\"g\")\n .attr(\"class\", \"x axis\")\n .attr(\"id\", `x_${name}`)\n .attr(\"transform\", `translate( ${margin.left},${+height + +margin.top})`)\n .call(xAxis);\n\n // Add a title to the x axis\n chart\n .append(\"g\")\n .append(\"text\")\n .attr(\"class\", \"ax_title\")\n .attr(\"transform\", e => {\n var axis = d3.select(`#x_${name}`).node();\n var left_pad = +margin.left + axis.getBoundingClientRect().width / 2 + 30;\n var top_pad = +margin.top + height + axis.getBoundingClientRect().height + 10;\n var trans = `translate(${left_pad},${top_pad})`;\n\n return trans;\n })\n .text(\"ETA - hrs:mins\");\n\n // Create y axis\n var yAxis = d3.svg\n .axis()\n .scale(y)\n .orient(\"left\");\n\n // Add y axis to chart\n chart\n .append(\"g\")\n .attr(\"class\", \"y axis\")\n .attr(\"id\", `y_${name}`)\n .attr(\"transform\", `translate( ${margin.left},${margin.top})`)\n .call(yAxis);\n\n // Add a title to the y axis\n chart\n .append(\"g\")\n .append(\"text\")\n .attr(\"class\", \"ax_title\")\n .attr(\"transform\", e => {\n var axis = d3.select(`#y_${name}`).node();\n var left_pad = +margin.left - axis.getBoundingClientRect().width - 5;\n var top_pad = +margin.top + axis.getBoundingClientRect().height / 2 - 30;\n var trans = `translate(${left_pad},${top_pad})rotate(-90)`;\n\n return trans;\n })\n .text(\"Number of Jobs\");\n\n // Put an invisible tool tip on the chart\n chart\n .append(\"g\")\n .attr(\"class\", \"tool_tip\")\n .append(\"rect\");\n chart.select(\".tool_tip\").append(\"text\");\n}\n"]} \ No newline at end of file +{"version":3,"sources":["reports_webapp/run_stats.js"],"names":["date_by_subtracting_days","date","days","Date","getFullYear","create_chart","create_histogram","getHours","d3","getMinutes","getSeconds","getMilliseconds","date_by_subtracting_hours","hours","getMonth","getDate","get_utc_time_hours","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","inp_data","name","time","title","i","data","hours_array","now","push","days_array","margin","top","bottom","left","barWidth","zoom","chart_width","right","chart_zoom","width","max","chart_height","$","css","chart","select","curr_margin","attr","on","this","height","classes","filter","transition","duration","click","style","bar","size","enter","append","d","path","wdth","m_x","m_y","l_x","l_y","text","_d","event","yAxis","svg","round","axis","left_pad","top_pad","trans","range","_y2","first","tickFormat","curr_day","call","curr_day_text","locale","node","getBoundingClientRect","text_height","String","curr_month","curr_month_text","this_width","toLocaleString","month","getBBox","layout","lengths","selectAll","minutes","floor","bar_x","xAxis","scale","x","linear","histogram","bins","ticks","length","y","domain","split","undefined","dx","orient","Math"],"mappings":"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","file":"../../scripts/reports_webapp/run_stats.js","sourcesContent":["import * as d3 from \"../libs/d3\";\nimport { event as currentEvent } from \"../libs/d3\";\n\nfunction date_by_subtracting_days(date, days) {\n return new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate() - days,\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds()\n );\n}\n\nfunction date_by_subtracting_hours(date, hours) {\n return new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours() - hours,\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds()\n );\n}\n\n// Gets the utc time without minutes and seconds\nfunction get_utc_time_hours() {\n var date = new Date();\n return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), 0, 0);\n}\n\n// This is commented out until we make Reports more responsive.\n// setTimeout(refresh, 60000); //1 minute = 60000 ms\n\nexport function create_chart(inp_data, name, time, title) {\n // Initialize starting variables\n var data = inp_data;\n\n var hours_array = [];\n var now = get_utc_time_hours();\n var i;\n for (i = 0; i < 24; i++) {\n hours_array.push(date_by_subtracting_hours(now, i));\n }\n\n var days_array = [];\n for (i = 0; i < 30; i++) {\n days_array.push(date_by_subtracting_days(now, i));\n }\n\n var margin = { top: 60, right: 30, bottom: 50, left: 60 };\n var width = 300;\n var barWidth = 0;\n if (time == \"hours\") {\n barWidth = width / 24;\n } else if (time == \"days\") {\n barWidth = width / 30;\n }\n var chart_width = width + margin.left + margin.right;\n\n var chart_zoom = 1.75;\n var height = 150;\n var zoom;\n if (d3.max(data) !== 0) {\n zoom = height / d3.max(data);\n } else {\n zoom = 1.0;\n }\n var chart_height = height + margin.top + margin.bottom;\n\n // Function for zooming in and out of charts\n function click() {\n var classes = d3.select(this).attr(\"class\");\n classes = classes.split(\" \");\n d3\n .selectAll(`.${classes[0]}`)\n .filter(`.${classes[1]}`)\n .style(\"cursor\", \"zoom-in\")\n .transition()\n .duration(750)\n .attr(\"height\", chart_height)\n .attr(\"width\", chart_width);\n\n d3\n .select(this)\n .style(\"cursor\", \"default\")\n .transition()\n .duration(750)\n .attr(\"height\", chart_height * chart_zoom)\n .attr(\"width\", chart_width * chart_zoom);\n }\n\n // Initialize all chart containers to have the correct height\n $(\".charts\").css(\"height\", chart_height * chart_zoom);\n\n // Create the chart object\n var chart = d3\n .select(`#${name}`)\n .attr(\"width\", chart_width)\n .attr(\"height\", chart_height)\n .attr(\"preserveAspectRatio\", \"xMidYMin\")\n .attr(\"viewBox\", `0 0 ${chart_width} ${chart_height}`)\n .on(\"click\", click);\n\n // Create bars on the chart and assosciate data with it\n var bar = chart\n .selectAll(\"g\")\n .data(data)\n .enter()\n .append(\"g\")\n .attr(\"transform\", (d, i) => {\n // Place the bar in the correct place\n var curr_margin = margin.left;\n curr_margin += +(i * barWidth);\n return `translate(${curr_margin},${margin.top})`;\n })\n .on(\"mouseenter\", d => {\n // Show tool tip\n var i = 1;\n var size = d;\n\n while (size >= 10) {\n size = size / 10;\n i++;\n }\n\n var wdth = i * 4 + 10;\n d3\n .select(currentEvent.path[1])\n .select(\".tool_tip\")\n .select(\"text\")\n .attr(\"transform\", `translate( ${margin.left - 5}, ${height - d * zoom + margin.top + 10} )`)\n .attr(\"visibility\", \"visible\")\n .text(d);\n\n d3\n .select(currentEvent.path[1])\n .select(\".tool_tip\")\n .attr(\"width\", `${wdth}px`)\n .attr(\"height\", \"15px\")\n .select(\"rect\")\n .attr(\"transform\", `translate( ${margin.left - wdth}, ${height - d * zoom + margin.top} )`)\n .attr(\"width\", `${wdth}px`)\n .attr(\"height\", \"15px\")\n .attr(\"fill\", \"#ebd9b2\");\n })\n .on(\"mouseleave\", d => {\n // Remove tool tip\n d3\n .select(currentEvent.path[1])\n .select(\".tool_tip\")\n .select(\"text\")\n .attr(\"visibility\", \"hidden\");\n\n d3\n .select(currentEvent.path[1])\n .select(\".tool_tip\")\n .select(\"rect\")\n .attr(\"width\", \"0\")\n .attr(\"height\", \"0\")\n .attr(\"fill\", \"\")\n .text(d);\n });\n\n // Add a title to the chart\n chart\n .append(\"g\")\n .append(\"text\")\n .attr(\"class\", \"title\")\n .attr(\"text-anchor\", \"end\")\n .attr(\"transform\", () => `translate( ${width},15 )`)\n .text(title);\n\n // Add an x axis line to the chart\n chart\n .append(\"g\")\n .attr(\"class\", \"axis\")\n .append(\"path\")\n .attr(\"class\", \"x\")\n .attr(\"d\", () => {\n var m_x = margin.left;\n var m_y = margin.top + height;\n var l_x = m_x + width;\n var l_y = m_y;\n\n return `M${m_x} ${m_y} L ${l_x} ${l_y}`;\n });\n\n // Declare how high the y axis goes\n var y = d3.scale.linear().range([height, 0]);\n\n // Create a yAxis object\n var yAxis = d3.svg\n .axis()\n .scale(y)\n .orient(\"left\")\n .tickFormat(d => d3.round(d * d3.max(data), 0));\n\n // Put the y axis on the chart\n chart\n .append(\"g\")\n .attr(\"class\", \"y axis\")\n .attr(\"id\", `y_${name}`)\n .attr(\"text-anchor\", \"end\")\n .attr(\"transform\", `translate( ${margin.left},${margin.top})`)\n .call(yAxis)\n .select(\".domain\");\n\n // Put a title for y axis on chart\n chart\n .append(\"g\")\n .append(\"text\")\n .attr(\"class\", \"ax_title\")\n .attr(\"transform\", () => {\n var axis = d3.select(`#y_${name}`).node();\n var left_pad = margin.left - axis.getBoundingClientRect().width - 5;\n var top_pad = margin.top + axis.getBoundingClientRect().height / 2 - 30;\n var trans = `translate(${left_pad},${top_pad})rotate(-90)`;\n\n return trans;\n })\n .text(\"Number of Jobs\");\n\n // Add color to the chart's bars\n bar\n .append(\"rect\")\n .attr(\"y\", d => height - d * zoom)\n .attr(\"height\", d => d * zoom)\n .attr(\"width\", barWidth - 1);\n\n var first = false;\n\n // Append x axis\n if (time == \"hours\") {\n // Append hour lines\n bar\n .append(\"line\")\n .attr(\"x1\", 0)\n .attr(\"y1\", 0)\n .attr(\"x2\", 0)\n .attr(\"y2\", 3)\n .attr(\"stroke\", \"black\")\n .attr(\"stroke-width\", 1)\n .attr(\"pointer-events\", \"none\")\n .attr(\"transform\", () => `translate( ${barWidth / 2}, ${height})`);\n\n // Append hour numbers\n bar\n .append(\"text\")\n .attr(\"fill\", \"rgb(0,0,0)\")\n .attr(\"transform\", `translate( 10, ${height + 10} )`)\n .text((d, i) => {\n var time = \"0000\";\n\n if (hours_array[i].getHours() < 10) {\n time = `0${String(hours_array[i].getHours())}`;\n } else {\n time = hours_array[i].getHours();\n }\n\n return time;\n });\n\n // Append day lines\n var curr_day = \"\";\n first = false;\n bar\n .append(\"line\")\n .attr(\"x1\", 0)\n .attr(\"y1\", 0)\n .attr(\"x2\", 0)\n .attr(\"y2\", (d, i) => {\n var _y2 = 0;\n\n if (hours_array[i].getDate() != curr_day) {\n if (!first) {\n _y2 = 27;\n first = true;\n } else {\n _y2 = 20;\n }\n\n curr_day = hours_array[i].getDate();\n }\n\n return _y2;\n })\n .attr(\"stroke\", \"black\")\n .attr(\"stroke-width\", 1)\n .attr(\"pointer-events\", \"none\")\n .attr(\"transform\", () => `translate( 0, ${height})`);\n\n // Append day numbers\n curr_day = \"\";\n var curr_day_text = \"\";\n first = false;\n bar\n .append(\"text\")\n .attr(\"fill\", \"rgb(0,0,0)\")\n .attr(\"pointer-events\", \"none\")\n .text((d, i) => {\n var time = \"\";\n var locale = \"en-us\";\n\n if (hours_array[i].getDate() != curr_day_text) {\n time = String(hours_array[i].toLocaleString(locale, { month: \"long\" }));\n time += ` ${String(hours_array[i].getDate())}`;\n\n curr_day_text = hours_array[i].getDate();\n }\n\n return time;\n })\n .attr(\"transform\", function(d, i) {\n var text_height = height;\n var this_width = d3\n .select(this)\n .node()\n .getBBox().width;\n\n if (hours_array[i].getDate() != curr_day) {\n if (!first) {\n text_height += 26;\n first = true;\n } else {\n text_height += 18;\n }\n\n curr_day = hours_array[i].getDate();\n }\n\n return `translate( ${this_width + 2}, ${text_height} )`;\n });\n } else if (time == \"days\") {\n // Append day lines\n bar\n .append(\"line\")\n .attr(\"x1\", 0)\n .attr(\"y1\", 0)\n .attr(\"x2\", 0)\n .attr(\"y2\", 3)\n .attr(\"stroke\", \"black\")\n .attr(\"stroke-width\", 1)\n .attr(\"pointer-events\", \"none\")\n .attr(\"transform\", () => `translate( ${barWidth / 2}, ${height})`);\n\n // Append day numbers\n bar\n .append(\"text\")\n .attr(\"fill\", \"rgb(0,0,0)\")\n .attr(\"transform\", `translate( 9, ${height + 10} )`)\n .text((d, i) => {\n var time = \"0000\";\n\n if (days_array[i].getDate() < 10) {\n time = `0${String(days_array[i].getDate())}`;\n } else {\n time = days_array[i].getDate();\n }\n\n return time;\n });\n\n // Append month lines\n var curr_month = \"\";\n first = false;\n bar\n .append(\"line\")\n .attr(\"x1\", 0)\n .attr(\"y1\", 0)\n .attr(\"x2\", 0)\n .attr(\"y2\", (d, i) => {\n var _y2 = 0;\n\n if (days_array[i].getMonth() != curr_month) {\n if (!first) {\n _y2 = 27;\n first = true;\n } else {\n _y2 = 20;\n }\n\n curr_month = days_array[i].getMonth();\n }\n\n return _y2;\n })\n .attr(\"stroke\", \"black\")\n .attr(\"stroke-width\", 1)\n .attr(\"pointer-events\", \"none\")\n .attr(\"transform\", () => `translate( 0, ${height})`);\n\n // Append month numbers\n curr_month = \"\";\n var curr_month_text = \"\";\n first = false;\n bar\n .append(\"text\")\n .attr(\"fill\", \"rgb(0,100,0)\")\n .attr(\"pointer-events\", \"none\")\n .text((d, i) => {\n var time = \"\";\n var locale = \"en-us\";\n\n if (days_array[i].getMonth() != curr_month_text) {\n time = String(days_array[i].toLocaleString(locale, { month: \"long\" }));\n time += ` ${String(days_array[i].getFullYear())}`;\n\n curr_month_text = days_array[i].getMonth();\n }\n\n return time;\n })\n .attr(\"transform\", function(d, i) {\n var text_height = height;\n var this_width = d3\n .select(this)\n .node()\n .getBBox().width;\n\n if (days_array[i].getMonth() != curr_month) {\n if (!first) {\n text_height += 26;\n first = true;\n } else {\n text_height += 18;\n }\n\n curr_month = days_array[i].getMonth();\n }\n\n return `translate( ${this_width + 2}, ${text_height} )`;\n });\n }\n\n // Put an invisible tool tip on the chart\n chart\n .append(\"g\")\n .attr(\"class\", \"tool_tip\")\n .append(\"rect\");\n chart.select(\".tool_tip\").append(\"text\");\n\n // Initialize initial zoomed charts\n if (name == \"jc_dy_chart\" || name == \"jc_hr_chart\") {\n d3\n .select(`#${name}`)\n .attr(\"height\", chart_height * chart_zoom)\n .attr(\"width\", chart_width * chart_zoom)\n .style(\"cursor\", \"default\");\n }\n}\n\n//============================================================================================================\n\nexport function create_histogram(inp_data, name, title) {\n // Initialize initial variables\n // inp_data is an array of numbers that are the amount of minutes per run\n var data = inp_data;\n\n var chart_zoom = 1.75;\n var margin = { top: 60, right: 30, bottom: 50, left: 60 };\n\n var height = 150;\n var chart_height = height + margin.top + margin.bottom;\n\n var width = 300;\n var chart_width = width + margin.left + margin.right;\n\n // Cereate x axis metadata\n // Used for x axis, histogram creation, and bar initialization\n var x = d3.scale\n .linear()\n .domain([0, d3.max(data)])\n .range([0, width]);\n\n // Generate a histogram using twenty uniformly-spaced bins.\n data = d3.layout.histogram().bins(x.ticks(20))(data);\n\n // Create an array of the sizes of the bars\n var lengths = [];\n for (var i = 0; i < data.length; i++) {\n lengths.push(data[i].length);\n }\n\n var zoom;\n // Find the amount needed to magnify the bars\n if (d3.max(data) !== 0) {\n zoom = height / d3.max(lengths);\n } else {\n zoom = 1.0;\n }\n\n // Create y axis metadata\n // Used for y axis and bar initialization\n var y = d3.scale\n .linear()\n .domain([0, d3.max(data, d => d.y)])\n .range([height, 0]);\n\n // Function for zooming in and out of charts\n function click() {\n var classes = d3.select(this).attr(\"class\");\n classes = classes.split(\" \");\n d3\n .selectAll(`.${classes[0]}`)\n .filter(`.${classes[1]}`)\n .style(\"cursor\", \"zoom-in\")\n .transition()\n .duration(750)\n .attr(\"height\", chart_height)\n .attr(\"width\", chart_width);\n\n d3\n .select(this)\n .style(\"cursor\", \"default\")\n .transition()\n .duration(750)\n .attr(\"height\", chart_height * chart_zoom)\n .attr(\"width\", chart_width * chart_zoom);\n }\n\n // Formatter for x axis times (converting minutes to HH:MM).\n var formatMinutes = d => {\n var hours = Math.floor(d / 60);\n var minutes = Math.floor(d - hours * 60);\n\n if (hours < 10) {\n hours = `0${hours}`;\n }\n if (minutes < 10) {\n minutes = `0${minutes}`;\n }\n\n return `${hours}:${minutes}`;\n };\n\n // Create a chart object\n var chart = d3\n .select(`#${name}`)\n .attr(\"viewBox\", `0 0 ${chart_width} ${chart_height}`)\n .attr(\"width\", chart_width)\n .attr(\"height\", chart_height)\n .attr(\"preserveAspectRatio\", \"xMidYMin\")\n .on(\"click\", click);\n\n // Put title on chart\n chart\n .append(\"g\")\n .append(\"text\")\n .attr(\"class\", \"title\")\n .attr(\"transform\", () => `translate( ${width},15 )`)\n .text(title);\n\n // Put bars on chart\n var bar = chart\n .selectAll(\".bar\")\n .data(data)\n .enter()\n .append(\"g\")\n .attr(\"class\", \"bar\")\n .attr(\"transform\", d => `translate(${+x(d.x) + margin.left},${+y(d.y) + margin.top})`)\n .on(\"mouseenter\", d => {\n // Show tool tip\n var i = 0;\n\n var size = d.length;\n\n while (size >= 1) {\n size = size / 10;\n i++;\n }\n var wdth = i * 4 + 10;\n d3\n .select(currentEvent.path[1])\n .select(\".tool_tip\")\n .select(\"text\")\n .attr(\"transform\", `translate( ${margin.left - 5}, ${height - d.length * zoom + margin.top + 10} )`)\n .attr(\"visibility\", \"visible\")\n .text(d.length);\n\n d3\n .select(currentEvent.path[1])\n .select(\".tool_tip\")\n .attr(\"width\", `${wdth}px`)\n .attr(\"height\", \"15px\")\n .select(\"rect\")\n .attr(\"transform\", `translate( ${margin.left - wdth}, ${height - d.length * zoom + margin.top} )`)\n .attr(\"width\", `${wdth}px`)\n .attr(\"height\", \"15px\")\n .attr(\"fill\", \"#ebd9b2\");\n })\n .on(\"mouseleave\", () => {\n // Remove tool tip\n d3\n .select(currentEvent.path[1])\n .select(\".tool_tip\")\n .select(\"text\")\n .attr(\"visibility\", \"hidden\");\n\n d3\n .select(currentEvent.path[1])\n .select(\".tool_tip\")\n .select(\"rect\")\n .attr(\"width\", \"0\")\n .attr(\"height\", \"0\")\n .attr(\"fill\", \"\");\n });\n\n // Create bar width\n var bar_x;\n if (data[0] === undefined) {\n bar_x = 1;\n } else {\n bar_x = x(data[0].dx);\n }\n\n // Add color to bar\n bar\n .append(\"rect\")\n .attr(\"x\", 1)\n .attr(\"width\", bar_x - 1)\n .attr(\"height\", d => height - y(d.y));\n\n // Create x axis\n var xAxis = d3.svg\n .axis()\n .scale(x)\n .orient(\"bottom\")\n .tickFormat(formatMinutes);\n\n // Add x axis to chart\n chart\n .append(\"g\")\n .attr(\"class\", \"x axis\")\n .attr(\"id\", `x_${name}`)\n .attr(\"transform\", `translate( ${margin.left},${+height + margin.top})`)\n .call(xAxis);\n\n // Add a title to the x axis\n chart\n .append(\"g\")\n .append(\"text\")\n .attr(\"class\", \"ax_title\")\n .attr(\"transform\", () => {\n var axis = d3.select(`#x_${name}`).node();\n var left_pad = margin.left + axis.getBoundingClientRect().width / 2 + 30;\n var top_pad = margin.top + height + axis.getBoundingClientRect().height + 10;\n var trans = `translate(${left_pad},${top_pad})`;\n\n return trans;\n })\n .text(\"ETA - hrs:mins\");\n\n // Create y axis\n var yAxis = d3.svg\n .axis()\n .scale(y)\n .orient(\"left\");\n\n // Add y axis to chart\n chart\n .append(\"g\")\n .attr(\"class\", \"y axis\")\n .attr(\"id\", `y_${name}`)\n .attr(\"transform\", `translate( ${margin.left},${margin.top})`)\n .call(yAxis);\n\n // Add a title to the y axis\n chart\n .append(\"g\")\n .append(\"text\")\n .attr(\"class\", \"ax_title\")\n .attr(\"transform\", () => {\n var axis = d3.select(`#y_${name}`).node();\n var left_pad = margin.left - axis.getBoundingClientRect().width - 5;\n var top_pad = margin.top + axis.getBoundingClientRect().height / 2 - 30;\n var trans = `translate(${left_pad},${top_pad})rotate(-90)`;\n\n return trans;\n })\n .text(\"Number of Jobs\");\n\n // Put an invisible tool tip on the chart\n chart\n .append(\"g\")\n .attr(\"class\", \"tool_tip\")\n .append(\"rect\");\n chart.select(\".tool_tip\").append(\"text\");\n}\n"]} \ No newline at end of file diff --git a/static/scripts/reports_webapp/run_stats.js b/static/scripts/reports_webapp/run_stats.js index d2a83d394df..8113942eebf 100644 --- a/static/scripts/reports_webapp/run_stats.js +++ b/static/scripts/reports_webapp/run_stats.js @@ -1,2 +1,2 @@ -define("reports_webapp/run_stats",["exports","../libs/d3"],function(t,e){"use strict";function r(t,e){return new Date(t.getFullYear(),t.getMonth(),t.getDate()-e,t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds())}function a(t,e){return new Date(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours()-e,t.getMinutes(),t.getSeconds(),t.getMilliseconds())}function n(){var t=new Date;return new Date(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),t.getUTCHours(),0,0)}Object.defineProperty(t,"__esModule",{value:!0}),t.create_chart=function(t,i,s,l){var c,p=t,u=[],h=n();for(c=0;c<24;c++)u.push(a(h,c));var g=[];for(c=0;c<30;c++)g.push(r(h,c));var f={top:60,right:30,bottom:50,left:60},d=0;"hours"==s?d=12.5:"days"==s&&(d=10);var x=300+f.left+f.right,v=1.75;if(0!=o.max(p))m=150/o.max(p);else var m=1;var b=150+f.top+f.bottom;$(".charts").css("height",b*v);var y=o.select("#"+i).attr("width",x).attr("height",b).attr("preserveAspectRatio","xMidYMin").attr("viewBox","0 0 "+x+" "+b).on("click",function(){var t=o.select(this).attr("class");t=t.split(" "),o.selectAll("."+t[0]).filter("."+t[1]).style("cursor","zoom-in").transition().duration(750).attr("height",b).attr("width",x),o.select(this).style("cursor","default").transition().duration(750).attr("height",b*v).attr("width",x*v)}),_=y.selectAll("g").data(p).enter().append("g").attr("transform",function(t,e){var r=+f.left;return"translate("+(r+=+e*d)+","+f.top+")"}).on("mouseenter",function(t){for(var r=1,a=t;a>=10;)a/=10,r++;var n=4*r+10;o.select(e.event.path[1]).select(".tool_tip").select("text").attr("transform","translate( "+(f.left-5)+", "+(150-t*m+ +f.top+10)+" )").attr("visibility","visible").text(t),o.select(e.event.path[1]).select(".tool_tip").attr("width",n+"px").attr("height","15px").select("rect").attr("transform","translate( "+(+f.left-n)+", "+(150-t*m+ +f.top)+" )").attr("width",n+"px").attr("height","15px").attr("fill","#ebd9b2")}).on("mouseleave",function(t){o.select(e.event.path[1]).select(".tool_tip").select("text").attr("visibility","hidden"),o.select(e.event.path[1]).select(".tool_tip").select("rect").attr("width","0").attr("height","0").attr("fill","").text(t)});y.append("g").append("text").attr("class","title").attr("text-anchor","end").attr("transform",function(t){return"translate( 300,15 )"}).text(l),y.append("g").attr("class","axis").append("path").attr("class","x").attr("d",function(t){var e=f.left,r=+f.top+150;return"M"+e+" "+r+" L "+(e+300)+" "+r});var w=o.scale.linear().range([150,0]),M=o.svg.axis().scale(w).orient("left").tickFormat(function(t){return o.round(t*o.max(p),0)});if(y.append("g").attr("class","y axis").attr("id","y_"+i).attr("text-anchor","end").attr("transform","translate( "+f.left+","+f.top+")").call(M).select(".domain"),y.append("g").append("text").attr("class","ax_title").attr("transform",function(t){var e=o.select("#y_"+i).node();return"translate("+(+f.left-e.getBoundingClientRect().width-5)+","+(+f.top+e.getBoundingClientRect().height/2-30)+")rotate(-90)"}).text("Number of Jobs"),_.append("rect").attr("y",function(t){return 150-t*m}).attr("height",function(t){return t*m}).attr("width",d-1),"hours"==s){_.append("line").attr("x1",0).attr("y1",0).attr("x2",0).attr("y2",3).attr("stroke","black").attr("stroke-width",1).attr("pointer-events","none").attr("transform",function(t,e){return"translate( "+d/2+", 150)"}),_.append("text").attr("fill","rgb(0,0,0)").attr("transform","translate( 10, 160 )").text(function(t,e){return u[e].getHours()<10?"0"+String(u[e].getHours()):u[e].getHours()});var k="",D=!1;_.append("line").attr("x1",0).attr("y1",0).attr("x2",0).attr("y2",function(t,e){var r=0;return u[e].getDate()!=k&&(D?r=20:(r=27,D=!0),k=u[e].getDate()),r}).attr("stroke","black").attr("stroke-width",1).attr("pointer-events","none").attr("transform",function(t,e){return"translate( 0, 150)"}),k="";var B="";D=!1,_.append("text").attr("fill","rgb(0,0,0)").attr("pointer-events","none").text(function(t,e){var r="";return u[e].getDate()!=B&&(r=String(u[e].toLocaleString("en-us",{month:"long"})),r+=" "+String(u[e].getDate()),B=u[e].getDate()),r}).attr("transform",function(t,e){var r=150,a=o.select(this).node().getBBox().width;return u[e].getDate()!=k&&(D?r+=18:(r+=26,D=!0),k=u[e].getDate()),"translate( "+(a+2)+", "+r+" )"})}else if("days"==s){_.append("line").attr("x1",0).attr("y1",0).attr("x2",0).attr("y2",3).attr("stroke","black").attr("stroke-width",1).attr("pointer-events","none").attr("transform",function(t,e){return"translate( "+d/2+", 150)"}),_.append("text").attr("fill","rgb(0,0,0)").attr("transform","translate( 9, 160 )").text(function(t,e){return g[e].getDate()<10?"0"+String(g[e].getDate()):g[e].getDate()});var C="",D=!1;_.append("line").attr("x1",0).attr("y1",0).attr("x2",0).attr("y2",function(t,e){var r=0;return g[e].getMonth()!=C&&(D?r=20:(r=27,D=!0),C=g[e].getMonth()),r}).attr("stroke","black").attr("stroke-width",1).attr("pointer-events","none").attr("transform",function(t,e){return"translate( 0, 150)"}),C="";var S="";D=!1,_.append("text").attr("fill","rgb(0,100,0)").attr("pointer-events","none").text(function(t,e){var r="";return g[e].getMonth()!=S&&(r=String(g[e].toLocaleString("en-us",{month:"long"})),r+=" "+String(g[e].getFullYear()),S=g[e].getMonth()),r}).attr("transform",function(t,e){var r=150,a=o.select(this).node().getBBox().width;return g[e].getMonth()!=C&&(D?r+=18:(r+=26,D=!0),C=g[e].getMonth()),"translate( "+(a+2)+", "+r+" )"})}y.append("g").attr("class","tool_tip").append("rect"),y.select(".tool_tip").append("text"),"jc_dy_chart"!=i&&"jc_hr_chart"!=i||o.select("#"+i).attr("height",b*v).attr("width",x*v).style("cursor","default")},t.create_histogram=function(t,r,a){for(var n=t,i=1.75,s={top:60,right:30,bottom:50,left:60},l=150+s.top+s.bottom,c=300+s.left+s.right,p=o.scale.linear().domain([0,o.max(n)]).range([0,300]),n=o.layout.histogram().bins(p.ticks(20))(n),u=[],h=0;h=1;)a/=10,r++;var n=4*r+10;o.select(e.event.path[1]).select(".tool_tip").select("text").attr("transform","translate( "+(s.left-5)+", "+(150-t.length*g+ +s.top+10)+" )").attr("visibility","visible").text(t.length),o.select(e.event.path[1]).select(".tool_tip").attr("width",n+"px").attr("height","15px").select("rect").attr("transform","translate( "+(+s.left-n)+", "+(150-t.length*g+ +s.top)+" )").attr("width",n+"px").attr("height","15px").attr("fill","#ebd9b2")}).on("mouseleave",function(t){o.select(e.event.path[1]).select(".tool_tip").select("text").attr("visibility","hidden"),o.select(e.event.path[1]).select(".tool_tip").select("rect").attr("width","0").attr("height","0").attr("fill","")});x=void 0==n[0]?1:p(n[0].dx),v.append("rect").attr("x",1).attr("width",x-1).attr("height",function(t){return 150-f(t.y)});var m=o.svg.axis().scale(p).orient("bottom").tickFormat(function(t){var e=Math.floor(t/60),r=Math.floor(t-60*e);return e<10&&(e="0"+e),r<10&&(r="0"+r),e+":"+r});d.append("g").attr("class","x axis").attr("id","x_"+r).attr("transform","translate( "+s.left+","+(+s.top+150)+")").call(m),d.append("g").append("text").attr("class","ax_title").attr("transform",function(t){var e=o.select("#x_"+r).node();return"translate("+(+s.left+e.getBoundingClientRect().width/2+30)+","+(+s.top+150+e.getBoundingClientRect().height+10)+")"}).text("ETA - hrs:mins");var b=o.svg.axis().scale(f).orient("left");d.append("g").attr("class","y axis").attr("id","y_"+r).attr("transform","translate( "+s.left+","+s.top+")").call(b),d.append("g").append("text").attr("class","ax_title").attr("transform",function(t){var e=o.select("#y_"+r).node();return"translate("+(+s.left-e.getBoundingClientRect().width-5)+","+(+s.top+e.getBoundingClientRect().height/2-30)+")rotate(-90)"}).text("Number of Jobs"),d.append("g").attr("class","tool_tip").append("rect"),d.select(".tool_tip").append("text")};var o=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e}(e)}); +define("reports_webapp/run_stats",["exports","../libs/d3"],function(t,e){"use strict";function r(t,e){return new Date(t.getFullYear(),t.getMonth(),t.getDate()-e,t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds())}function a(t,e){return new Date(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours()-e,t.getMinutes(),t.getSeconds(),t.getMilliseconds())}function n(){var t=new Date;return new Date(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),t.getUTCHours(),0,0)}Object.defineProperty(t,"__esModule",{value:!0}),t.create_chart=function(t,i,s,l){var c,p=t,u=[],h=n();for(c=0;c<24;c++)u.push(a(h,c));var g=[];for(c=0;c<30;c++)g.push(r(h,c));var d={top:60,right:30,bottom:50,left:60},f=0;"hours"==s?f=12.5:"days"==s&&(f=10);var x,v=300+d.left+d.right,m=1.75;x=0!==o.max(p)?150/o.max(p):1;var b=150+d.top+d.bottom;$(".charts").css("height",b*m);var y=o.select("#"+i).attr("width",v).attr("height",b).attr("preserveAspectRatio","xMidYMin").attr("viewBox","0 0 "+v+" "+b).on("click",function(){var t=o.select(this).attr("class");t=t.split(" "),o.selectAll("."+t[0]).filter("."+t[1]).style("cursor","zoom-in").transition().duration(750).attr("height",b).attr("width",v),o.select(this).style("cursor","default").transition().duration(750).attr("height",b*m).attr("width",v*m)}),_=y.selectAll("g").data(p).enter().append("g").attr("transform",function(t,e){var r=d.left;return"translate("+(r+=+e*f)+","+d.top+")"}).on("mouseenter",function(t){for(var r=1,a=t;a>=10;)a/=10,r++;var n=4*r+10;o.select(e.event.path[1]).select(".tool_tip").select("text").attr("transform","translate( "+(d.left-5)+", "+(150-t*x+d.top+10)+" )").attr("visibility","visible").text(t),o.select(e.event.path[1]).select(".tool_tip").attr("width",n+"px").attr("height","15px").select("rect").attr("transform","translate( "+(d.left-n)+", "+(150-t*x+d.top)+" )").attr("width",n+"px").attr("height","15px").attr("fill","#ebd9b2")}).on("mouseleave",function(t){o.select(e.event.path[1]).select(".tool_tip").select("text").attr("visibility","hidden"),o.select(e.event.path[1]).select(".tool_tip").select("rect").attr("width","0").attr("height","0").attr("fill","").text(t)});y.append("g").append("text").attr("class","title").attr("text-anchor","end").attr("transform",function(){return"translate( 300,15 )"}).text(l),y.append("g").attr("class","axis").append("path").attr("class","x").attr("d",function(){var t=d.left,e=d.top+150;return"M"+t+" "+e+" L "+(t+300)+" "+e});var w=o.scale.linear().range([150,0]),M=o.svg.axis().scale(w).orient("left").tickFormat(function(t){return o.round(t*o.max(p),0)});y.append("g").attr("class","y axis").attr("id","y_"+i).attr("text-anchor","end").attr("transform","translate( "+d.left+","+d.top+")").call(M).select(".domain"),y.append("g").append("text").attr("class","ax_title").attr("transform",function(){var t=o.select("#y_"+i).node();return"translate("+(d.left-t.getBoundingClientRect().width-5)+","+(d.top+t.getBoundingClientRect().height/2-30)+")rotate(-90)"}).text("Number of Jobs"),_.append("rect").attr("y",function(t){return 150-t*x}).attr("height",function(t){return t*x}).attr("width",f-1);var k=!1;if("hours"==s){_.append("line").attr("x1",0).attr("y1",0).attr("x2",0).attr("y2",3).attr("stroke","black").attr("stroke-width",1).attr("pointer-events","none").attr("transform",function(){return"translate( "+f/2+", 150)"}),_.append("text").attr("fill","rgb(0,0,0)").attr("transform","translate( 10, 160 )").text(function(t,e){return u[e].getHours()<10?"0"+String(u[e].getHours()):u[e].getHours()});var D="";k=!1,_.append("line").attr("x1",0).attr("y1",0).attr("x2",0).attr("y2",function(t,e){var r=0;return u[e].getDate()!=D&&(k?r=20:(r=27,k=!0),D=u[e].getDate()),r}).attr("stroke","black").attr("stroke-width",1).attr("pointer-events","none").attr("transform",function(){return"translate( 0, 150)"}),D="";var B="";k=!1,_.append("text").attr("fill","rgb(0,0,0)").attr("pointer-events","none").text(function(t,e){var r="";return u[e].getDate()!=B&&(r=String(u[e].toLocaleString("en-us",{month:"long"})),r+=" "+String(u[e].getDate()),B=u[e].getDate()),r}).attr("transform",function(t,e){var r=150,a=o.select(this).node().getBBox().width;return u[e].getDate()!=D&&(k?r+=18:(r+=26,k=!0),D=u[e].getDate()),"translate( "+(a+2)+", "+r+" )"})}else if("days"==s){_.append("line").attr("x1",0).attr("y1",0).attr("x2",0).attr("y2",3).attr("stroke","black").attr("stroke-width",1).attr("pointer-events","none").attr("transform",function(){return"translate( "+f/2+", 150)"}),_.append("text").attr("fill","rgb(0,0,0)").attr("transform","translate( 9, 160 )").text(function(t,e){return g[e].getDate()<10?"0"+String(g[e].getDate()):g[e].getDate()});var C="";k=!1,_.append("line").attr("x1",0).attr("y1",0).attr("x2",0).attr("y2",function(t,e){var r=0;return g[e].getMonth()!=C&&(k?r=20:(r=27,k=!0),C=g[e].getMonth()),r}).attr("stroke","black").attr("stroke-width",1).attr("pointer-events","none").attr("transform",function(){return"translate( 0, 150)"}),C="";var S="";k=!1,_.append("text").attr("fill","rgb(0,100,0)").attr("pointer-events","none").text(function(t,e){var r="";return g[e].getMonth()!=S&&(r=String(g[e].toLocaleString("en-us",{month:"long"})),r+=" "+String(g[e].getFullYear()),S=g[e].getMonth()),r}).attr("transform",function(t,e){var r=150,a=o.select(this).node().getBBox().width;return g[e].getMonth()!=C&&(k?r+=18:(r+=26,k=!0),C=g[e].getMonth()),"translate( "+(a+2)+", "+r+" )"})}y.append("g").attr("class","tool_tip").append("rect"),y.select(".tool_tip").append("text"),"jc_dy_chart"!=i&&"jc_hr_chart"!=i||o.select("#"+i).attr("height",b*m).attr("width",v*m).style("cursor","default")},t.create_histogram=function(t,r,a){var n=t,i=1.75,s={top:60,right:30,bottom:50,left:60},l=150+s.top+s.bottom,c=300+s.left+s.right,p=o.scale.linear().domain([0,o.max(n)]).range([0,300]);n=o.layout.histogram().bins(p.ticks(20))(n);for(var u=[],h=0;h=1;)a/=10,r++;var n=4*r+10;o.select(e.event.path[1]).select(".tool_tip").select("text").attr("transform","translate( "+(s.left-5)+", "+(150-t.length*g+s.top+10)+" )").attr("visibility","visible").text(t.length),o.select(e.event.path[1]).select(".tool_tip").attr("width",n+"px").attr("height","15px").select("rect").attr("transform","translate( "+(s.left-n)+", "+(150-t.length*g+s.top)+" )").attr("width",n+"px").attr("height","15px").attr("fill","#ebd9b2")}).on("mouseleave",function(){o.select(e.event.path[1]).select(".tool_tip").select("text").attr("visibility","hidden"),o.select(e.event.path[1]).select(".tool_tip").select("rect").attr("width","0").attr("height","0").attr("fill","")});x=void 0===n[0]?1:p(n[0].dx),v.append("rect").attr("x",1).attr("width",x-1).attr("height",function(t){return 150-d(t.y)});var m=o.svg.axis().scale(p).orient("bottom").tickFormat(function(t){var e=Math.floor(t/60),r=Math.floor(t-60*e);return e<10&&(e="0"+e),r<10&&(r="0"+r),e+":"+r});f.append("g").attr("class","x axis").attr("id","x_"+r).attr("transform","translate( "+s.left+","+(150+s.top)+")").call(m),f.append("g").append("text").attr("class","ax_title").attr("transform",function(){var t=o.select("#x_"+r).node();return"translate("+(s.left+t.getBoundingClientRect().width/2+30)+","+(s.top+150+t.getBoundingClientRect().height+10)+")"}).text("ETA - hrs:mins");var b=o.svg.axis().scale(d).orient("left");f.append("g").attr("class","y axis").attr("id","y_"+r).attr("transform","translate( "+s.left+","+s.top+")").call(b),f.append("g").append("text").attr("class","ax_title").attr("transform",function(){var t=o.select("#y_"+r).node();return"translate("+(s.left-t.getBoundingClientRect().width-5)+","+(s.top+t.getBoundingClientRect().height/2-30)+")rotate(-90)"}).text("Number of Jobs"),f.append("g").attr("class","tool_tip").append("rect"),f.select(".tool_tip").append("text")};var o=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e}(e)}); //# sourceMappingURL=../../maps/reports_webapp/run_stats.js.map