[UAS] Core

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #21
Посмотрел ещё раз.
PRIMARY KEY сделать в uas_admin_server не представляется возможным, поскольку server_id может быть NULL:
Если использовать NULL в качестве значения - Администратор будет загружен на все сервера.
Можно, конечно, явно делегировать на все сервера путём добавления неск. записей для каждого сервера, но тогда админка может не проделегироваться сама на новый сервер.
В общем, надо думать.
Сообщения автоматически склеены:

Видимо, придётся всё же снимать NULLABLE атрибут с колонки.
В попытках написать апдейтер для базы, столкнулся с тем, что возможно присутствие нескольких пар admin_id-server_id, если последнее - NULL.
46544
 
Последнее редактирование:

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #22
Kruzya обновил(а) ресурс [UAS] Core новой записью:

Обновление до 1.0.0.4

  • Изменена структура БД.
  • Обновлён загрузчик для поддержки изменений в СУБД.

Пост со структурой БД уже обновлён, в спойлере "Список изменений" - более подробная информация о внесённых изменениях.

Узнать больше об этом обновлении...
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #23

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #24
Перевёл сегодня (23.09.2019) свой сервер полностью на UAS, если вдруг кому интересно. Админки загружаются нормально. Но база у меня небольшая.
46653

Единственное, что меня беспокоит на данный момент - кратковременные фризы при sm_reloadadmins. Смотрел профилировщиком - такие задержки наблюдаю:
ФункцияЗадержка на кадр (сек.)
SQL_QueryGroups_Immunity()0.23
SQL_QueryGroups()0.21
SQL_QueryOverrides()0.20
SQL_QueryGroups_Overrides()0.19
SQL_QueryAdmins()0.05
Но может зря я бью тревогу, и это из-за установленного по соседству SB (фризы были когда он стоял). Хотя в нём вроде отключил загрузку админок.

Интересно, у кого как себя ведёт загрузчик.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #25
Единственное, что меня беспокоит на данный момент - кратковременные фризы при sm_reloadadmins. Смотрел профилировщиком - такие задержки наблюдаю:
попробуй дампануть эти запросы и прогнать через explain
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #26
Собственно, такие запросы:
Наименование запросаТекстРезультат EXPLAIN
Загрузка админов
SQL:
SELECT
    `uas_admin`.`admin_id`,
     `uas_admin`.`auth_method`,
     `uas_admin`.`auth_value`,
     CONCAT('', `uas_admin_group`.`title`) AS `group_title`,
     `uas_admin`.`username`,
     `uas_admin`.`password`,
     IFNULL(`uas_admin_flags`.`flags`, `uas_admin`.`flags`) AS `flags`,
     IFNULL(`uas_admin_flags`.`immunity`, `uas_admin`.`immunity`) AS `immunity`

FROM
    `uas_admin`
     LEFT JOIN `uas_admin_group`
         ON `uas_admin_group`.`admin_id` = `uas_admin`.`admin_id`
    LEFT JOIN `uas_admin_flags`
         ON `uas_admin_flags`.`admin_id` = `uas_admin`.`admin_id`

WHERE
    IFNULL(`uas_admin_flags`.`server_id`, `uas_admin_group`.`server_id`) = 1
    AND IFNULL(IFNULL(`uas_admin_flags`.`deleted_at`, `uas_admin_group`.`deleted_at`), UNIX_TIMESTAMP()) >= UNIX_TIMESTAMP()

GROUP BY
    `admin_id`,
    `auth_method`,
     `auth_value`,
     `group_title`;
1569433168212.png
Загрузка переназначений
SQL:
SELECT
    `command`,
    CASE `override_type`
         WHEN 'Command' THEN 1
          WHEN 'CommandGroup' THEN 2
          ELSE -1
    END AS `override_type`,
     `flags`

FROM
    `uas_override_server`
    INNER JOIN `uas_override`
         ON `uas_override`.`override_id` = `uas_override_server`.`override_id`

WHERE
    `server_id` = 1
     OR `server_id` IS NULL;
