You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.7 KiB
48 lines
1.7 KiB
# Copyright (C) 2005-2025 Splunk Inc. All Rights Reserved.
|
|
|
|
import time
|
|
|
|
from ITOA.setup_logging import getLogger
|
|
from feature_flagging.state.state import FeatureFlaggingState
|
|
from ITOA.storage.itoa_storage import ITOAStorage
|
|
|
|
|
|
class FeatureFlaggingStateStore(object):
|
|
KEY = 'suite_state'
|
|
COLLECTION = 'itsi_feature_flagging_state'
|
|
OBJECT_TYPE = 'suite_state'
|
|
|
|
def __init__(self, session_key):
|
|
self.logger = getLogger(logger_name='itsi.feature_flagging.FeatureFlaggingStateManager')
|
|
self.session_key = session_key
|
|
self.kvstore = ITOAStorage(collection=self.COLLECTION)
|
|
assert self.kvstore.wait_for_storage_init(self.session_key), "Storage is not initialized after wait."
|
|
|
|
def set_state(self, state_obj):
|
|
"""
|
|
This method stores the FeatureFlaggingState state_obj into the KV Store
|
|
"""
|
|
state_data = state_obj.to_json()
|
|
state_data['_key'] = self.KEY
|
|
state_data['object_type'] = self.OBJECT_TYPE
|
|
state_data['mod_time'] = time.time()
|
|
# batch_save essentially does upsert
|
|
self.kvstore.batch_save(self.session_key, 'nobody', [state_data])
|
|
|
|
def get_state(self):
|
|
"""
|
|
This method retrieves the FeatureFlaggingState state_obj from the KV Store
|
|
"""
|
|
state_dict = self.kvstore.get(self.session_key, 'nobody', self.COLLECTION, self.KEY)
|
|
|
|
if state_dict is not None:
|
|
# remove KV store related fields
|
|
state_dict.pop('_user', None)
|
|
state_dict.pop('_key', None)
|
|
state_dict.pop('object_type', None)
|
|
state_dict.pop('mod_time', None)
|
|
|
|
return FeatureFlaggingState.from_dict(state_dict)
|
|
|
|
return None
|