Skip to content

Commit c68ab72

Browse files
authored
Merge pull request #2127 from Felixoid/perSecond-and-scaleToSeconds
Get rid of OverflowError in perSecond and scaleToSeconds
2 parents b73cc91 + 8a0c009 commit c68ab72

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

webapp/graphite/render/functions.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1177,7 +1177,11 @@ def scaleToSeconds(requestContext, seriesList, seconds):
11771177

11781178
for i,value in enumerate(series):
11791179
if value is not None:
1180-
series[i] = round(value * factor, 6)
1180+
# Division long by float cause OverflowError
1181+
try:
1182+
series[i] = round(value * factor, 6)
1183+
except OverflowError:
1184+
series[i] = (value // series.step) * seconds
11811185

11821186
return seriesList
11831187

@@ -1609,7 +1613,11 @@ def perSecond(requestContext, seriesList, maxValue=None):
16091613
delta, prev = _nonNegativeDelta(val, prev, maxValue)
16101614

16111615
if delta is not None:
1612-
newValues.append(round(delta / step, 6))
1616+
# Division long by float cause OverflowError
1617+
try:
1618+
newValues.append(round(delta / step, 6))
1619+
except OverflowError:
1620+
newValues.append(delta // step)
16131621
else:
16141622
newValues.append(None)
16151623

webapp/tests/test_functions.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1581,8 +1581,8 @@ def test_nonNegativeDerivative_max(self):
15811581
self.assertEqual(expected, result, 'nonNegativeDerivative result incorrect')
15821582

15831583
def test_perSecond(self):
1584-
seriesList = self._gen_series_list_with_data(key='test',start=0,end=600,step=60,data=[0, 120, 240, 480, 960, 1920, 3840, 7680, 15360, 30720])
1585-
expected = [TimeSeries('perSecond(test)', 0, 600, 60, [None, 2, 2, 4, 8, 16, 32, 64, 128, 256])]
1584+
seriesList = self._gen_series_list_with_data(key='test',start=0,end=600,step=60,data=[0, 120, 240, 480, 960, 1920, 3840, 7680, 15360, 60 ** 256 + 15360 ])
1585+
expected = [TimeSeries('perSecond(test)', 0, 600, 60, [None, 2, 2, 4, 8, 16, 32, 64, 128, 60 ** 255])]
15861586
result = functions.perSecond({}, seriesList)
15871587
self.assertEqual(list(expected[0]), list(result[0]))
15881588
self.assertEqual(expected, result)
@@ -1592,8 +1592,8 @@ def test_perSecond(self):
15921592
self.assertEqual(list(expected[0]), list(result[0]))
15931593

15941594
def test_perSecond_float(self):
1595-
seriesList = self._gen_series_list_with_data(key='test',start=0,end=600,step=60,data=[0, 90, 186, 291, 411, 561, 747, 939, 136, 336])
1596-
expected = [TimeSeries('perSecond(test)', 0, 600, 60, [None, 1.5, 1.6, 1.75, 2, 2.5, 3.1, 3.2, 3.3, 3.333333])]
1595+
seriesList = self._gen_series_list_with_data(key='test',start=0,end=600,step=60,data=[0, 90, 186, 291, 411, 561, 747, 136, 336, 60**256 + 336])
1596+
expected = [TimeSeries('perSecond(test)', 0, 600, 60, [None, 1.5, 1.6, 1.75, 2, 2.5, 3.1, 6.5, 3.333333, None])]
15971597
result = functions.perSecond({}, seriesList, maxValue=1000)
15981598
self.assertEqual(list(expected[0]), list(result[0]))
15991599
self.assertEqual(expected, result)

0 commit comments

Comments
 (0)