3 * Project Admin page to manage quotas disk and database
5 * Copyright 2005, Fabio Bertagnin
6 * Copyright 2011,2016, Franck Villaume - Capgemini
7 * Copyright 2019,2021, Franck Villaume - TrivialDev
8 * http://fusionforge.org
10 * This file is part of FusionForge.
12 * FusionForge is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
15 * (at your option) any later version.
17 * FusionForge is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
22 * You should have received a copy of the GNU General Public License along
23 * with this program; if not, write to the Free Software Foundation, Inc.,
24 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
27 require_once dirname(__FILE__)."/../../env.inc.php";
28 require_once $gfcommon.'include/pre.php';
29 require_once $gfwww.'admin/admin_utils.php';
31 session_require_global_perm('forge_admin');
35 $quotamanagement = plugin_get_object('quotamanagement');
37 $_quota_block_size = intval(trim(shell_exec('echo $BLOCK_SIZE'))) + 0;
38 if ($_quota_block_size == 0) {
39 $_quota_block_size = 1024;
41 $subMenuTitle = array();
42 $subMenuUrl = array();
43 $subMenuAttr = array();
44 $subMenuTitle[] = _('Ressources usage and quota');
45 $subMenuUrl[] = '/plugins/'.$quotamanagement->name.'/?type=globaladmin';
46 $subMenuAttr[] = array('title' => _('View quota and usage per project and user.'));
47 $subMenuTitle[] = _('Admin');
48 $subMenuUrl[] = '/plugins/'.$quotamanagement->name.'/?type=globaladmin&view=admin';
49 $subMenuAttr[] = array('title' => _('Administrate quotas per project.'));
50 echo $HTML->subMenu($subMenuTitle, $subMenuUrl, $subMenuAttr);
52 // stock projects infos in array
56 $res_db = db_query_params('SELECT plugin_quotamanagement.*, groups.group_name, groups.unix_group_name FROM plugin_quotamanagement, groups
57 WHERE plugin_quotamanagement.group_id = groups.group_id ORDER BY group_id',
59 if (db_numrows($res_db) > 0) {
60 while($e = db_fetch_array($res_db)) {
61 $quotas["$e[group_id]"]["group_id"] = $e["group_id"];
62 $quotas["$e[group_id]"]["name"] = $e["group_name"];
63 $quotas["$e[group_id]"]["unix_name"] = $e["unix_group_name"];
64 $quotas["$e[group_id]"]["database_size"] = 0;
65 $quotas["$e[group_id]"]["disk_size_1"] = 0;
66 $quotas["$e[group_id]"]["disk_size_scm"] = 0;
67 $quotas["$e[group_id]"]["quota_hard"] = $e["quota_hard"] * $_quota_block_size;
68 $quotas["$e[group_id]"]["quota_soft"] = $e["quota_soft"] * $_quota_block_size;
69 $quotas["$e[group_id]"]["quota_db_hard"] = $e["quota_db_hard"] * $_quota_block_size;
70 $quotas["$e[group_id]"]["quota_db_soft"] = $e["quota_db_soft"] * $_quota_block_size;
74 // documents database size
75 if (forge_get_config('use_docman')) {
76 $res_db = $quotamanagement->getDocumentsSizeQuery();
77 if (db_numrows($res_db) > 0) {
78 while($e = db_fetch_array($res_db)) {
80 $quotas["$e[group_id]"]["database_size"] += $e["size"];
81 $quotas["$e[group_id]"]["database_size"] += $e["size1"];
86 // trackers database size
87 if (forge_get_config('use_tracker')) {
88 $res_db = $quotamanagement->getTrackersSizeQuery();
89 if (db_numrows($res_db) > 0) {
90 while($e = db_fetch_array($res_db)) {
92 $quotas["$e[group_id]"]["database_size"] += $e["size"];
98 if (forge_get_config('use_frs')) {
99 $res_db = $quotamanagement->getFRSSizeQuery();
100 if (db_numrows($res_db) > 0) {
101 while($e = db_fetch_array($res_db)) {
103 $quotas["$e[group_id]"]["database_size"] += $e["size"];
109 if (forge_get_config('use_pm')) {
110 $res_db = $quotamanagement->getPMSizeQuery();
111 if (db_numrows($res_db) > 0) {
112 while($e = db_fetch_array($res_db)) {
114 $quotas["$e[group_id]"]["database_size"] += $e["size"];
119 // news database size
120 if (forge_get_config('use_news')) {
121 $res_db = $quotamanagement->getNewsSizeQuery();
122 if (db_numrows($res_db) > 0) {
123 while($e = db_fetch_array($res_db)) {
124 $quotas["$e[group_id]"]["database_size"] += $e["size"];
129 // forums database size
130 if (forge_get_config('use_forums')) {
131 $res_db = $quotamanagement->getForumSizeQuery();
132 if (db_numrows($res_db) > 0) {
133 while($e = db_fetch_array($res_db)) {
134 $quotas["$e[group_id]"]["database_size"] += $e["size"];
140 foreach ($quotas as $p) {
141 $group_id = $p["group_id"];
142 if (forge_get_config('use_ftp')) {
143 // ftp dir disk space
144 $size = $quotamanagement->getFTPSize($group_id);
145 $quotas["$group_id"]["disk_size_1"] += $size;
147 if (forge_get_config('use_shell')) {
148 // home dir disk space
149 $size = $quotamanagement->getHomeSize($group_id);
150 $quotas["$group_id"]["disk_size_1"] += $size;
154 // users disk space size
155 $ftp_dir = forge_get_config('homedir_prefix');
157 $res_db = db_query_params('SELECT user_id, user_name, realname, unix_status FROM users ORDER BY user_id ',
159 if (db_numrows($res_db) > 0) {
160 while($e = db_fetch_array($res_db)) {
161 if ($e["unix_status"] != "N") {
162 $users["$e[user_id]"]["user_id"] = $e["user_id"];
163 $users["$e[user_id]"]["user_name"] = "$e[user_name]";
164 $users["$e[user_id]"]["realname"] = "$e[realname]";
165 $users["$e[user_id]"]["unix_status"] = "$e[unix_status]";
166 $users["$e[user_id]"]["disk_size"] = 0;
170 foreach ($users as $u) {
171 $user_id = $u["user_id"];
172 $dir = $ftp_dir.'/'.$u["user_name"];
173 $size = $quotamanagement->get_dir_size($dir);
174 $users["$user_id"]["disk_size"] += human_readable_bytes($size);
178 <table width="900" cellpadding="2" cellspacing="0" border="0">
180 <td style="border-top:thick solid #808080;font-weight:bold" colspan="3">
181 <?php echo _('Projects ressources use'); ?>
183 <td style="border-top:thick solid #808080" colspan="9">
184 <span style="font-size:10px">
186 <?php echo _('project'); ?>* :
187 <?php echo 'FTP, ' . _('Home'); ?>
193 <td style="border-top:thin solid #808080">
194 <?php echo _('id'); ?>
196 <td style="border-top:thin solid #808080">
197 <?php echo _('name'); ?>
199 <td style="border-top:thin solid #808080"><br /></td>
200 <td style="border-top:thin solid #808080;background:#e0e0e0; text-align: right">
201 <?php echo _('database'); ?>
203 <td style="border-top:thin solid #808080;background:#e0e0e0; text-align: right">
204 <?php echo _('project'); ?>*
206 <td style="border-top:thin solid #808080;background:#e0e0e0; text-align: right">
207 <?php echo _('SCM'); ?>
209 <td style="border-top:thin solid #808080;background:#e0e0e0; text-align: right">
210 <?php echo _('total'); ?>
212 <td style="border-top:thin solid #808080; text-align: right">
213 <?php echo _('database quota soft'); ?>
215 <td style="border-top:thin solid #808080; text-align: right">
216 <?php echo _('database quota hard'); ?>
218 <td style="border-top:thin solid #808080; text-align: right">
219 <?php echo _('disk quota soft'); ?>
221 <td style="border-top:thin solid #808080; text-align: right">
222 <?php echo _('disk quota hard'); ?>
230 foreach ($quotas as $q) {
231 $total_database += $q["database_size"];
232 $total_disk_1 += $q["disk_size_1"];
233 $total_disk_scm += $q["disk_size_scm"];
234 $total_disk += $q["disk_size_1"]+$q["disk_size_scm"];
235 $local_disk_size = $q["database_size"]+$q["disk_size_1"]+$q["disk_size_scm"];
241 if ($q["quota_soft"] > 0) {
245 if ($q["quota_db_soft"] > 0) {
249 if (($q["disk_size_1"] > $q["quota_soft"] || $q["disk_size_scm"] > $q["quota_soft"]) && $q["quota_soft"] > 0) {
257 <td style="border-top:thin solid #808080;background:<?php echo $color2; ?>"><?php echo $q["group_id"]; ?></td>
258 <td style="border-top:thin solid #808080;background:<?php echo $color2; ?>">
259 <?php echo util_make_link('/plugins/'.$quotamanagement->name.'/?type=projectadmin&group_id='.$q['group_id'], $q['unix_name']); ?>
261 <td style="border-top:thin solid #808080;background:<?php echo $color2; ?>">
262 <?php echo $q["name"]; ?>
264 <td style="border-top:thin solid #808080;background:<?php echo $color1; ?>; text-align: right">
265 <?php echo human_readable_bytes($q["database_size"]); ?>
267 <td style="border-top:thin solid #808080;background:<?php echo $color0; ?>; text-align: right">
268 <?php echo human_readable_bytes($q["disk_size_1"]); ?>
270 <td style="border-top:thin solid #808080;background:<?php echo $color0; ?>; text-align: right">
271 <?php echo human_readable_bytes($q["disk_size_scm"]); ?>
273 <td style="border-top:thin solid #808080;background:<?php echo $color1; ?>;font-weight:bold; text-align: right">
274 <?php echo human_readable_bytes($local_disk_size); ?>
276 <td style="border-top:thin solid #808080;background:<?php echo $colorqb; ?>; text-align: right">
278 if ($q["quota_db_soft"] > 0) {
279 echo human_readable_bytes($q["quota_db_soft"]);
285 <td style="border-top:thin solid #808080;background:<?php echo $colorqb; ?>; text-align: right">
287 if ($q["quota_db_hard"] > 0) {
288 echo human_readable_bytes($q["quota_db_hard"]);
294 <td style="border-top:thin solid #808080;background:<?php echo $colorq; ?>; text-align: right">
296 if ($q["quota_soft"] > 0) {
297 echo human_readable_bytes($q["quota_soft"]);
303 <td style="border-top:thin solid #808080;background:<?php echo $colorq; ?>; text-align: right">
305 if ($q["quota_hard"] > 0) {
306 echo human_readable_bytes($q["quota_hard"]);
316 <tr style="font-weight:bold">
317 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><br /></td>
318 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080">
319 <?php echo _('total'); ?>
321 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><br /></td>
322 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080;background:#e0e0e0; text-align: right">
323 <?php echo human_readable_bytes($total_database); ?>
325 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080;background:#e0e0e0; text-align: right">
326 <?php echo human_readable_bytes($total_disk_1); ?>
328 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080;background:#e0e0e0; text-align: right">
329 <?php echo human_readable_bytes($total_disk_scm); ?>
331 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080;background:#e0e0e0; text-align: right">
332 <?php echo human_readable_bytes($total_database+$total_disk_1+$total_disk_scm); ?>
334 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><br /></td>
335 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><br /></td>
336 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><br /></td>
337 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><br /></td>
342 <table width="700" cellpadding="2" cellspacing="0" border="0">
343 <tr style="font-weight:bold">
344 <td style="border-top:thick solid #808080" colspan="6">
345 <?php echo _('Users disk use'); ?>
349 <td style="border-top:thin solid #808080"><?php echo _('id'); ?></td>
350 <td style="border-top:thin solid #808080"><?php echo _('name'); ?></td>
351 <td style="border-top:thin solid #808080"><br /></td>
352 <td style="border-top:thin solid #808080"><br /></td>
353 <td style="border-top:thin solid #808080"><br /></td>
354 <td style="border-top:thin solid #808080; text-align: right">
355 <?php echo _('disk'); ?>
360 foreach ($users as $u) {
361 $total += $u["disk_size"];
364 <td style="border-top:thin solid #808080"><?php echo $u["user_id"]; ?></td>
365 <td style="border-top:thin solid #808080"><?php echo $u["user_name"]; ?></td>
366 <td style="border-top:thin solid #808080"><?php echo $u["realname"]; ?></td>
367 <td style="border-top:thin solid #808080"><br /></td>
368 <td style="border-top:thin solid #808080"><br /></td>
369 <td style="border-top:thin solid #808080; text-align: right">
370 <?php echo $u["disk_size"]; ?>
376 <tr style="font-weight:bold">
377 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><br /></td>
378 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080">
379 <?php echo _('total'); ?>
381 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><br /></td>
382 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><br /></td>
383 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080"><br /></td>
384 <td style="border-top:thick solid #808080;border-bottom:thick solid #808080; text-align: right">
385 <?php echo $total; ?>