Просмотр файла delta_framework-main/admin/ajax/threads.php

Размер файла: 8.43Kb
<?php
    /**
     * Copyright (c) 2022 Roman Grinko <[email protected]>
     * Permission is hereby granted, free of charge, to any person obtaining
     * a copy of this software and associated documentation files (the
     * "Software"), to deal in the Software without restriction, including
     * without limitation the rights to use, copy, modify, merge, publish,
     * distribute, sublicense, and/or sell copies of the Software, and to
     * permit persons to whom the Software is furnished to do so, subject to
     * the following conditions:
     * The above copyright notice and this permission notice shall be included
     * in all copies or substantial portions of the Software.
     * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
     * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
     * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
     * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
     * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     */

    use Core\Models\MQ;
    use Core\Helpers\SystemFunctions;

    require_once __DIR__ . '/../inc/bootstrap.php';
    $result = null;
    $MQ     = new MQ();
    ob_start();
?>
    <table class="table table-primary mb30">
        <thead>
        <tr>
            <th></th>
            <th>ID</th>
            <th>Активен</th>
            <th>Выполняется</th>
            <th>Приоритет</th>
            <th>Время выполнения</th>
            <th>Попытки</th>
            <th>Лимит попыток</th>
            <th>Класс</th>
            <th>Метод</th>
            <th>Параметры</th>
            <th>Статус</th>
            <th>Результат</th>
            <th>Создан</th>
            <th>Обновлен</th>
        </tr>
        </thead>
        <tbody>
        <?php
            $arTasks = $MQ->getTasks(10, 'in_progress', 'desc');
            foreach ($arTasks as $task) {
                ?>
                <tr class="<?php
                    if ($task['active'] === MQ::VALUE_Y && $task['in_progress'] === MQ::VALUE_Y && $task['status'] === 'ERROR') {
                        echo 'alert-warning';
                    } elseif ($task['active'] === MQ::VALUE_N && $task['status'] === 'ERROR') {
                        echo 'alert-danger';
                    } elseif ($task['in_progress'] === MQ::VALUE_Y) {
                        echo 'alert-success';
                    } elseif ($task['in_progress'] === MQ::VALUE_N && $task['status'] === 'ERROR') {
                        echo 'alert-danger';
                    } elseif ($task['active'] === MQ::VALUE_Y && $task['in_progress'] === MQ::VALUE_N) {
                        echo 'alert-info';
                    }
                ?>">
                    <td><?= $task['in_progress'] === MQ::VALUE_Y ? '<span class="badge badge-success">RUN</span>' : ''; ?></td>
                    <td><?= $task['id']; ?></td>
                    <td><?= $task['active'] === MQ::VALUE_Y ? 'Да' : 'Нет'; ?></td>
                    <td><?= $task['in_progress'] === MQ::VALUE_Y ? 'Да' : 'Нет'; ?></td>
                    <td><?= $task['priority']; ?></td>
                    <td><?= $task['execution_time']; ?></td>
                    <td><?= $task['attempts']; ?></td>
                    <td><?= $task['attempts_limit']; ?></td>
                    <td><?= $task['class']; ?></td>
                    <td><?= $task['method']; ?></td>
                    <td><?= $task['params']; ?></td>
                    <td><?= $task['status']; ?></td>
                    <td><?= $task['response']; ?></td>
                    <td><?= $task['date_created']; ?></td>
                    <td><?= $task['date_updated']; ?></td>
                </tr>
                <?php
            }
        ?>
        </tbody>
    </table>
<?php
    $result['threads'] = ob_get_clean();
    ob_start();
