def build_message()

in treeherder/etl/taskcluster_pulse/handler.py [0:0]


def build_message(push_info, task, run_id, payload):
    task_id = payload["status"]["taskId"]
    job_run = payload["status"]["runs"][run_id]
    treeherder_config = task["extra"]["treeherder"]

    job = {
        "buildSystem": "taskcluster",
        "owner": task["metadata"]["owner"],
        "taskId": f"{slugid.decode(task_id)}/{run_id}",
        "retryId": run_id,
        "isRetried": False,
        "display": {
            # jobSymbols could be an integer (i.e. Chunk ID) but need to be strings
            # for treeherder
            "jobSymbol": str(treeherder_config["symbol"]),
            "groupSymbol": treeherder_config.get("groupSymbol", "?"),
            # Maximum job name length is 140 chars...
            "jobName": task["metadata"]["name"][0:139],
        },
        "state": state_from_run(job_run),
        "result": result_from_run(job_run),
        "tier": treeherder_config.get("tier", 1),
        "timeScheduled": task["created"],
        "jobKind": treeherder_config.get("jobKind", "other"),
        "reason": treeherder_config.get("reason", "scheduled"),
        "jobInfo": {
            "links": [],
            "summary": task["metadata"]["description"],
        },
        "version": 1,
    }

    job["origin"] = {
        "kind": push_info["origin"],
        "project": push_info["project"],
        "revision": push_info["revision"],
    }

    if push_info["origin"] == "hg.mozilla.org":
        job["origin"]["pushLogID"] = push_info["id"]
    else:
        job["origin"]["pullRequestID"] = push_info["id"]
        job["origin"]["owner"] = push_info["owner"]

    # Transform "collection" into an array of labels if task doesn't
    # define "labels".
    labels = treeherder_config.get("labels", [])
    if not labels:
        if not treeherder_config.get("collection"):
            labels = ["opt"]
        else:
            labels = list(treeherder_config["collection"].keys())

    job["labels"] = labels

    machine = treeherder_config.get("machine", {})
    job["buildMachine"] = {
        "name": job_run.get("workerId", "unknown"),
        "platform": machine.get("platform", task["workerType"]),
        "os": machine.get("os", "-"),
        "architecture": machine.get("architecture", "-"),
    }

    if treeherder_config.get("productName"):
        job["productName"] = treeherder_config["productName"]

    if treeherder_config.get("groupName"):
        job["display"]["groupName"] = treeherder_config["groupName"]

    return job