From dd1f69ad5cf4e424b40af14a670ec171a28e7681 Mon Sep 17 00:00:00 2001 From: Dannon Baker Date: Thu, 9 Nov 2017 08:42:29 -0500 Subject: [PATCH] D3 imports (note the currentEvent hack needed; babel known issue with binding) --- .../scripts/reports_webapp/run_stats.js | 20 +++++++++---------- static/maps/reports_webapp/run_stats.js.map | 2 +- static/scripts/reports_webapp/run_stats.js | 2 +- templates/webapps/reports/run_stats.mako | 1 - 4 files changed, 12 insertions(+), 13 deletions(-) diff --git a/client/galaxy/scripts/reports_webapp/run_stats.js b/client/galaxy/scripts/reports_webapp/run_stats.js index 05282afa86d..73af61f23ad 100644 --- a/client/galaxy/scripts/reports_webapp/run_stats.js +++ b/client/galaxy/scripts/reports_webapp/run_stats.js @@ -1,5 +1,5 @@ -// TODO: get rid of this. -var d3 = window.d3; +import * as d3 from "../libs/d3"; +import { event as currentEvent } from "../libs/d3"; function date_by_subtracting_days(date, days) { return new Date( @@ -127,7 +127,7 @@ export function create_chart(inp_data, name, time, title) { var wdth = i * 4 + 10; d3 - .select(d3.event.path[1]) + .select(currentEvent.path[1]) .select(".tool_tip") .select("text") .attr("transform", `translate( ${margin.left - 5}, ${height - d * zoom + +margin.top + 10} )`) @@ -135,7 +135,7 @@ export function create_chart(inp_data, name, time, title) { .text(d); d3 - .select(d3.event.path[1]) + .select(currentEvent.path[1]) .select(".tool_tip") .attr("width", `${wdth}px`) .attr("height", "15px") @@ -148,13 +148,13 @@ export function create_chart(inp_data, name, time, title) { .on("mouseleave", d => { // Remove tool tip d3 - .select(d3.event.path[1]) + .select(currentEvent.path[1]) .select(".tool_tip") .select("text") .attr("visibility", "hidden"); d3 - .select(d3.event.path[1]) + .select(currentEvent.path[1]) .select(".tool_tip") .select("rect") .attr("width", "0") @@ -569,7 +569,7 @@ export function create_histogram(inp_data, name, title) { } var wdth = i * 4 + 10; d3 - .select(d3.event.path[1]) + .select(currentEvent.path[1]) .select(".tool_tip") .select("text") .attr("transform", `translate( ${margin.left - 5}, ${height - d.length * zoom + +margin.top + 10} )`) @@ -577,7 +577,7 @@ export function create_histogram(inp_data, name, title) { .text(d.length); d3 - .select(d3.event.path[1]) + .select(currentEvent.path[1]) .select(".tool_tip") .attr("width", `${wdth}px`) .attr("height", "15px") @@ -590,13 +590,13 @@ export function create_histogram(inp_data, name, title) { .on("mouseleave", d => { // Remove tool tip d3 - .select(d3.event.path[1]) + .select(currentEvent.path[1]) .select(".tool_tip") .select("text") .attr("visibility", "hidden"); d3 - .select(d3.event.path[1]) + .select(currentEvent.path[1]) .select(".tool_tip") .select("rect") .attr("width", "0") diff --git a/static/maps/reports_webapp/run_stats.js.map b/static/maps/reports_webapp/run_stats.js.map index 3438e0f0382..ba1356a61d3 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","window","getSeconds","date_by_subtracting_hours","getMonth","getDate","get_utc_time_hours","getMilliseconds","data","inp_data","getUTCMonth","getUTCDate","getUTCHours","hours_array","i","days_array","margin","top","now","left","barWidth","width","time","chart_width","right","chart_zoom","height","max","zoom","select","selectAll","style","bottom","$","wdth","chart_height","name","attr","path","on","classes","css","this","split","chart","filter","bar","duration","curr_margin","transition","size","append","text","enter","m_y","m_x","d","yAxis","axis","left_pad","event","curr_day","e","title","_y2","first","y","scale","linear","range","orient","tickFormat","round","curr_day_text","call","text_height","node","getBoundingClientRect","curr_month","String","curr_month_text","locale","toLocaleString","month","getBBox","histogram","ticks","lengths","push","minutes","hours","bar_x","dx","this_width","top_pad","svg","trans","x","domain","layout","bins","length","undefined","xAxis","Math","floor"],"mappings":"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","file":"../../scripts/reports_webapp/run_stats.js","sourcesContent":["// TODO: get rid of this.\nvar d3 = window.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(d3.event.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(d3.event.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(d3.event.path[1])\n .select(\".tool_tip\")\n .select(\"text\")\n .attr(\"visibility\", \"hidden\");\n\n d3\n .select(d3.event.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(d3.event.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(d3.event.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(d3.event.path[1])\n .select(\".tool_tip\")\n .select(\"text\")\n .attr(\"visibility\", \"hidden\");\n\n d3\n .select(d3.event.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","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 diff --git a/static/scripts/reports_webapp/run_stats.js b/static/scripts/reports_webapp/run_stats.js index 664edc6c9bf..d2a83d394df 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"],function(t){"use strict";function e(t,e){return new Date(t.getFullYear(),t.getMonth(),t.getDate()-e,t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds())}function r(t,e){return new Date(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours()-e,t.getMinutes(),t.getSeconds(),t.getMilliseconds())}function a(){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,o,i,s){var l,c=t,p=[],g=a();for(l=0;l<24;l++)p.push(r(g,l));var h=[];for(l=0;l<30;l++)h.push(e(g,l));var u={top:60,right:30,bottom:50,left:60},d=0;"hours"==i?d=12.5:"days"==i&&(d=10);var f=300+u.left+u.right,x=1.75;if(0!=n.max(c))v=150/n.max(c);else var v=1;var m=150+u.top+u.bottom;$(".charts").css("height",m*x);var w=n.select("#"+o).attr("width",f).attr("height",m).attr("preserveAspectRatio","xMidYMin").attr("viewBox","0 0 "+f+" "+m).on("click",function(){var t=n.select(this).attr("class");t=t.split(" "),n.selectAll("."+t[0]).filter("."+t[1]).style("cursor","zoom-in").transition().duration(750).attr("height",m).attr("width",f),n.select(this).style("cursor","default").transition().duration(750).attr("height",m*x).attr("width",f*x)}),b=w.selectAll("g").data(c).enter().append("g").attr("transform",function(t,e){var r=+u.left;return"translate("+(r+=+e*d)+","+u.top+")"}).on("mouseenter",function(t){for(var e=1,r=t;r>=10;)r/=10,e++;var a=4*e+10;n.select(n.event.path[1]).select(".tool_tip").select("text").attr("transform","translate( "+(u.left-5)+", "+(150-t*v+ +u.top+10)+" )").attr("visibility","visible").text(t),n.select(n.event.path[1]).select(".tool_tip").attr("width",a+"px").attr("height","15px").select("rect").attr("transform","translate( "+(+u.left-a)+", "+(150-t*v+ +u.top)+" )").attr("width",a+"px").attr("height","15px").attr("fill","#ebd9b2")}).on("mouseleave",function(t){n.select(n.event.path[1]).select(".tool_tip").select("text").attr("visibility","hidden"),n.select(n.event.path[1]).select(".tool_tip").select("rect").attr("width","0").attr("height","0").attr("fill","").text(t)});w.append("g").append("text").attr("class","title").attr("text-anchor","end").attr("transform",function(t){return"translate( 300,15 )"}).text(s),w.append("g").attr("class","axis").append("path").attr("class","x").attr("d",function(t){var e=u.left,r=+u.top+150;return"M"+e+" "+r+" L "+(e+300)+" "+r});var y=n.scale.linear().range([150,0]),_=n.svg.axis().scale(y).orient("left").tickFormat(function(t){return n.round(t*n.max(c),0)});if(w.append("g").attr("class","y axis").attr("id","y_"+o).attr("text-anchor","end").attr("transform","translate( "+u.left+","+u.top+")").call(_).select(".domain"),w.append("g").append("text").attr("class","ax_title").attr("transform",function(t){var e=n.select("#y_"+o).node();return"translate("+(+u.left-e.getBoundingClientRect().width-5)+","+(+u.top+e.getBoundingClientRect().height/2-30)+")rotate(-90)"}).text("Number of Jobs"),b.append("rect").attr("y",function(t){return 150-t*v}).attr("height",function(t){return t*v}).attr("width",d-1),"hours"==i){b.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)"}),b.append("text").attr("fill","rgb(0,0,0)").attr("transform","translate( 10, 160 )").text(function(t,e){return p[e].getHours()<10?"0"+String(p[e].getHours()):p[e].getHours()});var M="",k=!1;b.append("line").attr("x1",0).attr("y1",0).attr("x2",0).attr("y2",function(t,e){var r=0;return p[e].getDate()!=M&&(k?r=20:(r=27,k=!0),M=p[e].getDate()),r}).attr("stroke","black").attr("stroke-width",1).attr("pointer-events","none").attr("transform",function(t,e){return"translate( 0, 150)"}),M="";var D="";k=!1,b.append("text").attr("fill","rgb(0,0,0)").attr("pointer-events","none").text(function(t,e){var r="";return p[e].getDate()!=D&&(r=String(p[e].toLocaleString("en-us",{month:"long"})),r+=" "+String(p[e].getDate()),D=p[e].getDate()),r}).attr("transform",function(t,e){var r=150,a=n.select(this).node().getBBox().width;return p[e].getDate()!=M&&(k?r+=18:(r+=26,k=!0),M=p[e].getDate()),"translate( "+(a+2)+", "+r+" )"})}else if("days"==i){b.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)"}),b.append("text").attr("fill","rgb(0,0,0)").attr("transform","translate( 9, 160 )").text(function(t,e){return h[e].getDate()<10?"0"+String(h[e].getDate()):h[e].getDate()});var B="",k=!1;b.append("line").attr("x1",0).attr("y1",0).attr("x2",0).attr("y2",function(t,e){var r=0;return h[e].getMonth()!=B&&(k?r=20:(r=27,k=!0),B=h[e].getMonth()),r}).attr("stroke","black").attr("stroke-width",1).attr("pointer-events","none").attr("transform",function(t,e){return"translate( 0, 150)"}),B="";var C="";k=!1,b.append("text").attr("fill","rgb(0,100,0)").attr("pointer-events","none").text(function(t,e){var r="";return h[e].getMonth()!=C&&(r=String(h[e].toLocaleString("en-us",{month:"long"})),r+=" "+String(h[e].getFullYear()),C=h[e].getMonth()),r}).attr("transform",function(t,e){var r=150,a=n.select(this).node().getBBox().width;return h[e].getMonth()!=B&&(k?r+=18:(r+=26,k=!0),B=h[e].getMonth()),"translate( "+(a+2)+", "+r+" )"})}w.append("g").attr("class","tool_tip").append("rect"),w.select(".tool_tip").append("text"),"jc_dy_chart"!=o&&"jc_hr_chart"!=o||n.select("#"+o).attr("height",m*x).attr("width",f*x).style("cursor","default")},t.create_histogram=function(t,e,r){for(var a=t,o=1.75,i={top:60,right:30,bottom:50,left:60},s=150+i.top+i.bottom,l=300+i.left+i.right,c=n.scale.linear().domain([0,n.max(a)]).range([0,300]),a=n.layout.histogram().bins(c.ticks(20))(a),p=[],g=0;g=1;)r/=10,e++;var a=4*e+10;n.select(n.event.path[1]).select(".tool_tip").select("text").attr("transform","translate( "+(i.left-5)+", "+(150-t.length*h+ +i.top+10)+" )").attr("visibility","visible").text(t.length),n.select(n.event.path[1]).select(".tool_tip").attr("width",a+"px").attr("height","15px").select("rect").attr("transform","translate( "+(+i.left-a)+", "+(150-t.length*h+ +i.top)+" )").attr("width",a+"px").attr("height","15px").attr("fill","#ebd9b2")}).on("mouseleave",function(t){n.select(n.event.path[1]).select(".tool_tip").select("text").attr("visibility","hidden"),n.select(n.event.path[1]).select(".tool_tip").select("rect").attr("width","0").attr("height","0").attr("fill","")});f=void 0==a[0]?1:c(a[0].dx),x.append("rect").attr("x",1).attr("width",f-1).attr("height",function(t){return 150-u(t.y)});var v=n.svg.axis().scale(c).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_"+e).attr("transform","translate( "+i.left+","+(+i.top+150)+")").call(v),d.append("g").append("text").attr("class","ax_title").attr("transform",function(t){var r=n.select("#x_"+e).node();return"translate("+(+i.left+r.getBoundingClientRect().width/2+30)+","+(+i.top+150+r.getBoundingClientRect().height+10)+")"}).text("ETA - hrs:mins");var m=n.svg.axis().scale(u).orient("left");d.append("g").attr("class","y axis").attr("id","y_"+e).attr("transform","translate( "+i.left+","+i.top+")").call(m),d.append("g").append("text").attr("class","ax_title").attr("transform",function(t){var r=n.select("#y_"+e).node();return"translate("+(+i.left-r.getBoundingClientRect().width-5)+","+(+i.top+r.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 n=window.d3}); +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)}); //# sourceMappingURL=../../maps/reports_webapp/run_stats.js.map diff --git a/templates/webapps/reports/run_stats.mako b/templates/webapps/reports/run_stats.mako index 5d763f091c2..452d43be7ae 100644 --- a/templates/webapps/reports/run_stats.mako +++ b/templates/webapps/reports/run_stats.mako @@ -2,7 +2,6 @@ <%namespace file="/message.mako" import="render_msg" /> <%def name="javascripts()"> -${h.js("libs/d3")} ${parent.javascripts()}