1569433331743.png
Загрузка админ-групп
SQL:
SELECT
    CONCAT('', `title`) AS `title`,
     `immunity`,
     `flags`

FROM
    `uas_group`

WHERE
    `deleted_at` IS NULL;
1569433445238.png
Загрузка иммунитетов админ-групп
SQL:
SELECT
    CONCAT('', `uas_group_immunity`.`target`) AS `target`,
     CONCAT('', `uas_group_immunity`.`other`) AS `other`

FROM
    `uas_group_immunity`
     INNER JOIN `uas_group` `target_group`
         ON `uas_group_immunity`.`target` = `target_group`.`title`
    INNER JOIN `uas_group` `other_group`
         ON `uas_group_immunity`.`other` = `other_group`.`title`

WHERE
    `target_group`.`deleted_at` IS NULL
     AND `other_group`.`deleted_at` IS NULL

ORDER BY `target`;
1569433583900.png
Загрузка переназначений админ-групп
SQL:
SELECT
    CONCAT('', `uas_group`.`title`) AS `title`,
     `uas_group_override`.`command`,
     CASE `uas_group_override`.`override_type`
         WHEN 'Command' THEN 1
          WHEN 'CommandGroup' THEN 2
        ELSE -1
    END AS `override_type`,
     CASE `uas_group_override`.`has_access`
         WHEN 'Y' THEN 1
          WHEN 'N' THEN 0
    END AS `has_access`

FROM
    `uas_group_override`
    INNER JOIN `uas_group`
         ON `uas_group_override`.`title` = `uas_group`.`title`

WHERE
    `uas_group`.`deleted_at` IS NULL

ORDER BY `title`;
1569433733967.png

Попробую в выходные сделать рехеш без сб. Может просто реально он провоцирует фриз и как-то перекидывает часть вины с себя на сторонние плагины.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #29
Мне даже стало интересно, кто как прочитает UPS:
1569560419151.png
 

iSe7en

Участник
Сообщения
209
Реакции
111
Кстати, а почему бы не добавить создание таблиц в сам плагин?

Так же заметил, что в setup.sql неправильный порядок создания таблиц, из-за чего появляется ошибка о создании внешних ключей. Сначала надо создавать uas_admin, uas_server, uas_group, а потом уже все остальные таблицы, где будут внешние ключи связанные с ними.
 
Последнее редактирование:

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #32
Я не хотел бы вставлять структуру БД в плагин. Это ж потом там придётся поддерживать её. Плюс, надо какой-то механизм для обновления БД делать, чтобы при старте, если таблицы были, но старые, то обновляло.
 

iSe7en

Участник
Сообщения
209
Реакции
111
Ну и как идея на будущее, чего мне пока не хватает для полноценного использования, это создание временных администраторов, но тогда придется делать что-то с проверками.
 

iSe7en

Участник
Сообщения
209
Реакции
111
И так есть :)
Колонка deleted_at действует именно как "админка на время". Просто NULL обозначает "перма-доступ".
О как, не сказал бы что это очевидно, но окей) Тогда жду только менюшек с админами и группами и их редактированием
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #38
Kruzya обновил(а) ресурс [UAS] Core новой записью:

Обновление до 1.0.0.8

Исправлены ошибки, влияющие на вызов события OnClientPostAdminCheck() для других плагинов, если:
  • В базе отсутствуют админ-группы совсем (используется флаговая система).
  • Произошла ошибка при выполнении запроса.
Спасибо @RoadSide Romeo, который неявно заставил обратить внимание на это событие, и связанные с ним баги во всех плагинах.

Узнать больше об этом обновлении...
 

JDW

Мы открываем бизнес
Сообщения
376
Реакции
325
Если возникает ошибка при импорте. Фикс
 

Вложения

  • setup.zip
    1.8 КБ · Просмотры: 5

TezKo

Участник
Сообщения
11
Реакции
1
Здравствуйте, не могли бы помочь, Стоит MySql 5.5, реально ли как-то на нем запустить?
 
Сверху Снизу