Данный проект создан для экспорта данных в свою БД из сервиса для учета личных финансов 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
Необходимо:
После установки, запускаем миграции, значение переменных не забудьте поменять на свои:
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 | Пароль пользователя БД | "" |
Мы приветствуем вклад от сообщества! Если вы хотите внести изменения в код, пожалуйста, следуйте этим шагам:
- Форкните репозиторий.
- Создайте новую ветку для ваших изменений.
- Сделайте изменения в вашей ветке.
- Отправьте Pull Request с описанием ваших изменений.
Пожалуйста, убедитесь, что ваш код соответствует стандартам Go и что все тесты проходят перед отправкой PR.
Если вы хотите помочь, но не знаете с чего начать, то посмотрите Issues и создайте свой, если не нашли подходящего.
TODO:
- Добавить тесты
- Добавить частичное обновление на основе ServerTimestamp. Для этого можно использовать BadgerDB, что бы не было внешних зависимостей.
- Сделать реализацию сохранения в БД через интерфейс (заккоментировал набросок в виде интерфейса в bd.go и метода saveBatch в clickhouse.go)
- Добавить поддержку PostgreSQL
- CI/CD - сборка, линтинг, тесты, пуш в DockerHub
- Сделать через ENTRYPOINT в Dockerfile, что бы можно было использовать дополнительные аргументы в command
- Добавить прогресс бар
- Изменить логирование и вывод результатов в консоль через Zaper