| 1 |
<?
|
| 2 |
include("config.inc");
|
| 3 |
include("common.inc");
|
| 4 |
?>
|
| 5 |
#use wml::nmpage title="Debian New Maintainer"
|
| 6 |
<?
|
| 7 |
function print_days($db, $startdate, $stopdate)
|
| 8 |
{
|
| 9 |
$where = " WHERE " . $stopdate . " IS NOT NULL AND age('now'::date, " . $stopdate . ") < '2 months' AND " . $stopdate . " > " . $startdate;
|
| 10 |
|
| 11 |
#
|
| 12 |
# Mode - the most "popular" number
|
| 13 |
$sql = "SELECT (date_part('epoch', age(" . $stopdate . "," . $startdate . "))/86400)::int, count(*) AS entries FROM applicant " . $where;
|
| 14 |
$sql .= " GROUP BY age(" . $stopdate . "::date," . $startdate . "::date)";
|
| 15 |
$sql .= " ORDER BY entries DESC LIMIT 1";
|
| 16 |
if (! ($query = pg_exec($db, $sql))) {
|
| 17 |
echo "<TD colspan=\"2\">Problem with query: ",
|
| 18 |
pg_ErrorMessage($db), "</TD>\n";
|
| 19 |
return;
|
| 20 |
}
|
| 21 |
if (pg_NumRows($query) > 0) {
|
| 22 |
$row = pg_Fetch_Row($query, 0);
|
| 23 |
print "<TD>" . $row[0] . "</TD>";
|
| 24 |
} else {
|
| 25 |
print "<TD>??</TD>";
|
| 26 |
}
|
| 27 |
|
| 28 |
|
| 29 |
#
|
| 30 |
# First we get the median
|
| 31 |
$sql = "SELECT count(*) FROM applicant " . $where;
|
| 32 |
if (! ($query = pg_exec($db, $sql))) {
|
| 33 |
echo "<TD colspan=\"2\">Problem with query: ",
|
| 34 |
pg_ErrorMessage($db), "</TD>\n";
|
| 35 |
return;
|
| 36 |
}
|
| 37 |
$row = pg_Fetch_Row($query, 0);
|
| 38 |
$medcount= intval($row[0]/2);
|
| 39 |
$sql = "SELECT (date_part('epoch', age(" . $stopdate . "," . $startdate . "))/86400)::int FROM applicant " . $where;
|
| 40 |
$sql .= " ORDER by age(" . $stopdate . "," . $startdate . ")";
|
| 41 |
$sql .= " LIMIT 1 OFFSET " . $medcount;
|
| 42 |
if (! ($query = pg_exec($db, $sql))) {
|
| 43 |
echo "<TD colspan=\"2\">Problem with query: ",
|
| 44 |
pg_ErrorMessage($db), "</TD>\n";
|
| 45 |
return;
|
| 46 |
}
|
| 47 |
if (pg_NumRows($query) > 0) {
|
| 48 |
$row = pg_Fetch_Row($query, 0);
|
| 49 |
print "<TD>" . $row[0] . "</TD>";
|
| 50 |
} else {
|
| 51 |
print "<TD>??</TD>";
|
| 52 |
}
|
| 53 |
|
| 54 |
|
| 55 |
$sql = "SELECT avg(date_part('epoch', age(" . $stopdate . "," . $startdate . "))/86400)::int, max(date_part('epoch', age(" . $stopdate . "," . $startdate . "))/86400)::int from applicant " . $where;
|
| 56 |
if (! ($query = pg_exec($db, $sql))) {
|
| 57 |
echo "<TD colspan=\"2\">Problem with query: ",
|
| 58 |
pg_ErrorMessage($db), "</TD>\n";
|
| 59 |
return;
|
| 60 |
}
|
| 61 |
if (pg_NumRows($query) > 0) {
|
| 62 |
$row = pg_Fetch_Row($query, 0);
|
| 63 |
echo "<TD>", $row[0], "</TD><TD>", $row[1], "</TD>";
|
| 64 |
} else {
|
| 65 |
echo "<TD>??</TD><TD>??</TD>";
|
| 66 |
}
|
| 67 |
}
|
| 68 |
|
| 69 |
function print_stat($db, $desc, $sql,$startdate,$stopdate)
|
| 70 |
{
|
| 71 |
if (! ($query = pg_exec($db, $sql))) {
|
| 72 |
echo "<TR><TD colspan=\"2\">Problem with query: ",
|
| 73 |
pg_ErrorMessage($db), "</TD></TR>\n";
|
| 74 |
return;
|
| 75 |
}
|
| 76 |
if (pg_NumRows($query) > 0) {
|
| 77 |
$row = pg_Fetch_Row($query, 0);
|
| 78 |
echo "<TR><TD>$desc</TD><TD>", $row[0], "</TD>";
|
| 79 |
} else {
|
| 80 |
echo "<TR><TD>$desc</TD><TD>??</TD>";
|
| 81 |
}
|
| 82 |
if ($startdate == '' || $startdate == '') {
|
| 83 |
echo "<TD><SMALL>N/A</SMALL></TD><TD><SMALL>N/A</SMALL></TD><TD><SMALL>N/A</SMALL></TD><TD><SMALL>N/A</SMALL></TD>";
|
| 84 |
} else {
|
| 85 |
print_days($db,$startdate,$stopdate);
|
| 86 |
}
|
| 87 |
"</TR>\n";
|
| 88 |
}
|
| 89 |
|
| 90 |
#
|
| 91 |
# Print stats prints a summary list of statistics about the new
|
| 92 |
# maintainers, as can be assumed from its name it prints them to
|
| 93 |
# the page.
|
| 94 |
function print_stats() {
|
| 95 |
if (! ($db = open_db())) {
|
| 96 |
return;
|
| 97 |
}
|
| 98 |
echo "<TABLE border=\"1\" summary=\"\">\n";
|
| 99 |
echo "<TR valign=\"b\"><TD> </TD><TH>Count</TH><TH>Mode<BR>Days</TH><TH>Median<BR>Days</TH><TH>Average<BR>Days</TH><TH>Maximum<BR>Days</TH></TR>\n";
|
| 100 |
|
| 101 |
#
|
| 102 |
# This is all applicants we know about
|
| 103 |
print_stat($db, "Awaiting AM assignment",
|
| 104 |
"SELECT count(*) from applicant where manager_date IS NULL", "apply_date", "manager_date");
|
| 105 |
print_stat($db, "Waiting for AM to confirm",
|
| 106 |
"SELECT count(*) from applicant WHERE manager_date IS NOT NULL AND am_confirm_date IS NULL", "manager_date", "am_confirm_date");
|
| 107 |
print_stat($db, "Initial AM contact",
|
| 108 |
"SELECT count(*) FROM applicant WHERE am_confirm_date IS NOT NULL AND am_contact IS NULL", "am_confirm_date", "am_contact");
|
| 109 |
print_stat($db, "Processing Applicant",
|
| 110 |
"SELECT count(*) FROM applicant WHERE am_contact IS NOT NULL AND ( decision IS NULL OR application_ok = 'f')", "am_contact", "decision");
|
| 111 |
print_stat($db, "Awaiting DAM Approval",
|
| 112 |
"SELECT count(*) FROM applicant WHERE approved = 't' AND ( application_ok = 't' OR application_ok IS NULL) AND newmaint IS NULL" ,"decision", "newmaint");
|
| 113 |
print_stat($db, "New Maintainers processed",
|
| 114 |
"SELECT count(*) FROM applicant WHERE da_approved = 't' ", 'apply_date', 'newmaint');
|
| 115 |
print_stat($db, "Total Applicants in Database",
|
| 116 |
"SELECT count(*) from applicant" ,'', '');
|
| 117 |
print_stat($db, "On hold at AM stage",
|
| 118 |
"SELECT count(*) FROM applicant WHERE approved = 'f' " , '', '');
|
| 119 |
print_stat($db, "On hold at DAM stage",
|
| 120 |
"SELECT count(*) FROM applicant WHERE approved = 't' AND da_approved = 'f' ", '', '');
|
| 121 |
print_stat($db, "Application Managers",
|
| 122 |
"SELECT count(*) FROM manager WHERE max_applicants > 0", '', '');
|
| 123 |
echo "</TABLE>\n";
|
| 124 |
pg_Close($db);
|
| 125 |
}
|
| 126 |
?>
|
| 127 |
<H1>Debian New Maintainer Status</H1>
|
| 128 |
<P>This system is used to display or update the status of New Maintainers
|
| 129 |
going through the application system. For more information about the
|
| 130 |
process itself, look at the
|
| 131 |
<A href="http://www.debian.org/devel/join/newmaint">New Maintainers' Corner</A> on our main site.
|
| 132 |
<BR>
|
| 133 |
<H3>Aggregate Statistics</H3>
|
| 134 |
<P>To give you some idea of the size of the application process and where,
|
| 135 |
as a whole, applicants are in the system we have provided some overall
|
| 136 |
statistics. The waiting times are taken from data for the last two months and
|
| 137 |
are incremental for each stage except for the 'New Maintainers Processed'
|
| 138 |
line which is the total time from application to becoming a new maintainer.
|
| 139 |
If you want to know more, visit the <A href="stats.php">What do these statistics mean</A> page.
|
| 140 |
<CENTER>
|
| 141 |
<?
|
| 142 |
print_stats();
|
| 143 |
?>
|
| 144 |
</CENTER>
|
| 145 |
<H3>Applicant Login</H3>
|
| 146 |
If you think you are in the New Maintainer system, enter in the
|
| 147 |
email address you used to apply for it.<BR>
|
| 148 |
<CENTER>
|
| 149 |
<FORM method="post" action="nmstatus.php">
|
| 150 |
<INPUT name="email" type=text>
|
| 151 |
<INPUT type="submit" value="Login">
|
| 152 |
</FORM>
|
| 153 |
</CENTER>
|
| 154 |
<BR>If you don't know what email address you registered with, you can go to
|
| 155 |
<A href="nmlist.php">the list of applicants</A>.
|
| 156 |
<HR>
|
| 157 |
<H3>Application Manager Login</H3>
|
| 158 |
<CENTER>
|
| 159 |
<FORM method="post" action="amlogin2.php">
|
| 160 |
<TABLE>
|
| 161 |
<TR><TD><B>Login:</B></TD><TD> <INPUT name="username" type=text>@debian.org</TD></TR>
|
| 162 |
<TR><TD><B>Password:</B></TD><TD> <INPUT name="passwd" type="password"></TD></TR>
|
| 163 |
<TR><TD> </TD><TD><INPUT type="submit" value="Login"></TD></TR>
|
| 164 |
</TABLE>
|
| 165 |
</FORM>
|
| 166 |
</CENTER>
|
| 167 |
<BR>
|
| 168 |
<H3>Who are we?</H3>
|
| 169 |
<P>We are a group of Debian maintainers who have volunteered to assist the
|
| 170 |
Debian Account Managers in processing new applicants to be Debian maintainers
|
| 171 |
you can find out who these people are <A href="whoisam.php">here</A>.
|