Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Служебные скрипты [PtokaX] _ CountGraphic

Автор: Trans 6.9.2009, 5:54

Название скрипта: CountGraphic
Версия API: API 2
Автор: Trans (изм. на Ksan)
Описание: Каждые полчаса (по умолчанию) записывает в файл таблицу со столбцами графика посещаемости (наполнненности) хаба, при запросе через меню отправляет в приват график от 1 суток до 30 ( админ, ник которого вписан в настройках скрипта, может запросить график до 365 суток).
Запросы начнут удовлетворяться не ранее, чем через сутки. big_smile.gif
В силу особенностей текстового режима клиента столбцы графика добавляются сверху вниз и столбец расположен горизонтально. в начале столбца дата-время, в конце - число юзеров.
Для просмотра удобнее уменьшать масштаб содержания окна через CTRL+колесико_мышки.
Полагаю, что представляет интерес для анализа динамики наполнения хаба по времени суток, по дням и месяцам...и вообще, просто для интереса. big_smile.gif

PS Исправил ошибку, внесенную при корректировке скрипта, перезалил.

Апгрейд:
--- Версия 1.3 (08-09-09 20:20)
--- Теперь в таблицу записывается только дата-время и число, а столбцы строятся при отправке по запросу
--- При выдаче по запросу столбец за нулевой час суток строится из других элементов для выделения насыщенностью цвета, и рядом с числом юзеров пишется дата
--- Исправлена ошибка в условии с профилем юзера - вместо квадратных скобок были круглые big_smile.gif
--- Эта версия совместима с предыдущей, то есть, ранее созданная часть таблицы будет обрабатываться одинаково с последующими частями и выдаваться корректно по запросу.
Так что если у кого таблица уже есть, то не заменяйте пустой из моего архива.

--- (18-09-09 19:40)
--- Исправил 1 косячок (раньше при старте инициировал приват не того бота)
--- Добавил скрипт под API 1.
--- Теперь оба скрипта в 1 архиве.

Картинки ниже - из предыдущей версии.


Вот примеры (одна картинка без изменения масштаба, вторая - с уменьшением):



P.S.: У архивного файла расширение почему-то при скачивании оказывается не .RAR, а .ZIP (хотя я закачивал именно с .RAR). Так что если у кого-то архив не раскрывается с ошибкой, переименуйте расширение на .RAR (вместо .ZIP) и пробуйте снова.

 CountGraphic_1.3_api1___api2.rar ( 3.82 килобайт ) : 364
 

Автор: district 6.9.2009, 7:02

Аналитические инструменты - это здорово )) И прогресс, как говорится, налицо. big_smile.gif
Есть пожелание : сделать горизонтальные разделители для суток и умолчательное суток, например, 5.
Такой график, по-моему, называют гистограммой... если ничего не путаю.

Автор: Berkut 6.9.2009, 14:22

Идея хороша. Самое главное - реализовать её гораздо проще, чем горизонтальный вариант, который у меня есть (выдрал из древнейшего анонимного скрипта, так что сейчас уж и не установишь, кто папа).
Автору в догонку: оригинальная идея Ваша?

Автор: ZZZZZ 6.9.2009, 20:08

[21:06] Синтаксис D:\Program Files\0.4.1.1\scripts\CountGraphic_1.2_api2.lua:37: 'then' expected near '='

Автор: INVISIBLE 6.9.2009, 20:21

Trans

Код
CountGraphic_1.2_api2.lua:37: 'then' expected near

Автор: Trans 7.9.2009, 2:20

Цитата(Berkut @ 6.9.2009, 18:22) *
Идея хороша. Самое главное - реализовать её гораздо проще, чем горизонтальный вариант, который у меня есть (выдрал из древнейшего анонимного скрипта, так что сейчас уж и не установишь, кто папа).
Автору в догонку: оригинальная идея Ваша?

Моя. Сначала делал только отсыл себе в приват каждые полчаса одного столбца, это копилось потихоньку в логе клиента и позволяло наблюдать динамику. Это я делал прямо в скрипте HelloBoAkaVerliHub (который и до этого был слегка доделан для своих нужд)..
Потом подумал и решил, а почему бы не сделать доступ для всех к этому графику. Ну и сделал отдельный скрипт .

