Commit | Line | Data |
8a186887 |
1 | package System::Introspector::Report::Publish::MediaWiki::Updater; |
2 | use Moo; |
3 | use Try::Tiny; |
4 | use Module::Runtime qw( use_module ); |
723c1c68 |
5 | use System::Introspector::Report::Logging qw( :log ); |
8a186887 |
6 | |
7 | has connection => (is => 'ro', lazy => 1, builder => 1, handles => { |
8 | get_page => 'get', |
9 | put_page => 'put', |
10 | }); |
11 | |
12 | sub _build_connection { |
13 | my ($self) = @_; |
14 | return use_module($self->connection_class)->new( |
15 | api_uri => $self->api_uri, |
16 | username => $self->username, |
17 | password => $self->password, |
18 | allow_create => 1, |
19 | $self->http_auth ? ( |
20 | http_auth => 1, |
21 | http_realm => $self->http_realm, |
22 | ) : (), |
23 | ); |
24 | } |
25 | |
26 | sub process { |
27 | my ($self, $stream) = @_; |
723c1c68 |
28 | log_debug { "Updater is starting to process individual pages" }; |
8a186887 |
29 | while (my $report = $stream->()) { |
723c1c68 |
30 | log_trace { "Processing page" }; |
8a186887 |
31 | $self->_process_page(@$report); |
32 | } |
33 | return 1; |
34 | } |
35 | |
36 | sub _process_page { |
37 | my ($self, $page_name, $options, $reports) = @_; |
38 | unless (scalar @$reports) { |
723c1c68 |
39 | log_verbose { "Skipping page '$page_name': No reports to publish" }; |
8a186887 |
40 | return 1; |
41 | } |
42 | my $do_create = $options->{create}; |
43 | return try { |
44 | my $page = $self->get_page($page_name); |
45 | if ($page->is_new and not $do_create) { |
723c1c68 |
46 | log_verbose { "Skipping page '$page_name': Does not yet exist" }; |
8a186887 |
47 | return 1; |
48 | } |
49 | my $is_changed = $page->update($reports); |
50 | unless ($is_changed) { |
723c1c68 |
51 | log_verbose { "Not pushing page '$page_name': No changes" }; |
8a186887 |
52 | return 1; |
53 | } |
723c1c68 |
54 | log_info { "Updating page '$page_name'" }; |
8a186887 |
55 | $self->put_page($page); |
56 | return 1; |
57 | } |
58 | catch { |
59 | log_error { "Error during page update: $_" }; |
60 | return 1; |
61 | }; |
62 | } |
63 | |
64 | with $_ for qw( |
65 | System::Introspector::Report::Publish::MediaWiki::HasConnectInfo |
66 | ); |
67 | |
68 | 1; |