Example #1
0
def calc():
    url = request.url
    app.logger.debug(url)
    query = urlparse.parse_qs(urlparse.urlparse(url).query)
    query = {k: v[0] for k, v in query.items()}
    period = int(query['period'])
    period_str = 'period=' + str(
        period /
        60) + 'hour' if period >= 60 else 'period=' + str(period) + 'min'
    ts = 1505471244
    te = 1515480244
    if '-' in query['start']:
        ts = time.mktime(
            datetime.datetime.strptime(query['start'], "%Y-%m-%d").timetuple())
        te = time.mktime(
            datetime.datetime.strptime(query['end'], "%Y-%m-%d").timetuple())
    else:
        ts = int(query['start'])
        te = int(query['end'])
    formula = query['formula']
    figsize = (10, 5)
    if 'figsize' in query.keys():
        figsize = (int(query['figsize'].split(',')[0][1:]),
                   int(query['figsize'].split(',')[1][:-1]))
    cache_items = 'calc' + str(period) + str(ts) + str(te) + str(
        figsize) + str(formula)
    rv = cache.get(cache_items)
    if rv is not None:
        app.logger.debug('use cache')
        return simplejson.dumps(rv, ignore_nan=True), 200, [
            ('Content-Type', 'application/json;charset=utf-8')
        ]
    calc_func = Calc()
    calc_func.set_args(period, int(ts), int(te))
    ret_json = {}
    calc_result = calc_func.get_result(formula.strip(' \n'))
    app.logger.info(formula.strip(' \n'))
    error = calc_result[1]
    if not error:
        ret_json['code'] = 0
        ret_json['series'] = calc_result[0]
    else:
        ret_json['code'] = 1
        ret_json['series'] = []
        ret_json['msg'] = error
        app.logger.error(error)
    ret_json['formula'] = formula
    ret_json['period'] = period
    ret_json['ts'] = ts
    ret_json['te'] = te
    if len(ret_json['series']) > 0:
        cache.set(cache_items, ret_json, timeout=3600)
    return simplejson.dumps(ret_json, ignore_nan=True), 200, [
        ('Content-Type', 'application/json;charset=utf-8')
    ]
Example #2
0
def plot():
    '''
    DataFrame.plot(x=None, y=None, kind='line', ax=None, subplots=False, sharex=None, sharey=False, 
    layout=None, figsize=None, use_index=True, title=None, grid=None, legend=True, style=None, 
    logx=False, logy=False, loglog=False, xticks=None, yticks=None, xlim=None, ylim=None, rot=None, 
    fontsize=None, colormap=None, table=False, yerr=None, xerr=None, secondary_y=False, sort_columns=False, **kwds)
    '''
    url = request.url
    app.logger.debug(url)
    query = urlparse.parse_qs(urlparse.urlparse(url).query)
    query = {k: v[0] for k, v in query.items()}
    period = int(query['period'])
    period_str = 'period=' + str(
        period /
        60) + 'hour' if period >= 60 else 'period=' + str(period) + 'min'
    ts = 1505471244
    te = 1515480244
    if '-' in query['start']:
        ts = time.mktime(
            datetime.datetime.strptime(query['start'], "%Y-%m-%d").timetuple())
        te = time.mktime(
            datetime.datetime.strptime(query['end'], "%Y-%m-%d").timetuple())
    else:
        ts = int(query['start'])
        te = int(query['end'])
    formula = query['formula']
    figsize = (10, 4)
    if 'figsize' in query.keys():
        figsize = (int(query['figsize'].split(',')[0][1:]),
                   int(query['figsize'].split(',')[1][:-1]))
    cache_items = 'plot' + str(period) + str(ts) + str(te) + str(
        figsize) + str(formula)
    rv = cache.get(cache_items)
    if rv is not None:
        app.logger.debug('use cache')
        return rv
    calc_func = Calc()
    calc_func.set_args(period, int(ts), int(te), figsize)
    plot = calc_func.get_plot_result(formula.strip(' \n'))
    if plot is None:
        return simplejson.dumps({'err': 'No images to plot'},
                                ignore_nan=True), 200, [
                                    ('Content-Type',
                                     'application/json;charset=utf-8')
                                ]
    app.logger.info(formula.strip(' \n'))
    response = make_response(plot.getvalue())
    response.mimetype = 'image/png'
    cache.set(cache_items, response, timeout=3600)
    return response