Code Monkey home page Code Monkey logo

yc-sls-tg-stats's Introduction

Актуальная версия переехала в официальный репозиторий примеров Yandex Cloud

Текст ниже описывает, как развернуть serverless-приложение, собирающее статистику диалогов в группах Telegram в clickhouse. Развернутое приложение доливает статистику непрерывано.

Пререквизиты

  1. Развернутый кластер yandex managed clickhouse с публичным доступом
  2. Python 3.11 на ноутбуке
  3. terraform v1.3.0 или выше на ноутбуке

Если вы испытываете проблемы с установкой или использованием terraform - изучите инструкцию в документации Яндекс Облака.

Notes

Здесь показано использование CH с публичным доступом. При наличии на облаке флага для запуска функций в VPC - можно все провернуть без публичного доступа, но мы сталкиваемся с ограничениями tf для функций. В итоге можно развернуть функцию tf-рецептом, а потом воткнуть ее в VPC уже через web ui.

В этом рецепте предполагается, что все действие происходит в одном фолдере - в том же самом, в котором развернут кликхаус. Это не какое-то принципиальное ограничение, просто так проще писать рецепт.

Готовим БД

  1. Создаем БД в кластере CH (или используем существующую)
  2. Заводим в CH пользователя с правами на нашу БД
  3. Креды пользователя (логин и пароль) складываем в lockbox-секрет в ключи user и pass
  4. Создаем в БД таблички по schema.sql

Разбираемся с телегой

  1. Создаем telegram app по инструкции - нам нужны api_id и api_hash

  2. Устанавливаем питонячьи зависимости на ноут: pip install -r ./src/requirements.txt

  3. Запускаем логин: python src/login.py с флагами:

    • --tg-api-id и --tg-api-hash - получаем от телеги в шаге 1
    • --yc-folder-id - id фолдера
    • --yc-oauth - OAuth-токен к облаку

    На этом этапе клиент телеги пытается в ней авторизоваться. Он интерактивно попросит все, что ему нужно - номер телефона (вводить через +7 для рф), код подтверждения, пароль (если настроена 2fa). В случае успеха скрипт напечатает secret id - идентификатор свежесозданного секрета в lockbox, в котором лежит все для авторизации в телеге. Этот идентификатор в дальнейшем потребуется для выбора групп для анализа и для настройки функции сбора аналитики.

  4. Выбираем группы, для которых хотим собирать статистику. Для этого запускаем python ./src/list_groups.py с флагами:

    • --yc-oauth - OAuth-токен к облаку
    • --tg-secret-id - id секрета, полученного на предыдущем шаге

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

  5. Инициализируем tf-проект: terraform init

  6. Строим план terraform plan -out plan.out, с флагами:

    • -var folder-id=<ID фолдера>
    • -var yc-token=<OAuth-токен облака>
    • -var ch-host=<FQDN хоста CH с публичным доступом>
    • -var ch-db-name=<Имя БД из шага 1 раздела "готовим БД">
    • -var dialog-ids=<Список id групп из шага 4>
    • -var tg-secret-id=<ID секрета из шага 3>
    • -var ch-secret-id=<ID секрета из шага 3 раздела "готовим БД">

    Смотрим план глазами, убеждаемся, что все ок (например, что tf не собирается ничего удалять)

  7. Применяем план terraform apply plan.out

При успешном развертывании данные начнут наливаться через 5-10 минут, и будут обновляться каждые 5 минут

yc-sls-tg-stats's People

Contributors

avhaliullin avatar

Stargazers

Denis avatar  avatar Daniil Pivovarov avatar  avatar Vladimir Voytenko avatar

Watchers

 avatar

yc-sls-tg-stats's Issues

Проблема при сборе статистики чата

Добрый день!
Возникает проблема при сборе статистики чата. Данные с чата не записываются в БД.
Возможно проблема связана с телеграм, но не понятно как ее решить
Логи приложил
image

Повторно проходил шаг 3 и деплой. Пробовал с другого аккаунта - проблема не решается
Буду рад, обратной связи!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.