HLX Проблема с плагином

Danyas

Участник
Сообщения
2,173
Реакции
1,072
PHP:
#pragma newdecls required

Database hDatabase = null;

public Plugin myinfo =
{
    name = "HLStatsX: TOP Announcer",
    author = "Danyas"
}

public void OnPluginStart()
{
    SQL_TConnect(GotDatabase, "hlstats");
}

public GotDatabase(Handle:owner, Handle:hndl, const String:error[], any:data)
{
    if (hndl == INVALID_HANDLE)   {LogError("Database failure: %s", error); return;}
    hDatabase = hndl;
}


public OnClientPostAdminCheck(client)
{
    if (client == 0) return;
    decl String:steamid[32], String:query[500];
    GetClientAuthString(client, steamid, sizeof(steamid));
    Format(query, sizeof(query), "SELECT COUNT(*) AS rank FROM hlstats_Players WHERE hlstats_Players.game = 'v34' AND hideranking = 0 AND skill > (SELECT skill from hlstats_Players JOIN hlstats_PlayerUniqueIds ON hlstats_Players.playerId = hlstats_PlayerUniqueIds.playerId WHERE uniqueID = MID('%s', 9) AND hlstats_PlayerUniqueIds.game = 'v34') -1", steamid);
    SQL_TQuery(hDatabase, T_CheckTop10, query, client);
}

public T_CheckTop10(Handle:owner, Handle:hndl, const String:error[], any:client)
{
    if (!IsClientConnected(client) || IsFakeClient(client))    return;
    if (hndl == INVALID_HANDLE)    {LogError("Query failed! %s", error);}
    else if (SQL_FetchRow(hndl))  
    {
        new pid = SQL_FetchInt(hndl, 0);
        if(pid > 0)
        {
            if(5 < pid < 11)        PrintToChatAll("\x04[HLStatsX:CE]\x03 ТОП-10\x01 Игрок \x03%N\x01 подключен.",client);
            else if(3 < pid < 6)    PrintToChatAll("\x04[HLStatsX:CE]\x03 ТОП-5\x01 Игрок \x03%N\x01 подключен.", client);
            else if(1 < pid < 4)    PrintToChatAll("\x04[HLStatsX:CE]\x03 ТОП-3\x01 Игрок \x03%N\x01 подключен.", client);
            else if(0 < pid < 2)    PrintToChatAll("\x04[HLStatsX:CE]\x03 ТОП-1\x01 Игрок \x03%N\x01 подключен.", client);
        }
    }
}


Еррорит так:
L 02/26/2016 - 09:49:57: [vip/topgiver.smx] Query failed! Lost connection to MySQL server during query
SM 1.7, плагин написан на 1.6
Буду раз если кто-то объяснит как базы на 1.7 перенести.

Плагин работает отлично, но просто в логах мусорит
 
Последнее редактирование:

selax

Добрая душа
Сообщения
1,172
Реакции
521
Что в логах мусюкля? Причин может быть много.
 

selax

Добрая душа
Сообщения
1,172
Реакции
521
Вот что нашёл
 

Вложения

  • cPanel-Log-File-Locations-and-Paths.png
    cPanel-Log-File-Locations-and-Paths.png
    11.5 КБ · Просмотры: 14

Tallanvor

НЕ ПИШУ я плагины!!! И не правлю! И ваще...
Сообщения
1,352
Реакции
554
@Danyas, Запрос вручную выполнял для теста?
Посмотри, сколько времени выполняется и проверь лимиты в самом мускуле.
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
ZQ4ibkY.png

@Danyas, Запрос вручную выполнял для теста?
Посмотри, сколько времени выполняется и проверь лимиты в самом мускуле.

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 16996745
Server version: 5.6.28 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SELECT COUNT(*) AS rank FROM hlstats_Players WHERE hlstats_Players.game = 'v34' AND hideranking = 0 AND skil l > (SELECT skill from hlstats_Players JOIN hlstats_PlayerUniqueIds ON hlstats_Players.playerId = hlstats_PlayerUni queIds.playerId WHERE uniqueID = MID('%s', 9) AND hlstats_PlayerUniqueIds.game = 'v34') -1;
+------+
| rank |
+------+
| 0 |
+------+
1 row in set (0.01 sec)

mysql> SELECT COUNT(*) AS rank FROM hlstats_Players WHERE hlstats_Players.game = 'v34' AND hideranking = 0 AND skil l > (SELECT skill from hlstats_Players JOIN hlstats_PlayerUniqueIds ON hlstats_Players.playerId = hlstats_PlayerUni queIds.playerId WHERE uniqueID = MID('STEAM_0:0:1842773827', 9) AND hlstats_PlayerUniqueIds.game = 'v34') -1;
+------+
| rank |
+------+
| 1 |
+------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) AS rank FROM hlstats_Players WHERE hlstats_Players.game = 'v34' AND hideranking = 0 AND skil l > (SELECT skill from hlstats_Players JOIN hlstats_PlayerUniqueIds ON hlstats_Players.playerId = hlstats_PlayerUni queIds.playerId WHERE uniqueID = MID('STEAM_0:0:903485671', 9) AND hlstats_PlayerUniqueIds.game = 'v34') -1;
+------+
| rank |
+------+
| 10 |
+------+
1 row in set (0.00 sec)


