Лабораторная работа по "Программированию"
Автор: Alexandr Yakunov • Май 6, 2019 • Лабораторная работа • 667 Слов (3 Страниц) • 449 Просмотры
Лабораторная работа №1.
Цель: Разработать программу, считывающую температуру процессора и выводящую её на экран.
Лабораторная работа №2.
Цель: разработать программу, отслеживающую входящий трафик и выводящую на экран предупреждение при превышении определённого значения.
Лабораторная работа №3.
Цель: Передать информацию о температуре ЦП и превышении входящего трафика на мобильное устройство.
Примечание: для решения этой задачи я воспользовался ботом для Telegram.
Примечание: так как эти три программы реализуются в одном коде, я принял решение не разбивать его и не копировать код несколько раз.
import psutil | |
import sys | |
from time import sleep, time | |
from botsender import send_warning | |
sleep_time = 1 # секунды | |
traffic_monitor_period = 60 # одна минута | |
traffic_monitor_threshold = 10**9 # один гигабайт в байтах | |
temperature_threshold = 50 | |
def do_main_program(): | |
""" | |
опрашивает сенсоры температуры и измеряет скаченный траффик | |
в случае превышения температуры отправляет предупреждение (пороги отправки берутся из характеристик сенсоров) | |
в случае превышения траффика загрузки отправляет сообщение о ддос атаке (порог - один гигабайт в минуту) | |
TODO: 'передавать id девайса который перегрелся' | |
""" | |
send_warning(type_of_message='starting', measure=-1) | |
initial_bytes_recv = psutil.net_io_counters().bytes_recv | |
initial_bytes_recv_time = time() | |
| |
while True: | |
temps = psutil.sensors_temperatures() | |
for name, entries in temps.items(): | |
for entry in entries : | |
if float(entry.current) >= float(temperature_threshold) and float(entry.current) < float(entry.critical): | |
device_name = entry.label or name | |
| |
send_warning('temperature_high', entry.current, name = device_name) | |
if float(entry.current) == float(entry.critical): | |
send_warning(type_of_message='temperature_critical', measure=entry.current) | |
if time()-initial_bytes_recv_time >= traffic_monitor_period: | |
traffic_delta = psutil.net_io_counters().bytes_recv- initial_bytes_recv | |
if traffic_delta >= traffic_monitor_threshold: | |
send_warning(type_of_message='traffic_overload', measure=traffic_delta) | |
initial_bytes_recv = psutil.net_io_counters().bytes_recv | |
initial_bytes_recv_time = time() | |
sleep(sleep_time) | |
do_main_program() |
...