def call_check(data):
    join_room(data["transaction_id"])
    url = data["url"]
    if not re.match(r"^http\://", url):
        data["url"] = "http://%s" % url
    for location in app.config["LOCATIONS"]:
        for testsuite in location["testsuites"]:

            input_data = {
                "transaction_id": data["transaction_id"],

                "location": location["location"],
                "country": location["country"],
                "ISP": location["ISP"],
                "url": data["url"],
            }
            location_queue = "%s_%s" % (location["location"].lower().replace(" ", "_"), location["ISP"].lower().replace(" ", "_"))
            logging.warn(location_queue)

            input_data["test_type"] = testsuite
            if testsuite in ("dns_google", "dns_TM", "dns_opendns"):
                for server in app.config["TESTSUITES"][testsuite]["servers"]:
                    input_data["task_id"] = str(uuid.uuid4())

                    extra_attr = {
                        "provider": app.config["TESTSUITES"][testsuite]["provider"],
                        "server": server
                    }
                    input_data["extra_attr"] = extra_attr
                    logging.warn("DNS Check")
                    description = "%s server: %s " % (app.config["TESTSUITES"][testsuite]["description"], server)
                    input_data["description"] = description
                    result_data = ResultData.from_json(input_data, extra_attr=extra_attr)
                    task = chain(
                            call_dns_task.s(result_data.to_json()).set(queue=location_queue),
                            update_entry.s().set(queue="basecamp"),
                            post_update.s().set(queue="basecamp")
                        ).apply_async()

            else:
                input_data["task_id"] = str(uuid.uuid4())

                input_data["description"] = app.config["TESTSUITES"][testsuite]["description"]
                result_data = ResultData.from_json(input_data)

                if testsuite == "http":
                    task = chain(
                        call_http_task.s(result_data.to_json()).set(queue=location_queue),
                        update_entry.s().set(queue="basecamp"),
                        post_update.s().set(queue="basecamp")
                    ).apply_async()
                elif testsuite == "http_dpi_tampering":
                    task = chain(
                        call_http_dpi_tampering_task.s(result_data.to_json()).set(queue=location_queue),
                        update_entry.s().set(queue="basecamp"),
                        post_update.s().set(queue="basecamp")
                    ).apply_async()
            emit("result_received", result_data.to_json(), room=result_data.transaction_id)
def initialize_entry(data, extra_attr={}):
    db.connect()
    # This should save the data
    result_data = ResultData.from_json(data, extra_attr=extra_attr)
    return result_data.to_json()