cpu-time command -> CpuTime trigger module...
...now that triggers are not restricted to external programs and can be perl code called by gitolite-shell (thus in the same PID), there's no need to compute and pass along the times() array. This also changes the arguments to POST_GIT; they're now the same as PRE_GIT's.
This commit is contained in:
parent
de40461d9a
commit
e1c7e546aa
8 changed files with 65 additions and 57 deletions
|
@ -5,6 +5,5 @@ alternatives exist.
|
||||||
|
|
||||||
### gl-time for performance measurement
|
### gl-time for performance measurement
|
||||||
|
|
||||||
Take a look at the 'cpu-time' program that you can set to run from the
|
Take a look at the 'CpuTime' trigger module shipped. Comments within, and
|
||||||
`POST_GIT` trigger. Just set it to run as the last program in that sequence
|
comments in the default rc file that contain the word "cpu", should be useful.
|
||||||
so it covers all previous programs.
|
|
||||||
|
|
|
@ -36,9 +36,8 @@ The `PRE_GIT` triggers are:
|
||||||
|
|
||||||
The `POST_GIT` triggers are:
|
The `POST_GIT` triggers are:
|
||||||
|
|
||||||
* cpu-time -- post-git triggers, if you check the [triggers][] doc, receive
|
* CpuTime, which is only a sample because it only prints the CPU times data.
|
||||||
4 CPU time numbers from the main shell program. Treat this code as sample
|
In reality you will want to do something else with it.
|
||||||
and do do with them as you please to do with as you please.
|
|
||||||
|
|
||||||
The `POST_COMPILE` triggers are:
|
The `POST_COMPILE` triggers are:
|
||||||
|
|
||||||
|
|
|
@ -78,7 +78,8 @@ description of when the trigger runs:
|
||||||
* the ref being updated (e.g., 'refs/heads/master')
|
* the ref being updated (e.g., 'refs/heads/master')
|
||||||
* result (see above)
|
* result (see above)
|
||||||
|
|
||||||
* `PRE_GIT` runs just before running the git command. Arguments:
|
* `PRE_GIT` and `POST_GIT` run just before and after the git command.
|
||||||
|
Arguments:
|
||||||
* repo
|
* repo
|
||||||
* user
|
* user
|
||||||
* 'R' or 'W'
|
* 'R' or 'W'
|
||||||
|
@ -86,17 +87,6 @@ description of when the trigger runs:
|
||||||
* the git command ('git-receive-pack', 'git-upload-pack', or
|
* the git command ('git-receive-pack', 'git-upload-pack', or
|
||||||
'git-upload-archive') being invoked.
|
'git-upload-archive') being invoked.
|
||||||
|
|
||||||
* `POST_GIT` runs after the git command returns. Arguments:
|
|
||||||
* repo
|
|
||||||
* user
|
|
||||||
* 'R' or 'W'
|
|
||||||
* 'any'
|
|
||||||
* the git command ('git-receive-pack', 'git-upload-pack', or
|
|
||||||
|
|
||||||
These are followed by the output of the perl function "times" (i.e., 4 CPU
|
|
||||||
times: user, system, cumulative user, cumulative system) so that's 9
|
|
||||||
arguments in total
|
|
||||||
|
|
||||||
* `PRE_CREATE` and `POST_CREATE` run just before and after a new "[wild][]"
|
* `PRE_CREATE` and `POST_CREATE` run just before and after a new "[wild][]"
|
||||||
repo is created by user action. Arguments:
|
repo is created by user action. Arguments:
|
||||||
* repo
|
* repo
|
||||||
|
|
|
@ -259,9 +259,9 @@ __DATA__
|
||||||
|
|
||||||
# settings used by external programs; uncomment and change as needed. You
|
# settings used by external programs; uncomment and change as needed. You
|
||||||
# can add your own variables for use in your own external programs; take a
|
# can add your own variables for use in your own external programs; take a
|
||||||
# look at the cpu-time and desc commands for perl and shell samples.
|
# look at the info and desc commands for perl and shell samples.
|
||||||
|
|
||||||
# used by the cpu-time command
|
# used by the CpuTime trigger
|
||||||
# DISPLAY_CPU_TIME => 1,
|
# DISPLAY_CPU_TIME => 1,
|
||||||
# CPU_TIME_WARN_LIMIT => 0.1,
|
# CPU_TIME_WARN_LIMIT => 0.1,
|
||||||
# used by the desc command
|
# used by the desc command
|
||||||
|
@ -335,9 +335,10 @@ __DATA__
|
||||||
# these will run in sequence after the git command returns
|
# these will run in sequence after the git command returns
|
||||||
POST_GIT =>
|
POST_GIT =>
|
||||||
[
|
[
|
||||||
# if you use this, make this the last item in the list
|
|
||||||
# 'cpu-time',
|
|
||||||
# 'Mirroring::post_git',
|
# 'Mirroring::post_git',
|
||||||
|
|
||||||
|
# if you use this, make this the last item in the list
|
||||||
|
# 'CpuTime::post_git',
|
||||||
],
|
],
|
||||||
|
|
||||||
# comment out or uncomment as needed
|
# comment out or uncomment as needed
|
||||||
|
|
38
src/Gitolite/Triggers/CpuTime.pm
Executable file
38
src/Gitolite/Triggers/CpuTime.pm
Executable file
|
@ -0,0 +1,38 @@
|
||||||
|
package Gitolite::Triggers::CpuTime;
|
||||||
|
|
||||||
|
use Gitolite::Rc;
|
||||||
|
use Gitolite::Common;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
sub post_git {
|
||||||
|
_warn "something wrong with the invocation of CpuTime::post_git" if $ENV{GL_TID} ne $$;
|
||||||
|
|
||||||
|
my ( $trigger, $repo, $user, $aa, $ref, $verb ) = @_;
|
||||||
|
my ( $utime, $stime, $cutime, $cstime ) = times();
|
||||||
|
gl_log( 'cputime', $utime, $stime, $cutime, $cstime );
|
||||||
|
|
||||||
|
# now do whatever you want with the data; the following is just an example.
|
||||||
|
|
||||||
|
# Ideally, you will (a) write your own code with a different filename so later
|
||||||
|
# gitolite upgrades won't overwrite your copy, (b) add appropriate variables
|
||||||
|
# to the rc file, and (c) change your rc file to call your program at the
|
||||||
|
# end of the POST_GIT list.
|
||||||
|
|
||||||
|
if ( my $limit = $rc{CPU_TIME_WARN_LIMIT} ) {
|
||||||
|
my $total = $utime + $cutime + $stime + $cstime;
|
||||||
|
# some code to send an email or whatever...
|
||||||
|
say2 "limit = $limit, actual = $total" if $total > $limit;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( $rc{DISPLAY_CPU_TIME} ) {
|
||||||
|
say2 "perf stats for $verb on repo '$repo':";
|
||||||
|
say2 " user CPU time: " . ( $utime + $cutime );
|
||||||
|
say2 " sys CPU time: " . ( $stime + $cstime );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
|
@ -106,7 +106,7 @@ sub main {
|
||||||
trigger( 'PRE_GIT', $repo, $user, $aa, 'any', $verb );
|
trigger( 'PRE_GIT', $repo, $user, $aa, 'any', $verb );
|
||||||
my $repodir = "'$rc{GL_REPO_BASE}/$repo.git'";
|
my $repodir = "'$rc{GL_REPO_BASE}/$repo.git'";
|
||||||
_system( "git", "shell", "-c", "$verb $repodir" );
|
_system( "git", "shell", "-c", "$verb $repodir" );
|
||||||
trigger( 'POST_GIT', $repo, $user, $aa, 'any', $verb, times() );
|
trigger( 'POST_GIT', $repo, $user, $aa, 'any', $verb );
|
||||||
}
|
}
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
# ----------------------------------------------------------------------
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
#!/usr/bin/perl
|
|
||||||
use strict;
|
|
||||||
use warnings;
|
|
||||||
|
|
||||||
use lib $ENV{GL_BINDIR};
|
|
||||||
use Gitolite::Easy;
|
|
||||||
|
|
||||||
my ( $trigger, $repo, $user, $aa, $ref, $verb, $utime, $stime, $cutime, $cstime ) = @ARGV;
|
|
||||||
|
|
||||||
# now do whatever you want with this data; the following is just an example.
|
|
||||||
|
|
||||||
# Ideally, you will (a) write your own code with a different filename so later
|
|
||||||
# gitolite upgrades won't overwrite your copy, (b) add appropriate variables
|
|
||||||
# to the rc file, and (c) change your rc file to call your program at the end
|
|
||||||
# of the POST_GIT list.
|
|
||||||
|
|
||||||
if ( my $limit = $rc{CPU_TIME_WARN_LIMIT} ) {
|
|
||||||
my $total = $utime + $cutime + $stime + $cstime;
|
|
||||||
# some code to send an email or whatever...
|
|
||||||
say2 "limit = $limit, actual = $total" if $total > $limit;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( $rc{DISPLAY_CPU_TIME} ) {
|
|
||||||
say2 "perf stats for $verb on repo '$repo':";
|
|
||||||
say2 " user CPU time: " . ( $utime + $cutime );
|
|
||||||
say2 " sys CPU time: " . ( $stime + $cstime );
|
|
||||||
}
|
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
# (Tip: perl allows a comma after the last item in a list also!)
|
# (Tip: perl allows a comma after the last item in a list also!)
|
||||||
|
|
||||||
%RC = (
|
%RC = (
|
||||||
|
# if you're using mirroring, you need a hostname. This is *one* simple
|
||||||
|
# word, not a full domain name. See documentation if in doubt
|
||||||
HOSTNAME => '%HOSTNAME',
|
HOSTNAME => '%HOSTNAME',
|
||||||
UMASK => 0077,
|
UMASK => 0077,
|
||||||
GIT_CONFIG_KEYS => '',
|
GIT_CONFIG_KEYS => '',
|
||||||
|
@ -16,9 +18,9 @@
|
||||||
|
|
||||||
# settings used by external programs; uncomment and change as needed. You
|
# settings used by external programs; uncomment and change as needed. You
|
||||||
# can add your own variables for use in your own external programs; take a
|
# can add your own variables for use in your own external programs; take a
|
||||||
# look at the cpu-time and desc commands for perl and shell samples.
|
# look at the info and desc commands for perl and shell samples.
|
||||||
|
|
||||||
# used by the cpu-time command
|
# used by the CpuTime trigger
|
||||||
# DISPLAY_CPU_TIME => 1,
|
# DISPLAY_CPU_TIME => 1,
|
||||||
# CPU_TIME_WARN_LIMIT => 0.1,
|
# CPU_TIME_WARN_LIMIT => 0.1,
|
||||||
# used by the desc command
|
# used by the desc command
|
||||||
|
@ -70,7 +72,7 @@
|
||||||
],
|
],
|
||||||
|
|
||||||
# comment out or uncomment as needed
|
# comment out or uncomment as needed
|
||||||
# these will run in sequence at the start, before a git operation has started
|
# these will run in sequence just before the actual git command is invoked
|
||||||
PRE_GIT =>
|
PRE_GIT =>
|
||||||
[
|
[
|
||||||
# if you use this, make this the first item in the list
|
# if you use this, make this the first item in the list
|
||||||
|
@ -89,12 +91,19 @@
|
||||||
],
|
],
|
||||||
|
|
||||||
# comment out or uncomment as needed
|
# comment out or uncomment as needed
|
||||||
# these will run in sequence at the end, after a git operation has ended
|
# these will run in sequence after the git command returns
|
||||||
POST_GIT =>
|
POST_GIT =>
|
||||||
[
|
[
|
||||||
# if you use this, make this the last item in the list
|
|
||||||
# 'cpu-time',
|
|
||||||
'Mirroring::post_git',
|
'Mirroring::post_git',
|
||||||
|
|
||||||
|
# if you use this, make this the last item in the list
|
||||||
|
# 'CpuTime::post_git',
|
||||||
|
],
|
||||||
|
|
||||||
|
# comment out or uncomment as needed
|
||||||
|
# these will run in sequence before a new wild repo is created
|
||||||
|
PRE_CREATE =>
|
||||||
|
[
|
||||||
],
|
],
|
||||||
|
|
||||||
# comment out or uncomment as needed
|
# comment out or uncomment as needed
|
||||||
|
|
Loading…
Reference in a new issue