blob: ba0308d7b200cda53d51e9806adaddc49f81188c [file] [log] [blame]
<?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 (Eclipse Foundation)- initial API and implementation
*******************************************************************************/
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/debug.php");
$App = new App();
header("Content-type: text/plain");
$year = date('Y', strtotime('now'));
$month = date('m', strtotime('now'));
$base = strtotime("-1 month", strtotime("$year-$month-01"));
// for ($i = 18; $i >= 0; $i--) {
// $start = strtotime("-$i month", $base);
// $end = strtotime("+1 month", $start);
// $period = date('M-Y', $start);
// $yearmonth = date('Ym', $start);
// $start = date('Y-m-d', $start);
// $end = date('Y-m-d', $end);
// $projectCount = findProjectCount($start, $end);
// $proposalCount = findProposalCount($start, $end);
// $committerCount = findCommitterCount($start, $end);
// $activeCommitterCount = findActiveCommitterCount($yearmonth);
// $companyCount = findCompanyCount($start, $end);
// echo "$period, $projectCount, $proposalCount, $committerCount, $activeCommitterCount, $companyCount\n";
// }
echo getProjectChartUrl();
function getProjectChartUrl($start=null, $count=18) {
if (!$start) $start = strtotime('-1 month', strtotime(date('Y-m-01')));
$labels = array();
$projects = array();
$active = array();
for($index = $count-1;$index >= 0;$index--) {
$period = strtotime("-$index month", $start);
$labels[] = count($labels) % 3 == 2 ? date('M-Y', $period) : '';
$projects[] = findProjectCount($period);
$active[] = findActiveProjectCount($period);
}
$max = max(max($projects), max($active)) + 10;
$min = min(min($projects), min($active)) - 10;
$labels = join('|', $labels);
$projects = join(',', $projects);
$active = join(',', $active);
$url = "http://chart.apis.google.com/chart
?chxl=0:|$labels
&chxr=0,$min,$max|1,$min,$max
&chxs=0,676767,11.5,0.5,lt,676767|1,676767,12.5,0,lt,676767
&chxt=x,y
&chs=460x220
&cht=lc
&chco=3072F3,FF9900
&chds=$min,$max,$min,$max
&chd=t:$projects|$active
&chdl=Total+Projects|Active+Projects
&chdlp=b
&chls=2|1
&chma=5,0,5,15|5,5
&chtt=Projects";
return preg_replace('/\s/','',$url);
}
/**
* This function returns the count of active projects during the provided
* range of dates. A project is considered active if the IsActive flag is
* set and it has at least one person active in any role during the range
* of dates.
*
* @param int $period
*/
function findProjectCount($period) {
global $App;
$start = date('Y-m-01', $period);
$end = date('Y-m-d', strtotime('+1 month', strtotime($start)));
$sql = "SELECT count(distinct Projects.ProjectID)
from Projects
join PeopleProjects on (Projects.ProjectID = PeopleProjects.ProjectID)
where
Projects.IsActive
and ActiveDate < date '$end'
and (InactiveDate is null or InactiveDate > date '$start')";
echo "$sql\n";
$result = $App->foundation_sql($sql);
if ($row = mysql_fetch_array($result)) return $row[0];
return null;
}
function findActiveProjectCount($period) {
return 25;
}
/**
* This function returns the count of committers who were active between the
* range of provided dates. A committer is considered active if they have
* a UNIX Account (i.e. they have been provisioned as a committer), were
* made active either before or during the provided range, and have either
* not been made inactive, or their inactive date is either after or during
* the provided range.
*
* @param date $start
* @param date $end
*/
function findCommitterCount($start, $end) {
global $App;
$sql = "SELECT
COUNT(DISTINCT PeopleProjects.PersonID)
from PeopleProjects
join People on (PeopleProjects.PersonID = People.PersonID)
WHERE
Relation = 'CM' and IsUnixAcctCreated
and ActiveDate < date '$end'
and (InactiveDate is null or InactiveDate > date '$start')";
$result = $App->foundation_sql($sql);
if ($row = mysql_fetch_array($result)) return $row[0];
return null;
}
/**
* This function returns the count of companies who had at least one
* committers who were active between the range of provided dates. A
* committer is considered active if they have
* a UNIX Account (i.e. they have been provisioned as a committer), were
* made active either before or during the provided range, and have either
* not been made inactive, or their inactive date is either after or during
* the provided range.
*
* @param date $start
* @param date $end
*/
function findCompanyCount($start, $end) {
global $App;
$sql = "SELECT
count(distinct o.OrganizationID)
from People as p
join OrganizationContacts as o on (p.PersonID = o.PersonId)
join PeopleProjects as pr on (p.PersonId = pr.PersonId)
where
o.relation = 'EMPLY' and IsUnixAcctCreated
and pr.ActiveDate < date '$end'
and (pr.InActiveDate is null or pr.InActiveDate >= date '$start')";
$result = $App->foundation_sql($sql);
if ($row = mysql_fetch_array($result)) return $row[0];
return null;
}
/**
* Return the number of active committers during the specified period.
* The period is specified in yearmonth form (e.g. 201108).
*
* @param string $period
*/
function findActiveCommitterCount($period) {
global $_activeCommitters;
if (!$_activeCommitters) {
$raw = file_get_contents('http://dash.eclipse.org/dash/commits/web-api/commit-kpis2.php');
$lines = split("\n", $raw);
$_activeCommitters = array();
foreach($lines as $line) {
$pair = split(',', $line);
$month = $pair[0];
$count = $pair[1];
if (!$month) continue;
if (!$count) continue;
$_activeCommitters[$month] = $count;
}
}
return $_activeCommitters[$period];
}
function findProposalCount($start, $end) {
global $App;
$sql = "SELECT
count(r.ProposalName)
from ProjectReviews as r
join ProjectReviewStatus as s on (r.id = s.id)
where
s.status = 'Proposal Posted'
and s.value >= date '$start' and s.value < '$end'";
$result = $App->foundation_sql($sql);
if ($row = mysql_fetch_array($result)) return $row[0];
return null;
}
?>