Верстакфорум практиков
рекламаiprazon: приватные серверные адреса IPv4 и SOCKS5, безлимитный трафик, бесплатный тест до 2 часов
ФорумСкрипты и автоматизация

Свой шаблон проекта под новый прогон

Костя Фомин
Костя Фомин
Знаток
сообщений 1600
с апр
15 ноября, 14:22первое сообщение

Каждый новый прогон начинал с пустой папки и каждый раз забывал одно и то же: логи льются в корень, доступы оказываются в репозитории, выгрузка перезаписывает вчерашнюю. Сделал себе болванку и раскатываю её через cookiecutter.

progon/
├── nastroyki.toml        общее, лежит в репозитории
├── .env                  доступы, прописан в .gitignore
├── vhod/                 входные списки
├── vyhod/                выгрузки по датам
├── sostoyanie/           курсоры, что уже собрано
├── logi/
├── src/
│   ├── zagruzka.py
│   ├── razbor.py
│   └── vygruzka.py
├── run.sh
└── Makefile

Покажите свои, интересно, чего мне тут не хватает.

Влад Терентьев
Влад Терентьев
Участник
сообщений 745
с авг
22 апреля, 17:39#2

Годная болванка. Добавь папку obrazcy под сохранённые ответы, пригодится в день, когда разметка поедет.

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

Артур Вагнер
Артур Вагнер
Знаток
сообщений 1290
с мая
1 сентября, 08:56#3

К nastroyki.toml обязательно шаблон nastroyki.primer.toml со всеми полями и коротким комментарием к каждому. Через полгода сам себе спасибо скажешь.

И .env.primer с пустыми значениями. Тогда новый человек за пять минут понимает, что ему надо раздобыть, чтобы прогон вообще запустился.

конфиг без комментария это загадка
Костя Фомин
Костя Фомин
Знаток
сообщений 1600
с апр
8 февраля, 11:13#4
Артур Вагнер: шаблон nastroyki.primer.toml со всеми полями

Есть, добавил оба примера. Заодно приделал проверку на старте: пробегаю по полям примера и ругаюсь, если в рабочем конфиге поля нет.

Данила Р
Данила Р
Новичок
сообщений 145
с мар, второй сезон
15 июля, 14:30#5

а зачем выгрузки по датам? места же жрёт

ostrov
ostrov
Участник
сообщений 505
с окт
22 декабря, 17:47#6

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

Места уходит умеренно, если сразу жать и убирать старое по расписанию:

# в конце прогона
DEN=$(date -u +%F)
tar -C vyhod -czf "arhiv/$DEN.tar.gz" "$DEN" && rm -rf "vyhod/$DEN"
find arhiv -name '*.tar.gz' -mtime +45 -delete

Из своего добавлю про sostoyanie. Курсор обхода надо писать атомарно, иначе однажды поймаешь обрезанный файл после падения и начнёшь обход с середины:

import json, os
def zapisat(put, d):
    tmp = put + ".tmp"
    with open(tmp, "w") as f:
        json.dump(d, f, ensure_ascii=False)
        f.flush()
        os.fsync(f.fileno())
    os.replace(tmp, put)

Без fsync файл после жёсткой перезагрузки бывает пустым, проверено на своей шкуре дважды.

Ирина Пахомова
Ирина Пахомова
Новичок
сообщений 280
с янв, второй сезон
1 мая, 08:04#7

Спрошу про запуск. У вас run.sh и Makefile живут оба сразу, они между собой не спорят?

У меня был Makefile с десятком целей, и пользоваться им кроме меня никто не мог.

netmon
netmon
Знаток
сообщений 1350
с мая
8 октября, 11:21#8

Ирина, у меня Makefile держит команды разработки, а боевой запуск сидит в run.sh, одна строка на вход, её же дёргает таймер.

Чего в болванке точно не хватает: отдельного места под список выходных адресов. Класть его в репозиторий нельзя, руками обновлять надоедает уже на третий раз. Держу в .env ссылку на список и тяну свежий перед стартом:

curl -s "$SPISOK_URL" -o vhod/adresa.txt
wc -l < vhod/adresa.txt

Список отдаётся в формате IP:PORT:LOGIN:PASS и обновляется в реальном времени, так что перед каждым прогоном у тебя актуальный. Сам беру приватные серверные адреса под прогоны: ротация внутри пула идёт сама, крутить отдельно нечего.

Костя Фомин
Костя Фомин
Знаток
сообщений 1600
с апр
15 марта, 14:38#9

netmon, забрал curl перед стартом, у меня список тоже отдаётся ссылкой. Раньше клал файл в vhod руками и один раз прогнал по позавчерашнему, разбирался потом полдня.

Ирина, разделение по смыслу мне нравится: Makefile для человека за клавиатурой, run.sh для запуска по расписанию.

Данила Р
Данила Р
Новичок
сообщений 145
с мар, второй сезон
22 августа, 17:55#10

спасибо, про .env.primer понял, у нас каждый новичок на этом теряет день

Влад Терентьев
Влад Терентьев
Участник
сообщений 745
с авг
1 января, 08:12#11

Ещё положите в корень короткий README строк на десять: что запускать, куда смотреть при поломке, кому писать. Дальше десяти строк его никто не читает.

что лежит в болванке
что лежит в болванке
Слава Кудрин
Слава Кудрин
Участник
сообщений 760
с авг
8 июня, 11:29#12

Про Makefile поддержу netmon. У себя свёл к четырём целям: make nastroit, make test, make progon, make arhiv. Больше четырёх целей никто в голове не держит. Эти четыре угадываются с первого раза.

Ещё держу в болванке trebovaniya.txt с прибитыми версиями пакетов. Плавающие версии однажды подсунули мне другую библиотеку разбора посреди рабочей недели, и прогон встал на ровном месте.

Костя Фомин
Костя Фомин
Знаток
сообщений 1600
с апр
15 ноября, 14:46#13

Обновил болванку по ветке, спасибо всем. Что доехало: папка obrazcy и контрольная сумма входного списка, примеры конфига и env с проверкой на старте, атомарная запись состояния с fsync, архив выгрузок с удалением старого, список адресов ссылкой, README на десять строк, прибитые версии пакетов.

Makefile оставил на четыре цели, как у Славы. Выложил всё в отдельный репозиторий, новый прогон теперь заводится минут за десять вместо половины дня.