/** * Created by Alex on 10/27/2014. */ var GETTING_EVENTS = false; var agentList = {}; var jobList = {}; var eventGen = new EventGenerator("eventGenerator"); var agentGen = new AgentGenerator("agentGenerator"); var jobGen = new JobAgentGenerator("jobAgentGenerator"); // eventGen.start(); function getNewEvent() { agentGen.getEvents(1); } function getTenNewEvents() { agentGen.getEvents(10); } function getAllEvents() { if (GETTING_EVENTS == false) { GETTING_EVENTS = true; agentGen.getEvents(agentGen.amountOfEvents); } } function getAllEventsQuickly() { INCREASE_SPEED = false; EVENT_DELAY = 0; if (GETTING_EVENTS == false) { GETTING_EVENTS = true; agentGen.getEvents(agentGen.amountOfEvents); } else { } } function refreshJobs() { var multiSelect = document.getElementById("multiselect"); while (multiSelect.firstChild) { multiSelect.removeChild(multiSelect.firstChild); } var jobNames = jobGen.getAllJobNames(); for (var i = 0; i < jobNames.length; i++) { var jobOption = new Option(jobNames[i], jobNames[i]); multiSelect.appendChild(jobOption); } } function updateGraph() { var multiSelect = document.getElementById("multiselect"); var selection = []; for (var i = 0; i < multiSelect.children.length; i++) { if (multiSelect.children[i].selected) { selection.push(multiSelect.children[i].value); } } var filteredValues = []; var originalPredictionValues = []; var durationValues = []; var predictionValues = []; var diffValues = []; var graphGroup = null; var stdGroup = null; var predictionGroup = null; var originalPredictionGroup = null; for (var i = 0; i < graph2dDataset.length; i++) { if (selection.indexOf(graph2dDataset[i].type) != -1) { if (showDuration == true) { if (graph2dDataset[i].group == graph2dDataset[i].type + "_" + selectedGroup) { filteredValues.push(graph2dDataset[i]); durationValues.push(graph2dDataset[i]); graphGroup = graph2dDataset[i].group; } } if (showPrediction == true) { if (graph2dDataset[i].group == graph2dDataset[i].type + "_pred_" + selectedGroup) { filteredValues.push(graph2dDataset[i]); predictionValues.push(graph2dDataset[i]); predictionGroup = graph2dDataset[i].group; } if (graph2dDataset[i].group == graph2dDataset[i].type + "_pred_" + selectedGroup + "_std_higher") { filteredValues.push(graph2dDataset[i]); stdGroup = graph2dDataset[i].group; } if (graph2dDataset[i].group == graph2dDataset[i].type + "_pred_" + selectedGroup + "_std_lower") { filteredValues.push(graph2dDataset[i]); stdGroup = graph2dDataset[i].group; } if (graph2dDataset[i].group == graph2dDataset[i].type + "_pred_" + selectedGroup + "_original") { filteredValues.push(graph2dDataset[i]); originalPredictionValues.push(graph2dDataset[i]); originalPredictionGroup = graph2dDataset[i].group; } } } } graph2DItems.clear(); if (differenceWithPrediction == true) { for (var i = 0; i < durationValues.length; i++) { var item = {}; item.x = i < 10 ? '2014-09-0' + i : '2014-09-' + i; item.y = durationValues[i].y; item.type = durationValues[i].type; item.y -= originalPredictionValues[i].y; var group = 'differenceNegative'; if (item.y < 0) { item.y *= -1; group = 'differencePositive' } item.group = group; diffValues.push(item); } var legendDiv = document.getElementById("Legend"); legendDiv.innerHTML = ""; populateExternalLegend('differencePositive', "Faster than predicted (hours)"); populateExternalLegend('differenceNegative', "Slower than predicted (hours)"); graph2DItems.add(diffValues); } else { var filteredValues = []; for (var i = 0; i < durationValues.length; i++) { var durationItem = {}; durationItem.x = i < 10 ? '2014-09-0' + i : '2014-09-' + i; durationItem.y = durationValues[i].y; durationItem.type = durationValues[i].type; durationItem.group = durationValues[i].group; filteredValues.push(durationItem); if (showPrediction == true) { var predItem = {}; predItem.x = i < 10 ? '2014-09-0' + i : '2014-09-' + i; predItem.y = predictionValues[i].y; predItem.type = predictionValues[i].type; predItem.group = predictionValues[i].group; filteredValues.push(predItem); var originalPred = {}; originalPred.x = i < 10 ? '2014-09-0' + i : '2014-09-' + i; originalPred.y = originalPredictionValues[i].y; originalPred.type = originalPredictionValues[i].type; originalPred.group = originalPredictionValues[i].group; filteredValues.push(originalPred); } } var legendDiv = document.getElementById("Legend"); legendDiv.innerHTML = ""; if (graphGroup != null) { populateExternalLegend(graphGroup, "duration (hours)"); } // if (stdGroup != null) {populateExternalLegend(stdGroup, "standard deviation");} if (predictionGroup != null) { populateExternalLegend(predictionGroup, "updated prediction (hours)"); } if (originalPredictionGroup != null) { populateExternalLegend(originalPredictionGroup, "initial prediction (hours)"); } graph2DItems.add(filteredValues); } graph2d.fit(); } function turnOff(type) { var btn = document.getElementById(type); btn.className = btn.className.replace(" selected", ""); } function turnOffAll() { var types = ['duration', 'durationWithPause', 'durationWithStartup', 'durationWithBoth']; for (var i = 0; i < types.length; i++) { turnOff(types[i]); } } function turnOn(type) { turnOffAll(); var btn = document.getElementById(type); selectedGroup = type; btn.className += " selected"; updateGraph(); } function togglePrediction() { if (differenceWithPrediction != true) { var btn = document.getElementById('togglePrediction'); if (showPrediction == true) { btn.className = btn.className.replace("selected", ""); showPrediction = false; } else { showPrediction = true; btn.className += " selected"; } updateGraph(); } } function toggleDuration() { if (differenceWithPrediction != true) { var btn = document.getElementById('toggleDuration'); if (showDuration == true) { btn.className = btn.className.replace("selected", ""); showDuration = false; } else { showDuration = true; btn.className += " selected"; } updateGraph(); } } function toggleDifference() { differenceWithPrediction = !differenceWithPrediction; var btn = document.getElementById('togglePrediction'); if (showPrediction == false && differenceWithPrediction == true) { showPrediction = true; btn.className += " selected"; } btn = document.getElementById('toggleDuration'); if (showDuration == false && differenceWithPrediction == true) { showDuration = true; btn.className += " selected"; } var btn2 = document.getElementById('difference'); if (differenceWithPrediction == false) { btn2.className = btn2.className.replace("selected", ""); } else { btn2.className += " selected"; } updateGraph(); } function showTimelineBtn() { var timelineBtn = document.getElementById('showTimeline'); var graphBtn = document.getElementById('showGraph'); if (showTimeline == false) { graphBtn.className = graphBtn.className.replace("selected", ""); timelineBtn.className += " selected"; var timelinewrapper = document.getElementById("timelineWrapper"); var graphwrapper = document.getElementById("graphWrapper"); graphwrapper.style.display = "none"; timelinewrapper.style.display = "block"; showTimeline = true; showGraph = false; } } function showGraphBtn() { var timelineBtn = document.getElementById('showTimeline'); var graphBtn = document.getElementById('showGraph'); if (showGraph == false) { timelineBtn.className = graphBtn.className.replace("selected", ""); graphBtn.className += " selected"; var timelinewrapper = document.getElementById("timelineWrapper"); var graphwrapper = document.getElementById("graphWrapper"); timelinewrapper.style.display = "none"; graphwrapper.style.display = "block"; showTimeline = false; showGraph = true; } } /** * this function fills the external legend with content using the getLegend() function. */ function populateExternalLegend(groupDataItem, description) { var legendDiv = document.getElementById("Legend"); // create divs var containerDiv = document.createElement("div"); var iconDiv = document.createElement("div"); var descriptionDiv = document.createElement("div"); // give divs classes and Ids where necessary containerDiv.className = 'legendElementContainer'; containerDiv.id = groupDataItem + "_legendContainer"; iconDiv.className = "iconContainer"; descriptionDiv.className = "descriptionContainer"; // get the legend for this group. var legend = graph2d.getLegend(groupDataItem, 30, 30); // append class to icon. All styling classes from the vis.css have been copied over into the head here to be able to style the // icons with the same classes if they are using the default ones. legend.icon.setAttributeNS(null, "class", "legendIcon"); // append the legend to the corresponding divs iconDiv.appendChild(legend.icon); descriptionDiv.innerHTML = description; // determine the order for left and right orientation if (legend.orientation == 'left') { descriptionDiv.style.textAlign = "left"; containerDiv.appendChild(iconDiv); containerDiv.appendChild(descriptionDiv); } else { descriptionDiv.style.textAlign = "right"; containerDiv.appendChild(descriptionDiv); containerDiv.appendChild(iconDiv); } // append to the legend container div legendDiv.appendChild(containerDiv); } function printEvents(events) { var str = ""; str += "["; for (var i = 0; i < events.length; i++) { str += "{"; var first = true; for (var eventField in events[i]) { if (events[i].hasOwnProperty(eventField)) { if (first == false) { str += "," } first = false; if (eventField == "time") { str += eventField + ": '" + new Date(events[i][eventField]).valueOf() + "'"; } else if(events[i][eventField] instanceof Array) { str += eventField + ": ["; for (var j = 0; j < events[i][eventField].length; j++) { str += "'" + events[i][eventField][j] + "'"; if (j != events[i][eventField].length - 1) { str += ","; } } } else { str += eventField + ": '" + events[i][eventField] + "'"; } } } str += "}"; if (i < events.length -1) { str += ","; } } str += "]"; console.log(str); }