def getExpiredServers(self, prj_id, server_ids, TTL):
        servers = []
        connection = self.db_engine.connect()

        try:
            # retrieve all expired instances for the specified
            # project and expiration time
            ids = ""

            if server_ids:
                ids = "uuid in ('%s') and " % "', '".join(server_ids)

            QUERY = """select uuid, vcpus, memory_mb, root_gb, \
vm_state, user_data from nova.instances where project_id = \
'%(project_id)s' and deleted_at is NULL and (vm_state='error' or \
(%(server_ids)s vm_state='active' and terminated_at is NULL \
and timestampdiff(minute, launched_at, utc_timestamp()) >= %(expiration)s))\
""" % {"project_id": prj_id, "server_ids": ids, "expiration": TTL}

            LOG.debug("getExpiredServers query: %s" % QUERY)

            result = connection.execute(QUERY)

            for row in result.fetchall():
                flavor = Flavor()
                flavor.setVCPUs(row[1])
                flavor.setMemory(row[2])
                flavor.setStorage(row[3])

                server = Server()
                server.setId(row[0])
                server.setState(row[4])
                server.setUserData(row[5])
                server.setFlavor(flavor)

                QUERY = """select `key`, value from nova.instance_metadata \
where instance_uuid='%(id)s' and deleted_at is NULL""" % {"id": server.getId()}

                LOG.debug("getExpiredServers query: %s" % QUERY)

                result = connection.execute(QUERY)
                metadata = {}

                for row in result.fetchall():
                    metadata[row[0]] = row[1]

                server.setMetadata(metadata)
                server.setType()

                servers.append(server)
        except SQLAlchemyError as ex:
            raise SynergyError(ex.message)
        finally:
            connection.close()

        return servers
    def getProjectServers(self, prj_id):
        connection = self.db_engine.connect()
        servers = []

        try:
            # retrieve the amount of resources in terms of cores and memory
            QUERY = """select a.uuid, a.vcpus, a.memory_mb, a.root_gb, \
a.vm_state, a.user_data from nova.instances as a WHERE a.project_id=\
'%(project_id)s'and a.vm_state in ('active', 'building', 'error') and \
a.deleted_at is NULL and a.terminated_at is NULL""" % {
                "project_id": prj_id
            }

            LOG.debug("getProjectServers query: %s" % QUERY)

            result = connection.execute(QUERY)

            for row in result.fetchall():
                flavor = Flavor()
                flavor.setVCPUs(row[1])
                flavor.setMemory(row[2])
                flavor.setStorage(row[3])

                server = Server()
                server.setId(row[0])
                server.setState(row[4])
                server.setUserData(row[5])
                server.setFlavor(flavor)

                QUERY = """select `key`, value from nova.instance_metadata \
where instance_uuid='%(id)s' and deleted_at is NULL""" % {
                    "id": server.getId()
                }

                LOG.debug("getProjectServers query: %s" % QUERY)

                result = connection.execute(QUERY)
                metadata = {}

                for row in result.fetchall():
                    metadata[row[0]] = row[1]

                server.setMetadata(metadata)
                server.setType()

                servers.append(server)
        except SQLAlchemyError as ex:
            raise SynergyError(ex.message)
        finally:
            connection.close()

        return servers
    def getProjectServers(self, prj_id):
        connection = self.db_engine.connect()
        servers = []

        try:
            # retrieve the amount of resources in terms of cores and memory
            QUERY = """select a.uuid, a.vcpus, a.memory_mb, a.root_gb, \
a.vm_state, a.user_data from nova.instances as a WHERE a.project_id=\
'%(project_id)s'and a.vm_state in ('active', 'building', 'error') and \
a.deleted_at is NULL and a.terminated_at is NULL""" % {"project_id": prj_id}

            LOG.debug("getProjectServers query: %s" % QUERY)

            result = connection.execute(QUERY)

            for row in result.fetchall():
                flavor = Flavor()
                flavor.setVCPUs(row[1])
                flavor.setMemory(row[2])
                flavor.setStorage(row[3])

                server = Server()
                server.setId(row[0])
                server.setState(row[4])
                server.setUserData(row[5])
                server.setFlavor(flavor)

                QUERY = """select `key`, value from nova.instance_metadata \
where instance_uuid='%(id)s' and deleted_at is NULL""" % {"id": server.getId()}

                LOG.debug("getProjectServers query: %s" % QUERY)

                result = connection.execute(QUERY)
                metadata = {}

                for row in result.fetchall():
                    metadata[row[0]] = row[1]

                server.setMetadata(metadata)
                server.setType()

                servers.append(server)
        except SQLAlchemyError as ex:
            raise SynergyError(ex.message)
        finally:
            connection.close()

        return servers
    def getExpiredServers(self, prj_id, server_ids, TTL):
        servers = []
        connection = self.db_engine.connect()

        try:
            # retrieve all expired instances for the specified
            # project and expiration time
            ids = ""

            if server_ids:
                ids = "uuid in ('%s') and " % "', '".join(server_ids)

            QUERY = """select uuid, vcpus, memory_mb, root_gb, \
vm_state from nova.instances where project_id = \
'%(project_id)s' and deleted_at is NULL and (vm_state='error' or \
(%(server_ids)s vm_state='active' and terminated_at is NULL \
and timestampdiff(minute, launched_at, utc_timestamp()) >= %(expiration)s))\
""" % {
                "project_id": prj_id,
                "server_ids": ids,
                "expiration": TTL
            }

            LOG.debug("getExpiredServers query: %s" % QUERY)

            result = connection.execute(QUERY)

            for row in result.fetchall():
                flavor = Flavor()
                flavor.setVCPUs(row[1])
                flavor.setMemory(row[2])
                flavor.setStorage(row[3])

                server = Server()
                server.setId(row[0])
                server.setState(row[4])
                server.setFlavor(flavor)

                QUERY = """select `key`, value from nova.instance_metadata \
where instance_uuid='%(id)s' and deleted_at is NULL""" % {
                    "id": server.getId()
                }

                LOG.debug("getExpiredServers query: %s" % QUERY)

                result = connection.execute(QUERY)
                metadata = {}

                for row in result.fetchall():
                    metadata[row[0]] = row[1]

                server.setMetadata(metadata)

                servers.append(server)

        except SQLAlchemyError as ex:
            raise Exception(ex.message)
        finally:
            connection.close()

        return servers