Merge Request #1

Merged
softwarepublico/copr-status!1
Created by Lucas Kanashiro

Refactor

Assignee: Athos
Milestone: None

Merged by Athos

Commits (3)
2 participants
lib/CoprStatus.pm
... ... @@ -7,55 +7,49 @@ use LWP::UserAgent;
7 7  
8 8 $ENV{'PERL_LWP_SSL_VERIFY_HOSTNAME'} = 0;
9 9  
  10 +# hash with repos data
  11 +our $info = {};
  12 +
10 13 sub copr_monitor_url {
11 14 my ( $user, $repo ) = @_;
12 15 return "http://copr.fedoraproject.org/api/coprs/$user/$repo/monitor/";
13 16 }
14 17  
  18 +sub git_url {
  19 + my ( $domain, $spec_path, $branch, $package ) = @_;
  20 +
  21 + $spec_path =~ s/<branch>/$branch/;
  22 + $spec_path =~ s/<package>/$package/g;
  23 +
  24 + return "$domain/$spec_path";
  25 +}
  26 +
15 27 sub copr_info {
  28 + my ( $user, $repo, $branch ) = @_;
  29 +
16 30 my $ua = LWP::UserAgent->new;
17 31 $ua->timeout(300);
18 32 $ua->env_proxy;
19 33 $ua->ssl_opts(SSL_verify_mode => 0x00);
20 34  
21   - my $result_v4 = $ua->get(copr_monitor_url("softwarepublico", "v4"));
22   - my $result_v5 = $ua->get(copr_monitor_url("softwarepublico", "v5"));
  35 + my $result = $ua->get(copr_monitor_url($user, $repo));
23 36  
24 37 my $json = JSON->new->allow_nonref;
25 38  
26   - my $dec_result_v4 = $json->decode($result_v4->decoded_content);
27   - my $dec_result_v5 = $json->decode($result_v5->decoded_content);
28   - my $info = {};
29   -
30   - foreach(@{$dec_result_v4->{'packages'}}) {
31   - my $package = $_->{'pkg_name'};
32   - my $status = $_->{'results'}{'epel-7-x86_64'}{'status'};
33   - my $version = $_->{'results'}{'epel-7-x86_64'}{'pkg_version'};
34   - $info->{$package}->{'v4_version'} = $version if $status eq "succeeded";
35   - }
  39 + my $dec_result = $json->decode($result->decoded_content);
36 40  
37   - foreach(@{$dec_result_v5->{'packages'}}) {
  41 + foreach(@{$dec_result->{'packages'}}) {
38 42 my $package = $_->{'pkg_name'};
39 43 my $status = $_->{'results'}{'epel-7-x86_64'}{'status'};
40 44 my $version = $_->{'results'}{'epel-7-x86_64'}{'pkg_version'};
41   - $info->{$package}->{'v5_version'} = $version if $status eq "succeeded";
42   - }
43   -
44   - foreach my $key (keys %{$info}) {
45   - my $spec = $ua->get("https://softwarepublico.gov.br/gitlab/softwarepublico/softwarepublico/raw/master/src/pkg-rpm/$key/$key.spec");
46   - my $version = $1 if $spec->decoded_content =~ /^Version:\s*([^\s]+)\s*$/m;
47   - if($version =~ /%\{version\}/) {
48   - $version = $1 if $spec->decoded_content =~ /define version\s*([^\s]+)\s*$/m;
49   - }
50   -
51   - my $release = 'no_release';
52   - $release = $1 if $spec->decoded_content =~ /^Release:\s*([^\s]+)\s*$/m;
53   - $version = "$version-$release";
54   - $info->{$key}->{'git_version_master'} = $version;
  45 + $info->{$package}->{$repo."_version"} = $version if $status eq "succeeded";
55 46 }
56 47  
57   - foreach my $key (keys %{$info}) {
58   - my $spec = $ua->get("https://softwarepublico.gov.br/gitlab/softwarepublico/softwarepublico/raw/stable-4.x/src/pkg-rpm/$key/$key.spec");
  48 + foreach my $package (keys %{$info}) {
  49 + my $git_url = git_url('http://softwarepublico.gov.br',
  50 + 'gitlab/softwarepublico/softwarepublico/raw/<branch>/src/pkg-rpm/<package>/<package>.spec',
  51 + $branch, $package);
  52 + my $spec = $ua->get($git_url);
59 53 my $version = $1 if $spec->decoded_content =~ /^Version:\s*([^\s]+)\s*$/m;
60 54 if($version =~ /%\{version\}/) {
61 55 $version = $1 if $spec->decoded_content =~ /define version\s*([^\s]+)\s*$/m;
... ... @@ -64,21 +58,21 @@ sub copr_info {
64 58 my $release = 'no_release';
65 59 $release = $1 if $spec->decoded_content =~ /^Release:\s*([^\s]+)\s*$/m;
66 60 $version = "$version-$release";
67   - $info->{$key}->{'git_version_stable_4'} = $version;
  61 + $info->{$package}->{'git_version_'.$branch} = $version;
68 62 }
69 63  
70   - return $info;
71 64 }
72 65  
73 66 sub compare_versions {
74   - my $info = copr_info();
  67 + copr_info('softwarepublico', 'v4', 'stable-4.x');
  68 + copr_info('softwarepublico', 'v5', 'master');
75 69 my $match = {};
76   - foreach my $key (keys %{$info}) {
77   - if($info->{$key}->{'v5_version'} eq $info->{$key}->{git_version_master}) {
78   - $match->{$key} = 1;
  70 + foreach my $package (keys %{$info}) {
  71 + if($info->{$package}->{'v5_version'} eq $info->{$package}->{git_version_master}) {
  72 + $match->{$package} = 1;
79 73 }
80 74 else {
81   - $match->{$key} = 0;
  75 + $match->{$package} = 0;
82 76 }
83 77 }
84 78  
... ... @@ -86,19 +80,20 @@ sub compare_versions {
86 80 }
87 81  
88 82 sub info2html {
89   - my $info = copr_info();
  83 + copr_info('softwarepublico', 'v4', 'stable-4.x');
  84 + copr_info('softwarepublico', 'v5', 'master');
90 85 my $table_entries="";
91   - foreach my $key (keys %{$info}) {
  86 + foreach my $package (keys %{$info}) {
92 87 my $fill_v4_row;
93 88 my $fill_v5_row;
94   - if($info->{$key}->{'v4_version'} eq $info->{$key}->{git_version_stable_4}) {
  89 + if($info->{$package}->{'v4_version'} eq $info->{$package}->{'git_version_stable-4.x'}) {
95 90 $fill_v4_row = "success";
96 91 }
97 92 else {
98 93 $fill_v4_row = "danger";
99 94 }
100 95  
101   - if($info->{$key}->{'v5_version'} eq $info->{$key}->{git_version_master}) {
  96 + if($info->{$package}->{'v5_version'} eq $info->{$package}->{git_version_master}) {
102 97 $fill_v5_row = "success";
103 98 }
104 99 else {
... ... @@ -106,11 +101,11 @@ sub info2html {
106 101 }
107 102  
108 103 $table_entries .= "<tr>
109   - <td><b>$key</b></td>
110   - <td>$info->{$key}->{'git_version_stable_4'}</td>
111   - <td class=\"$fill_v4_row\">$info->{$key}->{'v4_version'}</td>
112   - <td>$info->{$key}->{'git_version_master'}</td>
113   - <td class=\"$fill_v5_row\">$info->{$key}->{'v5_version'}</td>
  104 + <td><b>$package</b></td>
  105 + <td>$info->{$package}->{'git_version_stable-4.x'}</td>
  106 + <td class=\"$fill_v4_row\">$info->{$package}->{'v4_version'}</td>
  107 + <td>$info->{$package}->{'git_version_master'}</td>
  108 + <td class=\"$fill_v5_row\">$info->{$package}->{'v5_version'}</td>
114 109 </tr>";
115 110 }
116 111  
... ... @@ -147,7 +142,8 @@ sub serve_html {
147 142 };
148 143  
149 144 sub serve_json {
150   - my $info = copr_info();
  145 + copr_info('softwarepublico', 'v4', 'stable-4.x');
  146 + copr_info('softwarepublico', 'v5', 'master');
151 147 my $json = JSON->new->allow_nonref;
152 148 my $json_info = $json->encode($info);
153 149 return [
... ...
t/app.t
... ... @@ -4,7 +4,11 @@ use Test::More;
4 4  
5 5 BEGIN { use_ok('CoprStatus'); }
6 6  
7   -my $info = CoprStatus::copr_info();
  7 +CoprStatus::copr_info('softwarepubico', 'v4', 'stable-4.x');
  8 +CoprStatus::copr_info('softwarepubico', 'v5', 'master');
  9 +
  10 +my $info = $CoprStatus::info;
  11 +
8 12 ok(ref($info), 'HASH');
9 13 foreach my $key (keys %{$info}) {
10 14 ok(ref($info->{$key}), 'HASH');
... ... @@ -24,10 +28,21 @@ foreach my $key (keys %{$match}) {
24 28  
25 29 my $table = CoprStatus::info2html();
26 30 like($table, qr/danger|success/m);
27   -my $html = CoprStatus::build_html();
  31 +
  32 +my $data = {
  33 + title => "SPB Copr Status",
  34 + table_entries => $table
  35 +};
  36 +
  37 +my $template = Text::Template->new(
  38 + TYPE => 'FILE',
  39 + SOURCE => 'template.html.tt'
  40 +);
  41 +
  42 +my $html = CoprStatus::build_html($data, $template);
28 43 like($html, qr/SPB Copr Status/m);
29 44  
30   -my $monitor_url = copr_monitor_url("foo", "bar");
  45 +my $monitor_url = CoprStatus::copr_monitor_url("foo", "bar");
31 46 my $test_url = "http://copr.fedoraproject.org/api/coprs/foo/bar/monitor/";
32 47 is($monitor_url, $test_url);
33 48  
... ...