| <?php | |
| /******************************************************************************* | |
| * Copyright (c) 2011 Eclipse Foundation and others. | |
| * All rights reserved. This program and the accompanying materials | |
| * are made available under the terms of the Eclipse Public License v1.0 | |
| * which accompanies this distribution, and is available at | |
| * http://www.eclipse.org/legal/epl-v10.html | |
| * | |
| * Contributors: | |
| * Wayne Beaton - initial API and implementation | |
| *******************************************************************************/ | |
| $id = getParameter('id', '^[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]+){0,2}$'); | |
| $width = getIntParameter('width', 800); | |
| $height = getIntParameter('height', 100); | |
| getData($id, $data, $minPeriod, $maxPeriod, $minValue, $maxValue); | |
| $keys = array(); | |
| $count = 3; | |
| $labelFrequency = floor(count($data) / ($width / 120)); | |
| foreach ($data as $key=>$value) { | |
| preg_match('/(\d\d\d\d)(\d\d)/', $key, $matches); | |
| $year = $matches[1]; | |
| $month = $matches[2]; | |
| $keys[] = $count++ % $labelFrequency == 0 ? date("M%20Y", strtotime("$year-$month-01")) : ''; | |
| } | |
| //ksort($data); | |
| $data = join(',', $data); | |
| $keys = join('|', $keys); | |
| $magnitude = pow(10, floor(log($maxValue, 10))); | |
| $max = ceil($maxValue / $magnitude) * $magnitude; | |
| $dimensions = $width . 'x' . $height; | |
| $url = "http://chart.apis.google.com/chart | |
| ?chxl=1:|$keys | |
| &chxr=0,0,$max | |
| &chxt=y,x | |
| &chbh=a,5 | |
| &chs=$dimensions | |
| &cht=bvg | |
| &chco=A2C180 | |
| &chds=0,$max | |
| &chd=t:$data"; | |
| $url = preg_replace('/\s+/', '', $url); | |
| header("Content-type: image/png"); | |
| echo file_get_contents($url); | |
| //header("Content-type: text/plain"); | |
| //echo $url; | |
| function getParameter($name, $pattern, $default = null) { | |
| if (!isset($_GET[$name])) return $default; | |
| $value = $_GET[$name]; | |
| if (preg_match("/$pattern/", $value, $matches)) return $matches[0]; | |
| return $default; | |
| } | |
| function getIntParameter($name, $default) { | |
| return getParameter($name, '\d+', $default); | |
| } | |
| function getData($id, &$data, &$minPeriod, &$maxPeriod, &$minValue, &$maxValue) { | |
| if (!getRealData($id, $data, $minPeriod, $maxPeriod, $minValue, $maxValue)) | |
| getDummyData($data, $minPeriod, $maxPeriod, $minValue, $maxValue); | |
| preg_match('/(\d\d\d\d)(\d\d)/', $minPeriod, $matches); | |
| $year = $matches[1]; | |
| $month = $matches[2]; | |
| while (true) { | |
| $period = (int)sprintf('%04d%02d', $year, $month); | |
| if (!isset($data[$period])) $data[$period] = 0; | |
| if ($period == $maxPeriod) break; | |
| if ($month++ == 12) { | |
| $year++; | |
| $month = 1; | |
| } | |
| } | |
| } | |
| function getRealData($id, &$data, &$minPeriod, &$maxPeriod, &$minValue, &$maxValue) { | |
| $user="dashboard"; | |
| require_once( "dbpassword.php" ); | |
| $database="dashboard"; | |
| $_dbh = mysql_connect('dashdbhost',$user,$password); | |
| if (!$_dbh) return false; | |
| mysql_select_db( $database, $_dbh ); | |
| $where = $id ? " where project='$id' " : ''; | |
| $sql = "select yearmonth as period, count(distinct revision) as count from commits $where group by yearmonth order by yearmonth"; | |
| $result = mysql_query($sql); | |
| $data = array(); | |
| while ($row = mysql_fetch_assoc($result)) { | |
| $period = (int)$row['period']; | |
| $minPeriod = $minPeriod ? min($minPeriod, $period) : $period; | |
| $maxPeriod = $maxPeriod ? max($maxPeriod, $period) : $period; | |
| $count = (int)$row['count']; | |
| $minValue = $minValue ? min($minValue, $count) : $count; | |
| $maxValue = $maxValue ? max($maxValue, $count) : $count; | |
| $data[$period] = $count; | |
| } | |
| return true; | |
| } | |
| function getDummyData(&$data, &$minPeriod, &$maxPeriod, &$minValue, &$maxValue) { | |
| $sampledata=" | |
| | 200805 | 5740 | | |
| | 200806 | 4395 | | |
| | 200807 | 2400 | | |
| | 200808 | 445 | | |
| | 200809 | 837 | | |
| | 200810 | 1447 | | |
| | 200811 | 1081 | | |
| | 200812 | 2355 | | |
| | 200901 | 7013 | | |
| | 200902 | 17599 | | |
| | 200903 | 6900 | | |
| | 200904 | 1916 | | |
| | 200905 | 8801 | | |
| | 200906 | 2565 | | |
| | 200907 | 2127 | | |
| | 200911 | 1515 | | |
| | 200912 | 2186 | | |
| | 201001 | 3391 | | |
| | 201002 | 13543 | | |
| | 201003 | 2498 | | |
| | 201004 | 4470 | | |
| | 201005 | 5495 | | |
| | 201006 | 613 | | |
| | 201007 | 629 | | |
| | 201008 | 2778 | | |
| | 201009 | 2281 | | |
| | 201010 | 4633 | | |
| | 201011 | 3979 | | |
| | 201101 | 3207 | | |
| | 201102 | 2923 | | |
| | 201103 | 1704 | | |
| | 201104 | 707 | | |
| "; | |
| $data = array(); | |
| $lines = split("\n", $sampledata); | |
| foreach($lines as $line) { | |
| if (preg_match('/[\s]*([\d]+) \|[\s]*([\d]+)/', $line, $matches)) { | |
| $period = (int)$matches[1]; | |
| $minPeriod = $minPeriod ? min($minPeriod, $period) : $period; | |
| $maxPeriod = $maxPeriod ? max($maxPeriod, $period) : $period; | |
| $count = (int)$matches[2]; | |
| $minValue = $minValue ? min($minValue, $count) : $count; | |
| $maxValue = $maxValue ? max($maxValue, $count) : $count; | |
| $data[$period] = $count; | |
| } | |
| } | |
| } | |
| ?> |