Рубрики
Без рубрики

Монитор свой интернет с Python

Я живу в Германии, и Германия известна своим разнообразием. Люди разнообразны, культура погружается … Теги с Python, учебником, начинающим.

Я живу в Германии, и Германия известна своим разнообразием. Люди разнообразны, культура разнообразна, а качество интернет-соединений одинаково как разнообразно. Разговаривая с моим интернет-провайдером, который настаивал, что у меня нет проблем с моим интернет-соединением, я решил написать программу для мониторинга моей скорости загрузки и загрузки.

Начиная

Мы будем использовать две прохладные пакеты в Python а именно скорость и matplotlib. . скорость предоставит нам информацию о нашем интернет-соединении и Матплотлиб позволит нам генерировать графики на основе этой информации.

Будь вы в Виртуальная среда Или не использование одного вам придется установить Speedtest и MatPlotlib.

pip install matplotlib
pip install speedtest-cli

Мы также будем использовать несколько встроенных пакетов Python datetime и CSV. . CSV (или разделенные запятыми значениями) являются быстрым способом хранения данных. Мы будем использовать это, чтобы сохранить информацию о наших скоростях в Интернете, а затем, используя matplotlib, чтобы сделать эту информацию визуально.

Сбор данных

Создайте файл Python под названием мониторинг

touch monitor.py

и давайте поместим следующий код на внутренней стороне

import speedtest
s = speedtest.Speedtest()
while True:
    print(s.download(), s.upload())

И мы должны быть встречены следующим выходом перед ударом Ctrl + C Выйти из этой бесконечной петли.

75020309.22943133 24381170.373616524
105192450.00822952 40653433.153288215

Поэтому, создав новый экземпляр SpeedTest AS S и проверки скорости загрузки и загрузки, нам дают скорость загрузки и загрузки в битах в секунду. Чтобы преобразовать это в Megabits в секунду (MB/S), мы можем сделать следующее, чтобы включить время теста:

import speedtest
import datetime
s = speedtest.Speedtest()
while True:
  time = datetime.datetime.now().strftime("%H:%M:%S")
  downspeed = round((round(s.download()) / 1048576), 2)
  upspeed = round((round(s.upload()) / 1048576), 2)
  print(f"time: {time}, downspeed: {downspeed} Mb/s, upspeed: {upspeed} Mb/s")

который дает:

time: 12:44:15, downspeed: 95.04 Mb/s, upspeed: 32.85 Mb/s
time: 12:44:35, downspeed: 99.46 Mb/s, upspeed: 38.76 Mb/s
time: 12:44:56, downspeed: 100.59 Mb/s, upspeed: 38.94 Mb/s

Теперь мы будем двигаться дальше, чтобы записать это в файле CSV. CSV – это большие текстовые файлы, которые значения, разделенные запятыми. Вот пример одного из моих:

time,downspeed,upspeed
12:17:01,100.05,38.28
12:17:21,100.53,37.85
12:17:42,74.87,25.92

Начнем с заголовка ROW, а затем с расщеплением информации. Мы можем думать об этом, как лист Excel:

Чтобы записать в файл CSV в Python, нам нужно импортировать пакет CSV и «Открыть» файл CSV (если он не существует, это не будет создавать его).

import speedtest
import datetime
import csv

s = speedtest.Speedtest()

with open('test.csv', mode='w') as speedcsv:
    csv_writer = csv.DictWriter(speedcsv,
                                fieldnames=['time', 'downspeed', 'upspeed'])
    csv_writer.writeheader()
    while True:
        time = datetime.datetime.now().strftime("%H:%M:%S")
        downspeed = round((round(s.download()) / 1048576), 2)
        upspeed = round((round(s.upload()) / 1048576), 2)
        csv_writer.writerow({
            'time': time,
            'downspeed': downspeed,
            "upspeed": upspeed
        })

Поэтому, хотя вы позволяете этот код пройти 4-5 минут, мы можем обсудить, что происходит. Линия 7 с открытым staturelly создает файл CSV с именем test.csv с заголовками Имя , снизить скорость и Upspeed и писает их в CSV. Тогда цикл начинается и каждый раз, когда SpeedTest проводится тест, он записывает новую строку в CSV со временем, скорость загрузки и скорости загрузки мы указали ранее. Так что давайте пойдем и посмотрим на это сейчас.

time,downspeed,upspeed
12:51:16,99.29,38.66
12:51:37,100.67,38.79
12:51:57,99.7,38.79
12:52:17,92.89,31.99
12:52:38,99.4,38.96

Cool Теперь мы собираем информацию и храним ее в CSV. Вы могли бы сделать всевозможные умные вещи с именем файла, как имя ИТ сегодняшняя дата использования datetime Но на данный момент я буду держать это в качестве теста.

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

Визуализация данных

Давайте сделаем другой файл Python для создания графика нашего подключения к Интернету. Это где мы будем использовать matplotlib.

touch make_graph.py
import matplotlib.pyplot as plt
import csv
import matplotlib.ticker as ticker
times = []
download = []
upload = []

Самый простой способ создать график, используя массив. Для заполнения наших массивов нам придется повторять наш новый файл CSV

with open('test.csv', 'r') as csvfile:
    plots = csv.reader(csvfile, delimiter=',')
    next(csvfile)
    for row in plots:
        times.append(str(row[0]))
        download.append(float(row[1]))
        upload.append(float(row[2]))

print(times, "\n", download, "\n", upload)
['12:51:16', '12:51:37', '12:51:57', '12:52:17', '12:52:38']
 [99.29, 100.67, 99.7, 92.89, 99.4]
 [38.66, 38.79, 38.79, 31.99, 38.96]

Так что теперь мы разбираем наши данные! Следующая (CSVFile) по существу пропускает ряд заголовков (которые были только для нашей выгоды, а не Python). Теперь мы продолжаем использовать MatPlotlib, на котором я без стандартов и экспертов. Их документация это обширный .

plt.figure(30, 30)
plt.plot(times, download, label='download', color='r')
plt.plot(times, upload, label='upload', color='b')
plt.xlabel('time')
plt.ylabel('speed in Mb/s')
plt.title("internet speed")
plt.legend()
plt.savefig('test_graph.jpg', bbox_inches='tight')

Этот код рассказывает MATPLOTLIB или PLT Чтобы создать фигуру с линиями, помеченными «загрузкой» и «загрузка», которая будет нанесена против их соответствующих массивов. Таким образом, для каждого элемента в загрузке и массиве времени на графике будет сделана знак на графике. Наконец, ось X и Y получают этикетки, и график сохраняется.

Потенциальные улучшения

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

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

@jsphwllng.

Оригинал: “https://dev.to/jsphwllng/monitor-your-internet-with-python-3pp8”