U
    Tg	                  
   @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZzd dlZW n ek
r`   e	dY nX eej
ej ee ZejddZejddddd ejd	dd
ddej d ejddddd ejddddd ejdddd ejdddd e \ZZeedk r*e  ed ed  Ze jesbejde  e  ed eeZdd edd D Zed Zej d d! d"d# ej!dkred$ Z"nej!Z"ej#dkred% Z#nej#Z#e$d& eD ]<Z%ee%d'  e%d(  Z&eZ'e(ee&e'\Z)Z*e)e*fe%d)< qej+dkr\ed* Z,e je,rVe$d+e,  e -e, e,Z+nej+Z+e$d,e+  ej.e+ee"e#d- e /e+j0Z1e$d.e+e1f  ej2re$d/ g Z3e4ed0d! d1D ]Z%e%d) \Z)Z*e5e6e7e) e*Z8e89  e3r>e3d2 d  Z:d Z;e<e8D ]"\Z=\Z>Z?e>e:k re=Z; q,qe3e8e;d 7 Z3ne3e87 Z3qe39  e5e@d3d! e3ZAe5e@d4d! e3ZBe$d5eA  [3ee+ZCeCd ZeD ]Z%e%d( ZDee%d'  eeD  Z&eeeD  eD Z'e$d6e&e'eDf  e7e&e'eDZEe$d7eE  g ZFe6eEdd2 eEdd D ]ZGeHeAeGd  ZIejHeAeGd eId8ZJeBeIeJ ZKeKre5eLd9d! eKZMeMrd:eeM eeK e"kreFNeGd  e2e#eMeKg qeOe+eF qnHe$d; eD ]:Z%e%d) \Z)Z*e6e7e) e*ZPeLd<d! ePZPeOe+eP qej+dk	red  ed= ZQe$d>eQ  e ReeQ ze$d?e  e Re,e W n< eSk
r   eT  e$d@ e ReQe ed Y nX ejUre$dAeQ  e -eQ dS )B    Nz6[ERROR] Please make sure whisper is installed properlya  %prog path timePerPoint:timeToStore [timePerPoint:timeToStore]*

timePerPoint and timeToStore specify lengths of time, for example:

60:1440      60 seconds per datapoint, 1440 datapoints = 1 day of retention
15m:8        15 minutes per datapoint, 8 datapoints = 2 hours of retention
1h:7d        1 hour per datapoint, 7 days of retention
12h:2y       12 hours per datapoint, 2 years of retention
)usagez--xFilesFactorfloatzChange the xFilesFactor)defaulttypehelpz--aggregationMethodstringz$Change the aggregation function (%s)z, z--forceF
store_truezPerform a destructive change)r   actionr   z	--newfilestorez<Create a new database file without removing the existing onez
--nobackupz/Delete the .bak file after successful execution)r	   r   z--aggregatezvTry to aggregate the values to fit the new archive better. Note that this will make things slower and use more memory.      z#[ERROR] File '%s' does not exist!

c                 C   s   g | ]}t |qS  )whisperZparseRetentionDef).0ZretentionDefr   r   ^/home/ankuromar296_gmail_com/.local/lib/python3.8/site-packages/../../../bin/whisper-resize.py
<listcomp>D   s   r   Zarchivesc                 C   s   | d S NsecondsPerPointr   )ar   r   r   <lambda>I       r   T)keyreversexFilesFactoraggregationMethodz%Retrieving all data from the archivesZ	retentionr   dataz.tmpz-Removing previous temporary database file: %sz!Creating new whisper database: %s)r   r   zCreated: %s (%d bytes)z"Migrating data with aggregation...c                 C   s   | d S r   r   xr   r   r   r   n   r   )r   c                 C   s   | d S )Nr   r   pr   r   r   r      r   c                 C   s   | d S Nr   r   r   r   r   r   r      r   zoldtimestamps: %sz
(%s,%s,%s)ztimepoints_to_update: %s)loc                 C   s   | d k	S )Nr   r   r   r   r   r      r   g      ?z%Migrating data without aggregation...c                 C   s   | d d k	S r!   r   r   r   r   r   r      r   z.bakzRenaming old database to: %szRenaming new database to: %sz#
Operation failed, restoring backupzUnlinking backup: %s)Vossystimebisectsignaloptparse	tracebackr   ImportError
SystemExitSIGPIPESIG_DFLintnowOptionParserZoption_parser
add_optionjoinZaggregationMethods
parse_argsoptionsargslen
print_helpexitpathexistsstderrwriteinfoZnew_archivesZold_archivessortr   Zxffr   printarchiveZfromTimeZ	untilTimefetchZtimeinfovaluesnewfileZtmpfileunlinkcreatestatst_sizesizeZ	aggregateZall_datapointssortedlistziprangeZnew_datapointsr   Zlast_timestampZ	slice_end	enumeratei	timestampvaluemapZoldtimestampsZ	oldvaluesZnew_infostepZtimepoints_to_updateZnewdatapointsZ	tintervalbisect_leftZleftiZrightiZ	newvaluesfilterZnon_noneappendZupdate_manyZ
datapointsbackuprenameOSError	print_excZnobackupr   r   r   r   <module>   s8      
      










 
 

