PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 5.0.3
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v5.0.3
5.12.1 5.12.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 2 years ago Output.php 2 years ago OutputInterface.php 2 years ago Process.php 2 years ago RequestCommand.php 2 years ago RequestParser.php 2 years ago StaticOutput.php 2 years ago
RequestParser.php
91 lines
1 <?php
2
3 /**
4 * Matomo - free/libre analytics platform
5 *
6 * @link https://matomo.org
7 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
8 *
9 */
10 namespace Piwik\CliMulti;
11
12 use Piwik\SettingsPiwik;
13 class RequestParser
14 {
15 private $supportsAsync;
16 public function __construct($supportsAsync)
17 {
18 $this->supportsAsync = $supportsAsync;
19 }
20 public function getInProgressCommands()
21 {
22 $psOutput = $this->getPsOutput();
23 $climultiRequestCommands = $this->getPsLinesWithCliMulti($psOutput);
24 $climultiRequestCommands = $this->parseQueries($climultiRequestCommands);
25 return $climultiRequestCommands;
26 }
27 public function getInProgressArchivingCommands()
28 {
29 $commands = $this->getInProgressCommands();
30 $commands = $this->filterNonArchivingJobs($commands);
31 return $commands;
32 }
33 private function getPsOutput()
34 {
35 if (!$this->supportsAsync) {
36 // we cannot detect if web archive is still running
37 return '';
38 }
39 return $this->invokePs();
40 }
41 private function filterNonArchivingJobs($commands)
42 {
43 $result = array_filter($commands, function ($command) {
44 if (empty($command['trigger']) || $command['trigger'] != 'archivephp') {
45 return false;
46 }
47 return true;
48 });
49 $result = array_values($result);
50 return $result;
51 }
52 private function getPsLinesWithCliMulti(string $psOutput)
53 {
54 $instanceId = SettingsPiwik::getPiwikInstanceId();
55 $lines = explode("\n", $psOutput);
56 $lines = array_map('trim', $lines);
57 $lines = array_filter($lines, function ($line) use($instanceId) {
58 if (!empty($instanceId) && strpos($line, 'matomo-domain=' . $instanceId) === false) {
59 return false;
60 }
61 return strpos($line, 'climulti:request') !== false && (strpos($line, 'console') !== false || strpos($line, 'php') !== false);
62 });
63 return $lines;
64 }
65 private function parseQueries(array $climultiRequestCommands)
66 {
67 $commandName = 'climulti:request';
68 $result = [];
69 foreach ($climultiRequestCommands as $command) {
70 $pos = strpos($command, $commandName);
71 $commandParts = substr($command, $pos + strlen($commandName));
72 $commandParts = explode(" ", $commandParts);
73 $commandParts = array_filter($commandParts, function ($p) {
74 return strlen($p) && substr($p, 0, 1) != '-';
75 });
76 $query = reset($commandParts);
77 parse_str($query, $parsed);
78 $result[] = $parsed;
79 }
80 return $result;
81 }
82 protected function invokePs()
83 {
84 if (defined('PIWIK_TEST_MODE')) {
85 return '';
86 // skip check in tests as it might result in random failures
87 }
88 return `ps aux`;
89 }
90 }
91