def query_records(build, classification, severity, machine_id, limit, interval_sec=None):
records = Record.query
if build is not None:
records = records.join(Record.build).filter_by(build=build)
if classification is not None:
records = records.join(Record.classification).filter_by(classification=classification)
if severity is not None:
records = records.filter(Record.severity == severity)
if machine_id is not None:
records = records.filter(Record.machine_id == machine_id)
if interval_sec is not None:
current_time = time()
secs_in_past = current_time - interval_sec
# Due to time skew on client systems, delayed sends due to
# spooling, etc, tsp_server works better as the reference
# timestamp.
records = records.filter(Record.tsp_server > secs_in_past)
records = records.order_by(Record.id.desc())
if limit is not None:
records = records.limit(limit)
return records.all()
python类desc()的实例源码
def query_records(build, classification, severity, machine_id, limit, interval_sec=None):
records = Record.query
if build is not None:
records = records.join(Record.build).filter_by(build=build)
if classification is not None:
records = records.join(Record.classification).filter_by(classification=classification)
if severity is not None:
records = records.filter(Record.severity == severity)
if machine_id is not None:
records = records.filter(Record.machine_id == machine_id)
if interval_sec is not None:
current_time = time()
secs_in_past = current_time - interval_sec
# Due to time skew on client systems, delayed sends due to
# spooling, etc, tsp_server works better as the reference
# timestamp.
records = records.filter(Record.tsp_server > secs_in_past)
records = records.order_by(Record.id.desc())
if limit is not None:
records = records.limit(limit)
return records.all()
def get_top_crash_guilties(classes=None):
q = db.session.query(Guilty.function, Guilty.module, Build.build, db.func.count(Record.id).label('total'), Guilty.id, Guilty.comment)
q = q.join(Record)
q = q.join(Build)
q = q.join(Classification).filter(Record.classification_id == Classification.id)
if not classes:
classes = ['org.clearlinux/crash/clr']
q = q.filter(Classification.classification.in_(classes))
q = q.filter(Build.build.op('~')('^[0-9][0-9]+$'))
q = q.filter(Guilty.hide == False)
q = q.group_by(Guilty.function, Guilty.module, Guilty.comment, Guilty.id, Build.build)
q = q.order_by(desc(cast(Build.build, db.Integer)), desc('total'))
# query for records created in the last week (~ 10 Clear builds)
q = q.filter(Build.build.in_(sorted(tuple(set([x[2] for x in q.all()])), key=lambda x: int(x))[-8:]))
interval_sec = 24 * 60 * 60 * 7
current_time = time()
sec_in_past = current_time - interval_sec
q = q.filter(Record.tsp > sec_in_past)
return q.all()
def query_records(build, classification, severity, machine_id, limit, interval_sec=None):
records = Record.query
if build is not None:
records = records.join(Record.build).filter_by(build=build)
if classification is not None:
records = records.join(Record.classification).filter_by(classification=classification)
if severity is not None:
records = records.filter(Record.severity == severity)
if machine_id is not None:
records = records.filter(Record.machine_id == machine_id)
if interval_sec is not None:
current_time = time()
secs_in_past = current_time - interval_sec
# Due to time skew on client systems, delayed sends due to
# spooling, etc, tsp_server works better as the reference
# timestamp.
records = records.filter(Record.tsp_server > secs_in_past)
records = records.order_by(Record.id.desc())
if limit is not None:
records = records.limit(limit)
return records.all()
def get_top_crash_guilties(classes=None):
q = db.session.query(Guilty.function, Guilty.module, Build.build, db.func.count(Record.id).label('total'), Guilty.id, Guilty.comment)
q = q.join(Record)
q = q.join(Build)
q = q.join(Classification).filter(Record.classification_id == Classification.id)
if not classes:
classes = ['org.clearlinux/crash/clr']
q = q.filter(Classification.classification.in_(classes))
q = q.filter(Build.build.op('~')('^[0-9][0-9]+$'))
q = q.filter(Guilty.hide == False)
q = q.group_by(Guilty.function, Guilty.module, Guilty.comment, Guilty.id, Build.build)
q = q.order_by(desc(cast(Build.build, db.Integer)), desc('total'))
# query for records created in the last week (~ 10 Clear builds)
q = q.filter(Build.build.in_(sorted(tuple(set([x[2] for x in q.all()])), key=lambda x: int(x))[-8:]))
interval_sec = 24 * 60 * 60 * 7
current_time = time()
sec_in_past = current_time - interval_sec
q = q.filter(Record.tsp > sec_in_past)
return q.all()
def _sortQuery(self):
''' Sort the query by a given parameter '''
if not isinstance(self.sort, type(None)):
# set the sort variable ModelClass parameter
sortparam = self.marvinform._param_form_lookup.mapToColumn(self.sort)
# If order is specified, then do the sort
if self.order:
assert self.order in ['asc', 'desc'], 'Sort order parameter must be either "asc" or "desc"'
# Check if order by already applied
if 'ORDER' in str(self.query.statement):
self.query = self.query.order_by(None)
# Do the sorting
if 'desc' in self.order:
self.query = self.query.order_by(desc(sortparam))
else:
self.query = self.query.order_by(sortparam)
def server_fault_get_by_server_uuids(self, context, server_uuids):
"""Get all server faults for the provided server_uuids."""
if not server_uuids:
return {}
rows = model_query(context, models.ServerFault).\
filter(models.ServerFault.server_uuid.in_(server_uuids)).\
order_by(desc("created_at"), desc("id")).all()
output = {}
for server_uuid in server_uuids:
output[server_uuid] = []
for row in rows:
data = dict(row)
output[row['server_uuid']].append(data)
return output
def instance_fault_get_by_instance_uuids(context, instance_uuids):
"""Get all instance faults for the provided instance_uuids."""
if not instance_uuids:
return {}
rows = model_query(context, models.InstanceFault, read_deleted='no').\
filter(models.InstanceFault.instance_uuid.in_(
instance_uuids)).\
order_by(desc("created_at"), desc("id")).\
all()
output = {}
for instance_uuid in instance_uuids:
output[instance_uuid] = []
for row in rows:
data = dict(row)
output[row['instance_uuid']].append(data)
return output
##################
def list_web_hook(self):
session = SessionManager.Session()
try:
web_hook_list = session.query(WebHook).\
options(joinedload(WebHook.created_by)).\
order_by(desc(getattr(WebHook, 'register_time'))).\
all()
web_hook_dict_list = []
for web_hook in web_hook_list:
web_hook_dict = row2dict(web_hook)
web_hook_dict.pop('shared_secret', None)
self.__process_user_obj_in_web_hook(web_hook, web_hook_dict)
web_hook_dict_list.append(web_hook_dict)
return json_resp({
'data': web_hook_dict_list,
'total': len(web_hook_list)
})
finally:
SessionManager.Session.remove()
def get_top_player(self):
return Database.session.query(MatchSummary).join(MatchSummary.player). \
order_by(desc(MatchSummary.matches)). \
order_by(desc(MatchSummary.player_win)). \
limit(LIMIT_DATA).all()
def get_match_hero_summary(self, account_id):
return Database.session.query(MatchHeroSummary).join(MatchHeroSummary.hero). \
filter(MatchHeroSummary.account_id == account_id). \
order_by(desc(MatchHeroSummary.matches)). \
order_by(desc(MatchHeroSummary.player_win)). \
limit(LIMIT_DATA).all()
def get_match_item_summary(self, account_id):
return Database.session.query(MatchItemSummary).join(MatchItemSummary.item). \
filter(MatchItemSummary.account_id == account_id). \
order_by(desc(MatchItemSummary.matches)). \
order_by(desc(MatchItemSummary.player_win)). \
limit(LIMIT_DATA).all()
def get_last_history(self):
return Database.session.query(History).order_by(desc(History.id)).first()
def _build_order_expressions(self, criteria, relationships):
"""
:param criteria: criteria dictionary
:type criteria: dict
:param relationships: a dict with all joins to apply, describes current state in recurrent calls
:type relationships: dict
:return: expressions list
:rtype: list
"""
expressions = []
if isinstance(criteria, dict):
criteria = list(criteria.items())
for arg in criteria:
if isinstance(arg, tuple):
arg, value = arg
else:
value = None
is_ascending = True
if len(arg) and arg[0] == '+' or arg[0] == '-':
is_ascending = arg[:1] == '+'
arg = arg[1:]
expression = self._parse_tokens(self.objects_class, arg.split('__'), value, relationships,
lambda c, n, v: n)
if expression is not None:
expressions.append(expression if is_ascending else desc(expression))
return expressions
def actions_get(self, context, container_uuid):
"""Get all container actions for the provided uuid."""
query = model_query(models.ContainerAction).\
filter_by(container_uuid=container_uuid)
actions = _paginate_query(models.ContainerAction, sort_dir='desc',
sort_key='created_at', query=query)
return actions
def _action_get_last_created_by_container_uuid(self, context,
container_uuid):
result = model_query(models.ContainerAction).\
filter_by(container_uuid=container_uuid).\
order_by(desc("created_at"), desc("id")).\
first()
return result
def action_events_get(self, context, action_id):
query = model_query(models.ContainerActionEvent).\
filter_by(action_id=action_id)
events = _paginate_query(models.ContainerActionEvent, sort_dir='desc',
sort_key='created_at', query=query)
return events
def filter_records(build, classification, severity, machine_id=None, os_name=None, limit=None, from_date=None,
to_date=None, payload=None, not_payload=None, data_source=None):
records = Record.query
if build is not None:
records = records.join(Record.build).filter_by(build=build)
if classification is not None:
if isinstance(classification, list):
records = records.join(Record.classification).filter(Classification.classification.in_(classification))
else:
records = records.join(Record.classification).filter(Classification.classification.like(classification))
if severity is not None:
records = records.filter(Record.severity == severity)
if os_name is not None:
records = records.filter(Record.os_name == os_name)
if machine_id is not None:
records = records.filter(Record.machine_id == machine_id)
if from_date is not None:
from_date = mktime(strptime(from_date, "%Y-%m-%d"))
records = records.filter(Record.tsp >= from_date)
if to_date is not None:
to_date = mktime(strptime(to_date, "%Y-%m-%d"))
records = records.filter(Record.tsp < to_date)
if payload is not None:
records = records.filter(Record.backtrace.op('~')(payload))
if not_payload is not None:
records = records.filter(~Record.backtrace.op('~')(not_payload))
if data_source is not None:
if data_source == "external":
records = records.filter(Record.external == True)
elif data_source == "internal":
records = records.filter(Record.external == False)
records = records.order_by(Record.id.desc())
if limit is not None:
records = records.limit(limit)
return records
def get_recordcnts_by_classification():
q = db.session.query(Classification.classification, db.func.count(Record.id).label('total'))
q = q.join(Record.classification)
q = q.group_by(Classification.classification)
q = q.order_by(desc('total'))
return q.all()
def get_recordcnts_by_machine_type():
q = db.session.query(Record.machine, db.func.count(Record.id).label('total'))
q = q.group_by(Record.machine)
q = q.order_by(desc('total'))
return q.all()
def get_crashcnts_by_build(classes=None):
q = db.session.query(Build.build, db.func.count(Record.id)).join(Record).join(Classification)
if not classes:
classes = ['org.clearlinux/crash/clr']
q = q.filter(Classification.classification.in_(classes))
q = q.filter(Build.build.op('~')('^[0-9]+$'))
q = q.group_by(Build.build)
q = q.order_by(desc(cast(Build.build, db.Integer)))
q = q.limit(10)
return q.all()
def get_machine_ids_for_guilty(id, most_recent=None):
q = db.session.query(Build.build, Record.machine_id, db.func.count(Record.id).label('total'), Record.guilty_id)
q = q.join(Record)
q = q.filter(Record.guilty_id == id)
q = q.filter(Record.os_name == 'clear-linux-os')
q = q.filter(Build.build.op('~')('^[0-9][0-9]+$'))
q = q.group_by(Build.build, Record.machine_id, Record.guilty_id)
q = q.order_by(desc(cast(Build.build, db.Integer)), desc('total'))
if most_recent:
interval_sec = 24 * 60 * 60 * int(most_recent)
current_time = time()
sec_in_past = current_time - interval_sec
q = q.filter(Record.tsp > sec_in_past)
return q.all()
def get_swupd_msgs(most_recent=None):
q = db.session.query(Record.tsp, Record.machine_id, Record.backtrace).join(Classification)
q = q.filter(Classification.classification.like('org.clearlinux/swupd-client/%'))
if most_recent:
interval_sec = 24 * 60 * 60 * int(most_recent)
current_time = time()
sec_in_past = current_time - interval_sec
q = q.filter(Record.tsp > sec_in_past)
q = q.order_by(desc(Record.tsp))
return q
def filter_records(build, classification, severity, machine_id=None, os_name=None, limit=None, from_date=None,
to_date=None, payload=None, not_payload=None, data_source=None):
records = Record.query
if build is not None:
records = records.join(Record.build).filter_by(build=build)
if classification is not None:
if isinstance(classification, list):
records = records.join(Record.classification).filter(Classification.classification.in_(classification))
else:
records = records.join(Record.classification).filter(Classification.classification.like(classification))
if severity is not None:
records = records.filter(Record.severity == severity)
if os_name is not None:
records = records.filter(Record.os_name == os_name)
if machine_id is not None:
records = records.filter(Record.machine_id == machine_id)
if from_date is not None:
from_date = mktime(strptime(from_date, "%Y-%m-%d"))
records = records.filter(Record.tsp >= from_date)
if to_date is not None:
to_date = mktime(strptime(to_date, "%Y-%m-%d"))
records = records.filter(Record.tsp < to_date)
if payload is not None:
records = records.filter(Record.backtrace.op('~')(payload))
if not_payload is not None:
records = records.filter(~Record.backtrace.op('~')(not_payload))
if data_source is not None:
if data_source == "external":
records = records.filter(Record.external == True)
elif data_source == "internal":
records = records.filter(Record.external == False)
records = records.order_by(Record.id.desc())
if limit is not None:
records = records.limit(limit)
return records
def get_recordcnts_by_classification():
q = db.session.query(Classification.classification, db.func.count(Record.id).label('total'))
q = q.join(Record.classification)
q = q.group_by(Classification.classification)
q = q.order_by(desc('total'))
return q.all()
def get_crashcnts_by_build(classes=None):
q = db.session.query(Build.build, db.func.count(Record.id)).join(Record).join(Classification)
if not classes:
classes = ['org.clearlinux/crash/clr']
q = q.filter(Classification.classification.in_(classes))
q = q.filter(Build.build.op('~')('^[0-9]+$'))
q = q.group_by(Build.build)
q = q.order_by(desc(cast(Build.build, db.Integer)))
q = q.limit(10)
return q.all()
def get_machine_ids_for_guilty(id, most_recent=None):
q = db.session.query(Build.build, Record.machine_id, db.func.count(Record.id).label('total'), Record.guilty_id)
q = q.join(Record)
q = q.filter(Record.guilty_id == id)
q = q.filter(Record.os_name == 'clear-linux-os')
q = q.filter(Build.build.op('~')('^[0-9][0-9]+$'))
q = q.group_by(Build.build, Record.machine_id, Record.guilty_id)
q = q.order_by(desc(cast(Build.build, db.Integer)), desc('total'))
if most_recent:
interval_sec = 24 * 60 * 60 * int(most_recent)
current_time = time()
sec_in_past = current_time - interval_sec
q = q.filter(Record.tsp > sec_in_past)
return q.all()
def get_swupd_msgs(most_recent=None):
q = db.session.query(Record.tsp, Record.machine_id, Record.backtrace).join(Classification)
q = q.filter(Classification.classification.like('org.clearlinux/swupd-client/%'))
if most_recent:
interval_sec = 24 * 60 * 60 * int(most_recent)
current_time = time()
sec_in_past = current_time - interval_sec
q = q.filter(Record.tsp > sec_in_past)
q = q.order_by(desc(Record.tsp))
return q
def get_recordcnts_by_classification():
q = db.session.query(Classification.classification, db.func.count(Record.id).label('total'))
q = q.join(Record.classification)
q = q.group_by(Classification.classification)
q = q.order_by(desc('total'))
return q.all()
def get_recordcnts_by_machine_type():
q = db.session.query(Record.machine, db.func.count(Record.id).label('total'))
q = q.group_by(Record.machine)
q = q.order_by(desc('total'))
return q.all()