public function handle() { /** * Оглавление * * 1. Выполнить команду * 2. В случае неудачи, вывести текст ошибки * 3. В случае успеха, вывести соотв.сообщение * */ // 1. Выполнить команду $result = runcommand('\\M3\\Commands\\C1_now', ['utcoffset' => $this->option('utcoffset')]); // 2. В случае неудачи, вывести текст ошибки if ($result['status'] != 0) { $this->error('Error: ' . $result['data']); return; } // 3. В случае успеха, вывести время $this->info($result['data']['carbon']->toDateTimeString() . ' UTC' . $result['data']['utcoffset']); }
public function handle() { /** * Оглавление * * 1. Выполнить команду * 2. В случае неудачи, вывести текст ошибки * 3. В случае успеха, вывести соотв.сообщение * */ // 1. Выполнить команду $result = runcommand('\\M2\\Commands\\C2_limitator'); // 2. В случае неудачи, вывести текст ошибки if ($result['status'] != 0) { $this->error('Error: ' . $result['data']); return; } // 3. В случае успеха, вывести соотв.сообщение $this->info("Success"); }
public function handle() { /** * Оглавление * * 1. Получить входящие аргументы * 2. Преобразовать $msg в строку * 3. Провести валидацию * 4. Добавить новую запись в лог * 5. Добавить в M2_tags те теги, которых там ещё нет * 6. Связать запись $newnote со всеми тегами из $tags * 7. Применить заданные в настройках ограничения на объем хранимых в логе данных * * N. Вернуть статус 0 * */ //---------------------------------------------------------// // Добавить запись в лог, связать с тегами, если требуется // //---------------------------------------------------------// $res = call_user_func(function () { try { DB::beginTransaction(); // 1. Получить входящие аргументы $msg = $this->data['msg']; $tags = $this->data['tags'] == 'empty' ? [] : $this->data['tags']; // 2. Преобразовать $msg в строку switch (gettype($msg)) { case 'boolean': $msg = '(boolean) ' . $msg; break; case 'integer': $msg = '(integer) ' . $msg; break; case 'double': $msg = '(double) ' . $msg; break; case 'string': $msg = '(string) ' . $msg; break; case 'array': $msg = '(array) ' . json_encode($msg, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); break; case 'object': $msg = '(object) ' . json_encode($msg, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); break; case 'resource': $msg = '(resource) ' . 'write2log не может преобразовать переменную типа resource в строку'; break; case 'NULL': $msg = 'NULL'; break; case 'unknown type': $msg = '(unknown type) ' . 'write2log не может преобразовать переменную типа unknown type в строку'; break; default: $msg = 'write2log не может преобразовать переменную не опознанного типа в строку'; break; } // 3. Провести валидацию // Сообщение //if( !preg_match("/^[0-9а-яА-ЯёЁa-zA-Z-\/\\\\_!№@#$&:=()\[\]{}*%?\"'`.,\r\n +->\"]*$/ui", $msg) ) // throw new \Exception('При добавлении записи в лог произошла ошибка, сообщение не прошло влидацию.'); // Теги foreach ($tags as $tag) { if (!preg_match("/^[0-9а-яА-ЯёЁa-zA-Z-\\/\\\\_!№@#\$&:=()\\[\\]{}*%?\"'`.,\r\n +-]*\$/ui", $tag)) { throw new \Exception('При добавлении записи в лог произошла ошибка, один из тегов не прошел влидацию.'); } } // 4. Добавить новую запись в лог // 4.1. Если класса \M2\Models\MD1_log не существует // - Сообщить и завершить if (!class_exists('\\M2\\Models\\MD1_log')) { throw new \Exception('Класс "\\M2\\Models\\MD1_log" не существует.'); } // 4.2. Создать новый eloquent-объект $newnote = new \M2\Models\MD1_log(); // 4.3. Наполнить $newnote $newnote->message = $msg; // 4.4. Сохранить $newnote в БД $newnote->save(); // 4.5. Получить ID новой записи $newnote_id = $newnote->id; // 5. Добавить в M2_tags те теги, которых там ещё нет // - Все теги приводить к нижнему регистру // 5.1. Получить коллекцию всех тегов из БД в виде массива $tags_in_db = \M2\Models\MD2_tags::all()->toArray(); // 5.2. Вычислить расхождения массивов $tags с $tags_in_db // - Все сравнения проводить в нижнем регистре // - В нём будут те теги из $tags, которых в БД ещё нет $result_arr = []; foreach ($tags as $tag) { $is = 0; foreach ($tags_in_db as $tag_in_db) { if (mb_strtolower($tag) == mb_strtolower($tag_in_db['tagname'])) { $is = 1; break; } } if (!$is) { array_push($result_arr, $tag); } } // 5.3. Добавить теги из $result_arr в БД, в таблицу тегов foreach ($result_arr as $newtagname) { // 1] Создать новый eloquent-объект настроек $newtag = new \M2\Models\MD2_tags(); // 2] Наполнить $newtag $newtag->tagname = mb_strtolower($newtagname); $newtag->description = ''; $newtag->color = '#000'; $newtag->priority = 0; // 3] Сохранить $newtag в БД $newtag->save(); } // 6. Связать запись $newnote со всеми тегами из $tags // 6.1. Получить массив ID всех тегов из $tags из БД $tags_ids = \M2\Models\MD2_tags::whereIn('tagname', $tags)->lists('id'); // 6.1. Связать foreach ($tags_ids as $tagid) { $newnote->tags()->attach($tagid); } // 7. Применить заданные в настройках ограничения на объем хранимых в логе данных runcommand('\\M2\\Commands\\C2_limitator'); DB::commit(); } catch (\Exception $e) { $errortext = 'Invoking of command C1_write2log from M-package M2 have ended with error: ' . $e->getMessage(); DB::rollback(); Log::info($errortext); return ["status" => -2, "data" => $errortext]; } }); if (!empty($res)) { return $res; } //---------------------// // N. Вернуть статус 0 // //---------------------// return ["status" => 0, "data" => ""]; }
public function handle() { /** * Оглавление * * 1. Выполнить команду * 2. В случае неудачи, вывести текст ошибки * 3. В случае успеха, вывести соотв.сообщение * */ // 1. Выполнить команду $this->info('Произвожу полную очистку лога...'); $result = runcommand('\\M2\\Commands\\C3_clear'); // 2. В случае неудачи, вывести текст ошибки if ($result['status'] != 0) { $this->error('Error: ' . $result['data']); return; } // 3. В случае успеха, вывести соотв.сообщение $this->info("Очистка завершена успешно"); }
public function handle(\R2\Event $event) { /** * Оглавление * * A. Проверить ключи и получить входящие данные * * 1. * 2. * * X. Вернуть результат * */ //--------------------// // A. Проверить ключи // //--------------------// try { // 1.1. Получить ключи, присланные с событием $eventkeys = $event->data['keys']; // 1.2. Получить ключи, поддерживаемые обработчиком $handlerkeys = ["m2:write2log"]; // 1.3. Если ни один ключ не подходит, завершить $testkeys = array_intersect($handlerkeys, $eventkeys); if (empty($testkeys)) { return; } // 1.4. Получить входящие данные $data = $event->data; } catch (\Exception $e) { $errortext = 'Keys checking in event handler H1_catch2log of M-package M2 have ended with error: ' . $e->getMessage(); Log::info($errortext); write2log($errortext, ['M1', 'parseapp']); return ["status" => -2, "data" => $errortext]; } //---------------------------------------------------// // Выполнить команду, добавляющую новую запись в лог // //---------------------------------------------------// $res = call_user_func(function () use($event) { try { // 1] Получить сообщение и массив с тегами $msg = $event->data['msg']; $tags = $event->data['tags']; // 2] Сформировать массив аргументов для команды $args = ['msg' => $msg, 'tags' => $tags]; // 3] Выполнить команду, добавляющую новую запись в лог runcommand('\\M2\\Commands\\C1_write2log', $args); } catch (\Exception $e) { $errortext = 'Invoking of event handler H1_catch2log of M-package M2 have ended with error: ' . $e->getMessage(); Log::info($errortext); return ["status" => -2, "data" => $errortext]; } }); if (!empty($res)) { return $res; } //----------------------// // X. Вернуть результат // //----------------------// return ["status" => 0, "data" => ""]; }
public function handle() { // 1. Получить дату и время с UTC-смещением, указанным в настрйоках $results = runcommand('\\M3\\Commands\\C1_now', [])['data']; // 2. Возбудить вещательнео событие return Event::fire(new \R2\Broadcast(['channels' => ['m3:now'], 'queue' => 'time', 'utcoffset' => $results['utcoffset'], 'year' => $results['year'], 'month' => $results['month'], 'day' => $results['day'], 'hour' => $results['hour'], 'minute' => $results['minute'], 'second' => $results['second']])); }
public function handle() { /** * Оглавление * * 1. Выполнить команду * 2. В случае неудачи, вывести текст ошибки * 3. В случае успеха, вывести соотв.сообщение * */ // 1. Выполнить команду $result = runcommand('\\M2\\Commands\\C1_write2log', ['msg' => $this->argument('msg'), 'tags' => $this->argument('tags')], 0, ['on' => true, 'delaysecs' => '']); // 2. В случае неудачи, вывести текст ошибки if ($result['status'] != 0) { $this->error('Error: ' . $result['data']); return; } // 3. В случае успеха, вывести соотв.сообщение $this->info("Success"); }