1 ################################################################
3 # Module for BuildMonitor DB logging.
5 package notify_buildmonitor;
22 sub trigger_make_dep_graph {
23 my ($build_project_id, $proj_name, $repo, $arch) = @_;
25 # trigger making build_progress graph.
26 my $jenkinsuri = "$BSConfig::jenkinsserver/job/make_dep_graph/buildWithParameters";
34 'action' => 'build_progress',
35 'build_project_id'=>$build_project_id,
36 'obs_project' => $proj_name,
40 my @para = ("TRIGGER_INFO=".encode_base64(encode_json($args), ''));
41 print "notify: trigger Jenkins uri=[$jenkinsuri] para=[@para]\n";
43 BSRPC::rpc( $param, undef, @para );
45 warn("Jenkins: $@") if $@;
51 # update all projects and packages info.
52 print "[", __LINE__, "] SRCSRV_START!\n";
54 my $start_time = BuildMonitorDB::get_cur_time();
55 BuildMonitorDB::initialize_projpack_info($paramRef->{'projpack'});
56 my $elapsed_time = BuildMonitorDB::get_cur_time() - $start_time;
57 print "[",__LINE__,"] took $elapsed_time seconds.\n";
60 sub srcsrv_create_project {
63 my $proj_name = $paramRef->{'project'};
64 my $description = $paramRef->{'description'};
66 print "[", __LINE__, "] create a project ($proj_name, $description)\n";
67 BuildMonitorDB::insert_or_update_project_info($proj_name, $description);
69 if( $proj_name =~ /home:prerelease/ ) {
70 # This process is required only for prerelease projects.
71 BuildMonitorDB::insert_build_project_table($proj_name);
75 sub srcsrv_update_project {
78 my $proj_name = $paramRef->{'project'};
79 my $description = $paramRef->{'description'};
81 print "[", __LINE__, "] update a project ($proj_name, $description)\n";
82 BuildMonitorDB::insert_or_update_project_info($proj_name, $description);
85 sub srcsrv_delete_project {
88 my $proj_name = $paramRef->{'project'};
90 print "[", __LINE__, "] delete a project ($proj_name )\n";
91 BuildMonitorDB::delete_project_info($proj_name);
94 sub srcsrv_create_package {
97 my $proj_name = $paramRef->{'project'};
98 my $pkg_name = $paramRef->{'package'};
99 my $description = $paramRef->{'description'};
101 print "[", __LINE__, "] create a package ($proj_name, $pkg_name, $description)\n";
102 BuildMonitorDB::insert_or_update_package_info($proj_name, $pkg_name, $description);
105 sub srcsrv_update_package {
108 my $proj_name = $paramRef->{'project'};
109 my $pkg_name = $paramRef->{'package'};
110 my $description = $paramRef->{'description'};
112 print "[", __LINE__, "] update a package ($proj_name, $pkg_name, $description)\n";
113 BuildMonitorDB::insert_or_update_package_info($proj_name, $pkg_name, $description);
116 sub srcsrv_delete_package {
119 my $proj_name = $paramRef->{'project'};
120 my $pkg_name = $paramRef->{'package'};
122 print "[", __LINE__, "] delete a package ($proj_name, $pkg_name)\n";
123 BuildMonitorDB::delete_package_info($proj_name, $pkg_name);
126 sub srcsrv_request_accepted {
129 my $target_proj = $paramRef->{'targetproject'};
130 my $source_proj = $paramRef->{'sourceproject'};
132 print "[", __LINE__, "] request accepted src=$source_proj, target=$target_proj\n";
133 BuildMonitorDB::insert_build_project_table($target_proj);
139 my $proj_name = $paramRef->{'project'};
140 my $repo = $paramRef->{'repository'};
141 my $arch = $paramRef->{'arch'};
142 my $pkg_name = $paramRef->{'package'};
143 my $reason = $paramRef->{'reason'};
147 BuildMonitorDB::package_build_start($config, $proj_name, $repo, $arch, $pkg_name, $reason);
150 sub build_unchanged {
153 my $proj_name = $paramRef->{'project'};
154 my $repo = $paramRef->{'repository'};
155 my $arch = $paramRef->{'arch'};
156 my $pkg_name = $paramRef->{'package'};
157 my $build_result_dir = $paramRef->{'build_result_dir'};
159 my $status = "unchanged";
162 BuildMonitorDB::package_build_finished($config, $proj_name, $repo, $arch, $pkg_name, $status, $build_result_dir);
168 my $proj_name = $paramRef->{'project'};
169 my $repo = $paramRef->{'repository'};
170 my $arch = $paramRef->{'arch'};
171 my $pkg_name = $paramRef->{'package'};
172 my $build_result_dir = $paramRef->{'build_result_dir'};
174 my $status = "succeeded";
177 BuildMonitorDB::package_build_finished($config, $proj_name, $repo, $arch, $pkg_name, $status, $build_result_dir);
183 my $proj_name = $paramRef->{'project'};
184 my $repo = $paramRef->{'repository'};
185 my $arch = $paramRef->{'arch'};
186 my $pkg_name = $paramRef->{'package'};
187 my $build_result_dir = $paramRef->{'build_result_dir'};
189 my $status = "failed";
192 BuildMonitorDB::package_build_finished($config, $proj_name, $repo, $arch, $pkg_name, $status, $build_result_dir);
198 my $proj_name = $paramRef->{'project'};
199 my $repo = $paramRef->{'repository'};
200 my $arch = $paramRef->{'arch'};
201 my $pkg_name = $paramRef->{'package'};
202 my $detail = $paramRef->{'detail'};
204 my $status = "broken";
207 BuildMonitorDB::package_build_status($config, $proj_name, $repo, $arch, $pkg_name, $status, $detail);
210 sub build_unresolvable {
213 my $proj_name = $paramRef->{'project'};
214 my $repo = $paramRef->{'repository'};
215 my $arch = $paramRef->{'arch'};
216 my $pkg_name = $paramRef->{'package'};
217 my $detail = $paramRef->{'detail'};
219 my $status = "unresolvable";
222 BuildMonitorDB::package_build_status($config, $proj_name, $repo, $arch, $pkg_name, $status, $detail);
225 sub repo_publish_state {
228 my $proj_name = $paramRef->{'project'};
229 my $repo = $paramRef->{'repo'};
230 my $state = $paramRef->{'state'};
231 my $arch = $paramRef->{'arch'};
235 if( $state eq "published") {
236 #if published, the project build is finished.
237 BuildMonitorDB::project_build_finished($config, $proj_name, $repo, $arch);
244 my $proj_name = $paramRef->{'project'};
246 BuildMonitorDB::build_project_completed($proj_name);
249 my %event_handlers = (
250 'SRCSRV_START' => \&srcsrv_start,
252 'SRCSRV_CREATE_PROJECT' => \&srcsrv_create_project,
253 'SRCSRV_UPDATE_PROJECT' => \&srcsrv_update_project,
254 'SRCSRV_DELETE_PROJECT' => \&srcsrv_delete_project,
256 'SRCSRV_CREATE_PACKAGE' => \&srcsrv_create_package,
257 'SRCSRV_UPDATE_PACKAGE' => \&srcsrv_update_package,
258 'SRCSRV_DELETE_PACKAGE' => \&srcsrv_delete_package,
260 'SRCSRV_REQUEST_ACCEPTED' => \&srcsrv_request_accepted,
262 'BUILD_START' => \&build_start,
263 'BUILD_UNCHANGED' => \&build_unchanged,
264 'BUILD_SUCCESS' => \&build_success,
265 'BUILD_FAIL' => \&build_fail,
266 'BUILD_BROKEN' => \&build_broken,
267 'BUILD_UNRESOLVABLE' => \&build_unresolvable,
269 'REPO_PUBLISH_STATE' => \&repo_publish_state,
270 'REPO_PUBLISHED' => \&repo_published,
276 my ($self, $type, $paramRef ) = @_;
278 # you should add the statements below to BSConfig.pm
279 #our $notification_plugin = "notify_buildmonitor";
280 #our $build_monitor_db_conf = "/usr/lib/obs/server/build_monitor_db.conf";
281 return unless $BSConfig::build_monitor_db_conf;
283 $g_dbh = BuildMonitorDB::connect_db($BSConfig::build_monitor_db_conf);
285 print "[", __FILE__, ":",__LINE__, "] BuildMonitorDB::connect_db() failed.\n";
289 my $evhandler = $event_handlers{$type};
291 $evhandler->($paramRef);
293 print "[BuildMonitor] undefined event type: $type\n";