• Требуемый уровень знания для работы Juniour Python Developer?

    @ArtiomK Автор вопроса
    fdroid, вам большое спасибо за интерес к программе, без него я навряд ли сделал её кроссплатформенной в ближайшем обозримом будущем, а так я получил опыт разработки под Linux, ну и сделал вывод, что не стоит стремиться использовать самые последние версии языка, так как то, что работало на ранних версиях скорее всего будет работать и на более поздних, а наоборот скорее всего нет.

    Когда буду делать какие-то значимые улучшения в программе, или разработаю другую полезную софтину, буду кидать ссылки. Если будут какие-то пожелания/идеи - пишите - постараюсь реализовать.
  • Требуемый уровень знания для работы Juniour Python Developer?

    @ArtiomK Автор вопроса
    fdroid, добрый вечер.
    Успешно удалось понизить версию питона, программа работает на образе debian-9.8.0-amd64-xfce-CD-1, базовый питон 3.5.3, должна работать и на более ранних версиях.

    Также успешно удалось внедрить SQL LITE 3. Добавил возможность по желанию вводить или нет имя хоста, при оповещениях в консоли и письмом подтягивает к айпи данные по хосту из базы пинг сессий.

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

    https://github.com/ArtyomKozyrev1989/ICMP_Ping_Mon...
  • Требуемый уровень знания для работы Juniour Python Developer?

    @ArtiomK Автор вопроса
    fdroid, да, все правильно поняли. Ошибка была на 39 линии File "pingsubprocess.py", line 39, далее сделали даунгрейд с f строки на format, в итоге программа прошла вплоть до следующей встречи с f строкой на 68 линии. Питон выдает ошибки только в том случае, если в программа использовала эту линию, так как язык не компилируемый, предположим есть f строка в сообщении о восстановлении сервиса, узнаете об этом, только если по ходу работы программы произошло это событие, если это событие не произошло, то остаетесь в неведении.
    Соответственно мое предположение, что подпроцесс был запущен версией питона, которая не умеет f строки скорее всего верно.

    f строки встречаются во всех файлах, где идет форматирование текста, то есть, чтобы программа работала на более ранних версиях питона, нужно сделать подобные замены везде, я сейчас этим буду заниматься пока буду добавлять базу данных SQL LITE и возможность прописать имя хоста. Я детальней посмотрю различия версий питона, но думаю, что замены всех f строк на format будет достаточно для работы на более ранних версиях питона.

    По поводу Debian сообщение говорит, что не смогли прочитать строку exit, что честно говоря очень странно, так как этот текст в подпроцессы пингов не передается. Код отвечающий за завершении всех подпроцессов ниже. Думаю, что это какая-то фича Дебиан, а как ее можно обойти нужно подумать.

    def exit_program(ip_in_monitoring_dict: dict) -> None:
    
        if len(ip_in_monitoring_dict):
            for active_popen in ip_in_monitoring_dict.values():
                active_popen.kill()
        print("The program will be terminated in 5 seconds.\n")
        time.sleep(4)
        print("Bye...\n")
        time.sleep(1)
        sys.exit()
  • Требуемый уровень знания для работы Juniour Python Developer?

    @ArtiomK Автор вопроса
    fdroid, судя по ошибке машина не понимает f строку, подозреваю, что если заменить в коде sys.stderr.write(f"{ip} session crushed.\n\n") на sys.stderr.write("{} session crushed.\n\n".format(ip)) ошибка скорее всего уйдет.

    Для запуска подпроцесса (ip сессия) используется такая команда subprocess.Popen(["python3", "pingsubprocess.py", ip, interval], stdout=subprocess.DEVNULL), то есть в python3 не указывается конкретная версия питона и будет использоваться 3 питон, который используется на машине по умолчанию, несмотря на то, что main ранее был запущен другой версией.

    elif sys.platform == 'linux':
                    ip_in_monitoring_dict[ip] = subprocess.Popen(["python3", "pingsubprocess.py", ip, interval],
                                                                 stdout=subprocess.DEVNULL)
  • Требуемый уровень знания для работы Juniour Python Developer?

    @ArtiomK Автор вопроса
    fdroid, Подтверждение о восстановление связи могло не прийти по следующей причине: алгоритм оповещения следующий - если было четыре неудачных пинга подряд, то даем аларм о падении, что адрес не доступен, далее должно быть 10 удачных пингов подряд, чтобы был аларм о восстановлении, то есть в случае 180 секунд, течение 30 минут ни один пинг не должен потеряться. Команда пинг, если пакеты теряются, сама по себе игнорирует интервал пингов и шлет пинги примерно раз 4 секунды, в случае удачных пингов следует интервалу.

    Я внес изменения в код, что если был аларм о падении, будет интервал пинга 2 секунды, пока не будет выполнено условие о восстановлении 10 удачных пингов подряд, далее опять возвращаемся к заданному интервалу.

    Добавил код, чтобы в show показывался интервал.
    https://github.com/ArtyomKozyrev1989/ICMP_Ping_Mon...

    Чтобы в сообщениях отображался хост можно пойти двумя путями, можно усложнять команду add будет что-то вроде add 1.1.1.1 10 myhostname - это сложный вариант, простой вариант - если есть днс можно использовать библиотеку socket, socket.gethostbyaddr('8.8.8.8') из результата можно взять имя хоста ('google-public-dns-a.google.com', [], ['8.8.8.8']), однако если днс нет, или он адрес не знает или днс не доступен будет выдавать ошибку с красивым названием herror: [Errno 11004] host not found, при получении которой можно будет писать пустую строку или no_host_name.

    У меня на данный момент вообще есть желание приделать к программе базу sql lite, и хранить там информацию по настройкам сессии (сейчас для этого файл IPLIST.py), она легкая, хранится в виде двух файликов - схема таблиц базы и сама база (вместе будет от 13кбайт). Тогда можно будет больше персонализировать сессии мониторинга, добавить еще что-то кроме адреса, интервала, с файлом можно сделать тоже самое (так как пользователь программы один, а не несколько), но его сложнее парсить, в случае базы - все из коробки.

    SQL LITE не требует остановка, она идет сразу вместе/внутри Питона.
  • Требуемый уровень знания для работы Juniour Python Developer?

    @ArtiomK Автор вопроса
    fdroid, добавил возможность задать интервал пинга отдельно для каждого узла. Если закрыли программу и хотите восстановить выборочно адреса с теми интервалами, которые были, запускаем команду import. В show показывает, только список адресов без интервала, если нужно, думаю можно сделать. Программу потестировал на добавление, импорт адресов, вроде бы не вылетает ничего, временная ветка:

    https://github.com/ArtyomKozyrev1989/ICMP_Ping_Mon...

    По представлению не по айпи следующее, поскольку программа строится вокруг консольной программы пинг, то на самом деле все равно, что добавлять адрес или доменное имя, если имя не удается разрешить днс, то пинг считается провальным. Так что, можно просто убрать проверку ввода на верность айпи и можно будет вводить доменные имена, в оповещении будет или доменное или айпи, в зависимости от ввода. Если так нормально будет, уберу проверку на то, что ввод айпи адрес.
  • Требуемый уровень знания для работы Juniour Python Developer?

    @ArtiomK Автор вопроса
    fdroid, выбор режима записи логов реализован, если есть возможность помигайте пожалуйста каким-то ненужным айпи адресом, я смотрел на 3.3.3.3, который часто падает. Также можно добавлять адреса в разных режимах лога, например добавили два айпи в кратком, захотели потом 3 в детальном, повторяете команду setup и в итоге будет 2 в кратком, 3 полном - так получается, потому что при начале каждой новой айпи сессии читается файл settings.py

    Пока сделал как отдельную ветвь проекта, потом объединю, как буду уверен в надежности кода:

    https://github.com/ArtyomKozyrev1989/ICMP_Ping_Mon...

    По прописыванию интервалов пинга для для каждой сессии сделаю на днях (в зависимости от загрузки на работе), там нужно быть внимательным, так как эта команда и данные из нее много где участвуют. Вспомнил например, что есть еще команда import, которая реанимирует все сессии, там тоже нужно интервалы пингов нужно будет в файл писать в придачу к айпи.
  • Требуемый уровень знания для работы Juniour Python Developer?

    @ArtiomK Автор вопроса
    fdroid, мне нравится версия 3.6, потому что там есть f строки, в более ранних версиях их нет (если очень нужны версии ниже 3.5 вообщем-то можно даунгрейд сделать, строки станут страшнее и толще просто, я надеялся что все Линуксы просто к 3.6 и старше придут со временем), по поводу 2 семейства питона, то там поддержка до 2020 года, хотя могут и продлить, поэтому, людям без работы разработчиком, как я, его смысла учить особо нет уже. Ну может с flask что-то напишу с базой данных, появятся желающие хотя бы на собеседование позвать =)

    Питон не хочет работать на FreeBSD, потому что по его классификации она отдельная ОС, попробую установить дома на виртуалку, и написать вариант для него, там разница в команде пинг и коде результата, доработка будет либо небольшой, либо нереализуемой. У меня вопрос, почему на Ubuntu 16 не пошло, не верится что там какая-то уникальная кодировка символов =(
    https://docs.python.org/3/library/sys.html (кусок про sys.platform)

    Настройки интервала могу сделать как глобальную настройку для всех новых подпроцессов (айпи адресов), что проще написать, либо прописывать для каждого, что сложнее, во втором варианте будет что-то вроде "add 1.1.1.1 4". Про запись логов, думаю попробовать дать пользователю выбор при первом старте программы, так как мне например нужны подробные логи - оборудование управляется другими товарищами, а без пингов они не верят, что связи не было в таком-то интервале.
  • Требуемый уровень знания для работы Juniour Python Developer?

    @ArtiomK Автор вопроса
    fdroid, есть предположение, что почему-то не понравился знак больше-меньше >, попробуйте его удалить из файла main.py строка command = input("CLI>: "), если не заработает, то удалить еще пару символов из кавычек "CLI>: ", последний вариант будет command = input() , там тогда кодировка уже точно играть не будет.
  • Требуемый уровень знания для работы Juniour Python Developer?

    @ArtiomK Автор вопроса
    fdroid, нашлось время, чтобы переосмыслить проект, теперь работает на Unix, протестировано на VM Ubuntu 18.04, требуется Python 3.6

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

    https://github.com/ArtyomKozyrev1989/ICMP_Ping_Mon...
  • Какая сейчас ставка у верстальщиков?

    @ArtiomK
    Kotobotov А можно резюме закинуть в такие фирмы, я вот хочу работу на питониста сменить, никто даже общаться не хочет, хотя питоном пользуюсь на работе, и работаю вроде инженером, а не гитаристом например? Живу рядом с г.Москва, ежедневно туда езжу на работу.
  • Требуемый уровень знания для работы Juniour Python Developer?

    @ArtiomK Автор вопроса
    Roman Kitaev, согласен, у нас любое определение может означать, что угодно, особенно если hr содрал требования откуда-то, а по факту все вообще другое. На hh fullstack, как я понял, зовут разработчика для web - html, css, javascript + python/perl/php + sql база какая-то вроде mysql. Причем asp.net почему то asp.net разрабочик, а не fullstack.
  • Требуемый уровень знания для работы Juniour Python Developer?

    @ArtiomK Автор вопроса
    fdroid, можно попробовать сделать. Openwrt можно как виртуальную машину сделать на vmware, чтобы посмотреть что он из себя представляет?

    Я знаю что у циско есть IP SLA функция похожая на мою программу, только она вроде не отправляет письма, а только пишет логи, у меня логи пишутся в текстовые файлы, живущие в той же директории что и файл скрипта.
  • Требуемый уровень знания для работы Juniour Python Developer?

    @ArtiomK Автор вопроса
    Спасибо большое за хороший совет.
  • Требуемый уровень знания для работы Juniour Python Developer?

    @ArtiomK Автор вопроса
    Спасибо. Вакансии смотрел, но думаю за спрос деньги не берут =)
  • Требуемый уровень знания для работы Juniour Python Developer?

    @ArtiomK Автор вопроса
    Ну вот у меня тоже сложилось такое впечатление что 85% вакансий Python разработчиков на hh это full stack, 10% data science, ну и 5% каких-то еще...
  • Как сделать так, чтобы брало елементов со списка в цикле?

    @ArtiomK
    Я и вопрос неправильно прочитал, теперь вроде правильно:

    def sum_of_three_shift(mylist):
        result=[]
        value=0
        k=0
        t=0
        while(t< len(mylist)-3):
            for i in range(t,len(mylist)):
                value+=mylist[i]
                k+=1
                if k==3:
                    result.append(value/3)
                    value=0
                    k=0
                    t=t+1
                    break
            
        return result


    sum_of_three_shift(mylist)