Так. Итого. Опять инфра.
Если вдруг начинается какая-то дичь, подкинь дровишек. Нашла истоки проблемы со своими дублями. Да, был косяк (или не косяк) в логике, из-за которого одна и та же тема обрабатывалась двумя воркерами одновременно. Но самая большая проблема шла из-за того, что select, который раньше отрабатывал быстрее, чем за секунду, вдруг стал залипать на 40 секунд.
Отчасти думаю, что мощности базы начало не хватать, а поток задач не уменьшился, поэтому базу тупо начало заваливать задачами, наращивая проблемы на нее как снежный ком.
Я поменяла машину для бд с бесплатной t2micro (1-1) на платную t2small (1-2).
Теперь все вернулось на круги своя. Мда. Растем. #AWS
Если вдруг начинается какая-то дичь, подкинь дровишек. Нашла истоки проблемы со своими дублями. Да, был косяк (или не косяк) в логике, из-за которого одна и та же тема обрабатывалась двумя воркерами одновременно. Но самая большая проблема шла из-за того, что select, который раньше отрабатывал быстрее, чем за секунду, вдруг стал залипать на 40 секунд.
Отчасти думаю, что мощности базы начало не хватать, а поток задач не уменьшился, поэтому базу тупо начало заваливать задачами, наращивая проблемы на нее как снежный ком.
Я поменяла машину для бд с бесплатной t2micro (1-1) на платную t2small (1-2).
Теперь все вернулось на круги своя. Мда. Растем. #AWS
Если честно, иногда хочется сложить лапки.
Когда вот вижу проблему, но хз как ее решать. Особенно нагнетает то, что ведь этим пользуются люди, они видят косяк системы. Поэтому хочется как можно быстрее его исправить, а не получается. Особенно, когда такая проблема не одна, а их много, и они падают одна за другой на мою голову.
Самое еще неприятное то, что спросить то в общем, не у кого. Вернее, конечно, есть у кого, но никто не знает систему и все ее нюансы так, как я, никто не сможет понять проблему "удаленно". Если уж я зашла в тупик, то человеку со стороны еще сложнее понять, в чем моя боль.
Пока я со всем справляюсь.
Кстати, логи спасают. И да, new relic тоже сильно помог в выявлении проблемы.
Одна из функций, которую я использую для логирования для подсчета времени на выполнение функции (подсмотрела на одном из курсов):
Когда вот вижу проблему, но хз как ее решать. Особенно нагнетает то, что ведь этим пользуются люди, они видят косяк системы. Поэтому хочется как можно быстрее его исправить, а не получается. Особенно, когда такая проблема не одна, а их много, и они падают одна за другой на мою голову.
Самое еще неприятное то, что спросить то в общем, не у кого. Вернее, конечно, есть у кого, но никто не знает систему и все ее нюансы так, как я, никто не сможет понять проблему "удаленно". Если уж я зашла в тупик, то человеку со стороны еще сложнее понять, в чем моя боль.
Пока я со всем справляюсь.
Кстати, логи спасают. И да, new relic тоже сильно помог в выявлении проблемы.
Одна из функций, которую я использую для логирования для подсчета времени на выполнение функции (подсмотрела на одном из курсов):
#Python
import time
def measure_time(func):
@wraps(func)
def wrap(*args, **kwargs):
start = time.perf_counter()
result = func(*args, **kwargs)
elapsed = time.perf_counter() - start
add_log(f"{func.__name__} work time", f'{elapsed:0.2f} sec')
return result
return wrap
Сегодня радостно писала новый функционал.
Вжух-вжух - там модельку дописать, там вывод доработать, там обработку данных на входе. Кайф.
Проверила, отдебажила. Все было прекрасно.
Деплою, полетело. Но тут хоба, часть сообщений приходит в новом формате, а часть в старом.
Данные работают, сохраняются, но почему-то много чего идет не так.
Ну, здравствуйте. Смотрю в логах, а там проблемных данных нет. Вижу корректные отправки, а проблемных нет. Какой-то корабль-призрак мне их присылает, чтобы позлить меня.
Пробовала перекатывать несколько раз, чистить очередь, но ничего не помогло.
Пришлось использовать тяжелую артиллерию и переключать тип деплоя на вариант с переходом на новый инстанс, чтобы все точно заглохло.
Проблема скорее всего в кастомной настройке nginx. Потому что раньше такого не наблюдалось.
Надо разбираться как это чинить. Опять ковырять инфру. Как же надоело.
Мне уже понакидали вариантов решения, надо разбираться, но уже не сегодня.
Инфра - зло.
Обсудила с пользователями новый функционал. Оказалось, что он недостаточно хорош. Надо еще дорабатывать логику источников данных. Давно думала переделать парсинг, видимо, пришла пора. Но сначала, надо разобраться с инфрой. Так катать нельзя. А потом еще закончить с интерфейсами. Хехей, нет конца и края задачкам. #AWS, #Работа
Вжух-вжух - там модельку дописать, там вывод доработать, там обработку данных на входе. Кайф.
Проверила, отдебажила. Все было прекрасно.
Деплою, полетело. Но тут хоба, часть сообщений приходит в новом формате, а часть в старом.
Данные работают, сохраняются, но почему-то много чего идет не так.
Ну, здравствуйте. Смотрю в логах, а там проблемных данных нет. Вижу корректные отправки, а проблемных нет. Какой-то корабль-призрак мне их присылает, чтобы позлить меня.
Пробовала перекатывать несколько раз, чистить очередь, но ничего не помогло.
Пришлось использовать тяжелую артиллерию и переключать тип деплоя на вариант с переходом на новый инстанс, чтобы все точно заглохло.
Проблема скорее всего в кастомной настройке nginx. Потому что раньше такого не наблюдалось.
Надо разбираться как это чинить. Опять ковырять инфру. Как же надоело.
Мне уже понакидали вариантов решения, надо разбираться, но уже не сегодня.
Инфра - зло.
Обсудила с пользователями новый функционал. Оказалось, что он недостаточно хорош. Надо еще дорабатывать логику источников данных. Давно думала переделать парсинг, видимо, пришла пора. Но сначала, надо разобраться с инфрой. Так катать нельзя. А потом еще закончить с интерфейсами. Хехей, нет конца и края задачкам. #AWS, #Работа
Плохо быть джуном и не ведать то, что делаешь. Особенно касательно инфраструктуры. Но хорошо, когда у тебя есть друзья, интуиция, память и логика.
Вчера после общения с товарищами про мою проблему с инфрой, у меня заела одна мысль - лишний запущенный nginx. Когда я ковыряла инстанс по ssh, у меня уже возникли вопросы на тему того, а какой из файлов конфигураций nginx надо запускать то вообще, потому что их несколько.
Короче, вывод то какой? Я через ssh по ходу запустила не тот nginx. AWS о нем не знал и не тушил при перекате, и он миленько работал на старой версии. А чего бы и нет?
Переходом на новый инстанс проблема была по факту решена.
Теперь можно как и раньше катать спокойно. Фух. Можно дальше творить) #AWS, #Работа
Вчера после общения с товарищами про мою проблему с инфрой, у меня заела одна мысль - лишний запущенный nginx. Когда я ковыряла инстанс по ssh, у меня уже возникли вопросы на тему того, а какой из файлов конфигураций nginx надо запускать то вообще, потому что их несколько.
Короче, вывод то какой? Я через ssh по ходу запустила не тот nginx. AWS о нем не знал и не тушил при перекате, и он миленько работал на старой версии. А чего бы и нет?
Переходом на новый инстанс проблема была по факту решена.
Теперь можно как и раньше катать спокойно. Фух. Можно дальше творить) #AWS, #Работа
На неделю выпала из процесса. Пришлось взять некоторую паузу.
Интерфейсы. Чтобы не тошнило от любого соприкосновения с js, пошла подтягивать базу по этому вопросу. Второй день прохожу базовый курс на udemy https://www.udemy.com/course/javascript_full/
Очень тяжело идут лекции подряд, не потому что сложно, а потому что рутинно и томно. Нашла выход - смотрю лекцию, потом какой-нибудь короткий видосик, снова лекцию. Такое межевание помогает продвигаться.
В итоге в моменты прокрастинации наткнулась на курс по AWS, который также думала пройти https://www.youtube.com/playlist?list=PLg5SS_4L6LYsxrZ_4xE_U95AtGsIB96k9
Хехей! Вот оно гениальное решение: чередую теперь лекция по AWS, лекция по JS.
Ну что же. Чай, xmind, продолжаю... 9 лекция AWS, 31 лекция по JS.
В голове начинает проясняться. #AWS, #JS, #Учеба, #Курсы
Интерфейсы. Чтобы не тошнило от любого соприкосновения с js, пошла подтягивать базу по этому вопросу. Второй день прохожу базовый курс на udemy https://www.udemy.com/course/javascript_full/
Очень тяжело идут лекции подряд, не потому что сложно, а потому что рутинно и томно. Нашла выход - смотрю лекцию, потом какой-нибудь короткий видосик, снова лекцию. Такое межевание помогает продвигаться.
В итоге в моменты прокрастинации наткнулась на курс по AWS, который также думала пройти https://www.youtube.com/playlist?list=PLg5SS_4L6LYsxrZ_4xE_U95AtGsIB96k9
Хехей! Вот оно гениальное решение: чередую теперь лекция по AWS, лекция по JS.
Ну что же. Чай, xmind, продолжаю... 9 лекция AWS, 31 лекция по JS.
В голове начинает проясняться. #AWS, #JS, #Учеба, #Курсы
Я узнал, что у меня...
Я продолжаю свое чередование AWS и JS.
Про AWS. Банальная такая штука, но нифига неочевидная. Инстансы в AWS разделены на семейства. С ходу ведь так и не знаешь, в чем же суть этих семейств, какие-то буковки-циферки. Да, понятно, что там написано CPU и RAM, по ним и ориентировалась. Думала, что чем выше циферки, тем круче и дороже. Но оказывается, что цифра после буквы семейства означает версию типа инстанса, чем она больше, тем новее оборудование, да и тем круче, конечно, НО! и тем дешевле инстанс Оо. То есть банально, переключим с t2 на современные t3 я буду платить меньше. Жаль только elastic beanstalk не поддерживает новые дешевые a1 и даже t4g.
https://aws.amazon.com/ru/ec2/instance-types/ тут можно почитать про разные типы.
Также есть нюансы резервирования инстансов. И если резервировать на год или на 3, то цена становится еще ниже.
Надо еще попробовать поиграть со спотами, которые вообще очень-очень дешевые, но AWS их может отбирать, когда кто-то делает резерв. Тут интересно потыкать eb, так как он позволяет заводить Instances именно на спотах.
Про JS. Странное. В JS много странного.
1. NodeList не Array. Почему? Потому:
myArray --> Array.prototype --> Object.prototype --> null
myNodeList --> NodeList.prototype --> Object.prototype --> null
https://developer.mozilla.org/ru/docs/Web/API/NodeList
А я всего лишь хотела метод indexOf() для NodeList. Блин, где логика?
2. +'Infinity' это число Infinity (бесконечность), а +'infinity' это NaN (not a number). Вот такие дела. Вроде все логично, но почему так больно?
40 лекция по js из 124. 18 лекция по aws из 88. Поехала дальше. Интересно, смогу ли я закончить до конца недели? #AWS, #JS, #Учеба, #Курсы
Я продолжаю свое чередование AWS и JS.
Про AWS. Банальная такая штука, но нифига неочевидная. Инстансы в AWS разделены на семейства. С ходу ведь так и не знаешь, в чем же суть этих семейств, какие-то буковки-циферки. Да, понятно, что там написано CPU и RAM, по ним и ориентировалась. Думала, что чем выше циферки, тем круче и дороже. Но оказывается, что цифра после буквы семейства означает версию типа инстанса, чем она больше, тем новее оборудование, да и тем круче, конечно, НО! и тем дешевле инстанс Оо. То есть банально, переключим с t2 на современные t3 я буду платить меньше. Жаль только elastic beanstalk не поддерживает новые дешевые a1 и даже t4g.
https://aws.amazon.com/ru/ec2/instance-types/ тут можно почитать про разные типы.
Также есть нюансы резервирования инстансов. И если резервировать на год или на 3, то цена становится еще ниже.
Надо еще попробовать поиграть со спотами, которые вообще очень-очень дешевые, но AWS их может отбирать, когда кто-то делает резерв. Тут интересно потыкать eb, так как он позволяет заводить Instances именно на спотах.
Про JS. Странное. В JS много странного.
1. NodeList не Array. Почему? Потому:
myArray --> Array.prototype --> Object.prototype --> null
myNodeList --> NodeList.prototype --> Object.prototype --> null
https://developer.mozilla.org/ru/docs/Web/API/NodeList
А я всего лишь хотела метод indexOf() для NodeList. Блин, где логика?
2. +'Infinity' это число Infinity (бесконечность), а +'infinity' это NaN (not a number). Вот такие дела. Вроде все логично, но почему так больно?
40 лекция по js из 124. 18 лекция по aws из 88. Поехала дальше. Интересно, смогу ли я закончить до конца недели? #AWS, #JS, #Учеба, #Курсы
Новый классный функционал от aws. Теперь EB работает с docker-compose. Вот только почему-то работа с обычным dockerfile встала. Твою мойву... Опять 25... Пришлось откатываться на предыдущую версию. Т_Т я не хочу снова страдать, но по ходу придется разбираться.
В логах выглядит вот так:
В логах выглядит вот так:
Дорогая, я не смог тебе достать образ питона. Все, чао-какао. #AWS
2020/10/07 11:57:14.114946 [INFO] Running command /bin/sh -c docker pull python:3.8
2020/10/07 11:57:30.855165 [INFO] Starting...
2020/10/07 11:57:30.855211 [INFO] Starting EBPlatform-PlatformEngine
2020/10/07 11:57:30.855228 [INFO] reading event message file
2020/10/07 11:57:30.855325 [INFO] no eb envtier info file found, skip loading env tier info.
2020/10/07 11:57:30.855398 [INFO] Engine received EB command cfn-hup-exec
Чувствую себя кул-хацкером) Подключилась к Instance по ssh, нашла там название запущенного докер контейнера, выполнила на контейнере exec, запустив django shell, а потом запустила скриптик, который мне выгрузил нужную статистику.
Вроде мелочь, но путь тернистый. До этого я только sql-запросы к продовой базе тыкала.
Команды:
Ну, а дальше в интерактивном режиме импорт и запуск нужного скрипта.
Кстати, раньше я не понимала нафига вообще нужен этот shell, зачем все так упорото все прогоняют через shell. Теперь это мой чуть ли не основной инструмент для проверки своих идей в процессе написания кода. Почти каждую функцию проверяю в shell. Ну, или если не джанга, то аналогично запуск python в консоли отличный вариант для тестирования скриптов. #Docker
Вроде мелочь, но путь тернистый. До этого я только sql-запросы к продовой базе тыкала.
Команды:
чтобы получить список контейнеров
docker exec --interactive CONTAINER_ID django-admin shell
Ну, а дальше в интерактивном режиме импорт и запуск нужного скрипта.
Кстати, раньше я не понимала нафига вообще нужен этот shell, зачем все так упорото все прогоняют через shell. Теперь это мой чуть ли не основной инструмент для проверки своих идей в процессе написания кода. Почти каждую функцию проверяю в shell. Ну, или если не джанга, то аналогично запуск python в консоли отличный вариант для тестирования скриптов. #Docker
Еще хочу поделиться. Не знала как отправлять файлы с помощью Python.
Так как я не хотела заморачиваться со скачиванием файла или подключением s3 для сохранения, решила воспользоваться методом отправки файла в telegram api для ботов (sendDocument). Вот, пришлось разобраться как крепить файлы к post запросу. Получилась такая функция:
Как-то так. #Python
Так как я не хотела заморачиваться со скачиванием файла или подключением s3 для сохранения, решила воспользоваться методом отправки файла в telegram api для ботов (sendDocument). Вот, пришлось разобраться как крепить файлы к post запросу. Получилась такая функция:
url = f"https://api.telegram.org/bot{settings.TOKEN}/sendDocument"
caption = "описание файла"
data = {"chat_id": chat_id, "caption": caption}
with open(self.file_name, "rb") as file:
files = {"document": file}
response = requests.post(url, data, files=files)
add_log(self.name, response.text)
return response
Как-то так. #Python
После JS в скрипте на python пыталась на каждой строчке ; ставить и тело функции чуть не внесла в {}.
Прохожу AJAX.
Перелопатила кучу всего, чтобы придумать с помощью какой приблуды запустить свой js, в итоге оказалось, что того как запускает шаблоны pycharm вполне достаточно, чтобы отправлять post-запросы. Лектор предлагал openserver и еще что-то подобное, мне не понравилось.
Дальше лектор кладет в папочку php-скрипт, чтобы обрабатывать запросы, но у меня то Pycharm, я не могу его осквернять.
Полезла запускать flask. Конечно, я не через template на flask запустила html (хотя что мне мешало).
Короче, ошибка, не тот домен. corsы-фигорсы (защита от кросдоменных запросов), стаковерфлоу, библиотека flask_cors, чтобы добавить разрешение для запросов с другого порта localhost. Это я еще почти молчу, что сначала я пыталась фласк поднять в докере, но что-то пошло не так, поэтому психанула и запустила просто в venv прямо в винде. Ненуачо.
Тяжела и неказиста жизнь простого программиста.
Полдня в топку на то, чтобы просто выпендриться и сделать по-своему условную инфру для прохождения курса, еще и довольно криво. Зато, блин, опыт. Но все равно чет в докере не вышло запустить. Странно. Очень странно.
Тем временем в лекциях по AWS (да я их не бросила) vpc (сети, подсети). Понравилось выражение лектора - "Приступим, помолясь". Это, блин, слоган для работы с инфрой, особенно на AWS. Когда буду настраивать деплой на новую платформу, тоже буду приступать, помолясь, поставлю рядом шаманский бубен и заряженную воду, вдруг поможет. Нет, AWS хорош, но СЛИШКОМ СЛОЖНА!
Мой прогресс: js 54/124; aws 31/88. Кажется, до конца недели не успею. #AWS, #JS, #Учеба, #Курсы
Прохожу AJAX.
Перелопатила кучу всего, чтобы придумать с помощью какой приблуды запустить свой js, в итоге оказалось, что того как запускает шаблоны pycharm вполне достаточно, чтобы отправлять post-запросы. Лектор предлагал openserver и еще что-то подобное, мне не понравилось.
Дальше лектор кладет в папочку php-скрипт, чтобы обрабатывать запросы, но у меня то Pycharm, я не могу его осквернять.
Полезла запускать flask. Конечно, я не через template на flask запустила html (хотя что мне мешало).
Короче, ошибка, не тот домен. corsы-фигорсы (защита от кросдоменных запросов), стаковерфлоу, библиотека flask_cors, чтобы добавить разрешение для запросов с другого порта localhost. Это я еще почти молчу, что сначала я пыталась фласк поднять в докере, но что-то пошло не так, поэтому психанула и запустила просто в venv прямо в винде. Ненуачо.
Тяжела и неказиста жизнь простого программиста.
Полдня в топку на то, чтобы просто выпендриться и сделать по-своему условную инфру для прохождения курса, еще и довольно криво. Зато, блин, опыт. Но все равно чет в докере не вышло запустить. Странно. Очень странно.
Тем временем в лекциях по AWS (да я их не бросила) vpc (сети, подсети). Понравилось выражение лектора - "Приступим, помолясь". Это, блин, слоган для работы с инфрой, особенно на AWS. Когда буду настраивать деплой на новую платформу, тоже буду приступать, помолясь, поставлю рядом шаманский бубен и заряженную воду, вдруг поможет. Нет, AWS хорош, но СЛИШКОМ СЛОЖНА!
Мой прогресс: js 54/124; aws 31/88. Кажется, до конца недели не успею. #AWS, #JS, #Учеба, #Курсы
Пришел очередной отчет из wakatime. Забавно, что больше 70% приходится на браузер. И это не только во время прохождения курса, но и при реализации проектов примерно такая же доля. Не потому что прокрастинация и вот это все, а потому что чтение документации, поиск решений и тд и тп приходится именно на долю браузера.
Если что, я не разбиралась как там точно проводятся замеры, но плагин wakatime у меня стоит в Pycharm и в браузере, а также подключен github.
К слову, если не подключать плагин к браузеру, то всю активность будет считать как программирование. Статистика будет нечестная, зато красивая) #Учеба, #Tools, #Работа
Если что, я не разбиралась как там точно проводятся замеры, но плагин wakatime у меня стоит в Pycharm и в браузере, а также подключен github.
К слову, если не подключать плагин к браузеру, то всю активность будет считать как программирование. Статистика будет нечестная, зато красивая) #Учеба, #Tools, #Работа
Вот так кодишь себе тихонечко и даже не догадываешься, что используешь пробелы, а не табы, пока вдруг не пойдешь настраивать eslint.
Никогда бы не подумала, что это вообще имеет хоть какое-либо значение, кроме холиваров.
Если что, для python есть PEP https://www.python.org/dev/peps/pep-0008/#tabs-or-spaces
Pycharm сам все делает по-красоте, вам даже думать не надо. Он просто по умолчанию ставит пробелы.
Я свято верила, что использую табы, пока не начала тыкать в код и не обнаружила, что на самом деле там пробелы.
Осталось решить вопрос с js, сколько пробелов ставить? 2 или 4?) https://learn.javascript.ru/coding-style#otstupy
2 выглядит лаконичнее, учитывая многослойность кода на js. Зато 4 пробела читабельнее, на мой взгляд. Оставлю 4.
Пока искала ответы на свои вопросы, нашла статью на хабре https://habr.com/ru/company/mailru/blog/331696/
Зато я сегодня узнала о том, где находятся настройки code style в ide.
Для Pycharm также можно скормить конфиг eslint, если очень надо. #Python
Никогда бы не подумала, что это вообще имеет хоть какое-либо значение, кроме холиваров.
Если что, для python есть PEP https://www.python.org/dev/peps/pep-0008/#tabs-or-spaces
Pycharm сам все делает по-красоте, вам даже думать не надо. Он просто по умолчанию ставит пробелы.
Я свято верила, что использую табы, пока не начала тыкать в код и не обнаружила, что на самом деле там пробелы.
Осталось решить вопрос с js, сколько пробелов ставить? 2 или 4?) https://learn.javascript.ru/coding-style#otstupy
2 выглядит лаконичнее, учитывая многослойность кода на js. Зато 4 пробела читабельнее, на мой взгляд. Оставлю 4.
Пока искала ответы на свои вопросы, нашла статью на хабре https://habr.com/ru/company/mailru/blog/331696/
Зато я сегодня узнала о том, где находятся настройки code style в ide.
Для Pycharm также можно скормить конфиг eslint, если очень надо. #Python
Ребята с табами, я с вами, но вот какой оказался конфуз) #Tools
https://www.youtube.com/watch?v=EiKK04Ht8QI&ab_channel=JomaTech
М - мотивация.
У этого же товарища есть забавные видео - программирование в стиле аниме.
П - прокрастинация) #Жизнь
М - мотивация.
У этого же товарища есть забавные видео - программирование в стиле аниме.
П - прокрастинация) #Жизнь
YouTube
Don't Be A Programmer
HOW DO I GET A TECH JOB?
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
📚 Video courses from JomaClass:
🎓 New to programming? Learn Python here: https://bit.ly/joma_python
🎓 Learn SQL for data science and data analytics: https://bit.ly/joma_sql
🎓 Data Structures and Algorithms:…
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
📚 Video courses from JomaClass:
🎓 New to programming? Learn Python here: https://bit.ly/joma_python
🎓 Learn SQL for data science and data analytics: https://bit.ly/joma_sql
🎓 Data Structures and Algorithms:…
👍1