예제 #1
0
def _test_insert_and_retrieve(client, readings: List[MeterReading],
                              metric_dao: MetricDaoRedis, limit: int):
    for reading in readings:
        metric_dao.insert(reading)

    resp = client.get(f'/metrics/{TESTING_SITE_ID}?count={limit}').json
    plots = resp['plots']

    for plot in plots:
        measurements = MeasurementSchema(many=True).load(plot['measurements'])
        _check_measurements(measurements, limit)
예제 #2
0
def _test_insert_and_retrieve(readings: List[MeterReading],
                              metric_dao: MetricDaoRedis, limit: int):
    for reading in readings:
        metric_dao.insert(reading)

    measurements = metric_dao.get_recent(TESTING_SITE_ID,
                                         MetricUnit.WH_GENERATED, NOW, limit)
    assert len(measurements) == limit

    i = limit
    for measurement in measurements:
        assert measurement.value == (i - 1) * 1.0
        i -= 1
예제 #3
0
def configure(app):
    key_schema = KeySchema(app.config['REDIS_KEY_PREFIX'])
    redis_client = get_redis_connection(app.config['REDIS_HOST'],
                                        app.config['REDIS_PORT'])

    try:
        redis_client.ping()
    except exceptions.AuthenticationError:
        app.logger.error("Redis authentication failed. Make sure you set "
                         "$REDISOLAR_REDIS_PASSWORD to the correct password "
                         "for your Redis instance. Stopping server.")
        raise
    app.do_teardown_appcontext()
    if app.config.get('USE_GEO_SITE_API'):
        api.add_resource(SiteGeoListResource,
                         '/sites',
                         resource_class_args=(SiteGeoDaoRedis(redis_client,
                                                              key_schema), ))
        api.add_resource(SiteGeoResource,
                         '/sites/<int:site_id>',
                         resource_class_args=(SiteGeoDaoRedis(redis_client,
                                                              key_schema), ))
    else:
        api.add_resource(SiteListResource,
                         '/sites',
                         resource_class_args=(SiteDaoRedis(redis_client, key_schema), ))
        api.add_resource(SiteResource,
                         '/sites/<int:site_id>',
                         resource_class_args=(SiteDaoRedis(redis_client, key_schema), ))

    api.add_resource(CapacityReportResource,
                     '/capacity',
                     resource_class_args=(CapacityReportDaoRedis(
                         redis_client, key_schema), ))
    api.add_resource(GlobalMeterReadingResource,
                     '/meter_readings',
                     resource_class_args=(MeterReadingDaoRedis(redis_client, key_schema),
                                          FeedDaoRedis(redis_client, key_schema)))
    api.add_resource(SiteMeterReadingResource,
                     '/meter_readings/<int:site_id>',
                     resource_class_args=(FeedDaoRedis(redis_client, key_schema), ))
    api.add_resource(MetricsResource,
                     '/metrics/<int:site_id>',
                     resource_class_args=(MetricDaoRedis(redis_client, key_schema), ))
예제 #4
0
def metric_dao(redis, key_schema):
    yield MetricDaoRedis(redis, key_schema)