Add placeholder actions

This commit is contained in:
Marek Wolan
2023-09-19 11:24:42 +01:00
parent 77108634e8
commit a719389e05
3 changed files with 284 additions and 115 deletions

File diff suppressed because one or more lines are too long

View File

@@ -9,7 +9,7 @@ from typing import Dict, Optional
from prettytable import MARKDOWN, PrettyTable from prettytable import MARKDOWN, PrettyTable
from primaite import getLogger from primaite import getLogger
from primaite.simulator.core import SimComponent from primaite.simulator.core import Action, ActionManager, SimComponent
from primaite.simulator.file_system.file_type import FileType, get_file_type_from_extension from primaite.simulator.file_system.file_type import FileType, get_file_type_from_extension
from primaite.simulator.system.core.sys_log import SysLog from primaite.simulator.system.core.sys_log import SysLog
@@ -94,6 +94,17 @@ class FileSystem(SimComponent):
if not self.folders: if not self.folders:
self.create_folder("root") self.create_folder("root")
def _init_action_manager(self) -> ActionManager:
am = super()._init_action_manager()
self._folder_action_manager = ActionManager()
am.add_action("folder", Action(func=self._folder_action_manager))
self._file_action_manager = ActionManager()
am.add_action("file", Action(func=self._file_action_manager))
return am
@property @property
def size(self) -> int: def size(self) -> int:
""" """
@@ -154,6 +165,7 @@ class FileSystem(SimComponent):
self.folders[folder.uuid] = folder self.folders[folder.uuid] = folder
self._folders_by_name[folder.name] = folder self._folders_by_name[folder.name] = folder
self.sys_log.info(f"Created folder /{folder.name}") self.sys_log.info(f"Created folder /{folder.name}")
self._folder_action_manager.add_action(folder.uuid, Action(func=folder._action_manager))
return folder return folder
def delete_folder(self, folder_name: str): def delete_folder(self, folder_name: str):
@@ -172,6 +184,7 @@ class FileSystem(SimComponent):
self.folders.pop(folder.uuid) self.folders.pop(folder.uuid)
self._folders_by_name.pop(folder.name) self._folders_by_name.pop(folder.name)
self.sys_log.info(f"Deleted folder /{folder.name} and its contents") self.sys_log.info(f"Deleted folder /{folder.name} and its contents")
self._folder_action_manager.remove_action(folder.uuid)
else: else:
_LOGGER.debug(f"Cannot delete folder as it does not exist: {folder_name}") _LOGGER.debug(f"Cannot delete folder as it does not exist: {folder_name}")
@@ -213,6 +226,7 @@ class FileSystem(SimComponent):
) )
folder.add_file(file) folder.add_file(file)
self.sys_log.info(f"Created file /{file.path}") self.sys_log.info(f"Created file /{file.path}")
self._file_action_manager.add_action(file.uuid, Action(func=file._action_manager))
return file return file
def get_file(self, folder_name: str, file_name: str) -> Optional[File]: def get_file(self, folder_name: str, file_name: str) -> Optional[File]:
@@ -240,6 +254,7 @@ class FileSystem(SimComponent):
file = folder.get_file(file_name) file = folder.get_file(file_name)
if file: if file:
folder.remove_file(file) folder.remove_file(file)
self._file_action_manager.remove_action(file.uuid)
self.sys_log.info(f"Deleted file /{file.path}") self.sys_log.info(f"Deleted file /{file.path}")
def move_file(self, src_folder_name: str, src_file_name: str, dst_folder_name: str): def move_file(self, src_folder_name: str, src_file_name: str, dst_folder_name: str):
@@ -317,6 +332,16 @@ class Folder(FileSystemItemABC):
is_quarantined: bool = False is_quarantined: bool = False
"Flag that marks the folder as quarantined if true." "Flag that marks the folder as quarantined if true."
def _init_action_manager(sekf) -> ActionManager:
am = super()._init_action_manager()
am.add_action("scan", Action(func=lambda request, context: ...)) # TODO implement action
am.add_action("checkhash", Action(func=lambda request, context: ...)) # TODO implement action
am.add_action("repair", Action(func=lambda request, context: ...)) # TODO implement action
am.add_action("restore", Action(func=lambda request, context: ...)) # TODO implement action
return am
def describe_state(self) -> Dict: def describe_state(self) -> Dict:
""" """
Produce a dictionary describing the current state of this object. Produce a dictionary describing the current state of this object.
@@ -482,6 +507,17 @@ class File(FileSystemItemABC):
with open(self.sim_path, mode="a"): with open(self.sim_path, mode="a"):
pass pass
def _init_action_manager(self) -> ActionManager:
am = super()._init_action_manager()
am.add_action("scan", Action(func=lambda request, context: ...)) # TODO implement action
am.add_action("checkhash", Action(func=lambda request, context: ...)) # TODO implement action
am.add_action("delete", Action(func=lambda request, context: ...)) # TODO implement action
am.add_action("repair", Action(func=lambda request, context: ...)) # TODO implement action
am.add_action("restore", Action(func=lambda request, context: ...)) # TODO implement action
return am
def make_copy(self, dst_folder: Folder) -> File: def make_copy(self, dst_folder: Folder) -> File:
""" """
Create a copy of the current File object in the given destination folder. Create a copy of the current File object in the given destination folder.

View File

@@ -951,15 +951,23 @@ class Node(SimComponent):
# since there are potentially many services, create an action manager that can map service name # since there are potentially many services, create an action manager that can map service name
self._service_action_manager = ActionManager() self._service_action_manager = ActionManager()
am.add_action("service", Action(func=self._service_action_manager)) am.add_action("service", Action(func=self._service_action_manager))
self._process_action_manager = ActionManager()
am.add_action("process", Action(func=self._process_action_manager))
self._application_action_manager = ActionManager()
am.add_action("application", Action(func=self._application_action_manager))
self._nic_action_manager = ActionManager() self._nic_action_manager = ActionManager()
am.add_action("nic", Action(func=self._nic_action_manager)) am.add_action("nic", Action(func=self._nic_action_manager))
am.add_action("file_system", Action(func=self.file_system._action_manager)) am.add_action("file_system", Action(func=self.file_system._action_manager))
# currently we don't have any applications nor processes, so these will be empty
self._process_action_manager = ActionManager()
am.add_action("process", Action(func=self._process_action_manager))
self._application_action_manager = ActionManager()
am.add_action("application", Action(func=self._application_action_manager))
am.add_action("scan", Action(func=lambda request, context: ...)) # TODO implement OS scan
am.add_action("shutdown", Action(func=lambda request, context: self.power_off()))
am.add_action("startup", Action(func=lambda request, context: self.power_on()))
am.add_action("reset", Action(func=lambda request, context: ...)) # TODO implement node reset
return am return am
def describe_state(self) -> Dict: def describe_state(self) -> Dict: