PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 5.2.0
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v5.2.0
5.11.1 5.11.0 5.10.2 5.10.1 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.3.2 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.10.0 4.11.0 4.12.0 4.13.0 4.13.2 4.13.3 4.13.4 4.13.5 4.14.0 4.14.1 4.14.2 4.15.0 4.15.1 4.15.2 4.15.3 4.2.0 4.3.0 4.3.1 4.4.1 4.4.2 4.5.0 4.6.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.10.0 5.2.0 5.2.1 5.2.2 5.3.0 5.3.1 5.3.2 5.3.3 5.6.0 5.6.1 5.7.0 5.7.1 5.8.0 5.8.1 5.8.2
matomo / app / core / CliMulti / RequestParser.php
matomo / app / core / CliMulti Last commit date
CliPhp.php 1 year ago Output.php 2 years ago OutputInterface.php 2 years ago Process.php 1 year ago ProcessSymfony.php 1 year ago RequestCommand.php 1 year ago RequestParser.php 1 year ago StaticOutput.php 1 year ago
RequestParser.php
90 lines
1 <?php
2
3 /**
4 * Matomo - free/libre analytics platform
5 *
6 * @link https://matomo.org
7 * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
8 */
9 namespace Piwik\CliMulti;
10
11 use Piwik\SettingsPiwik;
12 class RequestParser
13 {
14 private $supportsAsync;
15 public function __construct($supportsAsync)
16 {
17 $this->supportsAsync = $supportsAsync;
18 }
19 public function getInProgressCommands()
20 {
21 $psOutput = $this->getPsOutput();
22 $climultiRequestCommands = $this->getPsLinesWithCliMulti($psOutput);
23 $climultiRequestCommands = $this->parseQueries($climultiRequestCommands);
24 return $climultiRequestCommands;
25 }
26 public function getInProgressArchivingCommands()
27 {
28 $commands = $this->getInProgressCommands();
29 $commands = $this->filterNonArchivingJobs($commands);
30 return $commands;
31 }
32 private function getPsOutput()
33 {
34 if (!$this->supportsAsync) {
35 // we cannot detect if web archive is still running
36 return '';
37 }
38 return $this->invokePs();
39 }
40 private function filterNonArchivingJobs($commands)
41 {
42 $result = array_filter($commands, function ($command) {
43 if (empty($command['trigger']) || $command['trigger'] != 'archivephp') {
44 return \false;
45 }
46 return \true;
47 });
48 $result = array_values($result);
49 return $result;
50 }
51 private function getPsLinesWithCliMulti(string $psOutput)
52 {
53 $instanceId = SettingsPiwik::getPiwikInstanceId();
54 $lines = explode("\n", $psOutput);
55 $lines = array_map('trim', $lines);
56 $lines = array_filter($lines, function ($line) use($instanceId) {
57 if (!empty($instanceId) && strpos($line, 'matomo-domain=' . $instanceId) === \false) {
58 return \false;
59 }
60 return strpos($line, 'climulti:request') !== \false && (strpos($line, 'console') !== \false || strpos($line, 'php') !== \false);
61 });
62 return $lines;
63 }
64 private function parseQueries(array $climultiRequestCommands)
65 {
66 $commandName = 'climulti:request';
67 $result = [];
68 foreach ($climultiRequestCommands as $command) {
69 $pos = strpos($command, $commandName);
70 $commandParts = substr($command, $pos + strlen($commandName));
71 $commandParts = explode(" ", $commandParts);
72 $commandParts = array_filter($commandParts, function ($p) {
73 return strlen($p) && substr($p, 0, 1) != '-';
74 });
75 $query = reset($commandParts);
76 parse_str($query, $parsed);
77 $result[] = $parsed;
78 }
79 return $result;
80 }
81 protected function invokePs()
82 {
83 if (defined('PIWIK_TEST_MODE')) {
84 return '';
85 // skip check in tests as it might result in random failures
86 }
87 return `ps wwaux`;
88 }
89 }
90