Package build time is parsed well now.
authorJunghyun Kim <jh0822.kim@samsung.com>
Wed, 23 Nov 2016 02:36:10 +0000 (11:36 +0900)
committerSoonKyu Park <sk7.park@samsung.com>
Wed, 22 Feb 2017 08:23:01 +0000 (17:23 +0900)
The page build time was parsed in BuildMonitorDB.pm in src_server.

Since srcserver is located in a different machine compared to repserver,
we should move the parse process to repserver.
It is not viable to parse _statistics in plugin/notify_build_monitor of srcserver.

- add use JSON:XS to use encode_json

Change-Id: I6884f4b7b4241e642d6fcb0b1342c35d65f22414
Signed-off-by: Junghyun Kim <jh0822.kim@samsung.com>
src/api/app/models/event/build.rb
src/backend/BuildMonitorDB.pm
src/backend/bs_repserver

index 98edac3..6584a65 100644 (file)
@@ -1,9 +1,10 @@
 class Event::Build < Event::Package
   self.description = 'Package has finished building'
   self.abstract_class = true
-  payload_keys :repository, :arch, :release, :readytime, :srcmd5, :build_result_dir,
+  payload_keys :repository, :arch, :release, :readytime, :srcmd5,
                :rev, :reason, :bcnt, :verifymd5, :hostarch, :starttime, :endtime, :workerid, :versrel, 
-               :previouslyfailed, :file, :job, :reposerver, :srcserver
+               :previouslyfailed, :file, :job, :reposerver, :srcserver, 
+               :pre_install_time, :install_time, :main_build_time
 
   def my_message_id
     # we put the verifymd5 sum in the message id, so new checkins get new thread, but it doesn't have to be very correct
index d963a26..6a4b32d 100644 (file)
@@ -11,6 +11,9 @@ use File::Copy;
 use POSIX qw(strftime);
 use Time::HiRes qw( clock_gettime CLOCK_REALTIME);
 use URI::Escape;
+use BSRPC;
+use MIME::Base64;
+use JSON::XS;
 
 my $bsdir = $BSConfig::bsdir || "/srv/obs";
 my $reporoot = "$bsdir/build";
@@ -57,6 +60,32 @@ my %project_package_id_cache;
 my %build_project_id_cache;
 
 #-------------------------------------------------------------------------------
+sub trigger_make_dep_graph {
+  my ($build_project_id, $proj_name, $repo, $arch) = @_;
+
+  # trigger making build_progress graph.
+  my $jenkinsuri = "$BSConfig::jenkinsserver/job/make_dep_graph/buildWithParameters";
+  my $param = {
+    'request' => 'POST',
+    'uri' => $jenkinsuri,
+    'timeout' => 60,
+    'maxredirects' => 1,
+  };
+  my $args = {
+    'action' => 'build_progress',
+    'build_project_id'=>$build_project_id,
+    'obs_project' => $proj_name,
+    'repo' => $repo,
+    'arch' => $arch,
+  };
+  my @para = ("TRIGGER_INFO=".encode_base64(encode_json($args), ''));
+  print "notify: trigger Jenkins uri=[$jenkinsuri] para=[@para]\n";
+  eval {
+    BSRPC::rpc( $param, undef, @para );
+  };
+  warn("Jenkins: $@") if $@;
+}
+
 sub parse_reason {
   my ($tt) = @_;
 
@@ -481,7 +510,7 @@ sub project_build_start {
 
   if( $build_target_id ) {
     print "trigger_make_dep_graph...\n";
-    notify_buildmonitor::trigger_make_dep_graph($build_project_id, $proj_name, $repo, $arch);
+    trigger_make_dep_graph($build_project_id, $proj_name, $repo, $arch);
   }
 }
 #-------------------------------------------------------------------------------
@@ -781,16 +810,12 @@ sub copy_build_log {
 }
 #-------------------------------------------------------------------------------
 sub package_build_finished {
-  my ($config, $projid, $repo, $arch, $package_name, $status, $build_result_dir) = @_;
+  my ($config, $projid, $repo, $arch, $package_name, $status, $pre_install_time, $install_time, $main_build_time) = @_;
 
   return unless $g_dbh;
   my $start_time = get_cur_time();
   my $build_project_id = get_build_project_id($config, $projid);
 
-  my $pre_install_time;
-  my $install_time;
-  my $main_build_time;
-
   my $detail = "";
 
   if( $status eq 'unchanged' ) {
@@ -804,10 +829,6 @@ sub package_build_finished {
       $pre_install_time = 0;
       $install_time = 0;
   } else {
-    if ( $status eq "succeeded" ) {
-      my $statistics_file = "$build_result_dir/_statistics";
-      ($pre_install_time, $install_time, $main_build_time) = parse_statistics($projid, $repo, $arch, $package_name, $statistics_file);
-    }
     #home:prerelease:Tizen:Mobile:submit:tizen:20161101.025248
     #$build_log_url=copy_build_log($projid, $repo, $arch, $package_name, "$build_result_dir/logfile", $status);
     $build_log_url=get_rawlog_url($projid, $repo, $arch, $package_name);
@@ -831,12 +852,11 @@ sub package_build_finished {
 
   my $elapsed_time = get_cur_time() - $start_time; 
   print "[",__LINE__,"] took $elapsed_time seconds.\n";
-
 }
 
 #-------------------------------------------------------------------------------
 sub parse_statistics {
-  my ($projid, $repo, $myarch, $packid, $filename) = @_;
+  my ($filename) = @_;
 
   if ( ! defined $filename ) {
     return undef;
index c6d5e02..126562d 100755 (executable)
@@ -62,6 +62,7 @@ use BSXPathKeys;
 use BSDB;
 use BSDBIndex;
 use BSNotify;
+use BuildMonitorDB;
 
 use BSSolv;
 
@@ -1918,7 +1919,10 @@ sub putjob {
 
   $ninfo{'previouslyfailed'} = 1 if -e "$reporoot/$prpa/:logfiles.fail/$info->{package}";
 
-  $info->{'build_result_dir'} = $dir;
+  my ($pre_install_time, $install_time, $main_build_time) = BuildMonitorDB::parse_statistics("$dir/_statistics");
+  $ninfo{'pre_install_time'} = $pre_install_time;
+  $ninfo{'install_time'} = $install_time;
+  $ninfo{'main_build_time'} = $main_build_time;
   if ($cgi->{'code'} && $cgi->{'code'} eq 'unchanged') {
     $jobstatus->{'result'} = 'unchanged';
     BSNotify::notify('BUILD_UNCHANGED', \%ninfo);