in crashclouseau/datacollector.py [0:0]
def get_proto_big(product, signatures, search_date, channel):
"""Get proto-signatures for signatures which have a high # of crashes (>=500)"""
logger.info(
"Get proto-signatures (big) for {}-{}: started.".format(product, channel)
)
def handler(bid, threshold, json, data):
if not json["facets"]["proto_signature"]:
return
installs = json["facets"]["cardinality_install_time"]["value"]
data["installs"][bid] = 1 if installs == 0 else installs
for facets in json["facets"]["proto_signature"]:
protos = data["protos"][bid]
if len(protos) < threshold:
proto = facets["term"]
count = facets["count"]
uuid = facets["facets"]["uuid"][0]["term"]
protos.append({"proto": proto, "count": count, "uuid": uuid})
threshold = config.get_threshold("protos", product, channel)
base_params = {
"product": product,
"release_channel": utils.get_search_channel(channel),
"date": search_date,
"build_id": "",
"signature": "",
"_aggs.proto_signature": "uuid",
"_results_number": 0,
"_facets": "_cardinality.install_time",
"_facets_size": threshold,
}
sgns_by_bids = utils.get_sgns_by_bids(signatures)
for bid, all_signatures in sgns_by_bids.items():
params = copy.deepcopy(base_params)
params["build_id"] = utils.get_buildid(bid)
queries = []
hdler = functools.partial(handler, bid, threshold)
for sgn in all_signatures:
params = copy.deepcopy(params)
params["signature"] = "=" + sgn
queries.append(
Query(
socorro.SuperSearch.URL,
params=params,
handler=hdler,
handlerdata=signatures[sgn],
)
)
socorro.SuperSearch(queries=queries).wait()
logger.info(
"Get proto-signatures (big) for {}-{}: finished.".format(product, channel)
)