Merge pull request #1184 from guardicore/data-dir-on-island-refactor

Data dir on island refactor
This commit is contained in:
Shreya Malviya 2021-05-24 15:24:21 +05:30 committed by GitHub
commit f500ca8b06
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 74 additions and 64 deletions

View File

@ -1,15 +1,12 @@
from gevent import monkey as gevent_monkey from gevent import monkey as gevent_monkey
from monkey_island.cc.arg_parser import parse_cli_args from monkey_island.cc.arg_parser import parse_cli_args
from monkey_island.setup.config_setup import setup_config_by_cmd_arg, setup_default_config
gevent_monkey.patch_all() gevent_monkey.patch_all()
import json # noqa: E402 import json # noqa: E402
import os # noqa: E402
import monkey_island.cc.environment.server_config_generator as server_config_generator # noqa: E402
from monkey_island import config_loader # noqa: E402
from monkey_island.cc.environment.data_dir_generator import create_data_dir # noqa: E402
from monkey_island.cc.server_utils.island_logger import setup_logging # noqa: E402 from monkey_island.cc.server_utils.island_logger import setup_logging # noqa: E402
if "__main__" == __name__: if "__main__" == __name__:
@ -19,13 +16,9 @@ if "__main__" == __name__:
# imports, so the log init needs to be first. # imports, so the log init needs to be first.
try: try:
if island_args.server_config: if island_args.server_config:
server_config_path = os.path.expanduser(island_args.server_config) config, server_config_path = setup_config_by_cmd_arg(island_args.server_config)
else: else:
server_config_path = server_config_generator.create_default_server_config_file() config, server_config_path = setup_default_config()
config = config_loader.load_server_config_from_file(server_config_path)
create_data_dir(config["data_dir"], True)
setup_logging(config["data_dir"], config["log_level"]) setup_logging(config["data_dir"], config["log_level"])

View File

@ -1,21 +0,0 @@
import os
from pathlib import Path
from monkey_island.cc.environment.data_dir_generator import create_data_dir
from monkey_island.cc.server_utils.consts import (
DEFAULT_DATA_DIR,
DEFAULT_DEVELOP_SERVER_CONFIG_PATH,
DEFAULT_SERVER_CONFIG_PATH,
)
def create_default_server_config_file() -> str:
if not os.path.isfile(DEFAULT_SERVER_CONFIG_PATH):
create_data_dir(DEFAULT_DATA_DIR, False)
write_default_server_config_to_file(DEFAULT_SERVER_CONFIG_PATH)
return DEFAULT_SERVER_CONFIG_PATH
def write_default_server_config_to_file(path: str) -> None:
default_config = Path(DEFAULT_DEVELOP_SERVER_CONFIG_PATH).read_text()
Path(path).write_text(default_config)

View File

@ -0,0 +1,39 @@
import json
import os
from pathlib import Path
from monkey_island.cc.server_utils.consts import (
DEFAULT_DATA_DIR,
DEFAULT_DEVELOP_SERVER_CONFIG_PATH,
DEFAULT_LOG_LEVEL,
DEFAULT_SERVER_CONFIG_PATH,
)
def create_default_server_config_file() -> None:
if not os.path.isfile(DEFAULT_SERVER_CONFIG_PATH):
write_default_server_config_to_file(DEFAULT_SERVER_CONFIG_PATH)
def write_default_server_config_to_file(path: str) -> None:
default_config = Path(DEFAULT_DEVELOP_SERVER_CONFIG_PATH).read_text()
Path(path).write_text(default_config)
def load_server_config_from_file(server_config_path):
with open(server_config_path, "r") as f:
config_content = f.read()
config = json.loads(config_content)
add_default_values_to_config(config)
return config
def add_default_values_to_config(config):
config["data_dir"] = os.path.abspath(
os.path.expanduser(os.path.expandvars(config.get("data_dir", DEFAULT_DATA_DIR)))
)
config.setdefault("log_level", DEFAULT_LOG_LEVEL)
return config

View File

@ -2,11 +2,12 @@ from mongoengine import connect
# Needed so that a server_config.json file exists at the default path, # Needed so that a server_config.json file exists at the default path,
# otherwise, unit tests will error while importing `env_singleton` below. # otherwise, unit tests will error while importing `env_singleton` below.
from monkey_island.cc.environment.server_config_generator import ( # noqa: E402 from monkey_island.cc.environment import data_dir_generator, server_config_handler # noqa: E402
create_default_server_config_file,
)
create_default_server_config_file() from ..server_utils.consts import DEFAULT_DATA_DIR
data_dir_generator.create_data_dir(DEFAULT_DATA_DIR, False)
server_config_handler.create_default_server_config_file()
import monkey_island.cc.environment.environment_singleton as env_singleton # noqa: E402 import monkey_island.cc.environment.environment_singleton as env_singleton # noqa: E402

