o
    È·eÜ  ã                   @   s@   d dl Z d dlmZmZ d dlmZ d dlZG dd„ deƒZdS )é    N)ÚdatetimeÚ	timedelta)Úparse_tsc                   @   sZ   e Zd ZdZddd„Zdd„ Zdd„ Zdd
d„Zddd„Zddd„Z	dd„ Z
ddd„ZdS )ÚResultProcessorzlog.csvNc                 C   s^   || _ || _d | _d| _d| _tj| _tj| _	t
j| _t
j| _| j  d¡| _| j  d¡| _d S )Nr   Úoutput_queueÚoutput_domain)ÚsdÚbatchÚlog_fpÚ	num_filesÚ
total_timer   ÚmaxÚmin_timeÚminÚmax_timer   Úearliest_timeÚlatest_timeÚget_objÚqueueÚdomain)ÚselfÚ
batch_namer   Úmimetype_files© r   úK/var/www/ideatree/venv/lib/python3.10/site-packages/boto/services/result.pyÚ__init__   s   zResultProcessor.__init__c                 C   sx   t |d ƒ}t |d ƒ}|| }|| jkr|| _|| jk r || _|  j|j7  _|| jk r0|| _|| jkr:|| _d S d S )NzService-ReadzService-Write)r   r   r   r   Úsecondsr   r   )r   ÚmsgÚ
start_timeÚend_timeÚelapsed_timer   r   r   Úcalculate_stats,   s   




ÿzResultProcessor.calculate_statsc                 C   s˜   t | ¡ ƒ}| js"ttj || j¡dƒ| _d |¡}| j |d ¡ g }|D ]}|| }| 	d¡dkr7d| }| 
|¡ q&d |¡}| j |d ¡ d S )NÚaú,Ú
r   z"%s")ÚsortedÚkeysr
   ÚopenÚosÚpathÚjoinÚLogFileNameÚwriteÚfindÚappend)r   r   r)   r&   ÚlineÚvaluesÚkeyÚvaluer   r   r   Úlog_message:   s   

zResultProcessor.log_messageTc           
      C   s®   |   ||¡ |  |¡ |d  d¡}d|v rt d|d ¡}nt d|d ¡}|D ]+}|rM| d¡d }| |¡}tj ||¡}	td||	f ƒ | 	|	¡ |  j
d	7  _
q)d S )
NÚ	OutputKeyr#   ÚOutputBucketÚs3ÚBucketú;r   úretrieving file: %s to %sé   )r3   r!   ÚsplitÚbotoÚlookupr(   r)   r*   ÚprintÚget_contents_to_filenamer   )
r   Úrecordr)   Úget_fileÚoutputsÚbucketÚoutputÚkey_namer1   Ú	file_namer   r   r   Úprocess_recordI   s   


ùzResultProcessor.process_recordc                 C   sX   | j  ¡ }|r*d|v r!|d | jkr!|  |||¡ |r!| j  |¡ | j  ¡ }|sd S d S )NÚBatch)r   Úreadr	   rG   Údelete_message)r   r)   rA   Ú
delete_msgÚmr   r   r   Úget_results_from_queueZ   s   

ûz&ResultProcessor.get_results_from_queuec                 C   s.   | j  d| j ¡}|D ]	}|  |||¡ qd S )Nz['Batch'='%s'])r   Úqueryr	   rG   )r   r)   rA   ÚrsÚitemr   r   r   Úget_results_from_domainc   s   ÿz'ResultProcessor.get_results_from_domainc                 C   s\   | j  d¡}|r*tdƒ |D ]}tj ||¡}td||f ƒ | |¡ | jd  qd S d S )NÚoutput_bucketzCNo output queue or domain, just retrieving files from output_bucketr9   r:   )r   r   r>   r(   r)   r*   r?   r   )r   r)   rC   r1   rF   r   r   r   Úget_results_from_bucketh   s   
úz'ResultProcessor.get_results_from_bucketc                 C   sø   t j |¡st  |¡ | jr|  ||¡ n| jr|  ||¡ n|  |¡ | j	r,| j	 
¡  td| j ƒ | jdkrzt| jƒ| j | _td| jj ƒ td| jj ƒ td| j ƒ | j| j | _td| jj ƒ d| jjd | j  }td	| ƒ d S d S )
Nz"%d results successfully retrieved.r   zMinimum Processing Time: %dzMaximum Processing Time: %dzAverage Processing Time: %fzElapsed Time: %dg      ð?g      N@z$Throughput: %f transactions / minute)r(   r)   ÚisdirÚmkdirr   rM   r   rQ   rS   r
   Úcloser>   r   Úfloatr   Úavg_timer   r   r   r   r   r    )r   r)   rA   rK   Útputr   r   r   Úget_resultsr   s(   



øzResultProcessor.get_results)N)T)TT)Ú__name__Ú
__module__Ú__qualname__r+   r   r!   r3   rG   rM   rQ   rS   rZ   r   r   r   r   r      s    



	
r   )r(   r   r   Ú
boto.utilsr   r<   Úobjectr   r   r   r   r   Ú<module>   s
   