def __init__(self, start_ts, end_ts): """Build a query to get a distinct list of instance_id bewteen sart and end ts.""" az_query = db.session.query(Hypervisor).join(AvailabilityZone).\ filter(Hypervisor.availability_zone_id == AvailabilityZone.id).\ filter(AvailabilityZone.name.like("sa%")).\ with_entities(Hypervisor.id).subquery() self.query = BaseQuery([Snapshot, InstanceState], db.session()).\ filter(Snapshot.ts >= start_ts, Snapshot.ts < end_ts).\ filter(InstanceState.snapshot_id == Snapshot.id).\ with_entities(InstanceState.instance_id).\ distinct(InstanceState.instance_id).\ filter(InstanceState.hypervisor_id.in_(az_query))
def _query(self, start_ts, end_ts): """Build a query to get a list of all instance status and hypervisor bewteen sart and end ts.""" # To use BaseQuery.paginate query = BaseQuery([Snapshot, InstanceState, Instance, Hypervisor, Account, Tenant, Flavor], db.session()).\ filter(Snapshot.ts >= start_ts, Snapshot.ts < end_ts).\ filter(InstanceState.snapshot_id == Snapshot.id).\ filter(Instance.id == InstanceState.instance_id).\ filter(InstanceState.hypervisor_id == Hypervisor.id).\ filter(Account.id == Instance.account_id).\ filter(Tenant.id == Instance.tenant_id).\ filter(Flavor.id == Instance.flavor_id).\ with_entities(Snapshot.ts, Instance.openstack_id, InstanceState.name, Hypervisor.name, Account.openstack_id, Tenant.openstack_id, Instance.flavor_id) return query