AnonSec Shell
Server IP : 104.21.14.48  /  Your IP : 18.227.111.18   [ Reverse IP ]
Web Server : Apache
System : Linux b70eb322-3aee-0c53-7c82-0db91281f2c6.secureserver.net 6.1.90-1.el9.elrepo.x86_64 #1 SMP PREEMPT_DYNAMIC Thu May 2 12:09:22 EDT 2024 x86_64
User : root ( 0)
PHP Version : 8.0.30.2
Disable Function : NONE
Domains : 0 Domains
MySQL : ON  |  cURL : ON  |  WGET : ON  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/www/wp-content/mu-plugins/object-cache-pro/src/Console/Watchers/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     [ BACKUP SHELL ]     [ JUMPING ]     [ MASS DEFACE ]     [ SCAN ROOT ]     [ SYMLINK ]     

Current File : /var/www/wp-content/mu-plugins/object-cache-pro/src/Console/Watchers/LogWatcher.php
<?php
/**
 * Copyright © 2019-2024 Rhubarb Tech Inc. All Rights Reserved.
 *
 * The Object Cache Pro Software and its related materials are property and confidential
 * information of Rhubarb Tech Inc. Any reproduction, use, distribution, or exploitation
 * of the Object Cache Pro Software and its related materials, in whole or in part,
 * is strictly forbidden unless prior permission is obtained from Rhubarb Tech Inc.
 *
 * In addition, any reproduction, use, distribution, or exploitation of the Object Cache Pro
 * Software and its related materials, in whole or in part, is subject to the End-User License
 * Agreement accessible in the included `LICENSE` file, or at: https://objectcache.pro/eula
 */

declare(strict_types=1);

namespace RedisCachePro\Console\Watchers;

use cli\Notify;
use cli\Streams;

class LogWatcher extends Notify
{
    /**
     * Holds the command options.
     *
     * @var array<mixed>
     */
    public $options;

    /**
     * The object cache instance.
     *
     * @var \RedisCachePro\ObjectCaches\MeasuredObjectCacheInterface
     */
    public $cache;

    /**
     * Whether Relay is being used.
     *
     * @var bool
     */
    public $usingRelay;

    /**
     * Holds the last 1000 measurement IDs.
     *
     * @var array<int>
     */
    protected $ids = [];

    /**
     * The measurements to display.
     *
     * @var \RedisCachePro\Metrics\Measurements|null
     */
    protected $measurements;

    /**
     * Holds the default metrics.
     *
     * @var array<string>
     */
    protected $defaultMetrics = [
        'ms-total',
        'ms-cache',
        'ms-cache-ratio',
        'hits',
        'misses',
        'hit-ratio',
        'store-reads',
        'store-writes',
        'sql-queries',
        'redis-hit-ratio',
        'redis-ops-per-sec',
        'redis-keys',
        'relay-hits',
        'relay-keys',
        'relay-misses',
        'relay-memory-ratio',
    ];

    /**
     * Prints the metrics to the screen.
     *
     * @param  bool  $finish
     * @return void
     */
    public function display($finish = false)
    {
        if ($this->_current === 1) {
            Streams::line($this->_message);
        }

        if (! $this->measurements) {
            return;
        }

        $metrics = empty($this->options['metrics'])
            ? $this->defaultMetrics
            : $this->options['metrics'];

        foreach ($this->measurements as $measurement) {
            Streams::line(sprintf(
                "\e[32m%s %s:\e[0m %s %s",
                $measurement->rfc3339(),
                $measurement->hostname,
                "\e[2mpath=\e[0m\e[32m\"{$measurement->path}\"\e[0m",
                $this->formatMeasurement(
                    $measurement->toArray(),
                    $metrics
                )
            ));
        }

        $this->measurements = null;
    }

    /**
     * Prepare the metrics.
     *
     * @return void
     */
    public function prepare()
    {
        if (empty($this->ids)) {
            $this->ids = $this->cache->measurements('-inf', '+inf', 0, 100)->pluck('id');

            return;
        }

        $this->measurements = $this->cache->measurements(
            strval(microtime(true) - 2)
        )->filter(function ($measurement) {
            return ! in_array($measurement->id, $this->ids);
        });

        array_push($this->ids, ...$this->measurements->pluck('id'));

        $this->ids = array_slice($this->ids, -1000);
    }

    /**
     * Format the given measurement in log format.
     *
     * @param  array<mixed>  $measurement
     * @param  array<string>  $metrics
     * @return string
     */
    protected function formatMeasurement(array $measurement, array $metrics)
    {
        $format = "\e[2m%s\e[2m#\e[0m\e[%sm%s\e[0m\e[2m=\e[0m%s";

        return implode(' ', array_filter(
            array_map(function ($null, $metric) use ($measurement, $format) {
                if (! isset($measurement[$metric])) {
                    return;
                }

                switch (strstr($metric, '-', true)) {
                    case 'redis':
                        return sprintf($format, 'sample', 31, $metric, $measurement[$metric]);
                    case 'relay':
                        return sprintf($format, 'sample', 35, $metric, $measurement[$metric]);
                    case 'ms':
                        return sprintf($format, 'metric', 36, $metric, $measurement[$metric]);
                    case 'sql':
                        return sprintf($format, 'metric', 33, $metric, $measurement[$metric]);
                    default:
                        return sprintf($format, 'metric', 34, $metric, $measurement[$metric]);
                }
            }, array_flip($metrics), $metrics)
        ));
    }
}

Anon7 - 2022
AnonSec Team