?>
    <table class="table table-primary mb30">
        <thead>
        <tr>
            <th>ID</th>
            <th>ID задания</th>
            <th>Время выполнения</th>
            <th>Попыток</th>
            <th>Лимит попыток</th>
            <th>Класс</th>
            <th>Метод</th>
            <th>Параметры</th>
            <th>Статус</th>
            <th>Результат</th>
            <th>Создан</th>
            <th>Обновлен</th>
        </tr>
        </thead>
        <tbody>
        <?php
            $arTasks = $MQ->getTasksHistory(10, 'id', 'desc');
            foreach ($arTasks as $task) {
                ?>
                <tr class="<?php
                    if ($task['status'] === MQ::STATUS_OK) {
                        echo 'alert-success';
                    } elseif ($task['status'] === MQ::STATUS_ERROR) {
                        echo 'alert-danger';
                    }
                ?>">
                    <td><?= $task['id']; ?></td>
                    <td><?= $task['task_id']; ?></td>
                    <td><?= $task['execution_time']; ?></td>
                    <td><?= $task['attempts']; ?></td>
                    <td><?= $task['attempts_limit']; ?></td>
                    <td><?= $task['class']; ?></td>
                    <td><?= $task['method']; ?></td>
                    <td><?= $task['params']; ?></td>
                    <td><?= $task['status']; ?></td>
                    <td><?= $task['response']; ?></td>
                    <td><?= $task['date_created']; ?></td>
                    <td><?= $task['date_updated']; ?></td>
                </tr>
                <?php
            }
        ?>
        </tbody>
    </table>
<?php
    $result['threads_history'] = ob_get_clean();
    ob_start();
?>
    <table class="table">
        <thead>
        <tr>
            <th>Всего</th>
            <th>Воркеров</th>
            <th>Активных</th>
            <th>Выполняются</th>
            <th>С ошибкой</th>
        </tr>
        </thead>

        <tbody>
        <tr>
            <td><?= $MQ->getCountTasks(); ?></td>
            <td><?= $MQ->getCountWorkers() . ' / ' . MQ::WORKERS_LIMIT; ?></td>
            <td><?= $MQ->getCountTasks(['active' => 'Y']); ?></td>
            <td><?= $MQ->getCountTasks(['active' => 'Y', 'in_progress' => 'Y']); ?></td>
            <td><?= $MQ->getCountTasks(['in_progress' => 'N', 'status' => MQ::STATUS_ERROR]); ?></td>
        </tr>
        </tbody>
    </table>
<?php
    $result['info_threads'] = ob_get_clean();
    ob_start();
?>
    <table class="table">
        <thead>
        <tr>
            <th>Всего</th>
            <th>Успешных</th>
            <th>Неудачных</th>
        </tr>
        </thead>

        <tbody>
        <tr>
            <td><?= $MQ->getCountTasksHistory(); ?></td>
            <td><?= $MQ->getCountTasksHistory(['status' => MQ::STATUS_OK]); ?></td>
            <td><?= $MQ->getCountTasksHistory(['status' => MQ::STATUS_ERROR]); ?></td>
        </tr>
        </tbody>
    </table>
<?php
    $result['info_threads_history'] = ob_get_clean();
    ob_start();
?>
    <div class="progress">
        <div style="width: <?= round(($MQ->getCountWorkers() / MQ::WORKERS_LIMIT) * 100, 2); ?>%" aria-valuemax="100" aria-valuemin="0"
             aria-valuenow="40" role="progressbar" class="progress-bar progress-bar-warning">
            <span class="sr-only">40% Complete (success)</span>
        </div>
    </div>
<?php
    $result['memory'] = ob_get_clean();
    ob_start();
    //$memory = SystemFunctions::getHostMemoryInfo();
    $memory = SystemFunctions::getMemoryUse();

    if ($memory->usedPercent < 30) {
        $progressClass = 'progress-bar-success';
    } elseif ($memory->usedPercent >= 50 && $memory->usedPercent < 80) {
        $progressClass = 'progress-bar-warning';
    } else {
        $progressClass = 'progress-bar-danger';
    }
    ?>
    <div class="progress">
        <div style="width: <?= round($memory->usedPercent, 2); ?>%" aria-valuemax="100" aria-valuemin="0"
             aria-valuenow="<?= round($memory->usedPercent); ?>" role="progressbar" class="progress-bar <?= $progressClass; ?>">
            <span><?= round($memory->usedPercent, 2); ?>%</span>
        </div>
    </div>
    <?php
    $result['memory'] = ob_get_clean();
    echo json_encode($result, JSON_UNESCAPED_UNICODE);