Start of myway timeliness graphing
[busui.git] / labs / myway_timeliness.php
blob:a/labs/myway_timeliness.php -> blob:b/labs/myway_timeliness.php
--- a/labs/myway_timeliness.php
+++ b/labs/myway_timeliness.php
@@ -1,44 +1,79 @@
 <?php
 include ('../include/common.inc.php');
 include_header("MyWay Deltas", "mywayDelta");
-//collect all observation not in delta
-$query = "select * from myway_timingdeltas";
-debug($query, "database");
-$query = $conn->prepare($query);
-$query->execute();
-if (!$query) {
-	databaseError($conn->errorInfo());
-	return Array();
-}
-
 ?>
 
     <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../js/flot/excanvas.min.js"></script><![endif]--> 
  
     <script language="javascript" type="text/javascript" src="../js/flot/jquery.flot.js"></script> 
-  <div id="placeholder" style="width:800px;height:600px"></div> 
+  <center><div id="placeholder" style="width:900px;height:550px"></div></center>
 <script type="text/javascript"> 
 $(function () {
-    var d1 = [];
+    var d = new Date();
+    d.setUTCMinutes(0);
+    d.setUTCHours(0);
+    var midnight = d.getTime();
+
 <?php
-$i=0;
-foreach($query->fetchAll() as $delta) {
-    echo "d1.push([$i, {$delta['timing_delta']}]); \n";
-    $i++;
-};
-     ?>
-     
-    $.plot($("#placeholder"), [
-        {
-            data: d1,
-            points: { show: true }
-        },
-        
+$query = "select * from myway_timingdeltas where abs(timing_delta) < 2*(select stddev(timing_delta) from myway_timingdeltas)  order by route_full_name;";
+$query = $conn -> prepare($query);
+$query -> execute();
+if (!$query) {
+    databaseError($conn -> errorInfo());
+     return Array();
+    } 
+$i = 0;
+$labels = Array();
+$lastRoute = "";
+foreach ($query -> fetchAll() as $delta) {
+    $routeName = $delta['route_full_name'];
+     if (strstr($routeName, " 3")) $routeName = "312-319";
+     else $routeName = preg_replace('/\D/', '', $routeName);
+     if ($routeName != $lastRoute) {
+        $i++;
+         echo "    var d$i = [];";
+         $lastRoute = $routeName;
+         $labels[$i] = $routeName;
+         } 
+    echo "d$i.push([ midnight+ (1000*" . midnight_seconds(strtotime($delta['time'])) . "), " . intval($delta['timing_delta']) . "]); \n";
+    } ;
+?>
+
+       var placeholder = $("#placeholder");
+
+    var plot = $.plot(placeholder, [
+<?php
+foreach ($labels as $key => $label) {
+    echo "        {
+            data: d$key,
+            points: { show: true },
+            label: '$label'
+        },";
+    } 
+?>
     ],
         {
-            grid: { hoverable: true, clickable: true },
-        });
-});
+            xaxis: {
+                mode: "time",
+                min: midnight + (1000*60*60*8),
+                max: midnight + (1000*60*60*23.5)
+            },
+            yaxis: {
+                tickFormatter: yformatter
+            },
+            grid: { hoverable: true, clickable: true, labelMargin: 32   },
+    });
+        var o;
+    o = plot.pointOffset({ x: midnight+ (9*60*60*1000), y: -1.2});
+    placeholder.append('<div style="position:absolute;left:' + (o.left + 4) + 'px;top:' + o.top + 'px;color:#666;font-size:smaller">9am</div>');
+    o = plot.pointOffset({ x: midnight+ (16*60*60*1000), y: -1.2});
+    placeholder.append('<div style="position:absolute;left:' + (o.left + 4) + 'px;top:' + o.top + 'px;color:#666;font-size:smaller">4pm</div>');
+
+ });
+function yformatter(v) {
+    if (Math.floor(v/60) < -9) return "";
+    return Math.abs(Math.floor(v/60)) + " min " + (v == 0 ? "" : (v >0 ? "early":"late"))
+}
   function showTooltip(x, y, contents) {
         $('<div id="tooltip">' + contents + '</div>').css( {
             position: 'absolute',
@@ -65,8 +100,13 @@
                     var x = item.datapoint[0].toFixed(2),
                         y = item.datapoint[1].toFixed(2);
                     
+                    var d = new Date();
+d.setTime(x);
+var time = d.getUTCHours() +':'+ (d.getUTCMinutes().toString().length == 1 ? '0'+ d.getMinutes():  d.getUTCMinutes())
+
+                    
                     showTooltip(item.pageX, item.pageY,
-                                item.series.label + " of " + x + " = " + y +" ( "+ y/60+" minutes )");
+                                item.series.label + " at "+ time +" = " + Math.abs(new Number(y/60).toFixed(2))+" minutes "+(y >0 ? "early":"late"));
                 }
             }
             else {
@@ -74,4 +114,5 @@
                 previousPoint = null;            
             }
     });
+
 </script>