mysql> SELECT COUNT(*) AS rank FROM hlstats_Players WHERE hlstats_Players.game = 'v34' AND hideranking = 0 AND skill > (SELECT skill from hlstats_Players JOIN hlstats_PlayerUniqueIds ON hlstats_Players.playerId = hlstats_PlayerUniplayerId WHERE uniqueID = MID('STEAM_0:0:903485671', 9) AND hlstats_PlayerUniqueIds.game = 'v34') -1;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 16998252
Current database: f3397_v34_hlstatsx

+------+
| rank |
+------+
| 10 |
+------+
1 row in set (0.11 sec)
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
@Danyas, ну да, дело явно не в долгом запросе...


А вот это ужо напрягает.
С чем связан обрыв то?

Техподдержка так и не нашла проблемы, агент отписывал мол у него уже 20 часов коннект идет, и не прерывается.
В HLX-e (perl, коннект от perl'a к бд хостинга) аналогичная проблема в логах есть, но на работу она никак не влияет (точно так же как и в плагине выше).
 

Tallanvor

НЕ ПИШУ я плагины!!! И не правлю! И ваще...
Сообщения
1,352
Реакции
554
@Danyas, поднять БД локально и плагином поспрашивать её - не вариант?
Так сразу половина направлений поиска откинется.
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
@Danyas, поднять БД локально и плагином поспрашивать её - не вариант?
Так сразу половина направлений поиска откинется.

Сделал, только коннектился через внешний IP. Проблема есть, отписал в тп и приложил видос, пока думают
 

selax

Добрая душа
Сообщения
1,172
Реакции
521
Перечитал первый пост. Если плагин работает нормально и вам мешают только ошибки, то их можно убрать.
Нужно это:
C-подобный:
if (hndl == INVALID_HANDLE)    {LogError("Query failed! %s", error);}
    else if (SQL_FetchRow(hndl))
Заменить на это:
C-подобный:
if ((hndl != INVALID_HANDLE) && SQL_FetchRow(hndl))
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Перечитал первый пост. Если плагин работает нормально и вам мешают только ошибки, то их можно убрать.
Нужно это:
C-подобный:
if (hndl == INVALID_HANDLE)    {LogError("Query failed! %s", error);}
    else if (SQL_FetchRow(hndl))
Заменить на это:
C-подобный:
if ((hndl != INVALID_HANDLE) && SQL_FetchRow(hndl))

Это да, я так и использую в остальных плагинах, но не забывай о том, что при реконнекте к базе мы теряем время порядка 0.1-0.3 секунды, и можем смело его прибавить к времени запроса.
 

selax

Добрая душа
Сообщения
1,172
Реакции
521
@Danyas, запрос, который выдал ошибку в сообщении 7 точно правильный? Он отличается от других.
Вот это:
C-подобный:
hlstats_Players.playerId = hlstats_PlayerUniplayerId
Не должно быть так?
C-подобный:
hlstats_Players.playerId = hlstats_PlayerUniqueIds.playerId
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
@Danyas, запрос, который выдал ошибку в сообщении 7 точно правильный? Он отличается от других.
Вот это:
C-подобный:
hlstats_Players.playerId = hlstats_PlayerUniplayerId
Не должно быть так?
C-подобный:
hlstats_Players.playerId = hlstats_PlayerUniqueIds.playerId

Он правильный, так как выполнился, возможно при копировании из ssh что-то не скопировалось
 

selax

Добрая душа
Сообщения
1,172
Реакции
521
С помощью гугла узнал ещё вот что
1. В databases.cfg timeout должен быть 0 или большим.
2. В старых версиях SM был такой баг, что терялось соединение и вылезала эта ошибка.
3. Может быть, если база не на локалхосте.


Хотя если взять факт, что запрос выполняется, мне думается что виноват мусукль. А в особенности его слишком короткий таймаут.
Всё же интересны логи, они должны быть где то тут:
C-подобный:
MySQL error log    /var/lib/mysql/{SERVER_NAME}.err
MySQL slow query log (if enabled in my.cnf)    /var/log/slowqueries
 

selax

Добрая душа
Сообщения
1,172
Реакции
521
@Tallanvor, я увидел на скрине слово VPS. И доступ к консолю мусукля есть.
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
@Tallanvor, я увидел на скрине слово VPS. И доступ к консолю мусукля есть.
PHP:
f3397@frog [/var/lib/mysql]# ls /var/lib/mysql/
/bin/ls: cannot open directory /var/lib/mysql/: Permission denied
f3397@frog [/var/lib/mysql]# cd /var/log/
f3397@frog [/var/log]# ls
./  ../
PHP:
    "hlstats"
    {
        "driver"            "mysql"
        "host"                "xxx"
        "database"            "xxx"
        "user"                "xxx"
        "pass"                "xxx"
        //"timeout"            "0"
        "port"                "3306"
    }
Сейчас попробую убрать // перед timeout
 
Сверху Снизу