Index: bower.json IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- bower.json (revision fd08df43b83fa2d751f4b0711fe1828cf2bd3b8c) +++ bower.json (revision ) @@ -45,7 +45,8 @@ "d3": "3.4.8", "moment": ">2.9.0", "d3-tip": "0.6.6", - "numeral": "1.5.3" + "numeral": "1.5.3", + "hawkular-charts": "~0.3.2" }, "homepage": "https://github.com/hawkular/hawkular-charts", "moduleType": [ Index: tester.html IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- tester.html (revision fd08df43b83fa2d751f4b0711fe1828cf2bd3b8c) +++ tester.html (revision ) @@ -32,6 +32,7 @@ + Index: hawkular-charts.js IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- hawkular-charts.js (revision fd08df43b83fa2d751f4b0711fe1828cf2bd3b8c) +++ hawkular-charts.js (revision ) @@ -68,15 +68,23 @@ svg = chart.append("g").attr("width", width + margin.left + margin.right).attr("height", innerChartHeight).attr("transform", "translate(" + margin.left + "," + (adjustedChartHeight2) + ")"); } function determineAvailScale(dataPoints) { - var adjustedTimeRange; + var adjustedTimeRange = []; + var oneHourAgo = +moment().subtract('hours', 1); if (dataPoints) { + // Data points only have the start if (dataPoints.length > 1) { - adjustedTimeRange = d3.extent(dataPoints, function (d) { + adjustedTimeRange[0] = d3.min(dataPoints, function (d) { return d.start; }); + // TODO adjust the start time to date range picker + if (adjustedTimeRange[0] < oneHourAgo) { + adjustedTimeRange[0] = oneHourAgo; - } + } + // Provide "now" as end // TODO adjust to date range picker + adjustedTimeRange[1] = +moment(); + } else { - adjustedTimeRange = [+moment(), +moment().subtract('hours', 1)]; // default to 1 hour same as graph + adjustedTimeRange = [+moment(), oneHourAgo]; // default to 1 hour same as graph } yScale = d3.scale.linear().clamp(true).rangeRound([innerChartHeight, 0]).domain([0, 175]); yAxis = d3.svg.axis().scale(yScale).ticks(0).tickSize(0, 0).orient("left"); @@ -95,26 +103,25 @@ } function formatTransformedDataPoints(inAvailData) { var outputData = []; - if (inAvailData && inAvailData[0].timestamp) { - var previousItem; - _.each(inAvailData, function (availItem, i) { - if (i === 0) { - ///@todo: this logic could use some more work - if (inAvailData.length > 1) { - /// on this first point we only know when it ended, we have no idea when it started - outputData.push(new TransformedAvailDataPoint(availItem.timestamp - 60 * 1000, availItem.timestamp, availItem.value)); + if (inAvailData && inAvailData.length > 0 && inAvailData[0].timestamp) { + var items = inAvailData.length; + var now = new Date().getTime(); + if (items === 1) { + var availItem = inAvailData[0]; + // we only have one item with start time. Assume unknown for the time before (last 1h) TODO adjust to time picker + outputData.push(new TransformedAvailDataPoint(now - 60 * 60 * 1000, availItem.timestamp, 'unknown')); + // and the determined value up until the end. + outputData.push(new TransformedAvailDataPoint(availItem.timestamp, now, availItem.value)); - } - else { + } + else { - /// we only have one point for a range so default to the 1 hour range default - outputData.push(new TransformedAvailDataPoint(availItem.timestamp - 60 * 60 * 1000, availItem.timestamp, availItem.value)); - outputData.push(new TransformedAvailDataPoint(availItem.timestamp, new Date().getTime(), 'unknown')); + var endTime; + var i; + endTime = now; + for (i = items; i > 0; i--) { + outputData.push(new TransformedAvailDataPoint(inAvailData[i - 1].timestamp, endTime, inAvailData[i - 1].value)); + endTime = inAvailData[i - 1].timestamp; - } - } + } + } - else { - previousItem = inAvailData[i - 1]; - outputData.push(new TransformedAvailDataPoint(previousItem.timestamp, availItem.timestamp, availItem.value)); - } - }); } return outputData; } Index: src/chart/avail-chart-directive.ts IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- src/chart/avail-chart-directive.ts (revision fd08df43b83fa2d751f4b0711fe1828cf2bd3b8c) +++ src/chart/avail-chart-directive.ts (revision ) @@ -126,17 +126,27 @@ function determineAvailScale(dataPoints:ITransformedAvailDataPoint[]) { - var adjustedTimeRange; + var adjustedTimeRange:number[] = [] ; + var oneHourAgo = +moment().subtract('hours', 1); + if (dataPoints) { + // Data points only have the start if (dataPoints.length > 1) { - adjustedTimeRange = d3.extent(dataPoints, (d:ITransformedAvailDataPoint) => { + adjustedTimeRange[0] = d3.min(dataPoints, (d:ITransformedAvailDataPoint) => { return d.start; }); + // TODO adjust the start time to date range picker + if (adjustedTimeRange[0]< oneHourAgo) { + adjustedTimeRange[0] = oneHourAgo; + } + + // Provide "now" as end // TODO adjust to date range picker + adjustedTimeRange[1] = +moment(); } else { - adjustedTimeRange = [+moment(), +moment().subtract('hours', 1)]; // default to 1 hour same as graph + adjustedTimeRange = [+moment(), oneHourAgo]; // default to 1 hour same as graph } yScale = d3.scale.linear() @@ -177,26 +187,28 @@ function formatTransformedDataPoints(inAvailData:IAvailDataPoint[]):ITransformedAvailDataPoint[] { var outputData:ITransformedAvailDataPoint[] = []; - if (inAvailData && inAvailData[0].timestamp) { - var previousItem:IAvailDataPoint; + if (inAvailData && inAvailData.length>0 && inAvailData[0].timestamp) { + var items = inAvailData.length; + var now = new Date().getTime(); - _.each(inAvailData, (availItem:IAvailDataPoint, i:number) => { - if (i === 0) { - ///@todo: this logic could use some more work - if (inAvailData.length > 1) { - /// on this first point we only know when it ended, we have no idea when it started - outputData.push(new TransformedAvailDataPoint(availItem.timestamp - 60 * 1000, availItem.timestamp, availItem.value)); - } else { - /// we only have one point for a range so default to the 1 hour range default - outputData.push(new TransformedAvailDataPoint(availItem.timestamp - 60 * 60 * 1000, availItem.timestamp, availItem.value)); - outputData.push(new TransformedAvailDataPoint(availItem.timestamp, new Date().getTime(), 'unknown')); + if (items===1) { + var availItem=inAvailData[0]; + + // we only have one item with start time. Assume unknown for the time before (last 1h) TODO adjust to time picker + outputData.push(new TransformedAvailDataPoint(now - 60 * 60 * 1000, availItem.timestamp, 'unknown')); + // and the determined value up until the end. + outputData.push(new TransformedAvailDataPoint(availItem.timestamp, now, availItem.value)); - } + } - } else { - previousItem = inAvailData[i - 1]; - outputData.push(new TransformedAvailDataPoint(previousItem.timestamp, availItem.timestamp, availItem.value)); - } + else { - }); + var endTime:number; + var i:number; + endTime = now; + for (i = items; i > 0; i--) { + outputData.push(new TransformedAvailDataPoint(inAvailData[i-1].timestamp,endTime,inAvailData[i-1].value)); + endTime = inAvailData[i-1].timestamp; + } + } } return outputData; }