@@ -686,24 +686,12 @@ async def put(self, impressions):
686686 return False
687687
688688
689- class RedisEventsStorage (EventStorage ):
690- """Redis based event storage class."""
689+ class RedisEventsStorageBase (EventStorage ):
690+ """Redis based event storage base class."""
691691
692692 _EVENTS_KEY_TEMPLATE = 'SPLITIO.events'
693693 _EVENTS_KEY_DEFAULT_TTL = 3600
694694
695- def __init__ (self , redis_client , sdk_metadata ):
696- """
697- Class constructor.
698-
699- :param redis_client: Redis client or compliant interface.
700- :type redis_client: splitio.storage.adapters.redis.RedisAdapter
701- :param sdk_metadata: SDK & Machine information.
702- :type sdk_metadata: splitio.client.util.SdkMetadata
703- """
704- self ._redis = redis_client
705- self ._sdk_metadata = sdk_metadata
706-
707695 def add_events_to_pipe (self , events , pipe ):
708696 """
709697 Add put operation to pipeline
@@ -738,6 +726,59 @@ def _wrap_events(self, events):
738726 for e in events
739727 ]
740728
729+ def put (self , events ):
730+ """
731+ Add an event to the redis storage.
732+
733+ :param event: Event to add to the queue.
734+ :type event: splitio.models.events.Event
735+
736+ :return: Whether the event has been added or not.
737+ :rtype: bool
738+ """
739+ pass
740+
741+ def pop_many (self , count ):
742+ """
743+ Pop the oldest N events from storage.
744+
745+ :param count: Number of events to pop.
746+ :type count: int
747+ """
748+ raise NotImplementedError ('Only redis-consumer mode is supported.' )
749+
750+ def clear (self ):
751+ """
752+ Clear data.
753+ """
754+ raise NotImplementedError ('Not supported for redis.' )
755+
756+ def expire_keys (self , total_keys , inserted ):
757+ """
758+ Set expire
759+
760+ :param total_keys: length of keys.
761+ :type total_keys: int
762+ :param inserted: added keys.
763+ :type inserted: int
764+ """
765+ pass
766+
767+ class RedisEventsStorage (RedisEventsStorageBase ):
768+ """Redis based event storage class."""
769+
770+ def __init__ (self , redis_client , sdk_metadata ):
771+ """
772+ Class constructor.
773+
774+ :param redis_client: Redis client or compliant interface.
775+ :type redis_client: splitio.storage.adapters.redis.RedisAdapter
776+ :param sdk_metadata: SDK & Machine information.
777+ :type sdk_metadata: splitio.client.util.SdkMetadata
778+ """
779+ self ._redis = redis_client
780+ self ._sdk_metadata = sdk_metadata
781+
741782 def put (self , events ):
742783 """
743784 Add an event to the redis storage.
@@ -760,22 +801,57 @@ def put(self, events):
760801 _LOGGER .debug ('Error: ' , exc_info = True )
761802 return False
762803
763- def pop_many (self , count ):
804+ def expire_keys (self , total_keys , inserted ):
764805 """
765- Pop the oldest N events from storage.
806+ Set expire
766807
767- :param count: Number of events to pop.
768- :type count: int
808+ :param total_keys: length of keys.
809+ :type total_keys: int
810+ :param inserted: added keys.
811+ :type inserted: int
769812 """
770- raise NotImplementedError ('Only redis-consumer mode is supported.' )
813+ if total_keys == inserted :
814+ self ._redis .expire (self ._EVENTS_KEY_TEMPLATE , self ._EVENTS_KEY_DEFAULT_TTL )
771815
772- def clear (self ):
816+
817+ class RedisEventsStorageAsync (RedisEventsStorageBase ):
818+ """Redis based event async storage class."""
819+
820+ def __init__ (self , redis_client , sdk_metadata ):
773821 """
774- Clear data.
822+ Class constructor.
823+
824+ :param redis_client: Redis client or compliant interface.
825+ :type redis_client: splitio.storage.adapters.redis.RedisAdapter
826+ :param sdk_metadata: SDK & Machine information.
827+ :type sdk_metadata: splitio.client.util.SdkMetadata
775828 """
776- raise NotImplementedError ('Not supported for redis.' )
829+ self ._redis = redis_client
830+ self ._sdk_metadata = sdk_metadata
777831
778- def expire_keys (self , total_keys , inserted ):
832+ async def put (self , events ):
833+ """
834+ Add an event to the redis storage.
835+
836+ :param event: Event to add to the queue.
837+ :type event: splitio.models.events.Event
838+
839+ :return: Whether the event has been added or not.
840+ :rtype: bool
841+ """
842+ key = self ._EVENTS_KEY_TEMPLATE
843+ to_store = self ._wrap_events (events )
844+ try :
845+ _LOGGER .debug ("Adding Events to redis key %s" % (key ))
846+ _LOGGER .debug (to_store )
847+ await self ._redis .rpush (key , * to_store )
848+ return True
849+ except RedisAdapterException :
850+ _LOGGER .error ('Something went wrong when trying to add event to redis' )
851+ _LOGGER .debug ('Error: ' , exc_info = True )
852+ return False
853+
854+ async def expire_keys (self , total_keys , inserted ):
779855 """
780856 Set expire
781857
@@ -785,7 +861,8 @@ def expire_keys(self, total_keys, inserted):
785861 :type inserted: int
786862 """
787863 if total_keys == inserted :
788- self ._redis .expire (self ._EVENTS_KEY_TEMPLATE , self ._EVENTS_KEY_DEFAULT_TTL )
864+ await self ._redis .expire (self ._EVENTS_KEY_TEMPLATE , self ._EVENTS_KEY_DEFAULT_TTL )
865+
789866
790867class RedisTelemetryStorageBase (TelemetryStorage ):
791868 """Redis based telemetry storage class."""
0 commit comments