48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
import json
|
|
import uuid
|
|
from datetime import datetime
|
|
from pathlib import Path
|
|
from typing import Optional, Any
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
from kydcap.config import ReturnCodes
|
|
|
|
|
|
class KydcapCaptureMetadata(BaseModel):
|
|
# Required Fields
|
|
device_id: str
|
|
capture_id: uuid.UUID = Field(default_factory=lambda: str(uuid.uuid4()))
|
|
capture_date: str = Field(default_factory=lambda: datetime.now().strftime('%d-%m-%YT%H:%M:%S').lower())
|
|
|
|
# Statistics
|
|
start_time: str
|
|
stop_time: str
|
|
packet_count: Optional[int]
|
|
|
|
# Optional Fields
|
|
device_ip_address: Optional[str] = None
|
|
device_mac_address: Optional[str] = None
|
|
|
|
app: Optional[str] = None
|
|
app_version: Optional[str] = None
|
|
firmware_version: Optional[str] = None
|
|
|
|
def __init__(self, device_id: str, start_time: str, stop_time: str, /, **data: Any):
|
|
super().__init__(**data) # Pycharms orders
|
|
assert isinstance(device_id, str)
|
|
assert isinstance(start_time, str)
|
|
assert isinstance(stop_time, str)
|
|
self.device_id = device_id
|
|
self.start_time = start_time
|
|
self.stop_time = stop_time
|
|
|
|
def save_to_json(self, file_path: Path):
|
|
if file_path.is_file():
|
|
print(f"File {file_path} already exists, update instead.")
|
|
return ReturnCodes.FILE_ALREADY_EXISTS
|
|
metadata = self.model_dump_json(indent=2)
|
|
with file_path.open('w') as file:
|
|
json.dump(metadata, file)
|
|
return ReturnCodes.SUCCESS
|