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)
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
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), ))
def metric_dao(redis, key_schema): yield MetricDaoRedis(redis, key_schema)