diff --git a/airtime_mvc/application/models/ListenerStat.php b/airtime_mvc/application/models/ListenerStat.php index 903aa647c..a8ebd0f47 100644 --- a/airtime_mvc/application/models/ListenerStat.php +++ b/airtime_mvc/application/models/ListenerStat.php @@ -17,9 +17,14 @@ SQL; $out = array(); foreach ($data as $d) { + $t = new DateTime($d['timestamp'], new DateTimeZone("UTC")); + $t->setTimezone(new DateTimeZone(date_default_timezone_get())); + // tricking javascript so it thinks the server timezone is in UTC + $dt = new DateTime($t->format("Y-m-d H:i:s"), new DateTimeZone("UTC")); + + $d['timestamp'] = $dt->format("U"); $out[$d['mount_name']][] = $d; } - return $out; } @@ -43,11 +48,11 @@ SQL; $stats_sql = "INSERT INTO cc_listener_count (timestamp_id, listener_count, mount_name) VALUES (:timestamp_id, :listener_count, :mount_name)"; foreach ($p_dataPoints as $dp) { - $timestamp_id = Application_Common_Database::prepareAndExecute($timestamp_sql, + $timestamp_id = Application_Common_Database::prepareAndExecute($timestamp_sql, array('ts'=> $dp['timestamp']), "column"); Application_Common_Database::prepareAndExecute($stats_sql, - array('timestamp_id' => $timestamp_id, + array('timestamp_id' => $timestamp_id, 'listener_count' => $dp["num_listeners"], 'mount_name' => $dp["mount_name"], ) diff --git a/airtime_mvc/application/views/scripts/listenerstat/index.phtml b/airtime_mvc/application/views/scripts/listenerstat/index.phtml index af1c2c21d..3df9f08ca 100644 --- a/airtime_mvc/application/views/scripts/listenerstat/index.phtml +++ b/airtime_mvc/application/views/scripts/listenerstat/index.phtml @@ -1,13 +1,7 @@
\ No newline at end of file diff --git a/airtime_mvc/public/js/airtime/listenerstat/listenerstat.js b/airtime_mvc/public/js/airtime/listenerstat/listenerstat.js index 3911dbad3..1b5c5393f 100644 --- a/airtime_mvc/public/js/airtime/listenerstat/listenerstat.js +++ b/airtime_mvc/public/js/airtime/listenerstat/listenerstat.js @@ -12,43 +12,91 @@ $(document).ready(function() { endTimestamp = AIRTIME.utilities.fnGetTimestamp(dateEndId, timeEndId); getDataAndPlot(startTimestamp, endTimestamp); }); - - listenerstat_content.find("#all_mps").change(function(){ - var mpName = $(this).val(); - startTimestamp = AIRTIME.utilities.fnGetTimestamp(dateStartId, timeStartId); - endTimestamp = AIRTIME.utilities.fnGetTimestamp(dateEndId, timeEndId); - getDataAndPlot(startTimestamp, endTimestamp); - getDataAndPlot(startTimestamp, endTimestamp, mpName); - }) }); -function getDataAndPlot(startTimestamp, endTimestamp, mountName){ +function getDataAndPlot(startTimestamp, endTimestamp){ // get data $.get('/Listenerstat/get-data', {startTimestamp: startTimestamp, endTimestamp: endTimestamp}, function(data){ data = JSON.parse(data); - out = new Array(); + out = new Object(); $.each(data, function(mpName, v){ - plotData = new Array(); - if (mountName != null && mpName != mountName){ - console.log(mountName); - return true; - } + plotData = new Object(); + plotData.data = new Array(); $.each(v, function(i, ele){ - temp = new Array(); - temp[0] = new Date(ele.timestamp.replace(/-/g,"/")); - temp[1] = ele.listener_count; - plotData.push(temp); + plotData.label = mpName; + var d = new Date(0); + d.setUTCSeconds(ele.timestamp); + plotData.data.push([d, ele.listener_count]); }) - out.push(plotData); + out[mpName] = plotData; }); - if (out.length == 0) { - out.push(new Array()); - } plot(out); }) } -function plot(d){ +function plot(datasets){ + data = null; + function plotByChoice(doAll) + { + // largest date object that you can set + firstTimestamp = new Date(8640000000000000); + // smallest + lastTimestamp = new Date(0); + + data = []; + if (doAll != null) + { + $.each(datasets, function(key, val) { + if (firstTimestamp.getTime() > val.data[0][0].getTime()) { + firstTimestamp = val.data[0][0]; + } + if (lastTimestamp.getTime() < val.data[val.data.length-1][0].getTime()) { + lastTimestamp = val.data[val.data.length-1][0]; + } + data.push(val); + }); + } + else + { + $('#legend .legendCB').each( + function(){ + if (this.checked) + { + data.push(datasets[this.id]); + } + else + { + data.push({label: this.id, data: []}) + } + } + ); + } + + numOfTicks = 10; + tickSize = (lastTimestamp.getTime() - firstTimestamp.getTime())/1000/numOfTicks; + + $.plot($("#flot_placeholder"), data, { + yaxis: { min: 0, tickDecimals: 0 }, + xaxis: { mode: "time", timeformat:"%y/%m/%0d %H:%M", tickSize: [tickSize, "second"] }, + legend: { + container: $('#legend'), + noColumns: 5, + labelFormatter: function (label, series) { + var cb = ' 0){ + cb += 'checked="true" '; + } + cb += 'id="'+label+'" /> '; + cb += label; + return cb; + } + } + }); + + $('#legend').find("input").click(function(){setTimeout(plotByChoice,100);}); + } + + plotByChoice(true); oBaseDatePickerSettings = { dateFormat: 'yy-mm-dd', onSelect: function(sDate, oDatePicker) { @@ -67,7 +115,4 @@ function plot(d){ listenerstat_content.find(timeStartId).timepicker(oBaseTimePickerSettings); listenerstat_content.find(dateEndId).datepicker(oBaseDatePickerSettings); listenerstat_content.find(timeEndId).timepicker(oBaseTimePickerSettings); - - $.plot($("#flot_placeholder"), d, { xaxis: { mode: "time", timeformat: "%y/%m/%0d %H:%M:%S" } }); - - } \ No newline at end of file +} \ No newline at end of file