query("SELECT YEAR(uploaded_at) AS year, QUARTER(uploaded_at) AS quarter, COUNT(*) AS file_count
FROM files
WHERE uploaded_at >= DATE_SUB(CURDATE(), INTERVAL 5 YEAR)
GROUP BY YEAR(uploaded_at), QUARTER(uploaded_at)
ORDER BY year, quarter
");
$uploaded_files = $stmt->fetchAll(PDO::FETCH_ASSOC);
// recent images & videos
if (STATS_LAST_FILES) {
$stmt = $db->query("SELECT id, extension FROM files WHERE mime LIKE 'image/%' ORDER BY uploaded_at DESC LIMIT 5");
$recent_images = $stmt->fetchAll(PDO::FETCH_ASSOC);
$stmt = $db->query("SELECT id, extension FROM files WHERE mime LIKE 'video/%' ORDER BY uploaded_at DESC LIMIT 5");
$recent_videos = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
// the most viewed files
if (STATS_MOST_VIEWED) {
$stmt = $db->query("SELECT id, extension, mime FROM files ORDER BY views DESC LIMIT 5");
$most_viewed_files = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($most_viewed_files as &$f) {
if (str_starts_with($f['mime'], 'video/')) {
$f['color'] = 'blue';
} else if ($f['mime'] == 'application/x-shockwave-flash') {
$f['color'] = 'red';
}
}
unset($f);
}
// --- file stats
function format_filesize($file_size)
{
$suffix = 'MB';
$file_size /= 1024 * 1024; // MB
if ($file_size >= 1024) {
$file_size /= 1024;
$suffix = 'GB';
}
return sprintf('%.2f%s', $file_size, $suffix);
}
$stmt = $db->query("SELECT COUNT(*) AS file_count, SUM(size) AS active_content, AVG(size) AS approx_filesize,
COUNT(*) / TIMESTAMPDIFF(MINUTE, MIN(uploaded_at), MAX(uploaded_at)) AS avg_upload_rate
FROM files
WHERE id NOT IN (SELECT id FROM file_bans)
");
$file_stats = $stmt->fetchAll(PDO::FETCH_ASSOC)[0];
if (STATS_DISKSIZE > 0) {
$file_stats['future_file_count'] = floor(STATS_DISKSIZE / $file_stats['approx_filesize']);
if ($file_stats['avg_upload_rate'] > 0.01) {
$file_stats['estimated_time'] = floor((STATS_DISKSIZE - $file_stats['active_content']) / $file_stats['avg_upload_rate']);
$dt = new DateTime();
$dt->modify("+{$file_stats['estimated_time']} minutes");
$file_stats['estimated_time'] = $dt->format("F j, Y");
}
}
$file_stats['active_content'] = format_filesize($file_stats['active_content']);
$file_stats['approx_filesize'] = format_filesize($file_stats['approx_filesize']);
?>
Statistics - = INSTANCE_NAME ?>
Statistics
Files uploaded (per quarter)
Recent images
Recent videos
The most viewed files
About files
| Serving files |
= $file_stats["file_count"] ?> |
| Active content |
= $file_stats["active_content"] ?> |
| Average filesize |
= $file_stats["approx_filesize"] ?> |
| Average upload rate (per minute) |
= $file_stats["avg_upload_rate"] ?> |
| How many files can be uploaded |
~= $file_stats["future_file_count"] ?> |
| Estimated date of hard disk space running out |
= $file_stats["estimated_time"] ?> |