2 ZZZZZ и INVISIBLE:
Сорри, я после первой отправки файла на форум решил маленько улучшить и кое-что исправил, и забыл в одном месте "then" и там же рядом вместо "==" написал "=". Возможно, это обнаружится ещё в одном месте, где есть "if bPMadm". Строки должны выглядеть так:

if bPMadm == true then

Перезалил в первом сообщении.

Автор: ZZZZZ 7.9.2009, 6:14

вот теперь запустился.

Автор: Berkut 7.9.2009, 18:38

Цитата(Trans @ 7.9.2009, 3:20) *
Моя.

Спасибо.

Автор: Trans 7.9.2009, 22:39

Сегодня весь день на работе думал про то, что надо в таблице хранить только число юзеров, а диаграмму строить при запросе только....с такими мыслями и завалился спать после работы. big_smile.gif и тут бац, встал и узнаю, что district уже у себя в хабе сделал такое..
Короче, тоже надо сделать. Будет хорошая экономия памяти.

Автор: district 8.9.2009, 5:26

Да, взял на себя смелость подшаманить немного.
Вот вариант для API1 со следующими изменениями :

1.Добавлены суточные разделители (см. картинку)
2.Сделана жесткая привязка к получасовым отрезкам
3.Изменен формат сохраняемых данных
4.Сделан безусловный вывод всех имеющихся последних данных, т.е. нет отбоя
в случае, если не накоплена база за хотя бы 1 сутки или данных меньше,
чем соответствовало бы запрошенному кол-ву суток.
Можно тестировать.

Изменение от 02.11.09 Поддержка моей версии этого скрипта прекращена

Автор: ZZZZZ 8.9.2009, 6:33


Цитата(ZZZZZ @ 7.9.2009, 7:14) *
вот теперь запустился.

Сразу подумал ,что полчаса для интервала записи инфы многовато, поставил 10 минут. И заметил что, задавая вывод за 1 сутки - выдает за 8 часов, за 2 - 16 часов и 3 - за 24 часа, т.е в 3 раза больше записей делается (скрипт стал работать в 3 раза быстрее))). И решил, что не стоит изменять это время). Хотя можно было бы и почаще делать запись.

Автор: Trans 8.9.2009, 7:03

Цитата(district @ 8.9.2009, 09:26) *
Вот вариант для API1 со следующими изменениями :

Тогда добавь к своему аттачу и файл под API2, плиз...
Пусть будет твоя версия для обеих API.

Цитата(ZZZZZ @ 8.9.2009, 10:33) *
Сразу подумал ,что полчаса для интервала записи инфы многовато, поставил 10 минут. И заметил что, задавая вывод за 1 сутки - выдает за 8 часов, за 2 - 16 часов и 3 - за 24 часа, т.е в 3 раза больше записей делается (скрипт стал работать в 3 раза быстрее))). И решил, что не стоит изменять это время). Хотя можно было бы и почаще делать запись.

Если 10 минут ставишь, то надо тут:
Код
    local iClmnRequest = iDays*48
умножать не на 48, а на 3 раза больше (144):
Код
    local iClmnRequest = iDays*144

Автор: district 8.9.2009, 14:06

Цитата
Пусть будет твоя версия для обеих API.

Перевел конвертером, просмотрел, вроде все правильно. Скрипт запускается, директорию создает и пустую таблицу - сохраняет. А чтобы тестировать - живой хаб под четвертой Птокой нужен, у меня его, увы, нет, только тестовый.
Добавил к предыдущему своему посту.

Автор: Trans 8.9.2009, 16:37

Обновил версию до 1.3, переделав под новый формат таблицы.
Выделил слегка столбец нулевого часа суток, плюс добавил число-месяц отдельно к этому столбцу.
Исправил ошибку с профилем (была опечатка - вместо квадратных скобок - круглые).
Для сомневающихся - код изменений свой, не от district'а big_smile.gif

Хотя надо бы тоже сделать этот пункт:

Цитата
4.Сделан безусловный вывод всех имеющихся последних данных, т.е. нет отбоя
в случае, если не накоплена база за хотя бы 1 сутки или данных меньше,
чем соответствовало бы запрошенному кол-ву суток.


Перезалил в первом сообщении.

Автор: степашка 8.9.2009, 17:19

