Package build time is parsed well now.
[services/obs-event-plugin.git] / notify_trbs.pm
1 ################################################################
2 #
3 # Module for BuildMonitor DB logging.
4 #
5 package notify_trbs;
6
7 use BSConfig;
8 use BuildMonitorDB;
9 use Data::Dumper;
10 use BSRPC;
11 use MIME::Base64;
12 use JSON::XS;
13
14 use strict;
15
16 sub new {
17   my $self = {};
18   bless $self, shift;
19   return $self;
20 }
21
22 sub srcsrv_start {
23   my ($paramRef) = @_;
24
25   # update all projects and packages info.
26   print "[", __LINE__, "] SRCSRV_START!\n";
27
28   my $start_time = BuildMonitorDB::get_cur_time();
29   BuildMonitorDB::initialize_projpack_info($paramRef->{'projpack'});
30   my $elapsed_time = BuildMonitorDB::get_cur_time() - $start_time; 
31   print "[",__LINE__,"] took $elapsed_time seconds.\n";
32 }
33
34 sub srcsrv_create_project {
35   my ($paramRef) = @_;
36
37   my $proj_name = $paramRef->{'project'};
38   my $description = $paramRef->{'description'};
39
40   print "[", __LINE__, "] create a project ($proj_name, $description)\n";
41   BuildMonitorDB::insert_or_update_project_info($proj_name, $description);
42
43   if( $proj_name =~ /home:trbs/ ) {
44     # This process is required only for trbs projects.
45     BuildMonitorDB::insert_build_project_table($proj_name);
46   }
47 }
48
49 sub srcsrv_update_project {
50   my ($paramRef) = @_;
51
52   my $proj_name = $paramRef->{'project'};
53   my $description = $paramRef->{'description'};
54
55   print "[", __LINE__, "] update a project ($proj_name, $description)\n";
56   BuildMonitorDB::insert_or_update_project_info($proj_name, $description);
57 }
58
59 sub srcsrv_delete_project {
60   my ($paramRef) = @_;
61
62   my $proj_name = $paramRef->{'project'};
63
64   print "[", __LINE__, "] delete a project ($proj_name )\n";
65   BuildMonitorDB::delete_project_info($proj_name);
66 }
67
68 sub srcsrv_create_package {
69   my ($paramRef) = @_;
70
71   my $proj_name = $paramRef->{'project'};
72   my $pkg_name  = $paramRef->{'package'};
73   my $description = $paramRef->{'description'};
74
75   print "[", __LINE__, "] create a package ($proj_name, $pkg_name, $description)\n";
76   BuildMonitorDB::insert_or_update_package_info($proj_name, $pkg_name, $description);
77 }
78
79 sub srcsrv_update_package {
80   my ($paramRef) = @_;
81
82   my $proj_name = $paramRef->{'project'};
83   my $pkg_name  = $paramRef->{'package'};
84   my $description = $paramRef->{'description'};
85
86   print "[", __LINE__, "] update a package ($proj_name, $pkg_name, $description)\n";
87   BuildMonitorDB::insert_or_update_package_info($proj_name, $pkg_name, $description);
88 }
89
90 sub srcsrv_delete_package {
91   my ($paramRef) = @_;
92
93   my $proj_name = $paramRef->{'project'};
94   my $pkg_name  = $paramRef->{'package'};
95
96   print "[", __LINE__, "] delete a package ($proj_name, $pkg_name)\n";
97   BuildMonitorDB::delete_package_info($proj_name, $pkg_name);
98 }
99
100 sub srcsrv_request_accepted {
101   my ($paramRef) = @_;
102
103   my $target_proj = $paramRef->{'targetproject'};
104   my $source_proj = $paramRef->{'sourceproject'};
105
106   print "[", __LINE__, "] request accepted src=$source_proj, target=$target_proj\n";
107   BuildMonitorDB::insert_build_project_table($target_proj);
108 }
109
110 sub build_start {
111   my ($paramRef) = @_;
112
113   my $proj_name = $paramRef->{'project'};
114   my $repo = $paramRef->{'repository'};
115   my $arch = $paramRef->{'arch'};
116   my $pkg_name = $paramRef->{'package'};
117   my $reason = $paramRef->{'reason'};
118
119   my $config = "test";
120
121   BuildMonitorDB::package_build_start($config, $proj_name, $repo, $arch, $pkg_name, $reason);
122 }
123
124 sub build_unchanged {
125   my ($paramRef) = @_;
126
127   my $proj_name = $paramRef->{'project'};
128   my $repo = $paramRef->{'repository'};
129   my $arch = $paramRef->{'arch'};
130   my $pkg_name = $paramRef->{'package'};
131   my $pre_install_time = $paramRef->{'pre_install_time'};
132   my $install_time = $paramRef->{'install_time'};
133   my $main_build_time = $paramRef->{'main_build_time'};
134
135   my $status = "unchanged";
136   my $config = "test";
137
138   BuildMonitorDB::package_build_finished($config, $proj_name, $repo, $arch, $pkg_name, $status,
139       $pre_install_time, $install_time, $main_build_time);
140 }
141
142 sub build_success {
143   my ($paramRef) = @_;
144
145   my $proj_name = $paramRef->{'project'};
146   my $repo = $paramRef->{'repository'};
147   my $arch = $paramRef->{'arch'};
148   my $pkg_name = $paramRef->{'package'};
149   my $pre_install_time = $paramRef->{'pre_install_time'};
150   my $install_time = $paramRef->{'install_time'};
151   my $main_build_time = $paramRef->{'main_build_time'};
152
153   my $status = "succeeded";
154   my $config = "test";
155
156   BuildMonitorDB::package_build_finished($config, $proj_name, $repo, $arch, $pkg_name, $status,
157       $pre_install_time, $install_time, $main_build_time);
158 }
159
160 sub build_fail {
161   my ($paramRef) = @_;
162
163   my $proj_name = $paramRef->{'project'};
164   my $repo = $paramRef->{'repository'};
165   my $arch = $paramRef->{'arch'};
166   my $pkg_name = $paramRef->{'package'};
167   my $pre_install_time = $paramRef->{'pre_install_time'};
168   my $install_time = $paramRef->{'install_time'};
169   my $main_build_time = $paramRef->{'main_build_time'};
170
171   my $status = "failed";
172   my $config = "test";
173
174   BuildMonitorDB::package_build_finished($config, $proj_name, $repo, $arch, $pkg_name, $status,
175       $pre_install_time, $install_time, $main_build_time);
176 }
177
178 sub build_broken {
179   my ($paramRef) = @_;
180
181   my $proj_name = $paramRef->{'project'};
182   my $repo = $paramRef->{'repository'};
183   my $arch = $paramRef->{'arch'};
184   my $pkg_name = $paramRef->{'package'};
185   my $detail = $paramRef->{'detail'};
186
187   my $status = "broken";
188   my $config = "test";
189
190   BuildMonitorDB::package_build_status($config, $proj_name, $repo, $arch, $pkg_name, $status, $detail);
191 }
192
193 sub build_unresolvable {
194   my ($paramRef) = @_;
195
196   my $proj_name = $paramRef->{'project'};
197   my $repo = $paramRef->{'repository'};
198   my $arch = $paramRef->{'arch'};
199   my $pkg_name = $paramRef->{'package'};
200   my $detail = $paramRef->{'detail'};
201
202   my $status = "unresolvable";
203   my $config = "test";
204
205   BuildMonitorDB::package_build_status($config, $proj_name, $repo, $arch, $pkg_name, $status, $detail);
206 }
207
208 sub repo_publish_state {
209   my ($paramRef) = @_;
210
211   my $proj_name = $paramRef->{'project'};
212   my $repo = $paramRef->{'repo'};
213   my $state = $paramRef->{'state'};
214   my $arch = $paramRef->{'arch'};
215   
216   my $config = "test";
217
218   if( $state eq "published") {
219     #if published, the project build is finished.
220     BuildMonitorDB::project_build_finished($config, $proj_name, $repo, $arch);
221   }
222 }
223
224 sub repo_published {
225   my ($paramRef) = @_;
226
227   my $proj_name = $paramRef->{'project'};
228
229   BuildMonitorDB::build_project_completed($proj_name);
230 }
231
232 my %event_handlers = (
233   'SRCSRV_START' => \&srcsrv_start,
234
235   'SRCSRV_CREATE_PROJECT' => \&srcsrv_create_project,
236   'SRCSRV_UPDATE_PROJECT' => \&srcsrv_update_project,
237   'SRCSRV_DELETE_PROJECT' => \&srcsrv_delete_project,
238
239   'SRCSRV_CREATE_PACKAGE' => \&srcsrv_create_package,
240   'SRCSRV_UPDATE_PACKAGE' => \&srcsrv_update_package,
241   'SRCSRV_DELETE_PACKAGE' => \&srcsrv_delete_package,
242
243   'SRCSRV_REQUEST_ACCEPTED' => \&srcsrv_request_accepted,
244
245   'BUILD_START' => \&build_start,
246   'BUILD_UNCHANGED' => \&build_unchanged,
247   'BUILD_SUCCESS' => \&build_success,
248   'BUILD_FAIL' => \&build_fail,
249   'BUILD_BROKEN' => \&build_broken,
250   'BUILD_UNRESOLVABLE' => \&build_unresolvable,
251
252   'REPO_PUBLISH_STATE' => \&repo_publish_state,
253   'REPO_PUBLISHED' => \&repo_published,
254 );
255
256 my $g_dbh = undef;
257
258 sub notify() {
259   my ($self, $type, $paramRef ) = @_;
260
261   # you should add the statements below to BSConfig.pm
262   #our $notification_plugin = "notify_trbs";
263   #our $trbs_db_conf = "/usr/lib/obs/server/trbs_db.conf";
264   return unless $BSConfig::trbs_db_conf;
265
266   $g_dbh = BuildMonitorDB::connect_db($BSConfig::trbs_db_conf);
267   if( ! $g_dbh ) {
268     print "[", __FILE__, ":",__LINE__, "] BuildMonitorDB::connect_db() failed.\n";
269     return ;
270   }
271   
272   my $evhandler = $event_handlers{$type};
273   if( $evhandler ) {
274     $evhandler->($paramRef);
275   } else {
276     print "[BuildMonitor] undefined event type: $type\n";
277   }
278 }
279
280 1;