Device
This commit is contained in:
138
backend/modules/device/service.py
Normal file
138
backend/modules/device/service.py
Normal file
@@ -0,0 +1,138 @@
|
||||
from modules.device.repository import (
|
||||
find_all_devices,
|
||||
find_device_by_id,
|
||||
find_device_by_name,
|
||||
find_device_by_ip,
|
||||
insert_device,
|
||||
update_device_db,
|
||||
delete_device_db
|
||||
)
|
||||
from modules.device.exceptions import (
|
||||
DeviceNotFoundException,
|
||||
DeviceAlreadyExistsException,
|
||||
DeviceIPAlreadyExistsException
|
||||
)
|
||||
from modules.device_type.repository import find_device_type_by_id
|
||||
from modules.device_type.exceptions import DeviceTypeNotFoundException
|
||||
from scheduler.scheduler import (
|
||||
add_device_monitoring_job,
|
||||
remove_device_monitoring_job,
|
||||
reschedule_device_monitoring_job
|
||||
)
|
||||
|
||||
|
||||
def get_devices_service():
|
||||
"""Lấy danh sách tất cả thiết bị"""
|
||||
return find_all_devices()
|
||||
|
||||
|
||||
def get_device_by_id_service(device_id):
|
||||
"""
|
||||
Lấy thông tin chi tiết một thiết bị theo ID.
|
||||
Ném lỗi DeviceNotFoundException nếu không tồn tại.
|
||||
"""
|
||||
device = find_device_by_id(device_id)
|
||||
if not device:
|
||||
raise DeviceNotFoundException(device_id)
|
||||
return device
|
||||
|
||||
|
||||
def create_device_service(data):
|
||||
"""
|
||||
Tạo mới một thiết bị mạng.
|
||||
Các bước xử lý:
|
||||
1. Kiểm tra loại thiết bị (device_type_id) có tồn tại trong hệ thống hay không.
|
||||
2. Kiểm tra trùng lặp tên thiết bị (case-insensitive).
|
||||
3. Kiểm tra trùng lặp địa chỉ IP.
|
||||
4. Thêm thiết bị và cấu hình mặc định (monitor & alert) vào database.
|
||||
5. Đăng ký công việc giám sát vào Scheduler nền.
|
||||
"""
|
||||
# 1. Kiểm tra DeviceType
|
||||
device_type = find_device_type_by_id(data["device_type_id"])
|
||||
if not device_type:
|
||||
raise DeviceTypeNotFoundException(data["device_type_id"])
|
||||
|
||||
# 2. Kiểm tra trùng tên
|
||||
existing_name = find_device_by_name(data["name"])
|
||||
if existing_name:
|
||||
raise DeviceAlreadyExistsException(data["name"])
|
||||
|
||||
# 3. Kiểm tra trùng IP
|
||||
existing_ip = find_device_by_ip(data["ip_address"])
|
||||
if existing_ip:
|
||||
raise DeviceIPAlreadyExistsException(data["ip_address"])
|
||||
|
||||
# 4. Insert DB
|
||||
new_device = insert_device(data)
|
||||
|
||||
# 5. Kích hoạt Job giám sát trên Background Scheduler
|
||||
# Truyền kèm thông tin cấu hình mặc định (enable_ping=True, v.v...)
|
||||
add_device_monitoring_job(new_device["id"], None)
|
||||
|
||||
return new_device
|
||||
|
||||
|
||||
def update_device_service(device_id, data):
|
||||
"""
|
||||
Cập nhật thông tin thiết bị mạng.
|
||||
Các bước xử lý:
|
||||
1. Kiểm tra sự tồn tại của thiết bị.
|
||||
2. Nếu cập nhật device_type_id -> kiểm tra xem có tồn tại không.
|
||||
3. Nếu cập nhật name -> kiểm tra xem có bị trùng với thiết bị khác không.
|
||||
4. Nếu cập nhật ip_address -> kiểm tra xem có bị trùng với thiết bị khác không.
|
||||
5. Cập nhật dữ liệu vào DB.
|
||||
6. Cập nhật lại cấu hình giám sát trong Scheduler.
|
||||
"""
|
||||
# 1. Kiểm tra thiết bị có tồn tại hay không
|
||||
existing = find_device_by_id(device_id)
|
||||
if not existing:
|
||||
raise DeviceNotFoundException(device_id)
|
||||
|
||||
# 2. Kiểm tra loại thiết bị nếu có truyền vào
|
||||
new_device_type_id = data.get("device_type_id")
|
||||
if new_device_type_id and new_device_type_id != existing["device_type_id"]:
|
||||
device_type = find_device_type_by_id(new_device_type_id)
|
||||
if not device_type:
|
||||
raise DeviceTypeNotFoundException(new_device_type_id)
|
||||
|
||||
# 3. Kiểm tra trùng tên khi tên bị thay đổi
|
||||
new_name = data.get("name")
|
||||
if new_name and new_name.lower() != existing["name"].lower():
|
||||
conflict_name = find_device_by_name(new_name)
|
||||
if conflict_name and conflict_name["id"] != device_id:
|
||||
raise DeviceAlreadyExistsException(new_name)
|
||||
|
||||
# 4. Kiểm tra trùng IP khi IP bị thay đổi
|
||||
new_ip = data.get("ip_address")
|
||||
if new_ip and new_ip != existing["ip_address"]:
|
||||
conflict_ip = find_device_by_ip(new_ip)
|
||||
if conflict_ip and conflict_ip["id"] != device_id:
|
||||
raise DeviceIPAlreadyExistsException(new_ip)
|
||||
|
||||
# 5. Cập nhật DB
|
||||
updated_device = update_device_db(device_id, data)
|
||||
|
||||
# 6. Cập nhật lại thông tin giám sát trong Scheduler
|
||||
reschedule_device_monitoring_job(device_id, None)
|
||||
|
||||
return updated_device
|
||||
|
||||
|
||||
def delete_device_service(device_id):
|
||||
"""
|
||||
Xóa thiết bị mạng.
|
||||
Các bước xử lý:
|
||||
1. Kiểm tra sự tồn tại của thiết bị.
|
||||
2. Thực hiện xóa khỏi DB (tự động xóa cấu hình và lịch sử liên quan).
|
||||
3. Hủy bỏ job giám sát khỏi Scheduler.
|
||||
"""
|
||||
# 1. Kiểm tra tồn tại
|
||||
existing = find_device_by_id(device_id)
|
||||
if not existing:
|
||||
raise DeviceNotFoundException(device_id)
|
||||
|
||||
# 2. Xóa khỏi DB
|
||||
delete_device_db(device_id)
|
||||
|
||||
# 3. Hủy công việc giám sát trong Scheduler
|
||||
remove_device_monitoring_job(device_id)
|
||||
Reference in New Issue
Block a user