127 lines
3.7 KiB
Python
127 lines
3.7 KiB
Python
# standard imports
|
|
import logging
|
|
import os
|
|
import uuid
|
|
|
|
# external imports
|
|
from chainlib.settings import ChainSettings
|
|
from chainqueue.settings import *
|
|
|
|
logg = logging.getLogger(__name__)
|
|
|
|
|
|
class ChaindSettings(ChainSettings):
|
|
|
|
def __init__(settings, include_sync=False, include_queue=False):
|
|
super(ChaindSettings, settings).__init__()
|
|
settings.include_sync = include_sync
|
|
settings.include_queue = include_queue
|
|
|
|
|
|
def dir_for(self, k):
|
|
return os.path.join(self.o['SESSION_PATH'], k)
|
|
|
|
|
|
def process_session(settings, config):
|
|
session_id = config.get('SESSION_ID')
|
|
|
|
base_dir = os.getcwd()
|
|
data_dir = config.get('SESSION_DATA_PATH')
|
|
if data_dir == None:
|
|
data_dir = os.path.join(base_dir, '.chaind', 'chaind', settings.get('CHAIND_BACKEND'))
|
|
data_engine_dir = os.path.join(data_dir, config.get('CHAIND_ENGINE'))
|
|
os.makedirs(data_engine_dir, exist_ok=True)
|
|
|
|
# check if existing session
|
|
if session_id == None:
|
|
fp = os.path.join(data_engine_dir, 'default')
|
|
try:
|
|
os.stat(fp)
|
|
fp = os.path.realpath(fp)
|
|
except FileNotFoundError:
|
|
fp = None
|
|
if fp != None:
|
|
session_id = os.path.basename(fp)
|
|
|
|
make_default = False
|
|
if session_id == None:
|
|
session_id = str(uuid.uuid4())
|
|
make_default = True
|
|
|
|
chain_spec = settings.get('CHAIN_SPEC')
|
|
network_id_str = str(chain_spec.network_id())
|
|
# create the session persistent dir
|
|
session_path = os.path.join(
|
|
data_engine_dir,
|
|
chain_spec.arch(),
|
|
chain_spec.fork(),
|
|
network_id_str,
|
|
session_id,
|
|
)
|
|
if make_default:
|
|
fp = os.path.join(data_engine_dir, 'default')
|
|
os.symlink(session_path, fp)
|
|
|
|
data_path = session_path
|
|
os.makedirs(data_path, exist_ok=True)
|
|
|
|
# create volatile dir
|
|
uid = os.getuid()
|
|
runtime_path = config.get('SESSION_RUNTIME_PATH')
|
|
if runtime_path == None:
|
|
runtime_path = os.path.join('/run', 'user', str(uid), 'chaind', settings.get('CHAIND_BACKEND'))
|
|
runtime_path = os.path.join(
|
|
runtime_path,
|
|
config.get('CHAIND_ENGINE'),
|
|
chain_spec.arch(),
|
|
chain_spec.fork(),
|
|
str(chain_spec.network_id()),
|
|
session_id,
|
|
)
|
|
os.makedirs(runtime_path, exist_ok=True)
|
|
|
|
settings.set('SESSION_RUNTIME_PATH', runtime_path)
|
|
settings.set('SESSION_PATH', session_path)
|
|
settings.set('SESSION_DATA_PATH', data_path)
|
|
settings.set('SESSION_ID', session_id)
|
|
|
|
return settings
|
|
|
|
|
|
def process_socket(settings, config):
|
|
socket_path = config.get('SESSION_SOCKET_PATH')
|
|
if socket_path == None:
|
|
socket_path = os.path.join(settings.get('SESSION_RUNTIME_PATH'), 'chaind.sock')
|
|
settings.set('SESSION_SOCKET_PATH', socket_path)
|
|
return settings
|
|
|
|
|
|
def process_dispatch(settings, config):
|
|
settings.set('SESSION_DISPATCH_DELAY', 0.01)
|
|
return settings
|
|
|
|
|
|
def process_token(settings, config):
|
|
settings.set('TOKEN_MODULE', config.get('TOKEN_MODULE'))
|
|
return settings
|
|
|
|
|
|
def process_backend(settings, config):
|
|
settings.set('CHAIND_BACKEND', config.get('STATE_BACKEND')) #backend)
|
|
return settings
|
|
|
|
|
|
def process_queue(settings, config):
|
|
if config.get('STATE_PATH') == None:
|
|
queue_state_dir = settings.dir_for('queue')
|
|
config.add(queue_state_dir, 'STATE_PATH', False)
|
|
logg.debug('setting queue state path {}'.format(queue_state_dir))
|
|
|
|
settings = process_queue_tx(settings, config)
|
|
settings = process_queue_paths(settings, config)
|
|
if config.get('STATE_BACKEND') == 'fs':
|
|
settings = process_queue_backend_fs(settings, config)
|
|
settings = process_queue_store(settings, config)
|
|
|
|
return settings
|