我试图使用窃窃私语合并2个wsp文件。他们有相同的保留策略,其中一个只是有旧的数据比另一个。
当我运行whisper-merge oldfile.wsp newfile.wsp时,我会得到这个错误
Traceback (most recent call last):
File "/usr/local/src/whisper-0.9.12/bin/whisper-merge.py", line 32, in <module>
whisper.merge(path_from, path_to)
File "/usr/local/lib/python2.7/dist-packages/whisper.py", line 821, in merge
(timeInfo, values) = fetch(path_from, fromTime, untilTime)
TypeError: 'NoneType' object is not iterable有什么想法吗?
以下是这两个文件的元数据输出:
发布于 2014-07-30 07:21:29
来自whisper.py的片段
def fetch(path,fromTime,untilTime=None):
"""fetch(path,fromTime,untilTime=None)
path is a string
fromTime is an epoch time
untilTime is also an epoch time, but defaults to now.
Returns a tuple of (timeInfo, valueList)
where timeInfo is itself a tuple of (fromTime, untilTime, step)
Returns None if no data can be returned
"""
fh = open(path,'rb')
return file_fetch(fh, fromTime, untilTime)建议whisper.fetch()返回None,这反过来(以及跟踪中的最后一行)表明您的path_from文件有问题。
看得更深一点,whisper.file_fetch()似乎有两个地方可以返回None (至少显式地):
def file_fetch(fh, fromTime, untilTime):
header = __readHeader(fh)
now = int( time.time() )
if untilTime is None:
untilTime = now
fromTime = int(fromTime)
untilTime = int(untilTime)
# Here we try and be flexible and return as much data as we can.
# If the range of data is from too far in the past or fully in the future, we
# return nothing
if (fromTime > untilTime):
raise InvalidTimeInterval("Invalid time interval: from time '%s' is after until time '%s'" % (fromTime, untilTime))
oldestTime = now - header['maxRetention']
# Range is in the future
if fromTime > now:
return None # <== Here
# Range is beyond retention
if untilTime < oldestTime:
return None # <== ...and here
...发布于 2014-07-31 00:32:36
对于包含多个存档的文件,whisper.py中的第812行中断。https://github.com/graphite-project/whisper/blob/0.9.12/whisper.py#L812
fromTime = int(time.time()) - headerFrom['maxRetention']要修复,紧接在第813行之后,根据存档保留分配fromTime。https://github.com/graphite-project/whisper/blob/0.9.12/whisper.py#L813
for archive in archives: # this line already exists
fromTime = int(time.time()) - archive['retention'] # add this linehttps://stackoverflow.com/questions/25030467
复制相似问题