классный скрипт! спасибо. поставил. тащусь. ошибок не выскакивает. апи1

Автор: Bassaliga 8.9.2009, 18:00

district
При запросе кем либо 99 строк и более скрипт вылетает с ошибкой scripts\CountGraphic_1.2__API1.lua:97: attempt to call global 'tProfiles' (a table value)

Автор: district 8.9.2009, 18:16

Как сказал бы М.Задорнов, "я всегда говорил и буду говорить".."таблицы профилей это мракобесие" big_smile1.gif
Переправлено и передобавлено в обоих версиях.

Автор: Bassaliga 8.9.2009, 18:25

district
теперь по профилям изменений нету
tProfiles = {
[-1] = 0, --"Незарегистрированные пользователи"
[0] = 1, --"Мастер"
[1] = 1, --"Оп"
[2] = 1, --"Вип"
[3] = 0, --"Зарегистрированные пользователи"

Автор: district 8.9.2009, 18:36

... и еще раз передобавлено.
9 сентября 2009
... и еще раз передобавлено, устранена еще кучка недочетов.

Автор: thehawk 18.9.2009, 2:14

Конвертнул на Api 1 с помощью ридми в объявлениях (добавки Core. и т.п.) и теперь выдает такое

Цитата
C:\dc_server\scripts\CountGraphic_1.3_api1.lua:58: attempt to index local 'f' (a nil value)

Но скрипт запускается и менюшка вроде как есть

Автор: Trans 18.9.2009, 2:20

Хорошо, уговорили, сегодня переведу и кину в первом сообщении переведенный на API 1 скрипт, вечерком (сейчас у меня 6 утра, спешу на работу). big_smile.gif

PS: Добавил в первый пост скрипт под API 1, предварительно исправив один косячок (раньше при старте инициировался приват не того бота). Теперь оба скрипта в одном архиве.
PSS: 2thehawk: Ты забыл, наверно, создать (или скопировать из архива) папку с первоначальным файлом для таблицы графика.

Автор: PRIZrak 9.10.2009, 21:51

Интересный скрипт, никогда не задумывался о сборе статистики, но наткнувшись на данный скрипт - проведу обязательно!!!! big_smile.gif

Автор: Sergey613 14.10.2009, 23:22

/home/user/PtokaX/scripts/CountGraphic_1.2__API2.lua:81: attempt to get length of upvalue 'tCounts' (a boolean value)
:(

Автор: district 15.10.2009, 2:40

Цитата(Sergey613 @ 15.10.2009, 3:22) *
/home/user/PtokaX/scripts/CountGraphic_1.2__API2.lua:81: attempt to get length of upvalue 'tCounts' (a boolean value)
:(

Мало информации. Если ошибка возникла при первом запуске, нужно уточнить свой ник в константе
Код
local sAdm = ...

и посмотреть, какое сообщение об ошибке бот пишет при запуске ( отправлено будет этому нику в главном чате )
Цитата
*** Ошибка : "..(описание ошибки)

Автор: Trans 15.10.2009, 2:56

Мне кажется, пора уже привыкать сразу выкладывать и строку, на которую указывает сообщение об ошибке (в данном случае - 81). Если не слишком большая, то даже всю функцию, или хотя бы пару строк до и пару после. Потому как вопрошающий мог изменить расположение строк изменениями в скрипте, или это могли сделать те, кто мог бы ответить на вопрос, либо мы пользуемся другими версиями. Вот сейчас скачал и посмотрел оригинал из первого сообщения темы - в 81 строке нет ничего подобного (там только захват строки).

Автор: district 15.10.2009, 3:02

Тут речь про мой вариант, потому я и ответил big_smile.gif.
Вообще ситуация странная. Если нет файла, то он при старте создается, сохраняется и соответственно подключается (как пустая таблица). Получение длины #tCounts должно железно отрабатывать как 0. А тут выходит, что и файла нет, и он почему-то не создается.

Автор: Sergey613 15.10.2009, 10:52

Ошибку выдало при первом запуске. Ручками создал файл!
Скрипт работает!
PtokaX 4.1.1 стоит на FreeBSD 7 lua 5.1.4

Почему прога его не создала незнаю, видимо косяк где то...

Автор: district 15.10.2009, 11:10

Цитата
PtokaX 4.1.1 стоит на FreeBSD 7 lua 5.1.4

Вот с этого надо было начинать ))
Скорее всего для Фри нужно немного иначе прописывать путь к файлу.

Автор: rerfy 3.1.2010, 23:26

Под апи1 поменял sNick на sName чтобы не возникало ошибки:
PtokaX\scripts\Graph.lua:77: attempt to concatenate field 'sNick' (a nil value)

Автор: Sergey613 9.10.2012, 13:24

Синтаксис C:\0.4.2.0b401-Lua5.2.1\scripts\CountGraphic_1.3_api2.lua:55: attempt to index local 'f' (a nil value)

Код:

Код
    if loadfile(sGraphFile) == nil then  -- если нет файла
        local f,e = io.open( sGraphFile, "w+" )  -- создаём пустой файл для записи
        f:write( "return {\n}" )  -- пишем начало и конец таблицы
        f:close()  -- закрываем файл
    end  -- у нас есть файл для сохранения графика
    sMsg = dofile(sGraphFile)  -- открываем наш файл как таблицу для дальнейшей работы скрипта
    if bPMadm == true then -- если в настройках скрипта разрешена отправка админу столбцов
        Core.SendPmToNick(sAdm, sBotGraphAdm, "Старт диаграммы...")  -- это отправляется при запуске скрипта админу для инициализации привата, иначе после первого столбика диаграммы напищет офф-сообщение такого типа: "[00:33:58]  *** Юзер ушёл [] *** "  А так хоть и будет то же, но зато не будет перерыва между первым и вторым столбиком. (эту строку можно закомментить, если не хотите получать в приват график каждый отрезок времени)
    end


55 строка третья сверху.

Автор: Ksan 9.10.2012, 13:27

Sergey613, прочтите тему с начала. Ответ дан выше.

Автор: Sergey613 9.10.2012, 19:39

Цитата(Ksan @ 9.10.2012, 14:27) *
Sergey613, прочтите тему с начала. Ответ дан выше.

Спасибо. Папку добавил. Скрипт запустился. Ждём сутки big_smile.gif

P.S. Запустился из под PtokaX 0.4.2.0-x64 Lua 5.2.1 (v. 0.4.2.0b401-Lua5.2.1)

Автор: Ksan 9.10.2012, 20:32

Кстати...
..У архивного файла в первом сообщении темы расширение почему-то при скачивании оказывается не .RAR, а .ZIP (хотя я закачивал туда именно с .RAR). Так что если у кого-то архив не раскрывается с ошибкой, переименуйте расширение на .RAR (вместо .ZIP) и пробуйте открыть снова.

Автор: Sergey613 13.10.2012, 11:24

Скрипт работает!
Только графика не видно, наверно юзеров на хабе мало.

Автор: SCALOlaz 10.6.2023, 15:12

UPну тему.

У функции

Код
function GetGraph(tUser, iColumns)
неиспользуемый второй параметр, на деле достаточно чуть ниже в этой же функции заменить iDays на iColumns в двух строках, тогда при попытке юзера ввести число дней, выходящих за диапазон доступных, можно просто выводить график за жёстко указанное число дней, ну и ругаться.

Код
function ChatArrival(tUser, sData)
                ...
                ...
            GetGraph(tUser, iDays)  -- обращение к функции отправки в приват графика по запросу
            return true  -- скрываем команду
        end
        Core.SendToUser(tUser, "<"..sBotGraph.."> "..tUser.sNick..": Вводите только целые положительные числа (а не буквы или иные нецифровые символы, у чисел с дробями принимаются только целые части!")  -- учимся правильно запрашивать :)

        GetGraph(tUser, 3)  -- ДОБАВЛЯЕМ вывод графика на 3 дня. Эдакое по-дефолту.

        return true  -- скрываем команду
добавлена команда GetGraph(tUser, 3), где 3 - жёстко установленное кол-во дней.

Однако, всё-равно будет неясность, поэтому в функции вывода, можно заменить строку
Код
Вы затребовали слишком много дней - в базе ещё нет столько данных.
на
Код
Вы затребовали слишком много дней ("..iColumns..") - в базе ещё нет столько данных.
но это уже чисто визуальные дрючки big_smile.gif