Skip to content

Latest commit

 

History

History
122 lines (90 loc) · 8.68 KB

README.md

File metadata and controls

122 lines (90 loc) · 8.68 KB

ZenMoney Export to DB

GoDoc Go Report Card GitHub License GitHub go.mod Go version (subdirectory of monorepo) GitHub release (latest SemVer) Docker Pulls Docker Image Size (latest by date) Docker Image Version (latest by date) codecov

Данный проект создан для экспорта данных в свою БД из сервиса для учета личных финансов ZenMoney.

На данный момент поддерживается только ClickHouse, но в будущем планируется добавить поддержку PostgreSQL, MySQL. Возможно еще каких-то баз, если будет необходимо.

  • Если вы хотите строить свою аналитику, но не хотите заморачиваться с инструментами и кодингом, то можете использовать Готовый проект.
  • Если вы хотите написать свое - можете воспользоваться Go SDK для доступа к API ZenMoney.

Быстрый запуск

  • Получить токен через Zerro.app.
  • Установите Docker если у вас его нет.

Скопируйте файл .env.example в .env cp .env.example .env и заполните там токен, который вы получили выше в Zerro.app. В docker-compose.yml меняете значения подключения к БД в секции command на свои.

Как в .env так и в command в качестве адреса сервера БД, если он запущен локально - указывается localhost, так как используется параметр network_mode: host. Если же БД запущена на другом сервере, то указываете его адрес.

docker-compose up -d

По умолчанию обновление будет происходить каждые 30 минут. Если хотите изменить - добавьте строчку comand: -interval 180 в docker-compose.yml, где 180 - это интервал в минутах. После этого перезапустите контейнеры docker-compose restart.

БД ClickHouse должна где-то быть запущена. Если нет, можете использовать полностью готовый проект с Grafana для построения диаграмм - ZenMoney Dashboard

Использование

Необходимо:

  • Получить токен через Zerro.app.
  • Установить утилиту для миграций migrate

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

migrate -path ./migration -database 'clickhouse://$SERVER_ADDRES:9000?database=$DATABASE_NAME&username=$USER&password=$PASSWORD' up

Запускаем экспорт в обычном режиме (программа завершается после выполнения). Не забудьте поменять значения переменных на свои:

go run main.go -token $TOKEN -server $SERVER -user $USER -db $DB_NAME -password $PASSWORD 

Либо может запустить в режиме демона, который будет запускать экспорт каждые столько минут, сколько вы указали в параметре -interval. Не забудьте поменять значения переменных на свои:

go run main.go -d -interval 60 -token $TOKEN -server $SERVER -user $USER -db $DB_NAME -password $PASSWORD -interval 360

Параметры и переменные окружения

Парметры:

Переменная Описание Значение по умолчанию
token Токен для доступа к API ZenMoney ""
server Адрес сервера БД ""
dbtype Тип БД clickhouse
user Пользователь БД ""
db Имя БД ""
password Пароль пользователя БД ""
interval Интервал запуска экспорта в режиме демона (в минутах) 5
d Запуск в режиме демона false

Переменные окружения:

Переменная Описание Значение по умолчанию
ZENMONEY_TOKEN Токен для доступа к API ZenMoney ""
CLICKHOUSE_SERVER Адрес сервера БД ""
CLICKHOUSE_USER Пользователь БД ""
CLICKHOUSE_DB Имя БД ""
CLICKHOUSE_PASSWORD Пароль пользователя БД ""

Вклад в проект

Мы приветствуем вклад от сообщества! Если вы хотите внести изменения в код, пожалуйста, следуйте этим шагам:

  1. Форкните репозиторий.
  2. Создайте новую ветку для ваших изменений.
  3. Сделайте изменения в вашей ветке.
  4. Отправьте Pull Request с описанием ваших изменений.

Пожалуйста, убедитесь, что ваш код соответствует стандартам Go и что все тесты проходят перед отправкой PR.

Если вы хотите помочь, но не знаете с чего начать, то посмотрите Issues и создайте свой, если не нашли подходящего.

TODO:

  • Добавить тесты
  • Добавить частичное обновление на основе ServerTimestamp. Для этого можно использовать BadgerDB, что бы не было внешних зависимостей.
  • Сделать реализацию сохранения в БД через интерфейс (заккоментировал набросок в виде интерфейса в bd.go и метода saveBatch в clickhouse.go)
  • Добавить поддержку PostgreSQL
  • CI/CD - сборка, линтинг, тесты, пуш в DockerHub
  • Сделать через ENTRYPOINT в Dockerfile, что бы можно было использовать дополнительные аргументы в command
  • Добавить прогресс бар
  • Изменить логирование и вывод результатов в консоль через Zaper