init work on database

This commit is contained in:
Marek Wolan
2023-08-25 15:29:53 +01:00
parent 2dd191bf32
commit a9e969aa13
3 changed files with 61 additions and 0 deletions

View File

@@ -87,6 +87,14 @@ class FileSystemFileType(str, Enum):
GZ = 31
"Gzip compressed file."
# Database file types
MDF = 32
"MS SQL Server primary database file"
NDF = 33
"MS SQL Server secondary database file"
LDF = 34
"MS SQL Server transaction log"
file_type_sizes_KB = {
FileSystemFileType.UNKNOWN: 0,

View File

@@ -0,0 +1,41 @@
from primaite.simulator.file_system.file_system_file_type import FileSystemFileType
from primaite.simulator.network.hardware.base import Node
from primaite.simulator.system.services.service import Service
class DatabaseService(Service):
"""TODO."""
def __init__(self, parent_node: Node, **kwargs):
super().__init__(**kwargs)
self._setup_files_on_node()
def _setup_files_on_node(
self,
db_size: int = 1000,
use_secondary_db_file: bool = False,
secondary_db_size: int = 300,
folder_name: str = "database",
):
"""Set up files that are required by the database on the parent host.
:param db_size: Initial file size of the main database file, defaults to 1000
:type db_size: int, optional
:param use_secondary_db_file: Whether to use a secondary database file, defaults to False
:type use_secondary_db_file: bool, optional
:param secondary_db_size: Size of the secondary db file, defaults to None
:type secondary_db_size: int, optional
:param folder_name: Name of the folder which will be setup to hold the db files, defaults to "database"
:type folder_name: str, optional
"""
folder = self.parent.file_system.create_folder(folder_name)
self.parent.file_system.create_file("db_primary_store", db_size, FileSystemFileType.MDF, folder=folder)
self.parent.file_system.create_file("db_transaction_log", "1", FileSystemFileType.LDF, folder=folder)
if use_secondary_db_file:
self.parent.file_system.create_file(
"db_secondary_store", secondary_db_size, FileSystemFileType.NDF, folder=folder
)
# todo next:
# create session? (maybe not)
# add actions for setting service state to compromised? (probably definitely)

View File

@@ -2,6 +2,7 @@ from abc import abstractmethod
from enum import Enum
from typing import Any, Dict, List
from primaite.simulator.network.hardware.base import Node
from primaite.simulator.system.software import IOSoftware
@@ -32,6 +33,17 @@ class Service(IOSoftware):
operating_state: ServiceOperatingState
"The current operating state of the Service."
@abstractmethod
def __init__(self, parent_node: Node, **kwargs):
"""Create the service on a node.
:param parent_node: The node on which this service runs.
:type parent_node: Node
"""
super().__init__(**kwargs)
self.parent: Node = parent_node
self.parent.software_manager.add_service(self)
@abstractmethod
def describe_state(self) -> Dict:
"""