| <?php |
| /** |
| * ***************************************************************************** |
| * Copyright (c) 2016,2017 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 |
| * ***************************************************************************** |
| */ |
| require_once dirname ( __FILE__ ) . '/charts.inc'; |
| require_once dirname ( __FILE__ ) . '/../classes/database.inc'; |
| |
| // function renderMonthlyTop10Chart() { |
| // global $App; |
| |
| // $period = date ( 'Ym', strtotime ( '-1 month' ) ); |
| |
| // $sql = " |
| // select project, count |
| // from SubprojectCommitActivity |
| // where period='$period' |
| // order by count desc |
| // limit 10;"; |
| |
| // $rows = array (); |
| // query ( 'dashboard', $sql, array (), function ($row) use (&$rows) { |
| // $id = $row ['project']; |
| // $project = get_project_from_pmi ( $id ); |
| // $name = $project ? $project->getName () : $id; |
| |
| // $count = $row ['count']; |
| |
| // $rows [] = array ( |
| // $name, |
| // $count |
| // ); |
| // } ); |
| |
| // $period = asYearMonth ( $period ); |
| // echo "<p>The determination of "Top 10" is based on commits made |
| // against the project in $period.</p>"; |
| |
| // $columns = array ( |
| // array ( |
| // 'label' => 'Project', |
| // 'type' => 'string' |
| // ), |
| // array ( |
| // 'label' => 'Commits', |
| // 'type' => 'number' |
| // ) |
| // ); |
| // drawPieChart ( 'Top10Monthly', "Top Ten Projects by Contributor Count ($period)", $columns, $rows ); |
| // } |
| |
| function renderIPTeamVelocityChart($age = 5) { |
| global $App; |
| |
| $start = date ( 'Y-m-01', strtotime ( "- $age years" ) ); |
| $end = date ( 'Y-m-t', strtotime ( "- 1 month" ) ); |
| |
| $sql = " |
| select |
| date_format(ba.bug_when, '%Y-%m') as period, |
| count(distinct c.id) as projects, |
| count(distinct date(ba.bug_when)) as days, |
| count(distinct ba.bug_id) as bugs |
| from bugs_activity as ba |
| join bugs as b on ba.bug_id=b.bug_id |
| join components as c on b.component_id=c.id |
| where |
| added='RESOLVED' |
| and ba.bug_when between date('$start') and date('$end') |
| and b.short_desc not regexp '\((PB( Orbit)?)\s*\d*\)' |
| and b.short_desc not regexp '\(ATO\s*\d*\)' |
| and b.cf_type not in ('Type_A') |
| and c.name not in ('IP_Discussion') |
| group by date_format(ba.bug_when, '%Y-%m') |
| "; |
| |
| $rows = array (); |
| query ( 'ipzilla', $sql, array (), function ($row) use (&$rows) { |
| $period = $row ['period']; |
| $projects = $row ['projects']; |
| $days = $row ['days']; |
| $bugs = $row ['bugs']; |
| |
| $period = asYearMonth ( $period ); |
| |
| $rows [] = array ( |
| $period, |
| $bugs / $days |
| ); |
| } ); |
| |
| $start = asYearMonth ( $start ); |
| $end = asYearMonth ( $end ); |
| echo "<p>Based on CQ state between $start and $end.</p>"; |
| $columns = array ( |
| array ( |
| 'label' => 'Month', |
| 'type' => 'string' |
| ), |
| array ( |
| 'label' => 'CQs Resolved/Day', |
| 'type' => 'number' |
| ) |
| ); |
| $options = array ( |
| 'curveType' => 'function', |
| 'vAxis' => array ( |
| 'viewWindowMode' => 'explicit', |
| 'viewWindow' => array ( |
| 'min' => 0 |
| ) |
| ) |
| ); |
| drawLineChart ( 'IPTeamVelocity', "Average IP Team Velocity Between $start and $end", $columns, $rows, $options ); |
| } |
| |
| function renderByProjectIPChart() { |
| global $App; |
| |
| $now = date ( 'Y-m' ); |
| $last = date ( 'Y-m', strtotime ( "-1 months" ) ); |
| |
| $sql = " |
| SELECT |
| CMP.name as project, |
| count(BUG.bug_id) as count |
| FROM (SELECT DISTINCT date_format(creation_ts, \"%Y-%m\") AS Month FROM bugs) AS DAT |
| INNER JOIN bugs as BUG ON date_format(BUG.creation_ts, \"%Y-%m\") <= Month |
| INNER JOIN products AS PRD ON PRD.id = BUG.product_id |
| INNER JOIN components AS CMP ON CMP.id = BUG.component_id |
| LEFT JOIN bugs_activity AS ACT on ACT.bug_id = BUG.bug_id |
| AND ACT.added = \"RESOLVED\" |
| WHERE BUG.resolution != \"INVALID\" |
| AND PRD.name != \"IP\" |
| AND BUG.keywords not like '%historical%' |
| AND CMP.name != \"tools.orbit\" |
| AND (ACT.bug_when IS NULL OR date_format(ACT.bug_when,\"%Y-%m\") > Month) |
| AND DAT.Month >= \"$last\" |
| AND DAT.Month < \"$now\" |
| GROUP BY CMP.name |
| ORDER BY count desc |
| LIMIT 15"; |
| |
| $rows = array (); |
| query ( 'ipzilla', $sql, array (), function ($row) use (&$rows) { |
| $project = Project::getProject ( $row ['project'] ); |
| $rows [] = array ( |
| $project == null ? $row ['project'] : $project->getNickName (), |
| $row ['count'] |
| ); |
| } ); |
| |
| $date = date ( 'M Y' ); |
| |
| $columns = array ( |
| array ( |
| 'label' => 'Project', |
| 'type' => 'string' |
| ), |
| array ( |
| 'label' => 'CQs', |
| 'type' => 'number' |
| ) |
| ); |
| drawPieChart ( 'ProjectCQs', "CQ Breakdown by Project (Top 15) $date", $columns, $rows ); |
| } |
| |
| /* |
| * select date, name as project, count(bug_id) from (select |
| * date_format(ba.bug_when, "%Y-%m") as date, b.bug_id, p.name, b.short_desc |
| * from bugs_activity as ba join bugs as b on ba.bug_id=b.bug_id join products |
| * as p on b.product_id=p.id where ba.added='RESOLVED' and p.name not in ('IP')) |
| * as cqs group by date, project; |
| */ |
| function renderQuarterlyTop10Chart() { |
| global $App; |
| |
| list ( $quarter, $start, $end ) = getLastQuarter ( time () ); |
| |
| $sql = " |
| select project, count |
| from SubprojectCommitActivity |
| where period between $start and $end |
| group by project |
| order by count desc"; |
| |
| $rows = array (); |
| query ( 'dashboard', $sql, array (), function ($row) use (&$rows) { |
| $project = Project::getProject ( $row ['project'] ); |
| |
| $count = $row ['count']; |
| |
| $rows [] = array ( |
| $project ? $project->getNickName () : $row['project'], |
| $count |
| ); |
| } ); |
| |
| echo "<p>Based on commits between $start and $end.</p>"; |
| |
| $columns = array ( |
| array ( |
| 'label' => 'Project', |
| 'type' => 'string' |
| ), |
| array ( |
| 'label' => 'CQs', |
| 'type' => 'number' |
| ) |
| ); |
| drawPieChart ( 'Top10Quarterly', "Top Ten Projects by Contribution Count ($quarter)", $columns, $rows ); |
| } |
| function renderQuarterlyTop10ContributorsChart() { |
| global $App; |
| |
| list ( $quarter, $start, $end ) = getLastQuarter ( time () ); |
| |
| $sql = " |
| select |
| project, Authors-Committers as count |
| from ProjectQuarterlySummary |
| where quarter='$quarter' |
| and Authors-Committers >= ( |
| select Authors-Committers as count |
| from ProjectQuarterlySummary |
| where quarter='$quarter' |
| order by count desc limit 10, 1) |
| order by count desc"; |
| |
| $rows = array (); |
| query ( 'dashboard', $sql, array (), function ($row) use (&$rows) { |
| $project = Project::getProject ( $row ['project'] ); |
| |
| $count = $row ['count']; |
| |
| $rows [] = array ( |
| $project ? $project->getNickName () : $row['project'], |
| $count |
| ); |
| } ); |
| |
| echo "<p>Based on commits between $start and $end.</p>"; |
| |
| $columns = array ( |
| array ( |
| 'label' => 'Project', |
| 'type' => 'string' |
| ), |
| array ( |
| 'label' => 'Commits', |
| 'type' => 'number' |
| ) |
| ); |
| drawPieChart ( 'Top10ContributorsQuarterly', "Top \"Ten\" Projects by Contributor Count ($quarter)", $columns, $rows ); |
| } |
| function renderFileTypesChart() { |
| global $App; |
| |
| list ( $quarter, $start, $end ) = getLastQuarter ( time () ); |
| |
| $sql = "select extension, count from FileTypes order by count desc limit 15"; |
| |
| $rows = array (); |
| query ( 'dashboard', $sql, array (), function ($row) use (&$rows) { |
| $id = $row ['extension']; |
| $name = getExtensionName ( $id ); |
| |
| $count = $row ['count']; |
| |
| $rows [] = array ( |
| $name, |
| $count |
| ); |
| } ); |
| |
| $columns = array ( |
| array ( |
| 'label' => 'File Type', |
| 'type' => 'string' |
| ), |
| array ( |
| 'label' => 'Number of projects', |
| 'type' => 'number' |
| ) |
| ); |
| drawPieChart ( 'fileTypesChart', "File types by project use", $columns, $rows ); |
| } |
| function renderLicensesInUseChart() { |
| global $App; |
| |
| $now = date ( 'Y-m' ); |
| |
| $sql = " |
| SELECT |
| license, count(project) as count |
| from ( |
| SELECT |
| p.ProjectId as project, |
| group_concat( |
| if(LicenseId='EPL1.0','EPL-1.0', |
| if(LicenseId='EPL2.0','EPL-2.0', |
| if(LicenseId='EDL1.0','EDL-1.0', |
| if(LicenseId='ASL2.0','Apache-2.0', |
| if(LicenseId='CCBY3','CC-BY-3.0', |
| LicenseId))))) |
| ORDER BY LicenseId separator ' OR ') as license |
| FROM ProjectLicenses as pl |
| JOIN Projects as p on pl.ProjectId=p.ProjectId |
| AND p.IsActive group by p.ProjectId |
| ) as ProjectsAndLicenses |
| group by license |
| order by count desc"; |
| |
| $rows = array (); |
| query ( 'foundation', $sql, array (), function ($row) use (&$rows) { |
| $rows [] = array ( |
| $row ['license'], |
| $row ['count'] |
| ); |
| } ); |
| |
| $columns = array ( |
| array ( |
| 'label' => 'License', |
| 'type' => 'string' |
| ), |
| array ( |
| 'label' => 'Count', |
| 'type' => 'number' |
| ) |
| ); |
| drawPieChart ( 'LicenseUse', "Licenses in use by Eclipse Projects on $now", $columns, $rows ); |
| } |
| ?> |