View File

@ -14,6 +14,8 @@ def get_default_data_dir() -> str:
SERVER_CONFIG_FILENAME = "server_config.json" SERVER_CONFIG_FILENAME = "server_config.json"
DEFAULT_LOG_LEVEL = "INFO"
MONKEY_ISLAND_ABS_PATH = os.path.join(os.getcwd(), "monkey_island") MONKEY_ISLAND_ABS_PATH = os.path.join(os.getcwd(), "monkey_island")
DEFAULT_DATA_DIR = os.path.expandvars(get_default_data_dir()) DEFAULT_DATA_DIR = os.path.expandvars(get_default_data_dir())

View File

@ -1,25 +0,0 @@
import json
import os
from monkey_island.cc.server_utils.consts import DEFAULT_DATA_DIR
DEFAULT_LOG_LEVEL = "INFO"
def load_server_config_from_file(server_config_path):
with open(server_config_path, "r") as f:
config_content = f.read()
config = json.loads(config_content)
add_default_values_to_config(config)
return config
def add_default_values_to_config(config):
config["data_dir"] = os.path.abspath(
os.path.expanduser(os.path.expandvars(config.get("data_dir", DEFAULT_DATA_DIR)))
)
config.setdefault("log_level", DEFAULT_LOG_LEVEL)
return config

View File

@ -0,0 +1,21 @@
import os
from typing import Tuple
from monkey_island.cc.environment import server_config_handler
from monkey_island.cc.environment.data_dir_generator import create_data_dir # noqa: E402
from monkey_island.cc.server_utils.consts import DEFAULT_DATA_DIR, DEFAULT_SERVER_CONFIG_PATH
def setup_config_by_cmd_arg(server_config_path) -> Tuple[dict, str]:
server_config_path = os.path.expandvars(os.path.expanduser(server_config_path))
config = server_config_handler.load_server_config_from_file(server_config_path)
create_data_dir(config["data_dir"], create_parent_dirs=True)
return config, server_config_path
def setup_default_config() -> Tuple[dict, str]:
server_config_path = DEFAULT_SERVER_CONFIG_PATH
create_data_dir(DEFAULT_DATA_DIR, create_parent_dirs=False)
server_config_handler.create_default_server_config_file()
config = server_config_handler.load_server_config_from_file(server_config_path)
return config, server_config_path

View File

@ -1,11 +1,11 @@
import os import os
from monkey_island import config_loader from monkey_island.cc.environment import server_config_handler
from monkey_island.cc.server_utils.consts import DEFAULT_DATA_DIR from monkey_island.cc.server_utils.consts import DEFAULT_DATA_DIR
def test_load_server_config_from_file(test_server_config, mock_home_env): def test_load_server_config_from_file(test_server_config, mock_home_env):
config = config_loader.load_server_config_from_file(test_server_config) config = server_config_handler.load_server_config_from_file(test_server_config)
assert config["data_dir"] == os.path.join(mock_home_env, ".monkey_island") assert config["data_dir"] == os.path.join(mock_home_env, ".monkey_island")
assert config["log_level"] == "NOTICE" assert config["log_level"] == "NOTICE"
@ -13,7 +13,7 @@ def test_load_server_config_from_file(test_server_config, mock_home_env):
def test_default_log_level(): def test_default_log_level():
test_config = {} test_config = {}
config = config_loader.add_default_values_to_config(test_config) config = server_config_handler.add_default_values_to_config(test_config)
assert "log_level" in config assert "log_level" in config
assert config["log_level"] == "INFO" assert config["log_level"] == "INFO"
@ -21,7 +21,7 @@ def test_default_log_level():
def test_default_data_dir(mock_home_env): def test_default_data_dir(mock_home_env):
test_config = {} test_config = {}
config = config_loader.add_default_values_to_config(test_config) config = server_config_handler.add_default_values_to_config(test_config)
assert "data_dir" in config assert "data_dir" in config
assert config["data_dir"] == DEFAULT_DATA_DIR assert config["data_dir"] == DEFAULT_DATA_DIR