1 ################################################################
3 # Module for BuildMonitor DB logging.
5 package notify_buildmonitor;
8 use plugins::BuildMonitorDB;
22 my %event_handlers = (
23 'SRCSRV_START' => \&BuildMonitorDB::srcsrv_start,
25 'SRCSRV_CREATE_PROJECT' => \&BuildMonitorDB::srcsrv_create_project,
26 'SRCSRV_UPDATE_PROJECT' => \&BuildMonitorDB::srcsrv_update_project,
27 'SRCSRV_DELETE_PROJECT' => \&BuildMonitorDB::srcsrv_delete_project,
29 'SRCSRV_CREATE_PACKAGE' => \&BuildMonitorDB::srcsrv_create_package,
30 'SRCSRV_UPDATE_PACKAGE' => \&BuildMonitorDB::srcsrv_update_package,
31 'SRCSRV_DELETE_PACKAGE' => \&BuildMonitorDB::srcsrv_delete_package,
33 'SRCSRV_REQUEST_ACCEPTED' => \&BuildMonitorDB::srcsrv_request_accepted,
35 'SRCSRV_COMMIT' => \&BuildMonitorDB::srcsrv_commit,
37 'BUILD_START' => \&BuildMonitorDB::build_start,
38 'BUILD_KILL' => \&BuildMonitorDB::build_kill,
39 'BUILD_UNCHANGED' => \&BuildMonitorDB::build_unchanged,
40 'BUILD_SUCCESS' => \&BuildMonitorDB::build_success,
41 'BUILD_FAIL' => \&BuildMonitorDB::build_fail,
42 'BUILD_BROKEN' => \&BuildMonitorDB::build_broken,
43 'BUILD_UNRESOLVABLE' => \&BuildMonitorDB::build_unresolvable,
44 'BUILD_EXCLUDED' => \&BuildMonitorDB::build_excluded,
45 'BUILD_DISABLED' => \&BuildMonitorDB::build_disabled,
47 'REPO_PUBLISH_STATE' => \&BuildMonitorDB::repo_publish_state,
48 'REPO_PUBLISHED' => \&BuildMonitorDB::repo_published,
51 sub extract_name_desc {
54 my $extracted_hash = {};
56 for my $key (keys %$hash) {
57 #next if $key ne 'name' && $key ne 'description';
58 next if $key ne 'name';
59 $extracted_hash->{$key} = $hash->{$key};
62 return $extracted_hash;
65 sub extract_proj_in_projpack {
68 my @extracted_project;
69 for my $proj (@{$p->{'projpack'}->{'project'}}) {
70 my $proj_name = $proj->{'name'};
71 if( BuildMonitorDB::check_proj_pattern($proj_name) ) {
74 my $exp = extract_name_desc($proj);
76 for my $pack (@{$proj->{'package'}}) {
77 push @pkgs, extract_name_desc($pack);
79 $exp->{'package'} = \@pkgs;
80 push @extracted_project, $exp;
83 return @extracted_project;
86 sub relay_src_server {
89 return unless $BSConfig::relay_obs_server;
91 if( $type ne 'SRCSRV_START' ) {
93 $proj_name=$p->{'project'} if defined $p->{'project'};
94 $proj_name=$p->{'targetproject'} if defined $p->{'targetproject'};
96 return if $proj_name eq "";
98 if( BuildMonitorDB::check_proj_pattern($proj_name) ) {
99 print "[", __FILE__, ":", __LINE__, "] Skip relaying $proj_name.\n";
104 my $uri= "$BSConfig::relay_obs_server/source";
110 $param->{'proxy'} = $BSConfig::proxy if defined $BSConfig::proxy;
112 for my $key (sort keys %$p) {
113 next if $key eq 'dispatches';
114 next if $key eq 'projpack';
115 next if $key eq 'description';
116 if( $key eq 'reason') {
117 $args->{$key} = BuildMonitorDB::parse_reason($p->{$key});
119 $args->{$key} = $p->{$key} if defined $p->{$key};
121 print " key=[$key] value=[$args->{$key}]\n";
123 if( $type eq 'SRCSRV_START') {
124 my @extracted_project = extract_proj_in_projpack($p);
125 print "extracting...\n";
127 $projpack->{'project'} = [];
128 for my $proj (@extracted_project) {
130 my $proj_name = $proj->{'name'};
131 print "Sending project $proj_name\n";
132 $projpack->{'project'} = [$proj];
133 my @aargs = map {"$_=$args->{$_}"} sort keys %$args;
134 push @aargs, "projpack=".encode_base64(encode_json($projpack),'');
135 my @para = ("cmd=relay_notify",
138 print "Relaying events to $uri\n";
139 print "notify_type = $type, param=[@para]\n";
142 BSRPC::rpc($param, undef, @para);
149 my @aargs = map {"$_=$args->{$_}"} sort keys %$args;
150 my @para = ("cmd=relay_notify",
154 print "Relaying events to $uri\n";
155 print "notify_type = $type, param=[@para]\n";
158 BSRPC::rpc($param, undef, @para);
168 my ($self, $type, $paramRef ) = @_;
170 # you should add the statements below to BSConfig.pm
171 #our $notification_plugin = "notify_buildmonitor";
172 #our $build_monitor_db_conf = "/usr/lib/obs/server/build_monitor_db.conf";
173 my $evhandler = $event_handlers{$type};
174 if( defined $BSConfig::build_monitor_db_conf ) {
176 my $g_dbh = BuildMonitorDB::connect_db($BSConfig::build_monitor_db_conf);
178 print "[", __FILE__, ":",__LINE__, "] BuildMonitorDB::connect_db() failed.\n";
183 $evhandler->($paramRef);
185 print "[BuildMonitor] undefined event type: $type\n";
190 print "[", __LINE__, "] relaying $type...\n";
191 relay_src_server($type, $paramRef);