/
v.bolshakov
/
AIEcosystem-Testing
Обзор
Документация
Войти
/
v.bolshakov
/
AIEcosystem-Testing
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
common/helpers/AppHelper.php
220 строк
6 KB
Developer
Initial commit
03 авг 2026, 17:43
03 авг 2026, 17:43
7433917
Код
Авторство
О чём код?
<?php namespace common\helpers; use common\components\LanguageSelector; use Yii; use yii\base\InvalidConfigException; use yii\helpers\Console; /** * Расширение функций для работы с приложением * * @author Dmitry E. Semenov <sde.tomsk@gmail.com> * @copyright Self (c) 2019-2020 */ class AppHelper { /** * Получение информации приложеия по текущему Git */ public static function info() { $cmd = 'git log -1 --pretty=format:"%H-%h-%cd"'; $data = explode('-', ConsoleHelper::exec($cmd)); if (count($data) == 3) { $url = Yii::t('app', Yii::$app->params['git']['url'], [ 'commit' => $data[0], ]); return [ 'commit' => $data[0], 'hash' => $data[1], 'url' => $url, 'data' => DateHelper::userdate($data[2], true) ]; } else { return []; } } /** * Получить TraceAsString * * @param $message * @return string */ public static function getTrace($message) { try { throw new \Exception($message); } catch (\Exception $exception) { return $exception->getTraceAsString(); } } /** * Получить PID процесса * * @param $service_name * @return bool|int */ public static function pid($service_name) { $command = strtr('ps axu | pgrep {sname} | grep -v grep', [ '{sname}' => escapeshellarg($service_name), ]); $pid = ConsoleHelper::exec($command); if (!$pid) { return false; } return (int)$pid; } /** * Время работы сервиса * @param $pid * @return string|null */ public static function uptime($pid) { $command = strtr('ps -p {pid} -o etimes=', [ '{pid}' => escapeshellarg($pid), ]); $data = ConsoleHelper::exec($command); return $data; } /** * Получить размер директории в байтах * * @param string $file_directory Название директории * @return float|int */ public static function foldersize($file_directory) { if (is_dir($file_directory)) { $command = strtr('du -sk {directory}', [ '{directory}' => escapeshellarg($file_directory), ]); $output = ConsoleHelper::exec($command); return trim(str_replace($file_directory, '', $output)) * 1024; } else { return false; } } /** * @param $now * @return string * @throws InvalidConfigException */ public static function refDate($now) { $time = strtotime($now); return ($time > DateHelper::MONTH) ? Yii::$app->formatter->asRelativeTime($time) : Yii::$app->formatter->asDate($time); } /** * Возвращает метод TRUE - если работаем в административной части * @return bool */ public static function isDashboard() { return Yii::$app->id == 'app-backend'; } /** * Возвращает метод TRUE - если работаем на лицевой части * @return bool */ public static function isFrontend() { return Yii::$app->id == 'app-frontend'; } /** * Возвращает метод TRUE - если работаем в API части * @return bool */ public static function isApi() { return Yii::$app->id == 'api'; } /** * Обновление языка * @throws InvalidConfigException */ public static function updateLang() { /** @var LanguageSelector $languageSelector */ $languageSelector = Yii::$app->get('languageSelector'); $languageSelector->bootstrap(Yii::$app); } /** * Получить идентификатор языка * @return mixed|null * @throws InvalidConfigException */ public static function langId() { /** @var LanguageSelector $languageSelector */ $languageSelector = Yii::$app->get('languageSelector'); return ArrayHelper::getValue(array_flip($languageSelector->supportedLanguages), Yii::$app->language); } /** * Преобразовать массив результатов - индексировать по ключу * * @param array $array Массив результатов * @param string $column Название колонки * @return array */ public static function indexBy($array, $column, $is_array = false) { $result = []; foreach ($array as $item) { if ($is_array) { $result[$item[$column]][$item['id']] = $item; } else { $result[$item->{$column}][$item->getId()] = $item; } } return $result; } /** * Вывод сообщения * @param $message */ public static function log($message, $color = null) { if (PHP_SAPI == 'cli') { if ($color) { $message = Console::ansiFormat($message, [$color]); } $microtimeFloat = microtime(true); // например, 1678886400.123456 $dateTimeObject = \DateTime::createFromFormat('U.u', $microtimeFloat); $now = $dateTimeObject->format('Y-m-d H:i:s.u'); // выведет дату с микросекундами Console::stdout($now . ': ' . $message . PHP_EOL); } else { Yii::debug($message); } } }