/usr/lib/python2.7/dist-packages/graphite/render/evaluator.py is in graphite-web 0.9.12+debian-6.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | import datetime
import time
from django.conf import settings
from graphite.render.grammar import grammar
from graphite.render.datalib import fetchData, TimeSeries
def evaluateTarget(requestContext, target):
tokens = grammar.parseString(target)
result = evaluateTokens(requestContext, tokens)
if type(result) is TimeSeries:
return [result] #we have to return a list of TimeSeries objects
else:
return result
def evaluateTokens(requestContext, tokens):
if tokens.expression:
return evaluateTokens(requestContext, tokens.expression)
elif tokens.pathExpression:
return fetchData(requestContext, tokens.pathExpression)
elif tokens.call:
func = SeriesFunctions[tokens.call.func]
args = [evaluateTokens(requestContext, arg) for arg in tokens.call.args]
return func(requestContext, *args)
elif tokens.number:
if tokens.number.integer:
return int(tokens.number.integer)
elif tokens.number.float:
return float(tokens.number.float)
elif tokens.number.scientific:
return float(tokens.number.scientific[0])
elif tokens.string:
return str(tokens.string)[1:-1]
elif tokens.boolean:
return tokens.boolean[0] == 'true'
#Avoid import circularities
from graphite.render.functions import SeriesFunctions
|