Beispiel #1
0
def get_json_meta_type(field, snuba_type):
    alias_definition = FIELD_ALIASES.get(field)
    if alias_definition and alias_definition.get("result_type"):
        return alias_definition.get("result_type")
    if "duration" in field:
        return "duration"
    if field == "transaction.status":
        return "string"
    return get_json_type(snuba_type)
Beispiel #2
0
def get_json_meta_type(field, snuba_type):
    alias_definition = FIELD_ALIASES.get(field)
    if alias_definition and alias_definition.get("result_type"):
        return alias_definition.get("result_type")
    function_match = FUNCTION_ALIAS_PATTERN.match(field)
    if function_match:
        function_definition = FUNCTIONS.get(function_match.group(1))
        if function_definition and function_definition.get("result_type"):
            return function_definition.get("result_type")
    # TODO remove this check when field aliases are removed.
    if "duration" in field or field in ("p75", "p95", "p99"):
        return "duration"
    if field == "transaction.status":
        return "string"
    return get_json_type(snuba_type)
Beispiel #3
0
    def handle_results_with_meta(self, request, organization, project_ids,
                                 results):
        data = self.handle_data(request, organization, project_ids,
                                results.get("data"))
        if not data:
            return {"data": [], "meta": {}}

        meta = {
            value["name"]: snuba.get_json_type(value["type"])
            for value in results["meta"]
        }
        # Ensure all columns in the result have types.
        for key in data[0]:
            if key not in meta:
                meta[key] = "string"
        return {"meta": meta, "data": data}
Beispiel #4
0
    def handle_results(self, snuba_results, requested_query, projects):
        if "project.name" in requested_query["selected_columns"]:
            project_name_index = requested_query["selected_columns"].index(
                "project.name")
            snuba_results["meta"].insert(project_name_index, {
                "name": "project.name",
                "type": "String"
            })
            if "project.id" not in requested_query["selected_columns"]:
                snuba_results["meta"] = [
                    field for field in snuba_results["meta"]
                    if field["name"] != "project.id"
                ]

            for result in snuba_results["data"]:
                if "project.id" in result:
                    result["project.name"] = projects[result["project.id"]]
                    if "project.id" not in requested_query["selected_columns"]:
                        del result["project.id"]

        if "project.name" in requested_query["groupby"]:
            project_name_index = requested_query["groupby"].index(
                "project.name")
            snuba_results["meta"].insert(project_name_index, {
                "name": "project.name",
                "type": "String"
            })
            if "project.id" not in requested_query["groupby"]:
                snuba_results["meta"] = [
                    field for field in snuba_results["meta"]
                    if field["name"] != "project.id"
                ]

            for result in snuba_results["data"]:
                if "project.id" in result:
                    result["project.name"] = projects[result["project.id"]]
                    if "project.id" not in requested_query["groupby"]:
                        del result["project.id"]

        # Convert snuba types to json types
        for col in snuba_results["meta"]:
            col["type"] = snuba.get_json_type(col.get("type"))

        return snuba_results
Beispiel #5
0
    def handle_results(self, snuba_results, requested_query, projects):
        if 'project.name' in requested_query['selected_columns']:
            project_name_index = requested_query['selected_columns'].index(
                'project.name')
            snuba_results['meta'].insert(project_name_index, {
                'name': 'project.name',
                'type': 'String'
            })
            if 'project.id' not in requested_query['selected_columns']:
                snuba_results['meta'] = [
                    field for field in snuba_results['meta']
                    if field['name'] != 'project.id'
                ]

            for result in snuba_results['data']:
                if 'project.id' in result:
                    result['project.name'] = projects[result['project.id']]
                    if 'project.id' not in requested_query['selected_columns']:
                        del result['project.id']

        if 'project.name' in requested_query['groupby']:
            project_name_index = requested_query['groupby'].index(
                'project.name')
            snuba_results['meta'].insert(project_name_index, {
                'name': 'project.name',
                'type': 'String'
            })
            if 'project.id' not in requested_query['groupby']:
                snuba_results['meta'] = [
                    field for field in snuba_results['meta']
                    if field['name'] != 'project.id'
                ]

            for result in snuba_results['data']:
                if 'project.id' in result:
                    result['project.name'] = projects[result['project.id']]
                    if 'project.id' not in requested_query['groupby']:
                        del result['project.id']

        # Convert snuba types to json types
        for col in snuba_results['meta']:
            col['type'] = snuba.get_json_type(col.get('type'))

        return snuba_results
Beispiel #6
0
    def handle_results_with_meta(self, request, organization, project_ids,
                                 results):
        data = self.handle_data(request, organization, project_ids,
                                results.get('data'))
        if not data:
            return {'data': [], 'meta': {}}

        meta = {
            value['name']: snuba.get_json_type(value['type'])
            for value in results['meta']
        }
        # Ensure all columns in the result have types.
        for key in data[0]:
            if key not in meta:
                meta[key] = 'string'
        return {
            'meta': meta,
            'data': data,
        }
Beispiel #7
0
 def test_get_json_type(self):
     assert get_json_type("UInt8") == "boolean"
     assert get_json_type("UInt16") == "integer"
     assert get_json_type("UInt32") == "integer"
     assert get_json_type("UInt64") == "integer"
     assert get_json_type("Float32") == "number"
     assert get_json_type("Float64") == "number"
     assert get_json_type("Nullable(Float64)") == "number"
     assert get_json_type("Array(String)") == "array"
     assert get_json_type("Char") == "string"
     assert get_json_type("unknown") == "string"
     assert get_json_type("") == "string"
Beispiel #8
0
 def test_get_json_type(self):
     assert get_json_type('UInt8') == 'boolean'
     assert get_json_type('UInt16') == 'integer'
     assert get_json_type('UInt32') == 'integer'
     assert get_json_type('UInt64') == 'integer'
     assert get_json_type('Float32') == 'number'
     assert get_json_type('Float64') == 'number'
     assert get_json_type('Nullable(Float64)') == 'number'
     assert get_json_type('Array(String)') == 'array'
     assert get_json_type('Char') == 'string'
     assert get_json_type('unknown') == 'string'
     assert get_json_type('') == 'string'