File inc/admin.inc.php changed (mode: 100644) (index c0453f1..96106d2) |
... |
... |
function rg_admin_report1_suggestions($db, $from, $to) |
377 |
377 |
// Total |
// Total |
378 |
378 |
$sql = "SELECT COUNT(*) AS total FROM suggestions"; |
$sql = "SELECT COUNT(*) AS total FROM suggestions"; |
379 |
379 |
$res = rg_sql_query($db, $sql); |
$res = rg_sql_query($db, $sql); |
380 |
|
if ($res === FALSE) { |
|
381 |
|
$total = 'ERR'; |
|
382 |
|
} else { |
|
383 |
|
$row = rg_sql_fetch_array($res); |
|
384 |
|
$total = $row['total']; |
|
385 |
|
rg_sql_free_result($res); |
|
386 |
|
} |
|
|
380 |
|
if ($res === FALSE) |
|
381 |
|
return FALSE; |
|
382 |
|
$row = rg_sql_fetch_array($res); |
|
383 |
|
$total = $row['total']; |
|
384 |
|
rg_sql_free_result($res); |
387 |
385 |
|
|
388 |
386 |
// Yesterday |
// Yesterday |
389 |
387 |
$yesterday_text = ''; |
$yesterday_text = ''; |
|
... |
... |
function rg_admin_report1_suggestions($db, $from, $to) |
393 |
391 |
. " WHERE itime >= $y_start" |
. " WHERE itime >= $y_start" |
394 |
392 |
. " AND itime <= $y_end"; |
. " AND itime <= $y_end"; |
395 |
393 |
$res = rg_sql_query($db, $sql); |
$res = rg_sql_query($db, $sql); |
396 |
|
if ($res === FALSE) { |
|
397 |
|
$yesterday = "ERR"; |
|
398 |
|
} else { |
|
399 |
|
$count = 0; |
|
400 |
|
$list = ''; |
|
401 |
|
while (($row = rg_sql_fetch_array($res))) { |
|
402 |
|
$count++; |
|
403 |
|
$list .= sprintf("%8u %s\n", |
|
404 |
|
$row['uid'], $row['suggestion']); |
|
405 |
|
} |
|
406 |
|
$yesterday = $count; |
|
407 |
|
if ($count) |
|
408 |
|
$yesterday_text = "\nYesterday suggestions:\n" . $list; |
|
409 |
|
rg_sql_free_result($res); |
|
|
394 |
|
if ($res === FALSE) |
|
395 |
|
return FALSE; |
|
396 |
|
$count = 0; |
|
397 |
|
$list = ''; |
|
398 |
|
while (($row = rg_sql_fetch_array($res))) { |
|
399 |
|
$count++; |
|
400 |
|
$list .= sprintf("%8u %s\n", $row['uid'], $row['suggestion']); |
410 |
401 |
} |
} |
|
402 |
|
rg_sql_free_result($res); |
|
403 |
|
$yesterday = $count; |
|
404 |
|
if ($count) |
|
405 |
|
$yesterday_text = "\nYesterday suggestions:\n" . $list; |
411 |
406 |
|
|
412 |
407 |
$ret .= 'Total suggestions: ' . $total; |
$ret .= 'Total suggestions: ' . $total; |
413 |
408 |
$ret .= "\nYesterday suggestions: " . $yesterday; |
$ret .= "\nYesterday suggestions: " . $yesterday; |
|
... |
... |
function rg_admin_report1_suggestions($db, $from, $to) |
421 |
416 |
*/ |
*/ |
422 |
417 |
function rg_admin_report_big_repos($db) |
function rg_admin_report_big_repos($db) |
423 |
418 |
{ |
{ |
424 |
|
$ret = 'Biggest repos:' . "\n"; |
|
|
419 |
|
$ret = 'Biggest repos (name, owner, total, git, artifacts):' . "\n"; |
425 |
420 |
while (1) { |
while (1) { |
426 |
|
$sql = 'SELECT uid, name, disk_used_mb FROM repos' |
|
|
421 |
|
$sql = 'SELECT uid, name, disk_used_mb, artifacts_mb' |
|
422 |
|
. ' FROM repos' |
427 |
423 |
. ' ORDER BY disk_used_mb DESC LIMIT 20'; |
. ' ORDER BY disk_used_mb DESC LIMIT 20'; |
428 |
424 |
$res = rg_sql_query($db, $sql); |
$res = rg_sql_query($db, $sql); |
429 |
|
if ($res === FALSE) { |
|
430 |
|
$ret .= ' ERR: ' . rg_sql_error(); |
|
431 |
|
break; |
|
432 |
|
} |
|
|
425 |
|
if ($res === FALSE) |
|
426 |
|
return FALSE; |
433 |
427 |
|
|
434 |
428 |
while (($row = rg_sql_fetch_array($res))) { |
while (($row = rg_sql_fetch_array($res))) { |
435 |
429 |
$ui = rg_user_nice($db, $row['uid']); |
$ui = rg_user_nice($db, $row['uid']); |
436 |
430 |
$ret .= "\t" . $row['name'] |
$ret .= "\t" . $row['name'] |
437 |
|
. "\t" . $row['disk_used_mb'] . ' MiB' |
|
438 |
431 |
. "\t" . $ui |
. "\t" . $ui |
|
432 |
|
. "\t" . $row['disk_used_mb'] . ' MiB' |
|
433 |
|
. "\t" . $row['git_mb'] . ' MiB' |
|
434 |
|
. "\t" . $row['artifacts_mb'] . ' MiB' |
439 |
435 |
. "\n"; |
. "\n"; |
440 |
436 |
} |
} |
441 |
437 |
rg_sql_free_result($res); |
rg_sql_free_result($res); |
|
... |
... |
function rg_admin_report_big_users($db) |
457 |
453 |
. ' WHERE deleted = 0' |
. ' WHERE deleted = 0' |
458 |
454 |
. ' ORDER BY disk_used_mb DESC LIMIT 20'; |
. ' ORDER BY disk_used_mb DESC LIMIT 20'; |
459 |
455 |
$res = rg_sql_query($db, $sql); |
$res = rg_sql_query($db, $sql); |
460 |
|
if ($res === FALSE) { |
|
461 |
|
$ret .= ' ERR: ' . rg_sql_error(); |
|
462 |
|
break; |
|
463 |
|
} |
|
|
456 |
|
if ($res === FALSE) |
|
457 |
|
return FALSE; |
464 |
458 |
|
|
465 |
459 |
while (($row = rg_sql_fetch_array($res))) { |
while (($row = rg_sql_fetch_array($res))) { |
466 |
460 |
$ret .= "\t" . $row['username'] |
$ret .= "\t" . $row['username'] |
|
... |
... |
function rg_admin_report1($db, $rg) |
530 |
524 |
. " WHERE itime >= $y_start" |
. " WHERE itime >= $y_start" |
531 |
525 |
. " AND itime <= $y_end"; |
. " AND itime <= $y_end"; |
532 |
526 |
$res = rg_sql_query($db, $sql); |
$res = rg_sql_query($db, $sql); |
533 |
|
if ($res === FALSE) { |
|
534 |
|
$yesterday = "ERR"; |
|
535 |
|
$g[$table]['yesterday'] = $yesterday; |
|
536 |
|
} else { |
|
537 |
|
$row = rg_sql_fetch_array($res); |
|
538 |
|
$yesterday = $row['count']; |
|
539 |
|
$total_yesterday_changes += $row['count']; |
|
540 |
|
$g[$table]['yesterday'] = $yesterday; |
|
541 |
|
rg_sql_free_result($res); |
|
542 |
|
} |
|
|
527 |
|
if ($res === FALSE) |
|
528 |
|
return FALSE; |
|
529 |
|
$row = rg_sql_fetch_array($res); |
|
530 |
|
$yesterday = $row['count']; |
|
531 |
|
$total_yesterday_changes += $row['count']; |
|
532 |
|
$g[$table]['yesterday'] = $yesterday; |
|
533 |
|
rg_sql_free_result($res); |
543 |
534 |
|
|
544 |
535 |
// Total |
// Total |
545 |
536 |
$sql = "SELECT COUNT(*) AS total FROM " . $table; |
$sql = "SELECT COUNT(*) AS total FROM " . $table; |
546 |
537 |
$res = rg_sql_query($db, $sql); |
$res = rg_sql_query($db, $sql); |
547 |
|
if ($res === FALSE) { |
|
548 |
|
$total = "ERR"; |
|
549 |
|
} else { |
|
550 |
|
$row = rg_sql_fetch_array($res); |
|
551 |
|
$total = $row['total']; |
|
552 |
|
$g[$table]['total'] = $total; |
|
553 |
|
rg_sql_free_result($res); |
|
554 |
|
} |
|
|
538 |
|
if ($res === FALSE) |
|
539 |
|
return FALSE; |
|
540 |
|
$row = rg_sql_fetch_array($res); |
|
541 |
|
$total = $row['total']; |
|
542 |
|
$g[$table]['total'] = $total; |
|
543 |
|
rg_sql_free_result($res); |
555 |
544 |
|
|
556 |
545 |
$body .= $yesterday . "\t\t" . $total . "\t" . $text . "\n"; |
$body .= $yesterday . "\t\t" . $total . "\t" . $text . "\n"; |
557 |
546 |
} |
} |
|
... |
... |
function rg_admin_report1($db, $rg) |
561 |
550 |
. ' WHERE itime >= ' . $y_start |
. ' WHERE itime >= ' . $y_start |
562 |
551 |
. ' AND itime <= ' . $y_end; |
. ' AND itime <= ' . $y_end; |
563 |
552 |
$res = rg_sql_query($db, $sql); |
$res = rg_sql_query($db, $sql); |
564 |
|
if ($res === FALSE) { |
|
565 |
|
$body .= ' ERR' . "\n"; |
|
566 |
|
} else { |
|
567 |
|
$body .= "\n"; |
|
568 |
|
while (($row = rg_sql_fetch_array($res))) { |
|
569 |
|
$body .= ' ' . $row['username'] |
|
570 |
|
. ' - ' . $row['realname'] |
|
571 |
|
. ' - ' . $row['email'] |
|
572 |
|
. ' [' . $row['last_ip'] . ']' |
|
573 |
|
. "\n"; |
|
574 |
|
} |
|
575 |
|
rg_sql_free_result($res); |
|
|
553 |
|
if ($res === FALSE) |
|
554 |
|
return FALSE; |
|
555 |
|
$body .= "\n"; |
|
556 |
|
while (($row = rg_sql_fetch_array($res))) { |
|
557 |
|
$body .= ' ' . $row['username'] |
|
558 |
|
. ' - ' . $row['realname'] |
|
559 |
|
. ' - ' . $row['email'] |
|
560 |
|
. ' [' . $row['last_ip'] . ']' |
|
561 |
|
. "\n"; |
576 |
562 |
} |
} |
|
563 |
|
rg_sql_free_result($res); |
577 |
564 |
|
|
578 |
565 |
$body .= "\nYesterday repos:"; |
$body .= "\nYesterday repos:"; |
579 |
566 |
$sql = 'SELECT name, uid, description, public FROM repos' |
$sql = 'SELECT name, uid, description, public FROM repos' |
580 |
567 |
. ' WHERE itime >= ' . $y_start |
. ' WHERE itime >= ' . $y_start |
581 |
568 |
. ' AND itime <= ' . $y_end; |
. ' AND itime <= ' . $y_end; |
582 |
569 |
$res = rg_sql_query($db, $sql); |
$res = rg_sql_query($db, $sql); |
583 |
|
if ($res === FALSE) { |
|
584 |
|
$body .= ' ERR' . "\n"; |
|
585 |
|
} else { |
|
586 |
|
$body .= "\n"; |
|
587 |
|
while (($row = rg_sql_fetch_array($res))) { |
|
588 |
|
$u = rg_user_nice($db, $row['uid']); |
|
589 |
|
$desc = mb_substr($row['description'], 0, 50) . '...'; |
|
590 |
|
$desc = preg_replace('/\s/', ' ', $desc); |
|
591 |
|
$body .= ' ' . $row['name'] . ' - ' . $u . ' - ' . $desc |
|
592 |
|
. ($row['public'] == 1 ? " (public)" : " (private)") . "\n"; |
|
593 |
|
} |
|
594 |
|
rg_sql_free_result($res); |
|
|
570 |
|
if ($res === FALSE) |
|
571 |
|
return FALSE; |
|
572 |
|
$body .= "\n"; |
|
573 |
|
while (($row = rg_sql_fetch_array($res))) { |
|
574 |
|
$u = rg_user_nice($db, $row['uid']); |
|
575 |
|
$desc = mb_substr($row['description'], 0, 50) . '...'; |
|
576 |
|
$desc = preg_replace('/\s/', ' ', $desc); |
|
577 |
|
$body .= ' ' . $row['name'] . ' - ' . $u . ' - ' . $desc |
|
578 |
|
. ($row['public'] == 1 ? " (public)" : " (private)") . "\n"; |
595 |
579 |
} |
} |
|
580 |
|
rg_sql_free_result($res); |
596 |
581 |
|
|
597 |
582 |
$sug = rg_admin_report1_suggestions($db, $y_start, $y_end); |
$sug = rg_admin_report1_suggestions($db, $y_start, $y_end); |
|
583 |
|
if ($sug === FALSE) |
|
584 |
|
return FALSE; |
598 |
585 |
$body .= "\n" . $sug; |
$body .= "\n" . $sug; |
599 |
586 |
|
|
600 |
587 |
$body .= "\n\n"; |
$body .= "\n\n"; |
601 |
588 |
$conns = rg_admin_report_conns($db, $y_start, $y_end); |
$conns = rg_admin_report_conns($db, $y_start, $y_end); |
602 |
|
if ($conns['ok'] != 1) { |
|
603 |
|
$body .= 'Cannot generate conns report: ' . $conns['errmsg'] . '!' . "\n"; |
|
604 |
|
} else { |
|
605 |
|
unset($conns['ok']); |
|
606 |
|
|
|
607 |
|
$body .= 'Number of conns entries: ' . $conns['count'] . "\n"; |
|
608 |
|
unset($conns['count']); |
|
609 |
|
|
|
610 |
|
$body .= 'Average elap: ' . $conns['avg_elap'] . 'ms' . "\n"; |
|
611 |
|
unset($conns['avg_elap']); |
|
612 |
|
|
|
613 |
|
//rg_log_ml('DEBUG: conns: ' . print_r($conns, TRUE)); |
|
614 |
|
foreach ($conns as $t => $i) { |
|
615 |
|
$body .= 'Top for \'' . $t . '\':' . "\n"; |
|
616 |
|
foreach ($i as $k => $v) { |
|
617 |
|
if (strcmp($t, 'repo_id') == 0) { |
|
618 |
|
$q = explode('/', $k); |
|
619 |
|
$k = rg_repo_nice($db, $q[1]) . ' (user ' . rg_user_nice($db, $q[0]) . ')'; |
|
620 |
|
} else if (strcmp($t, 'uid') == 0) { |
|
621 |
|
$k = rg_user_nice($db, $k) . ' (' . $k . ')'; |
|
622 |
|
} |
|
|
589 |
|
if ($conns['ok'] != 1) |
|
590 |
|
return FALSE; |
|
591 |
|
|
|
592 |
|
unset($conns['ok']); |
|
593 |
|
|
|
594 |
|
$body .= 'Number of conns entries: ' . $conns['count'] . "\n"; |
|
595 |
|
unset($conns['count']); |
|
596 |
|
|
|
597 |
|
$body .= 'Average elap: ' . $conns['avg_elap'] . 'ms' . "\n"; |
|
598 |
|
unset($conns['avg_elap']); |
623 |
599 |
|
|
624 |
|
$k2 = !empty($k) ? $k : 'EMPTY'; |
|
625 |
|
$body .= ' ' . $v . ' ' . $k2 . "\n"; |
|
|
600 |
|
//rg_log_ml('DEBUG: conns: ' . print_r($conns, TRUE)); |
|
601 |
|
foreach ($conns as $t => $i) { |
|
602 |
|
$body .= 'Top for \'' . $t . '\':' . "\n"; |
|
603 |
|
foreach ($i as $k => $v) { |
|
604 |
|
if (strcmp($t, 'repo_id') == 0) { |
|
605 |
|
$q = explode('/', $k); |
|
606 |
|
$k = rg_repo_nice($db, $q[1]) . ' (user ' . rg_user_nice($db, $q[0]) . ')'; |
|
607 |
|
} else if (strcmp($t, 'uid') == 0) { |
|
608 |
|
$k = rg_user_nice($db, $k) . ' (' . $k . ')'; |
626 |
609 |
} |
} |
627 |
|
$body .= "\n"; |
|
|
610 |
|
|
|
611 |
|
$k2 = !empty($k) ? $k : 'EMPTY'; |
|
612 |
|
$body .= ' ' . $v . ' ' . $k2 . "\n"; |
628 |
613 |
} |
} |
|
614 |
|
$body .= "\n"; |
629 |
615 |
} |
} |
630 |
616 |
|
|
631 |
|
$body .= rg_admin_report_big_repos($db); |
|
632 |
|
$body .= rg_admin_report_big_users($db); |
|
|
617 |
|
$r = rg_admin_report_big_repos($db); |
|
618 |
|
if ($r === FALSE) |
|
619 |
|
return FALSE; |
|
620 |
|
$body .= $r; |
|
621 |
|
$r= rg_admin_report_big_users($db); |
|
622 |
|
if ($r === FALSE) |
|
623 |
|
return FALSE; |
|
624 |
|
$body .= $r; |
633 |
625 |
|
|
634 |
626 |
$rg['ui']['ignore_confirmed'] = 1; |
$rg['ui']['ignore_confirmed'] = 1; |
635 |
627 |
$rg['ui']['email'] = $rg_admin_email; |
$rg['ui']['email'] = $rg_admin_email; |
File inc/util.inc.php changed (mode: 100644) (index eac4518..a264987) |
... |
... |
function rg_load_files($dir, $pattern, $id_field) |
3004 |
3004 |
return $ret; |
return $ret; |
3005 |
3005 |
} |
} |
3006 |
3006 |
|
|
|
3007 |
|
/* |
|
3008 |
|
* Computing the size of a directory (helper) |
|
3009 |
|
*/ |
|
3010 |
|
function rg_dir_size_helper($dir, &$icache) |
|
3011 |
|
{ |
|
3012 |
|
$tree = array('dirs' => array()); |
|
3013 |
|
$ret = FALSE; |
|
3014 |
|
while (1) { |
|
3015 |
|
$d = @opendir($dir); |
|
3016 |
|
if ($d === FALSE) { |
|
3017 |
|
rg_util_set_error('cannot open dir: ' . rg_php_err()); |
|
3018 |
|
break; |
|
3019 |
|
} |
|
3020 |
|
|
|
3021 |
|
$error = FALSE; |
|
3022 |
|
while (($f = readdir($d)) !== FALSE) { |
|
3023 |
|
if (strcmp($f, ".") == 0) |
|
3024 |
|
continue; |
|
3025 |
|
|
|
3026 |
|
if (strcmp($f, "..") == 0) |
|
3027 |
|
continue; |
|
3028 |
|
|
|
3029 |
|
$s = @stat($dir . '/' . $f); |
|
3030 |
|
if ($s === FALSE) { |
|
3031 |
|
rg_util_set_error('cannot stat: ' . rg_php_err()); |
|
3032 |
|
$error = TRUE; |
|
3033 |
|
break; |
|
3034 |
|
} |
|
3035 |
|
|
|
3036 |
|
if (($s['mode'] & 0040000) == 0040000) { // dir |
|
3037 |
|
$v = rg_dir_size_helper($dir . '/' . $f, $icache); |
|
3038 |
|
if ($v === FALSE) { |
|
3039 |
|
$error = TRUE; |
|
3040 |
|
break; |
|
3041 |
|
} |
|
3042 |
|
} else if (($s['mode'] & 0100000) == 0100000) { // regular file |
|
3043 |
|
$k = $s['dev'] . '-' . $s['ino']; |
|
3044 |
|
if (!isset($icache[$k])) |
|
3045 |
|
$icache[$k] = array( |
|
3046 |
|
'links' => $s['nlink'], |
|
3047 |
|
'size' => $s['size'], |
|
3048 |
|
'blocks' => $s['blocks'] |
|
3049 |
|
); |
|
3050 |
|
$v = $k; |
|
3051 |
|
} |
|
3052 |
|
|
|
3053 |
|
$tree['dirs'][$f] = $v; |
|
3054 |
|
} |
|
3055 |
|
closedir($d); |
|
3056 |
|
|
|
3057 |
|
if (empty($tree['dirs'])) |
|
3058 |
|
unset($tree['dirs']); |
|
3059 |
|
|
|
3060 |
|
if ($error === FALSE) |
|
3061 |
|
$ret = $tree; |
|
3062 |
|
break; |
|
3063 |
|
} |
|
3064 |
|
|
|
3065 |
|
return $ret; |
|
3066 |
|
} |
|
3067 |
|
|
|
3068 |
|
function rg_dir_size_helper2(&$tree, $icache) |
|
3069 |
|
{ |
|
3070 |
|
// Step two, now we can compute the correct size |
|
3071 |
|
$tree['blocks'] = 0; |
|
3072 |
|
$tree['size'] = 0; |
|
3073 |
|
if (!isset($tree['dirs'])) // empty dir |
|
3074 |
|
return $tree; |
|
3075 |
|
|
|
3076 |
|
foreach ($tree['dirs'] as $k => &$o) { |
|
3077 |
|
if (is_array($o)) { // dir |
|
3078 |
|
//echo ' dir [' . $k . ']: ' . rg_array2string($o); |
|
3079 |
|
$x = rg_dir_size_helper2($o, $icache); |
|
3080 |
|
//echo ' ret: ' . rg_array2string($x) . "\n"; |
|
3081 |
|
$tree['size'] += $x['size']; |
|
3082 |
|
$tree['blocks'] += $x['blocks']; |
|
3083 |
|
} else { // file |
|
3084 |
|
$p = $icache[$o]; |
|
3085 |
|
//echo ' file [' . $k . ']: icache: ' . rg_array2string($p) . "\n"; |
|
3086 |
|
$tree['size'] += intval($p['size'] / $p['links']); |
|
3087 |
|
$tree['blocks'] += intval($p['blocks'] / $p['links']); |
|
3088 |
|
unset($tree['dirs'][$k]); |
|
3089 |
|
} |
|
3090 |
|
} |
|
3091 |
|
unset($o); |
|
3092 |
|
|
|
3093 |
|
if (empty($tree['dirs'])) |
|
3094 |
|
unset($tree['dirs']); |
|
3095 |
|
|
|
3096 |
|
return $tree; |
|
3097 |
|
} |
|
3098 |
|
|
|
3099 |
|
/* |
|
3100 |
|
* Computing the size of a directory |
|
3101 |
|
*/ |
|
3102 |
|
function rg_dir_size($dir) |
|
3103 |
|
{ |
|
3104 |
|
rg_prof_start('dir_size'); |
|
3105 |
|
|
|
3106 |
|
$ret = FALSE; |
|
3107 |
|
while (1) { |
|
3108 |
|
$r = file_exists($dir); |
|
3109 |
|
if ($r === FALSE) { |
|
3110 |
|
$ret = array('blocks' => 0, 'size' => 0); |
|
3111 |
|
break; |
|
3112 |
|
} |
|
3113 |
|
|
|
3114 |
|
// This will allow us to count correctly the size of the dir |
|
3115 |
|
$icache = array(); |
|
3116 |
|
|
|
3117 |
|
$ret = rg_dir_size_helper($dir, $icache); |
|
3118 |
|
if ($ret === FALSE) |
|
3119 |
|
break; |
|
3120 |
|
|
|
3121 |
|
//rg_log_ml('dir_size: ' . print_r($ret)); |
|
3122 |
|
//rg_log_ml('icache: ' . print_r($icache)); |
|
3123 |
|
|
|
3124 |
|
rg_dir_size_helper2($ret, $icache); |
|
3125 |
|
unset($icache); |
|
3126 |
|
break; |
|
3127 |
|
} |
|
3128 |
|
|
|
3129 |
|
rg_prof_end('dir_size'); |
|
3130 |
|
return $ret; |
|
3131 |
|
} |
|
3132 |
|
|
File scripts/cron.php changed (mode: 100644) (index 51bd9ef..1867c3e) |
... |
... |
rg_unlock('cron.lock'); |
61 |
61 |
|
|
62 |
62 |
rg_stats_insert($db); |
rg_stats_insert($db); |
63 |
63 |
|
|
64 |
|
if (gmdate('Hi') == '0105') { |
|
65 |
|
while (1) { |
|
66 |
|
if (rg_load() > 100) |
|
67 |
|
break; |
|
|
64 |
|
$today_00 = gmmktime(0, 0, 0, gmdate('m'), gmdate('d'), gmdate('Y')); |
|
65 |
|
$today_01 = gmmktime(1, 0, 0, gmdate('m'), gmdate('d'), gmdate('Y')); |
|
66 |
|
|
|
67 |
|
$ldru = rg_state_get($db, 'last_disk_repo_usage'); |
|
68 |
|
while (($ldru < $today_00) && (rg_load() < 30)) { |
|
69 |
|
rg_log('Compute repository sizes if dirty...'); |
|
70 |
|
$sql = 'SELECT uid, repo_id, master, disk_used_mb, git_mb' |
|
71 |
|
. ', artifacts_mb' |
|
72 |
|
. ' FROM repos' |
|
73 |
|
. ' WHERE deleted = 0'; |
|
74 |
|
$res = rg_sql_query($db, $sql); |
|
75 |
|
if ($res === FALSE) { |
|
76 |
|
rg_internal_error('Cannot get repo info' |
|
77 |
|
. ' (' . rg_sql_error() . ')!'); |
|
78 |
|
break; |
|
79 |
|
} |
68 |
80 |
|
|
69 |
|
rg_log('Compute repository sizes if dirty...'); |
|
70 |
|
// delete 'dirty' files |
|
71 |
|
$sql = 'SELECT uid, repo_id, master, disk_used_mb FROM repos' |
|
72 |
|
. ' WHERE deleted = 0'; |
|
73 |
|
$res = rg_sql_query($db, $sql); |
|
74 |
|
if ($res === FALSE) { |
|
75 |
|
// TODO: rg_internal_error? it must notify me in case of problems |
|
76 |
|
rg_log('Cannot run query (' . rg_sql_error() . ')!'); |
|
77 |
|
break; |
|
|
81 |
|
$ok = TRUE; |
|
82 |
|
while (($row = rg_sql_fetch_array($res))) { |
|
83 |
|
rg_log('Processing repo ' . $row['repo_id'] . '...'); |
|
84 |
|
$di = rg_repo_size($row['uid'], $row['repo_id']); |
|
85 |
|
if ($di === FALSE) { |
|
86 |
|
rg_internal_error('Cannot compute the repo size: ' |
|
87 |
|
. rg_repo_error()); |
|
88 |
|
$ok = FALSE; |
|
89 |
|
continue; |
78 |
90 |
} |
} |
79 |
|
|
|
80 |
|
while (($row = rg_sql_fetch_array($res))) { |
|
81 |
|
rg_log('Processing repo ' . $row['repo_id'] . '...'); |
|
82 |
|
$repo_path = rg_repo_path_by_id($row['uid'], $row['repo_id']); |
|
83 |
|
|
|
84 |
|
$all_files = $row['master'] == 0 ? TRUE : FALSE; |
|
85 |
|
$disk_used = rg_repo_size($repo_path, $all_files); |
|
86 |
|
if ($disk_used === FALSE) { |
|
87 |
|
rg_log('Cannot compute the repo size: ' . rg_repo_error()); |
|
88 |
|
continue; |
|
89 |
|
} |
|
90 |
|
$disk_used_mb = sprintf('%u', $disk_used / 1024 / 1024); |
|
91 |
|
if ($disk_used_mb != $row['disk_used_mb']) { |
|
92 |
|
$sql = 'UPDATE repos SET disk_used_mb = ' . $disk_used_mb |
|
93 |
|
. ' WHERE repo_id = ' . $row['repo_id'] |
|
94 |
|
. ' AND disk_used_mb != ' . $disk_used_mb; |
|
95 |
|
$res2 = rg_sql_query($db, $sql); |
|
96 |
|
if ($res2 === FALSE) { |
|
97 |
|
rg_log('Cannot run query!'); |
|
98 |
|
break; |
|
99 |
|
} |
|
100 |
|
rg_sql_free_result($res2); |
|
|
91 |
|
if (($di['disk_used_mb'] != $row['disk_used_mb']) |
|
92 |
|
|| ($di['git_mb'] != $row['git_mb']) |
|
93 |
|
|| ($di['artifacts_mb'] != $row['artifacts_mb'])) { |
|
94 |
|
$sql = 'UPDATE repos' |
|
95 |
|
. ' SET disk_used_mb = ' . $di['disk_used_mb'] |
|
96 |
|
. ', git_mb = ' . $di['git_mb'] |
|
97 |
|
. ', artifacts_mb = ' . $di['artifacts_mb'] |
|
98 |
|
. ' WHERE repo_id = ' . $row['repo_id']; |
|
99 |
|
$res2 = rg_sql_query($db, $sql); |
|
100 |
|
if ($res2 === FALSE) { |
|
101 |
|
rg_internal_error('Cannot update repo: ' . rg_sql_error()); |
|
102 |
|
$ok = FALSE; |
|
103 |
|
break; |
101 |
104 |
} |
} |
|
105 |
|
rg_sql_free_result($res2); |
102 |
106 |
} |
} |
103 |
|
rg_sql_free_result($res); |
|
|
107 |
|
} |
|
108 |
|
rg_sql_free_result($res); |
|
109 |
|
if ($ok) { |
|
110 |
|
$ldru = time(); |
|
111 |
|
rg_state_set($db, 'last_disk_repo_usage', $ldru); |
|
112 |
|
} |
|
113 |
|
break; |
|
114 |
|
} |
|
115 |
|
|
|
116 |
|
$r = rg_state_get($db, 'last_disk_user_usage'); |
|
117 |
|
while (($r < $ldru) && (rg_load() < 30)) { |
|
118 |
|
rg_log('Compute repository sizes per user...'); |
|
119 |
|
$sql = 'SELECT uid, SUM(disk_used_mb) AS disk_used_mb' |
|
120 |
|
. ', SUM(git_mb) AS git_mb' |
|
121 |
|
. ', SUM(artifacts_mb) AS artifacts_mb' |
|
122 |
|
. ' FROM repos' |
|
123 |
|
. ' GROUP BY uid'; |
|
124 |
|
$res = rg_sql_query($db, $sql); |
|
125 |
|
if ($res === FALSE) { |
|
126 |
|
rg_internal_error('Cannot get repo info (' . rg_sql_error() . ')!'); |
104 |
127 |
break; |
break; |
105 |
128 |
} |
} |
106 |
129 |
|
|
107 |
|
while (1) { |
|
108 |
|
rg_log('Compute repository sizes per user...'); |
|
109 |
|
$sql = 'SELECT SUM(disk_used_mb) AS disk_used_mb, uid' |
|
110 |
|
. ' FROM repos' |
|
111 |
|
. ' GROUP BY uid'; |
|
112 |
|
$res = rg_sql_query($db, $sql); |
|
113 |
|
if ($res === FALSE) { |
|
114 |
|
rg_log('Cannot run query (' . rg_sql_error() . ')!'); |
|
|
130 |
|
$ok = TRUE; |
|
131 |
|
while (($row = rg_sql_fetch_array($res))) { |
|
132 |
|
$sql = 'UPDATE users' |
|
133 |
|
. ' SET disk_used_mb = ' . $row['disk_used_mb'] |
|
134 |
|
. ', git_mb = ' . $row['git_mb'] |
|
135 |
|
. ', artifacts_mb = ' . $row['artifacts_mb'] |
|
136 |
|
. ' WHERE uid = ' . $row['uid'] |
|
137 |
|
. ' AND (disk_used_mb != ' . $row['disk_used_mb'] |
|
138 |
|
. ' OR git_mb != ' . $row['git_mb'] |
|
139 |
|
. ' OR artifacts_mb != ' . $row['artifacts_mb'] |
|
140 |
|
. ')'; |
|
141 |
|
$res2 = rg_sql_query($db, $sql); |
|
142 |
|
if ($res2 === FALSE) { |
|
143 |
|
rg_internal_error('Cannot update (' . rg_sql_error() . ')!'); |
|
144 |
|
$ok = FALSE; |
115 |
145 |
break; |
break; |
116 |
146 |
} |
} |
117 |
|
|
|
118 |
|
while (($row = rg_sql_fetch_array($res))) { |
|
119 |
|
$sql = 'UPDATE users' |
|
120 |
|
. ' SET disk_used_mb = ' . $row['disk_used_mb'] |
|
121 |
|
. ' WHERE uid = ' . $row['uid'] |
|
122 |
|
. ' AND disk_used_mb != ' . $row['disk_used_mb']; |
|
123 |
|
$res2 = rg_sql_query($db, $sql); |
|
124 |
|
if ($res2 !== FALSE) |
|
125 |
|
rg_sql_free_result($res2); |
|
126 |
|
} |
|
127 |
|
rg_sql_free_result($res); |
|
128 |
|
break; |
|
|
147 |
|
rg_sql_free_result($res2); |
129 |
148 |
} |
} |
|
149 |
|
rg_sql_free_result($res); |
|
150 |
|
if ($ok) |
|
151 |
|
rg_state_set($db, 'last_disk_user_usage', time()); |
|
152 |
|
break; |
130 |
153 |
} |
} |
131 |
154 |
|
|
132 |
|
if (gmdate('Hi') == '0300') { |
|
|
155 |
|
$r = rg_state_get($db, 'cron_last_clean_forget_pass'); |
|
156 |
|
while (($r < $today_00) && (rg_load() < 50)) { |
133 |
157 |
rg_log_enter('Clean old forget_pass entries...'); |
rg_log_enter('Clean old forget_pass entries...'); |
134 |
158 |
$sql = 'DELETE FROM forgot_pass WHERE expire < ' . $now; |
$sql = 'DELETE FROM forgot_pass WHERE expire < ' . $now; |
135 |
159 |
$res = rg_sql_query($db, $sql); |
$res = rg_sql_query($db, $sql); |
136 |
|
if ($res !== FALSE) |
|
|
160 |
|
if ($res === FALSE) { |
|
161 |
|
rg_internal_error('Cannot delete forgot_pass' |
|
162 |
|
. ' (' . rg_sql_error() . ')!'); |
|
163 |
|
} else { |
137 |
164 |
rg_sql_free_result($res); |
rg_sql_free_result($res); |
|
165 |
|
rg_state_set($db, 'cron_last_clean_forget_pass', time()); |
|
166 |
|
} |
138 |
167 |
rg_log_exit(); |
rg_log_exit(); |
|
168 |
|
break; |
139 |
169 |
} |
} |
140 |
170 |
|
|
141 |
171 |
if (gmdate('i') == '30') { |
if (gmdate('i') == '30') { |
142 |
172 |
rg_log_enter('Clean old tokens...'); |
rg_log_enter('Clean old tokens...'); |
143 |
173 |
$sql = 'DELETE FROM tokens WHERE expire < ' . $now; |
$sql = 'DELETE FROM tokens WHERE expire < ' . $now; |
144 |
174 |
$res = rg_sql_query($db, $sql); |
$res = rg_sql_query($db, $sql); |
145 |
|
if ($res !== FALSE) |
|
|
175 |
|
if ($res === FALSE) |
|
176 |
|
rg_internal_error('Cannot delete expired tokens (' . rg_sql_error() . ')!'); |
|
177 |
|
else |
146 |
178 |
rg_sql_free_result($res); |
rg_sql_free_result($res); |
147 |
179 |
rg_log_exit(); |
rg_log_exit(); |
148 |
180 |
} |
} |
|
... |
... |
while (gmdate('Hi') == '0610') { |
200 |
232 |
. ' ORDER BY relname'; |
. ' ORDER BY relname'; |
201 |
233 |
$res = rg_sql_query($db, $sql); |
$res = rg_sql_query($db, $sql); |
202 |
234 |
if ($res === FALSE) { |
if ($res === FALSE) { |
203 |
|
rg_log('Cannot load slave tables: ' . rg_sql_error()); |
|
|
235 |
|
rg_internal_error('Cannot check if table exists' |
|
236 |
|
. ' (' . rg_sql_error() . ')!'); |
|
237 |
|
$ok = FALSE; |
204 |
238 |
break; |
break; |
205 |
239 |
} |
} |
206 |
240 |
while (($row = rg_sql_fetch_array($res))) { |
while (($row = rg_sql_fetch_array($res))) { |
207 |
|
$sql = 'SELECT 1 FROM ' . $row['relname'] . ' LIMIT 1'; |
|
|
241 |
|
$sql = 'DROP TABLE ' . $row['relname']; |
208 |
242 |
$res2 = rg_sql_query($db, $sql); |
$res2 = rg_sql_query($db, $sql); |
209 |
243 |
if ($res2 === FALSE) { |
if ($res2 === FALSE) { |
210 |
|
rg_log('Cannot select from table [' |
|
211 |
|
. $row['relname'] . ']: ' |
|
212 |
|
. rg_sql_error()); |
|
|
244 |
|
rg_internal_error('Cannot drop table (' . rg_sql_error() . ')!'); |
|
245 |
|
$ok = FALSE; |
213 |
246 |
break; |
break; |
214 |
247 |
} |
} |
215 |
|
$rows = rg_sql_num_rows($res2); |
|
216 |
248 |
rg_sql_free_result($res2); |
rg_sql_free_result($res2); |
217 |
|
|
|
218 |
|
if ($rows == 1) |
|
219 |
|
continue; |
|
220 |
|
|
|
221 |
|
$sql = 'DROP TABLE ' . $row['relname']; |
|
222 |
|
$res2 = rg_sql_query($db, $sql); |
|
223 |
|
if ($res2 !== FALSE) |
|
224 |
|
rg_sql_free_result($res2); |
|
225 |
249 |
} |
} |
226 |
250 |
rg_sql_free_result($res); |
rg_sql_free_result($res); |
227 |
251 |
} |
} |
228 |
252 |
|
|
229 |
|
rg_state_set($db, 'slave_clean_last_run', $when); |
|
230 |
|
|
|
|
253 |
|
if ($ok) |
|
254 |
|
rg_state_set($db, 'part_clean_last_run', time()); |
231 |
255 |
rg_log_exit(); |
rg_log_exit(); |
232 |
256 |
break; |
break; |
233 |
257 |
} |
} |
234 |
258 |
|
|
235 |
|
if (gmdate('Hi') == '0100') |
|
236 |
|
rg_admin_report1($db, $rg); |
|
|
259 |
|
$r = rg_state_get($db, 'cron_report1'); |
|
260 |
|
while (($r < $today_01) && (rg_load() < 50)) { |
|
261 |
|
$r = rg_admin_report1($db, $rg); |
|
262 |
|
if ($r === FALSE) |
|
263 |
|
break; |
|
264 |
|
rg_state_set($db, 'cron_report1', time()); |
|
265 |
|
} |
237 |
266 |
|
|
238 |
267 |
// TODO: move it as an event after the push |
// TODO: move it as an event after the push |
239 |
268 |
rg_mr_queue_process($db); |
rg_mr_queue_process($db); |