Задать вопрос
  • Возможно ли в принципе включить 144 гц на встроенном в проц 2400G видео?

    fdroid
    @fdroid
    blizzard, естественно, после установки родного драйвера монитора вы перезагрузили комп? А вообще - тогда фиг знает, я сделал предположение, возможно, неправильное.
  • Возможно ли в принципе включить 144 гц на встроенном в проц 2400G видео?

    fdroid
    @fdroid
    blizzard, а ничего, что у вас Generic upnp monitor? Драйвер для монитора установите нормальный.
  • Что мне делать если я хочу стать разработчиком игр но не чего по этому не знаю?

    fdroid
    @fdroid
    Евгений Шатунов,
    А дальше вот тебе дорожная карта

    Перешёл по ссылке, не нашёл ни одной дорожной карты.
    Скажите, а вы точно изучили родной язык и чужеземный английский?
  • Как приблизить Linux Ubuntu до Windows?

    fdroid
    @fdroid
    Достойного аналога MS Office в природе не существует

    А вот 100% совместимый есть - OnlyOffice. По крайней мере, по моему опыту, при открытии и редактировании МSO-файлов никаких глюков, артефактов, поехавшей вёрстки, и прочего, что присуще тому же LibreOffice, нет.
  • Почему не заходит в BootROM menu, коммутатор Huawei?

    fdroid
    @fdroid
    Павел, а что если... через Hyperterminal или линуксовый Minicom? У меня была вредная железка (марки D-Link), с которой удалось сконнектиться только через Hyperterminal. А Minicom - просто как вариант.
  • Какое WiFi оборудование взять для офиса? Или что не так с Mikrotik?

    fdroid
    @fdroid
    Да что вы такое говорите?!! Как же они без вайфайчика-то! Сплошь и рядом люди хотят по-быстренькому организовать вайфайчик, лишь бы провода не тянуть, искренне считая, что вайфайчик - это тот же провод, только без проводов, и вообще - стильно, модно, молодёжно, а эти староверы про какую-то там витую пару бубнят, тьфу на них!
  • Верна ли идеологически схема "звезда"?

    fdroid
    @fdroid Автор вопроса
    Правильно ли я понимаю, что в качестве шлюза для рабочих станций используют L3-коммутаторы?
  • Требуемый уровень знания для работы Juniour Python Developer?

    fdroid
    @fdroid
    ArtiomK, здравствуйте) По первым тестам всё отлично! Программа завелась на Debian 8 с базовым Python 3.4.2, хосты добавились, ошибок нет, но в той сети у меня пока нет возможности тестово повыключать хосты, поэтому просто добавил нужные в мониторинг. А вот в сети, где у меня есть тестовая 18.04 и хосты, которые можно "подёргать" для тестов, всё работает как надо. Спасибо за учтённые пожелания и за отличный инструмент, который я точно буду внедрять в продакшн в своих сетях) Для меня работа с вами была очень интересным опытом. Мониторинг определённо готов к использованию и я считаю, что полезным инструментом здорово было бы поделиться с IT-сообществом, т.е. предлагаю вам подумать о том, чтобы опубликовать материал на хабре) Собственно, именно то, что я хотел от программы - лёгкий, лаконичный, обладающий всем необходимым базовым функционалом, инструмент - всё есть. У меня сейчас небольшой завал по работе, но по мере освобождения времени хочу более плотно потестировать на разных ОС - CentOS, Alpine Linux, железном роутере с OpenWRT (где-то должен быть в запасе, если не ушёл), Synology (на котором я не тестировал из-за версии Python, но сейчас этой преграды нет).
  • Требуемый уровень знания для работы Juniour Python Developer?

    fdroid
    @fdroid
    ArtiomK, я правильно понял, что нужно замену сделать в pingsubproccess.py? Результат:
    CLI>: add 10.10.40.10 180
    10.10.40.10 was added to monitoring
    
    CLI>:   File "pingsubprocess.py", line 68
        sys.stderr.write(f"{ip} is not reachable.\n\n")
                                                     ^
    SyntaxError: invalid syntax
    
    
    10.10.40.10 is removed from monitoring
    
    CLI>:

    Это на Debian 8, запуск через python3.7 main.py. После выхода через exit ещё вот что отобразилось:
    CLI>: exit
    Traceback (most recent call last):
      File "main.py", line 34, in <module>
        main()
      File "main.py", line 21, in main
        command = input("CLI>: ")
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd1 in position 2: invalid continuation byte

    Полный листинг pingsubproccess.py, который у меня сейчас после замены:
    spoiler
    import threading
    import sys
    import mail_activity
    import ping_op
    from time_lib import MyTime
    
    
    def upload_error_notification_msg():
        try:
            with open(file="error_notification.txt", mode='r') as f:
                temporary = f.read()
                return temporary
        except FileNotFoundError:
            sys.stderr.write("The file error_notification.txt does not exist or corrupted. Create the file.\n\n")
            sys.stderr.flush()
            return None
    
    
    def upload_recovery_notification_msg():
        try:
            with open(file="recovery_notification.txt", mode='r') as f:
                temporary = f.read()
                return temporary
        except FileNotFoundError:
            sys.stderr.write("The file recovery_notification.txt does not exist or corrupted. Create the file.\n\n")
            sys.stderr.flush()
            return None
    
    
    def upload_smtp_settings():
        settings = []
        try:
            with open(file="settings.py", mode="r") as f:
                for i in f:
                    settings.append(i.strip("\\\n"))
        except FileNotFoundError:
            sys.stderr.write("Settings file does not exist or corrupted.\n\n")
            sys.stderr.write("Delete the file if it exists and do setup command\n\n")
            sys.stderr.write("{} session crushed.\n\n".format(ip))
            sys.stderr.write("To restore session to the ip, add it again!\n")
            sys.stderr.flush()
            sys.exit()
        return settings
    
    
    def upload_recipients_list():
        recipients = []
        try:
            with open(file="email_recipient_list.py", mode="r") as f:
                for i in f:
                    recipients.append(i.strip("\\\n"))
        except FileNotFoundError:
            sys.stderr.write("email_recipient_list.py file does not exist or corrupted.\n\n")
            sys.stderr.write("Delete the file if it exists and do recipients command\n\n")
            sys.stderr.write("{} session crushed.\n\n".format(ip))
            sys.stderr.write("To restore session to the ip, add it again!\n")
            sys.stderr.flush()
            sys.exit()
        return recipients
    
    
    def notificator(pingFailedLetterWasSent, negativePingsInRow, positivePingsInRow,
                    email_sender_box, email_recepient_list, error_mail_message, recovery_mail_message,
                    email_sender_password, smtp_settings, smtp_port, mode):
    
        if negativePingsInRow == 4 and not pingFailedLetterWasSent:
            pingFailedLetterWasSent = True
            sys.stderr.write(f"{ip} is not reachable.\n\n")
            sys.stderr.flush()
    
            if mode == "short":
                ping_op.write_ping_result_to_file_short_version(pingFailedLetterWasSent, ip)
    
            negativeLetterThread = threading.Thread(target=mail_activity.send_negative_mail,
                                                    args=(f"{ip}", email_sender_box,
                                                          email_recepient_list,
                                                          error_mail_message,
                                                          email_sender_password,
                                                          smtp_settings,
                                                          smtp_port
                                                          ),)
            negativeLetterThread.start()
            negativeLetterThread.join()
    
        if positivePingsInRow == 10 and pingFailedLetterWasSent:
            pingFailedLetterWasSent = False
            sys.stderr.write(f"{ip} is  reachable again now.\n\n")
            sys.stderr.flush()
    
            if mode == "short":
                ping_op.write_ping_result_to_file_short_version(pingFailedLetterWasSent, ip)
    
            positiveLetterThread = threading.Thread(target=mail_activity.send_positive_mail,
                                                    args=(f"{ip}", email_sender_box,
                                                          email_recepient_list,
                                                          recovery_mail_message,
                                                          email_sender_password,
                                                          smtp_settings,
                                                          smtp_port
                                                          ),)
            positiveLetterThread.start()
            positiveLetterThread.join()
        return pingFailedLetterWasSent
    
    
    def main(ip, interval):
        error_mail_message = upload_error_notification_msg()
        recovery_mail_message = upload_recovery_notification_msg()
        if error_mail_message is None or recovery_mail_message is None:
            sys.stderr.write(f"{ip} session crushed.\n")
            sys.stderr.flush()
            sys.exit()
    
        settings = upload_smtp_settings()
    
        email_recepient_list = upload_recipients_list()
    
        email_sender_box = settings[0]
        email_sender_password = settings[1]
        smtp_settings = settings[2]
        smtp_port = settings[3]
        log_mode = settings[4]
    
        pingFailedLetterWasSent = False
        positivePingsInRow = 0
        negativePingsInRow = 0
        if log_mode == "long":
            positivePingsThisHourCounterC = 0
            negativePingsThisHourCounterC = 0
            lastAttemptTime = MyTime()
            previousFilePath = ping_op.write_ping_result_to_file(ip=ip, pingresult=None)
        while (True):
            if not pingFailedLetterWasSent:
                pingResult = ping_op.ping(ip, interval)
            else:
                pingResult = ping_op.ping(ip, 2)
            if log_mode == "long":
                CurrentFilePath = ping_op.write_ping_result_to_file(pingResult, ip)
                currentTime = MyTime()
    
                if currentTime.compare_dates(lastAttemptTime):
                    ping_op.write_ping_stats_to_file(ip, positivePingsThisHourCounterC,
                                                     negativePingsThisHourCounterC, previousFilePath)
                    previousFilePath = CurrentFilePath
                    lastAttemptTime = currentTime
                    positivePingsThisHourCounterC = 0
                    negativePingsThisHourCounterC = 0
    
                positivePingsThisHourCounterC = positivePingsThisHourCounterC + pingResult[0]
                negativePingsThisHourCounterC = negativePingsThisHourCounterC + pingResult[1]
    
            if positivePingsInRow < positivePingsInRow + pingResult[0]:
                positivePingsInRow = positivePingsInRow + pingResult[0]
                negativePingsInRow = 0
            if negativePingsInRow < negativePingsInRow + pingResult[1]:
                positivePingsInRow = 0
                negativePingsInRow = negativePingsInRow + pingResult[1]
    
            pingFailedLetterWasSent = notificator(pingFailedLetterWasSent, negativePingsInRow, positivePingsInRow,
                                                  email_sender_box, email_recepient_list, error_mail_message,
                                                  recovery_mail_message, email_sender_password, smtp_settings,
                                                       smtp_port, log_mode)
    
    
    if __name__ == '__main__':
        ip = str(sys.argv[1])
        interval = int(sys.argv[2])
        main(ip, interval)

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

    fdroid
    @fdroid
    ArtiomK, а тем временем, решил в тестовом режиме внедрить мониторинг в эксплуатацию. В роли условной кофемолки у меня в одной из сетей есть типа-сервер самосбор на базе Celeron E1500 (2 ядра 2.2Ghz) c 1Gb RAM DDR2 и IDE HDD 120Gb, который используется для всяких вспомогательных целей. Работает на Debian 8, в котором максимально доступная версия Python из дебиановского репо - 3.4.2. Ок, установил из сырцов (не стал связываться со сторонними репо) версию 3.7.2 main.py запускается, setup проходит, но при добавлении хоста для мониторинга старая знакомая ошибка:
    CLI>: add 10.10.40.10 180
    10.10.40.10 was added to monitoring
    
    CLI>:   File "pingsubprocess.py", line 39
        sys.stderr.write(f"{ip} session crushed.\n\n")
                                                    ^
    SyntaxError: invalid syntax
    
    
    10.10.40.10 is removed from monitoring
    
    CLI>:

    Проверил версию Python на тестовой 18.04, там по умолчанию 3.6.7, установил её же на машину, попробовал запустить мониторинг этой версией, получил ту же ошибку при добавлении хоста. В чём прикол - не понимаю, с учётом того, что на тестовой 18.04 всё работает как часы.

    PS При запуске main.py явно указывал какой версий Python его запускать.
  • Возможно ли соединяться с сервером NextCloud по локальной сети?

    fdroid
    @fdroid
    На роутере настраиваете проброс портов с белого внешнего IP на внутренний IP сервера, и всё. Из локальной сети сервер будет доступен по локальному IP, из интернета - по внешнему. Не нужно собирать какую-то дичь с двумя сетевыми картами и двумя роутерами.
  • Требуемый уровень знания для работы Juniour Python Developer?

    fdroid
    @fdroid
    ArtiomK, вдумчиво часа два рандомно включал и выключал тестовый хост при настройке интервала пинга 180 секунд - программа отрабатывает безотказно, уведомления поступают.
    Чтобы в сообщениях отображался хост можно пойти двумя путями, можно усложнять команду add будет что-то вроде add 1.1.1.1 10 myhostname - это сложный вариант

    вот именно такой вариант мне и нравится больше всего, т.е. простой и понятный синтаксис добавления хоста в мониторинг. Имхо, привязки к наличию или отсутствию локального DNS-сервера не нужно.
    У меня на данный момент вообще есть желание приделать к программе базу sql lite

    почему-то я так и думал, что рано или поздно буквы sql в том или ином виде начнут фигурировать) По-моему, SQL Lite - хороший вариант для программы.
  • Кулер для Intel i5 обязателен?

    fdroid
    @fdroid
    Вы уверены, что этот i5 подойдёт к вашей материнской плате?
  • Требуемый уровень знания для работы Juniour Python Developer?

    fdroid
    @fdroid
    добавил возможность задать интервал пинга отдельно для каждого узла.

    обнаружил то ли баг, то ли я что-то не так делаю. При выставлении интервала 180 секунд, нет оповещения о reachable при появлении хоста в сети. Т.е. о not reachable уведомление приходит и в CLI отображается, а reachable не появляется информация ни в почте ни в CLI. При выставлении интервала 60 секунд всё работает. Возможно, связано с 3-значными числами что-то? Где-то что-то похожее мне встречалось, деталей не помню за давностью, но там было связано с прошивкой коммутатора.
    В show показывает, только список адресов без интервала, если нужно, думаю можно сделать.

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

    да, вполне вариант, действительно можно пинговать доменное имя, но это если есть локальный DNS-сервер. Поэтому, я считаю, вариант пинга по IP наиболее универсальным, но возможность отображения хоста по условному имени будет наглядной. Правда, я не программист, как уже не раз говорил)) поэтому не представляю как это реализуется на уровне кода и возможно ли без полного переписывания всего и вся. Как админ, впрочем, сталкивался с вещами, когда, вроде бы, всё работает, остаётся добавить маленький пунктик, и этот пунктик тянет за собой чуть ли не переделку всей инфраструктуры))
  • Правилен ли список немаршрутизируемых в интернете сетей?

    fdroid
    @fdroid Автор вопроса
    vreitech, можно добавить в список, я правильно понял?
  • Требуемый уровень знания для работы Juniour Python Developer?

    fdroid
    @fdroid
    ArtiomK, только добрался до тестирования. Отлично работает, short log mode - именно то, что мне нужно) Ещё вот думал чего не хватает, и понял - возможность обозначить хост не только по IP, но и какое-то имя ему задать, чтобы было наглядней представление того что отвалилось, а не морщить мозг вспоминая что скрывается за IP, алерт о котором пришёл на почту)