[evolvis-commits] r10736: fixing stats↵
mirabilos at evolvis.org
mirabilos at evolvis.org
Thu Feb 24 17:54:36 CET 2011
Author: mirabilos
Date: 2011-02-24 17:54:36 +0100 (Thu, 24 Feb 2011)
New Revision: 10736
Modified:
trunk/gforge_base/evolvisforge-5.1/gforge-plugin-scmsvn/cronjobs/svn-stats.php
Log:
fixing stats
Modified: trunk/gforge_base/evolvisforge-5.1/gforge-plugin-scmsvn/cronjobs/svn-stats.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge-plugin-scmsvn/cronjobs/svn-stats.php 2011-02-24 16:54:35 UTC (rev 10735)
+++ trunk/gforge_base/evolvisforge-5.1/gforge-plugin-scmsvn/cronjobs/svn-stats.php 2011-02-24 16:54:36 UTC (rev 10736)
@@ -21,158 +21,180 @@
require ('squal_pre.php');
require ('common/include/cron_utils.php');
-class SVNGroup
-{
- var $group_id;
- var $lastdate;
- var $lastrev;
- var $groupname;
- var $alreadyseen;
-
- function SVNGroup($group_id, $lastdate, $lastrev, $groupname, $alreadyseen){
- $this->group_id = $group_id;
- $this->lastdate = $lastdate;
- $this->lastrev = $lastrev;
- $this->groupname = $groupname;
- $this->alreadyseen = $alreadyseen;
- }
-
- function getGroup_id(){
- return $group_id;
- }
- function getlastdate(){
- return $lastdate;
- }
- function getlastrev(){
- return $lastrev;
- }
- function getgroupname(){
- return $groupname;
- }
- function getalreadyseen(){
- return $alreadyseen;
- }
-
- function setGroup_id($group_id){
- $this->group_id = $group_id;
- }
- function setlastdate($lastdate){
- $this->lastdate = $lastdate;
- }
- function setlastrev($lastrev){
- $this->lastrev = $lastrev;
- }
- function setgroupname($groupname){
- $this->groupname = $groupname;
- }
- function setalreadyseen($alreadyseen){
- $this->alreadyseen = $alreadyseen;
- }
-
-};
$pluginname = "scmsvn" ;
+$svnroot = "/home/norberto/test/";
db_begin();
$pluginid = get_plugin_id($pluginname);
-$groups = array();
+
+db_begin();
+
+if ( $ARGV[1] && $ARGV[2] && $ARGV[3] ) {
+
+ $day_begin = gmmktime( 0, 0, 0, $ARGV[2], $ARGV[3], $ARGV[1] );
+ // $day_begin = timegm( 0, 0, 0, $ARGV[2], $ARGV[1] - 1, $ARGV[0] - 1900 );
+ $day_end = $day_begin + 86400;
+
+ $rollback = process_day($day_begin, $day_end);
+} else if($ARGV[1]=='all' && !$ARGV[2] && !$ARGV[3]) {
-
-$res = db_query("SELECT group_plugin.group_id, groups.unix_group_name
- FROM group_plugin, groups
- WHERE group_plugin.plugin_id = $pluginid
- AND group_plugin.group_id = groups.group_id");
+ $all_days = &get_all_days();
+ foreach ( $all_days as $day ) {
+ echo $day;
+ $rollback = process_day($day, $day + 86400);
+
+ if($rollback)
+ break;
+
+ }
+
+} else {
-if (!$res) {
- $err .= "Error! Database Query Failed: ".db_error();
- echo $err;
- db_rollback();
- exit;
-}
+ $local_time = localtime();
+ ## Start at midnight last night.
+ $day_end = gmmktime( 0, 0, 0, $local_time[4] + 1, $local_time[3], $local_time[5] );
-while ( $row =& db_fetch_array($res) ) {
- $svn = new SVNGroup($row[0], 0, 0, $row[1], 0);
- $groups[$row[0]] = $svn;
+ // $day_end = gmmktime( 0, 0, 0, (gmtime( time() ))[3,4,5] );
+ ## go until midnight yesterday.
+ $day_begin = $day_end - 86400;
+ // $day_begin = timegm( 0, 0, 0, (gmtime( time() - 86400 ))[3,4,5] );
+
+ $rollback = process_day($day_begin, $day_end);
+
}
-$res = db_query("SELECT group_id, last_check_date, last_repo_version
- FROM plugin_scmsvn_stats");
-
-if (!$res) {
- $err .= "Error! Database Query Failed: ".db_error();
- echo $err;
+if ( $rollback ) {
db_rollback();
- exit;
+} else {
+ db_commit();
}
-while ( $row =& db_fetch_array($res) ) {
- $groups[$row[0]]->setlastdate($row[1]);
- $groups[$row[0]]->setlastrev($row[2]);
- $groups[$row[0]]->setalreadyseen(1);
-}
-foreach ($groups as $group){
- $svnroot = "/var/lib/gforge/chroot/svnroot/" . $group->getgroupname();
- $currev = shell_exec( "svnlook youngest ". $svnroot ) ;
- $adds = 0 ;
- $deletes = 0 ;
- $updates = 0 ;
- $commits = 0 ;
- $rev = $group->getlastrev() + 1 ;
+
+function process_day($day_begin, $day_end){
+
+ global $err;
+ global $verbose;
+ global $pluginid;
+
+
+ $year = gmstrftime("%Y", $day_begin );
+ $month = gmstrftime("%m", $day_begin );
+ $day = gmstrftime("%d", $day_begin );
+
+ $month_string = sprintf( "%04d%02d", $year, $month );
+
+
+ $res = db_query("SELECT group_plugin.group_id, groups.unix_group_name
+ FROM group_plugin, groups
+ WHERE group_plugin.plugin_id = $pluginid
+ AND group_plugin.group_id = groups.group_id");
+
+ if (!$res) {
+ $err .= "Error! Database Query Failed: ".db_error();
+ return 1;
+ }
- while ($rev <= $currev){
- $commits++;
- $output = shell_exec("svnlook changed -r$rev $svnroot |");
- $lines = explode("\n", $output);
- foreach ($lines as $line) {
- if (!$line == "") {
- if(substr($line,0,1) == "A")
- $adds++;
- if(substr($line,0,1) == "D")
- $deletes++;
- if(substr($line,0,1) == "U")
- $updates++;
+ while ( $groups =& db_fetch_array($res) ) {
+ $svnroot_group = $svnroot . $groups[1];
+ $currev = shell_exec( "svnlook youngest ". $svnroot_group ) ;
+ $adds = 0 ;
+ $deletes = 0 ;
+ $updates = 0 ;
+ $commits = 0 ;
+ $rev = 0;
+ while ($rev <= $currev) {
+ $date = shell_exec( "svnlook date -r$rev ". $svnroot_group );
+ $time_parsed = strtotime($date);
+ if ($day_begin >= $time_parsed && $time_parsed <= $day_end) {
+ $commits++;
+ $author = shell_exec( "svnlook author -r$rev $svnroot_group ");
+ $output = shell_exec("svnlook changed -r$rev $svnroot_group |");
+ $lines = explode("\n", $output);
+ foreach ($lines as $line) {
+ if (!$line == "") {
+ if (substr($line,0,1) == "A")
+ $adds++;
+ if (substr($line,0,1) == "D")
+ $deletes++;
+ if (substr($line,0,1) == "U")
+ $updates++;
+ }
+ }
}
+ $rev++;
+ }
+
+ $user_res = db_query( "SELECT user_id FROM users WHERE
+ user_name='$author'" );
+ if ( $user_row = db_fetch_array($user_res) ) {
+ $user_id = $user_row[0];
+ } else {
+ $err .= "User $user was not found... skipping.\n";
+ break;
}
- $rev++;
- }
+
+ // cleaning stats_cvs_* table for the current day to avoid conflicting index problem
+ $sql = "DELETE FROM stats_cvs_group
+ WHERE month = '$month_string'
+ AND day = '$day'
+ AND group_id = '$groups[0]'";
+ $res = db_query($sql);
+ if(!$res) {
+ $err .= 'Error cleaning stats_cvs_group for current day and current group: '.db_error();
+ break;
+ }
+
+ $sql = "DELETE FROM stats_cvs_user
+ WHERE month = '$month_string'
+ AND day = '$day'
+ AND group_id = '$groups[0]'";
+ $res = db_query($sql);
+ if(!$res) {
+ $err .= 'Error cleaning stats_cvs_user for current day and current group: '.db_error();
+ break;
+ }
- $time = time();
- if ($group->getalreadyseen()) {
- $query = "UPDATE plugin_scmsvn_stats
- SET last_repo_version = " .$currev .",
- adds = " .$adds. ",
- deletes = " .$deletes . ",
- commits = " .$commits . ",
- changes = " .$updates . ",
- last_check_date = ". $time . "
- WHERE group_id = " .$group_id ;
- } else {
- $query = "INSERT INTO plugin_scmsvn_stats
- (last_repo_version, last_check_date, adds, deletes, commits, changes, group_id)
- VALUES (".$currev.", ".$time.", ".$adds.", ".$deletes.", ".$commits.", ".$updates.", ".$group_id.")";
+ $sql = "INSERT INTO stats_cvs_group
+ (month,day,group_id,checkouts,commits,adds)
+ VALUES
+ ('$month_string',
+ '$day',
+ '$groups[0]',
+ '0',
+ '$commits',
+ '$adds')";
+
+ if ( !db_query( $sql ) ) {
+ $err .= 'Insertion in stats_cvs_group failed: '.$sql.' - '.db_error();
+ break;
+ }
+
+ $sql = "INSERT INTO stats_cvs_user
+ (month,day,group_id,user_id,commits,adds) VALUES
+ ('$month_string',
+ '$day',
+ '$groups[0]',
+ '$user_id',
+ '$commits',
+ '$adds')";
+
+ if ( !db_query( $sql )) {
+ $err .= 'Insertion in stats_cvs_user failed: '.$sql.' - '.db_error();
+ break;
+ }
+
}
-
- $res = db_query($query);
-
- if (!$res) {
- $err .= "Error! Database Query Failed: ".db_error();
- echo $err;
- db_rollback();
- exit;
- }
+ return 0;
}
-
-db_commit();
-
function get_plugin_id($pluginname){
$res = db_query("SELECT plugin_id FROM plugins WHERE plugin_name = '".$pluginname."'");
if (!$res) {
$err .= "Error! Database Query Failed: ".db_error();
- echo $err;
db_rollback();
exit;
}
@@ -182,4 +204,40 @@
return $plugin_id;
}
-?>
+
+
+function get_all_days(){
+
+ global $cvsroot;
+ global $err;
+ global $verbose;
+ global $debug;
+
+ $res = db_query("SELECT group_plugin.group_id, groups.unix_group_name
+ FROM group_plugin, groups
+ WHERE group_plugin.plugin_id = $pluginid
+ AND group_plugin.group_id = groups.group_id");
+
+ if (!$res) {
+ $err .= "Error! Database Query Failed: ".db_error();
+ return 1;
+ }
+
+ while ( $groups =& db_fetch_array($res) ) {
+ $svnroot_group = $svnroot . $groups[1];
+ $currev = shell_exec( "svnlook youngest ". $svnroot_group ) ;
+ $rev = 0;
+ while ($rev <= $currev) {
+ $date = shell_exec( "svnlook date -r$rev ". $svnroot_group );
+ $time_parsed = strtotime($date);
+
+ if(!in_array($time_parsed, $all_days))
+ array_push($all_days, $time_parsed);
+
+ }
+ }
+
+ return $all_days;
+}
+
+?>
\ No newline at end of file
More information about the evolvis-commits
mailing list