blob: d609898c67185ba5c4ee43eb112fb1edbe9ec0ca [file] [log] [blame]
<?php
/*******************************************************************************
* Copyright (c) 2023 Eclipse Foundation and others.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
/*
* EXPERIMENTAL
*
* This script dumps what we know about various metadata files in project
* repositories. That is, it identifies what we believe are the license, notice,
* code of conduct, ... files in each of a project's known repositories.
*/
require_once ($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
require_once dirname(__FILE__) . '/../classes/Project.class.php';
require_once dirname(__FILE__) . '/../classes/common.php';
require_once dirname(__FILE__) . '/../classes/debug.php';
require_once dirname(__FILE__) . '/../classes/database.inc';
$App = new App ();
$id = @$_GET ['id'];
if (!isset($id) || !isValidProjectId ( $id )) {
echo json_encode(null);
exit;
}
$data = array('projects' => array());
$data['meta']['warning'] = 'This is not an officially supported API. Use at your own risk.';
$data['meta']['description'] = <<< EOD
This what we know about various metadata files in a project repositories. That is, it identifies what our scripts have identified as the license, notice, code of conduct, ... files in each of a project's known repositories. The 'types' field lists the categories of the files that you might find (e.g., a 'LICENSE' file). Not every repository necessarily has every type of file.
EOD;
$sql = <<< EOQ
select distinct type from ProjectMetadata
EOQ;
query('dashboard', $sql, array(), function($row) use (&$data) {
$data['meta']['types'][] = $row['type'];
});
query('dashboard','select max(ts) as ts from GitRepo', array(), function($row) use (&$data) {
$data['meta']['capture_date'] = $row['ts'];
});
$sql = <<< EOQ
select
gr.project, gr.path, pm.type, pm.file
from ProjectRollup as pr
join GitRepo as gr on pr.subproject=gr.project
left join ProjectMetadata as pm on gr.path=pm.path and pm.type != ''
where pr.project=':id:'
order by gr.path
EOQ;
$args = array(':id:' => $id);
query('dashboard', $sql, $args, function($row) use (&$data) {
if (!$data['projects'][$row['project']][$row['path']]) {
$data['projects'][$row['project']][$row['path']] = array();
}
if ($row['type']) {
$data['projects'][$row['project']][$row['path']][$row['type']][] = $row['file'];
}
});
$sql = <<< EOQ
select distinct
gr.project, gr.path
from GitRepo as gr
where gr.project=':id:';
EOQ;
query('dashboard', $sql, $args, function($row) use (&$data) {
$data['projects'][$row['project']]['repositories'][] = $row['path'];
});
$sql = <<< EOQ
select company, count from ProjectCompanyActivity where project=':id:' order by count desc
EOQ;
query('dashboard', $sql, $args, function($row) use (&$data, $id) {
$data['projects'][$id]['chart_data']['company_activity_last_three_months'][] = $row;
});
$sql = <<< EOQ
select login, SUM(count) as count from ProjectCommitterActivity where project=':id:' group by login order by count desc
EOQ;
query('dashboard', $sql, $args, function($row) use (&$data, $id) {
$data['projects'][$id]['chart_data']['committer_activity_last_three_months'][] = $row;
});
$sql = <<< EOQ
select
periods.period as period,
if (commits.count is null, 0, commits.count) as count
from (
select distinct period
from ProjectCommitActivity
where
period
between (
select
if(max(period) < date_format(date_sub(now(), interval 1000 month),'%Y%m'),
date_format(now(),'%Y%m'),
greatest(min(period), date_format(date_sub(now(), interval 1000 month),'%Y%m')))
from ProjectCommitActivity
where project=':id:')
and date_format(now(),'%Y%m')) as periods
left join
ProjectCommitActivity as commits
on (periods.period = commits.period and commits.project=':id:')
order by period
EOQ;
query('dashboard', $sql, $args, function($row) use (&$data, $id) {
$data['projects'][$id]['chart_data']['monthly_activity_lifetime'][] = $row;
});
echo json_encode($data);
?>