convert anything that logged to o-r logging; add new log messages; tweak existing...
[scpubgit/System-Introspector-Report.git] / lib / System / Introspector / Report / Publish / MediaWiki / Updater.pm
CommitLineData
8a186887 1package System::Introspector::Report::Publish::MediaWiki::Updater;
2use Moo;
3use Try::Tiny;
4use Module::Runtime qw( use_module );
723c1c68 5use System::Introspector::Report::Logging qw( :log );
8a186887 6
7has connection => (is => 'ro', lazy => 1, builder => 1, handles => {
8 get_page => 'get',
9 put_page => 'put',
10});
11
12sub _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
26sub 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
36sub _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
64with $_ for qw(
65 System::Introspector::Report::Publish::MediaWiki::HasConnectInfo
66);
67
681;