JezK
Edit File: persistent_message.cpython-311.opt-1.pyc
� Q�2���J� �r � d dl Z d dlmZ d dlmZmZ d dlmZ d dlm Z ee � � Z G d� d� � ZdS )� N)� getLogger)�MESSAGE_LOSS_OBSERVABILITY_FLAG� is_enabled)�db)� MessageToSendc � � e Zd ZdZdd�Zdefd�Zdd�Zdefd �Z defd �Z defd�Zdeddfd �Zdede ddfd�Zdefd�Zdefd�Zedefd�� � Zedefd�� � Zdde fd�Zdeeee f ddfd�ZdS )�PersistentMessagesQueuea� The queue to store messages sent to the server if it is unavailable. - stores more recent data; if a limit is exceeded, older messages are deleted. - no duplicate messages are sent NOTE: it is worth remembering that when writing a large number of messages, the amount of memory used may increase by the size of the sqlite cache (this may not be immediately obvious). https://www.sqlite.org/pragma.html#pragma_cache_size � �� Nc �h � || _ || _ g | _ |pt | _ d| _ d| _ d S �Nr )� _buffer_limit�_storage_limit�_bufferr �_model� dropped_total�_evicted)�self�buffer_limit� storage_limit�models �a/opt/imunify360/venv/lib/python3.11/site-packages/defence360agent/internals/persistent_message.py�__init__z PersistentMessagesQueue.__init__ s8 � �)���+�������,�}�������� � � � �returnc �$ � | j dc}| _ |S )z>Evictions since the last call, then reset (delta for metrics).r )r )r �evicteds r �pop_evictedz#PersistentMessagesQueue.pop_evicted# s � �!%��������r c �� � | j r�t j � � 5 | j � | j � � | j | j z }|dk ru| j � |� � }| xj |z c_ t t � � r| xj |z c_ t � d|| j | j � � g | _ d d d � � d S # 1 swxY w Y d S d S )Nr zcPersistent message queue overflow: dropped %d oldest message(s), storage_limit=%d, dropped_total=%d)r r �atomicr �insert_many�storage_sizer � delete_oldr r r r �logger�warning)r �need_to_remove�removeds r �push_buffer_to_storagez.PersistentMessagesQueue.push_buffer_to_storage( s; � ��<� "����� "� "� ��'�'���5�5�5�!%�!2�T�5H�!H��!�A�%�%�"�k�4�4�^�D�D�G� �&�&�'�1�&�&�!�"A�B�B� 1�� � ��0� � ��N�N�J���+��*�� � � "���) "� "� "� "� "� "� "� "� "� "� "� "���� "� "� "� "� "� "� "� "s �B1C�C� Cc � � g }t j � � 5 |t | j � | j j | j j � � � � � � � z }| j � � � � � � d d d � � n# 1 swxY w Y || j z }g | _ t |� � S �N)r r �listr �select� timestamp�message�tuples�delete�executer �sorted�r �itemss r �pop_allzPersistentMessagesQueue.pop_all@ s� � ��� �Y�[�[� +� +��T���"�"��K�)�4�;�+>�� ��&�(�(�� � �E� �K��� � �(�(�*�*�*� +� +� +� +� +� +� +� +� +� +� +���� +� +� +� +� ���������e�}�}�s �A=B�B#�&B#c �r � t | j � � � � � � � � S )z~Return stored rows as (id, timestamp, message) oldest-first without deleting (buffer is neither flushed nor included).)r+ r �get_all_orderedr/ �r s r �peek_storedz#PersistentMessagesQueue.peek_storedM s, � � �D�K�/�/�1�1�8�8�:�:�;�;�;r c �$ � | j g c}| _ |S )z>Return and clear the in-memory buffer as (timestamp, message).)r r3 s r �drain_bufferz$PersistentMessagesQueue.drain_bufferR s � �"�l�B���t�|��r �idsc � � |rHt j � � 5 | j � |� � d d d � � d S # 1 swxY w Y d S d S r* )r r r � delete_in)r r<