diff --git a/ArchiveExtractor.py b/ArchiveExtractor.py index 022b2262698fad845fb3abe54e984e0890263b87..d187930cba5cc169fda25cbeda6b5b5a658cf396 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)