| <?php |
| |
| /** |
| * THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (http://www.eclipse.org/legal/epl-v10.html). |
| * ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. |
| * |
| */ |
| |
| |
| /** |
| * |
| */ |
| require_once("/home/data/httpd/eclipse-php-classes/system/dbconnection_dashboard_rw.class.php"); |
| require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/dashboard/utils.php"); |
| require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/stats/hostname.php"); |
| require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/stats/common_queries.php"); |
| require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/dashboard/constants.php"); |
| |
| /** |
| * Dashboard Project Statistics |
| * |
| * This Class provides an interface to the Project Dashboard. the Dashboard is designed to provide you with a sense of how well |
| * your project is functioning. Is it making progress? Falling behind? Does it have an active community? And so on |
| * |
| * @license http://www.eclipse.org/legal/epl-v10.html Eclipse Public License - v 1.0 |
| * |
| * @author Eduardo A. Romero Gomez |
| * |
| * |
| */ |
| class DashboardInfo { |
| |
| var $project_id = ""; |
| |
| var $liveness = 0; |
| var $bugs = 0; |
| var $delta7 = 0; |
| var $delta30 = 0; |
| var $delta180 = 0; |
| var $perc7 = 0; |
| var $perc30 = 0; |
| var $perc180 = 0; |
| var $news7 = 0; |
| var $news30 = 0; |
| var $answers7 = 0; |
| var $answers30= 0; |
| var $dashboard_week = ""; |
| |
| /** |
| * Constructor, it takes the Project Key (as in the Foundation Database) as a parameter |
| * |
| * Create a new DashboardInfo object. |
| * The DashboardInfo object provides an easy to use interface to the Project Dashboard. |
| * |
| * @param string $projectkey the project's key as in the Eclipse Foundation's database |
| * of projects. These keys are assigned by the EMO. |
| * |
| * @param string date you can pass a week in MySQL date format (yyyy-mm-dd) to fetch |
| * results for the week starting on that date. |
| * If no $_week is given current calculations are used. |
| * |
| * @return DashboardInfo A brand new DashboardInfo object |
| * |
| */ |
| function DashboardInfo($_project_id, $_date = "") |
| { |
| |
| $this->project_id = $_project_id; |
| |
| $dbc_cache = new DBConnectionDashboard(); |
| $db_handle = $dbc_cache->connect(); |
| $this->dashboard_week = $_date; |
| |
| if($_date == "") |
| $mysql_date = get_last_date($db_handle); |
| else |
| $mysql_date = $_date; |
| |
| $query = "SELECT * FROM ".stats_table()." WHERE stats_date = \"".$mysql_date."\" AND project_id = \"".$this->project_id."\""; |
| |
| $result = mysql_query($query,$db_handle) or die("MySQL Error: ".mysql_error()); |
| $row = mysql_fetch_assoc($result); |
| |
| $this->liveness = $row['liveness']; |
| $this->bugs = $row['bugs_total']; |
| $this->delta7 = $row['bugs_7_delta']; |
| $this->delta30 = $row['bugs_30_delta']; |
| $this->delta180 = $row['bugs_180_delta']; |
| $this->perc7 = $row['bugs_7_percentage']; |
| $this->perc30 = $row['bugs_30_percentage']; |
| $this->perc180 = $row['bugs_180_percentage']; |
| $this->news7 = $row['news_7_number_posts']; |
| $this->news30 = $row['news_30_number_posts']; |
| $this->answers7 = $row['news_7_answer_average_time']; |
| $this->answers30= $row['news_30_answer_average_time']; |
| |
| } |
| |
| /** |
| * Returns the Liveness of a project |
| * |
| * Returns the liveness of the project, according to the Project Dashboards calculations formula: |
| * <pre> |
| * 1 * log(last week change in number of bugs) + |
| * 1 * log(last week bug fix rate percentage) + |
| * 2 * log(last month bug fix rate percentage) + |
| * 1 * log(180 day bug fix rate percentage) + |
| * 2 * log(last week number of newsgroup postings) + |
| * 2 * 1/(last week newsgroup answers times) + |
| * 3 * log(last month number of newsgroup postings) + |
| * 3 * 1/(last month newsgroup answers times). |
| * </pre> |
| * Optionally you can pass a week in MySQL date format (yyyy-mm-dd) to fetch |
| * results for the week starting on that date. If no $_week is given current calculations are used. |
| * |
| * @access public |
| */ |
| function getLiveness() |
| { |
| return $this->liveness; |
| } |
| |
| /** |
| * Returns the number of bugs this project has |
| * |
| * |
| * The number of bugs this project has in the Eclipse Bugzilla bug tracking system |
| * |
| * Optionally you can pass a week in MySQL date format (yyyy-mm-dd) to fetch |
| * results for the week starting on that date. If no $_week is given current calculations are used. |
| * |
| * @link http://bugs.eclipse.org |
| * @access public |
| */ |
| function getBugs() |
| { |
| return $this->bugs; |
| } |
| |
| |
| /** |
| * |
| * How the number number of bugs this project has changed in the past week |
| * |
| * Optionally you can pass a week in MySQL date format (yyyy-mm-dd) to fetch |
| * results for the week starting on that date. If no $_week is given current calculations are used. |
| * |
| * @link http://www.eclipse.org/projects/dashboard/descriptions.php |
| * @access public |
| */ |
| function getBugs7Delta() |
| { |
| return $this->delta7; |
| } |
| |
| /** |
| * |
| * How the number number of bugs this project has changed in the past month |
| * |
| * Optionally you can pass a week in MySQL date format (yyyy-mm-dd) to fetch |
| * results for the week starting on that date. If no $_week is given current calculations are used. |
| * |
| * @link http://www.eclipse.org/projects/dashboard/descriptions.php |
| * @access public |
| */ |
| function getBugs30Delta() |
| { |
| return $this->delta30; |
| } |
| |
| /** |
| * |
| * How the number number of bugs this project has changed in the past 180 days |
| * |
| * Optionally you can pass a week in MySQL date format (yyyy-mm-dd) to fetch |
| * results for the week starting on that date. If no $_week is given current calculations are used. |
| * |
| * @link http://www.eclipse.org/projects/dashboard/descriptions.php |
| * @access public |
| */ |
| function getBugs180Delta() |
| { |
| return $this->delta180; |
| } |
| |
| /** |
| * Past 7 days Bug fix rate |
| * |
| * The difference in the number of closed (resolved, closed, and verified) bugs and |
| * enhancements to the number of open and active (P1, P2, P3) bugs for the <i>last week</i>. |
| * The goal is to keep the number positive because then the project is fixing bugs and |
| * implementing features faster than bugs are being reported. |
| * |
| * Optionally you can pass a week in MySQL date format (yyyy-mm-dd) to fetch |
| * results for the week starting on that date. If no $_week is given current calculations are used. |
| * |
| * @link http://www.eclipse.org/projects/dashboard/descriptions.php |
| * @access public |
| */ |
| function getBugs7Percentage() |
| { |
| return $this->perc7; |
| } |
| |
| /** |
| * Past 30 dyas Bug fix rate |
| * |
| * The difference in the number of closed (resolved, closed, and verified) bugs and |
| * enhancements to the number of open and active (P1, P2, P3) bugs for the <i>last month</i>. |
| * The goal is to keep the number positive because then the project is fixing bugs and |
| * implementing features faster than bugs are being reported. |
| * |
| * Optionally you can pass a week in MySQL date format (yyyy-mm-dd) to fetch |
| * results for the week starting on that date. If no $_week is given current calculations are used. |
| * |
| * @link http://www.eclipse.org/projects/dashboard/descriptions.php |
| * @access public |
| */ |
| function getBugs30Percentage() |
| { |
| return $this->perc30; |
| } |
| |
| /** |
| * Past 180 days Bug fix rate |
| * |
| * The difference in the number of closed (resolved, closed, and verified) bugs and |
| * enhancements to the number of open and active (P1, P2, P3) bugs for the past<i>180 days</i>. |
| * The goal is to keep the number positive because then the project is fixing bugs and |
| * implementing features faster than bugs are being reported. |
| * |
| * Optionally you can pass a week in MySQL date format (yyyy-mm-dd) to fetch |
| * results for the week starting on that date. If no $_week is given current calculations are used. |
| * |
| * @link http://www.eclipse.org/projects/dashboard/descriptions.php |
| * @access public |
| */ |
| function getBugs180Percentage() |
| { |
| return $this->perc180; |
| } |
| |
| |
| /** |
| * Number of posts in the past 7 days |
| * |
| * Total number of posts made in the last 7 days. The number of posts will be -1 when the |
| * newsgroup for a project does not exist and it is not possible to compute the statistics. |
| * When the group for the project exists but it is currently empty (no posts) or there are |
| * no posts for the last 7 days then it will be 0. |
| * |
| * Optionally you can pass a week in MySQL date format (yyyy-mm-dd) to fetch |
| * results for the week starting on that date. If no $_week is given current calculations are used. |
| * |
| * @link http://www.eclipse.org/projects/dashboard/descriptions.php |
| * @access public |
| */ |
| function getNews7NumberPosts() |
| { |
| return $this->news7; |
| } |
| |
| /** |
| * Number of posts in the past 30 days |
| * |
| * Total number of posts made in the last 30 days. The number of posts will be -1 when the |
| * newsgroup for a project does not exist and it is not possible to compute the statistics. |
| * When the group for the project exists but it is currently empty (no posts) or there are |
| * no posts for the last 30 days then it will be 0. |
| * |
| * Optionally you can pass a week in MySQL date format (yyyy-mm-dd) to fetch |
| * results for the week starting on that date. If no $_week is given current calculations are used. |
| * |
| * @link http://www.eclipse.org/projects/dashboard/descriptions.php |
| * @access public |
| */ |
| function getNews30NumberPosts() |
| { |
| return $this->news30; |
| } |
| |
| |
| /** |
| * Average time to response a post (past 7 days) |
| * |
| * Average time it takes for a post that was answered to be answered in the last 7 days. |
| * The Time To Reply (TTR) is computed as the difference between the time of the original |
| * post and the time of the reply using the NNTP-Posting-Date. If there were no answers for |
| * the specified period then the it will be 0. If the newsgroup does |
| * not exist then it will be -1. |
| * |
| * Optionally you can pass a week in MySQL date format (yyyy-mm-dd) to fetch |
| * results for the week starting on that date. If no $_week is given current calculations are used. |
| * |
| * @link http://www.eclipse.org/projects/dashboard/descriptions.php |
| * @access public |
| */ |
| function getNews7AnswerAverageTime() |
| { |
| return $this->answers7; |
| } |
| |
| /** |
| * Average time to response a post (past 30 days) |
| * |
| * Average time it takes for a post that was answered to be answered in the last 30 days. |
| * The Time To Reply (TTR) is computed as the difference between the time of the original |
| * post and the time of the reply using the NNTP-Posting-Date. If there were no answers for |
| * the specified period then the it will be 0. If the newsgroup does |
| * not exist then it will be -1. |
| * |
| * Optionally you can pass a week in MySQL date format (yyyy-mm-dd) to fetch |
| * results for the week starting on that date. If no $_week is given current calculations are used. |
| * |
| * @link http://www.eclipse.org/projects/dashboard/descriptions.php |
| * @access public |
| */ |
| function getNews30AnswerAverageTime() |
| { |
| return $this->answers30; |
| } |
| |
| |
| /** |
| * HTML dashboard-like Bug Lights |
| * <pre> |
| * |
| * There's 3 lights they represent last week, last month and last 180 days: |
| * |
| * <7> <30> <180> |
| * |
| * Light |
| * white light Regular |
| * green light Good |
| * red light Bad |
| * </pre> |
| * |
| * Optionally you can pass a week in MySQL date format (yyyy-mm-dd) to fetch |
| * results for the week starting on that date. If no $_week is given current calculations are used. |
| * |
| * @access public |
| * @link http://www.eclipse.org/projects/dashboard/descriptions.php The Dashboard |
| * @example examples/dashboard_lights.php A simple example |
| * |
| */ |
| function PrintBugsLights() |
| { |
| echo "<a href=\"/projects/dashboard/dashboard_detail.php?project=$this->project_id\">".light_bugs($this->bugs, $this->delta7, $this->perc7); |
| echo light_bugs($this->bugs, $this->delta30, $this->perc30); |
| echo light_bugs($this->bugs, $this->delta180, $this->perc180)."</a>\n"; |
| } |
| |
| /** |
| * HTML dashboard-like News Lights |
| * <pre> |
| * |
| * There's 4 lights they represent number of posts and average response time to a post |
| * for the last 7 and 30 days: |
| * |
| * <#posts_7> <#posts_30> <#avg_ttr_7> <#avg_ttr_30> |
| * |
| * Light |
| * white light Regular |
| * green light Good |
| * red light Bad |
| * </pre> |
| * |
| * Optionally you can pass a week in MySQL date format (yyyy-mm-dd) to fetch |
| * results for the week starting on that date. If no $_week is given current calculations are used. |
| * |
| * @access public |
| * @example examples/dashboard_lights.php "A simple example" |
| * @link http://www.eclipse.org/projects/dashboard/descriptions.php The Dashboard |
| */ |
| function PrintNewsLights() |
| { |
| echo "<a href=\"/projects/dashboard/dashboard_detail.php?project=$this->project_id\">". |
| light_news($this->news7, POSTS_7_RED, POSTS_7_GREEN); |
| echo light_news_answers($this->answers7, $this->news7); |
| echo light_news($this->news30, POSTS_30_RED, POSTS_30_GREEN); |
| echo light_news_answers($this->answers30, $this->news30)."</a>\n"; |
| } |
| |
| } |
| ?> |