1 package System::Introspector::Report::Publish::MediaWiki;
5 use Object::Remote::Future;
6 use Log::Contextual::WarnLogger;
7 use Log::Contextual qw( :log ),
8 -default_logger => Log::Contextual::WarnLogger->new({
9 env_prefix => 'SI_REPORT_MEDIAWIKI',
10 levels => [qw( error warn info debug trace )],
13 use aliased 'System::Introspector::Report::Publish::MediaWiki::Updater';
17 default => sub { {} },
21 has process_count => (
24 die "MediaWiki processes count has to be above 0\n"
28 init_arg => 'processes',
36 sub _build_updater_pool {
39 Updater->new::on('-', $self->connect_info_pairs);
40 } 1 .. $self->process_count];
44 my ($self, $reports) = @_;
45 my $pages = $self->page_options;
47 sprintf "Pushing reports to MediaWiki at '%s'", $self->api_uri;
49 for my $page (sort keys %$pages) {
50 my $options = $pages->{$page};
51 if ($page =~ m{\%\(meta:(.+?)\)}) {
52 return $self->_publish_dynamic($reports, $page, $1, $options);
55 $self->_publish_pages([$reports, $page, $options]);
58 log_info { "Finished pushing to MediaWiki" };
63 my ($self, @pages) = @_;
65 my $next = shift @pages
67 my ($reports, $page_name, $options) = @$next;
68 my $sorted = $self->_sort_reports($reports, $options->{report} || []);
69 return [$page_name, $options, $sorted];
72 $_->start::process($stream);
73 } @{ $self->updater_pool };
77 my ($self, $reports, $included) = @_;
79 $self->_prepare_matcher_from($_);
80 } ref($included) ? @{$included} : $included;
82 for my $report (@$reports) {
83 my ($group_idx) = grep {
84 $self->_match_id($report, $matchers[$_]);
86 if (defined $group_idx) {
87 push @{$grouped[$group_idx]}, $report;
90 return [ map { (@$_) } @grouped ];
93 sub _publish_dynamic {
94 my ($self, $reports, $page_name, $key, $options) = @_;
96 for my $report (@$reports) {
97 my $value = $report->{meta}{$key};
98 next unless defined $value;
99 push @{ $reports_by_key{$value} ||= [] }, $report;
102 for my $value (keys %reports_by_key) {
103 (my $effective_page = $page_name)
104 =~ s{\%\(meta:\Q$key\E\)}{$value};
105 my $assoc = $reports_by_key{$value};
106 push @pages, [$assoc, $effective_page, $options];
108 $self->_publish_pages(@pages);
113 System::Introspector::Report::Publish::API
114 System::Introspector::Report::Publish::MediaWiki::HasConnectInfo