From a31922db8c020ab4e35086214bafc57fc557d60a Mon Sep 17 00:00:00 2001 From: Romain Broucquart <romain.broucquart@synchrotron-soleil.fr> Date: Fri, 26 Jun 2020 17:13:30 +0200 Subject: [PATCH] [ArchiveExtractor] Utilisation de la fonction ExtractBetweenDates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Plutôt que GetAttDataBetweenDate * Evite la création d'un attribut dynamique * Permet une résolution temporelle sub-seconde --- ArchiveExtractor.py | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/ArchiveExtractor.py b/ArchiveExtractor.py index 022b226..d187930 100755 --- a/ArchiveExtractor.py +++ b/ArchiveExtractor.py @@ -23,6 +23,7 @@ DBDFMT = "%Y-%m-%d %H:%M:%S" # Extractor date format for GetNearestValue DBDFMT2 = "%d-%m-%Y %H:%M:%S" +ArrayTimeStampToDatetime = np.vectorize(datetime.datetime.fromtimestamp) ##---------------------------------------------------------------------------## def dateparse(datestr): @@ -76,7 +77,7 @@ def query_ADB_BetweenDates(attr, extractor="archiving/TDBExtractor/4"): """ Query attribute data from an archiver database, get all points between dates. - Use GetAttDataBetweenDates. + Use ExtractBetweenDates. Warning : if the time interval gives a huge set of data, it can stall. Parameters @@ -152,32 +153,22 @@ def query_ADB_BetweenDates(attr, # For each date chunk for i_d in range(len(cdates)-1): # Make retrieval request - logger.debug("Perform GetAttDataBetweenDates (%s, %s, %s)"%( + logger.debug("Perform ExtractBetweenDates (%s, %s, %s)"%( attr, cdates[i_d].strftime(DBDFMT), cdates[i_d+1].strftime(DBDFMT)) ) - [N,], [name,] = ADB.GetAttDataBetweenDates([ + _date, _value = ADB.ExtractBetweenDates([ attr, cdates[i_d].strftime(DBDFMT), cdates[i_d+1].strftime(DBDFMT) ]) - # Read the history - logger.debug("Retrieve hystory of %d values. Dynamic attribute named %s."%(N, name)) - attrHist = ADB.attribute_history(name, N) - # Transform to datetime - value arrays - _value = np.empty(N, dtype=float) - _date = np.empty(N, dtype=object) - for i_h in range(N): - _value[i_h]=attrHist[i_h].value - _date[i_h]=attrHist[i_h].time.todatetime() - - # Remove dynamic attribute - logger.debug("Remove dynamic attribute %s."%name) - ADB.RemoveDynamicAttribute(name) + _value = np.asarray(_value, dtype=float) + if len(_date) > 0: + _date = ArrayTimeStampToDatetime(_date/1000.0) value.append(_value) date.append(_date) -- GitLab