{
    "definitions": {
        "framework_schema": {
            "properties": {
                "name": {
                    "title": "Framework name",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "subtest_schema": {
            "properties": {
                "name": {
                    "title": "Subtest name",
                    "type": "string"
                },
                "value": {
                    "description": "Summary value for subtest",
                    "title": "Subtest value",
                    "type": "number",
                    "minimum": -1000000000000.0,
                    "maximum": 1000000000000.0
                },
                "lowerIsBetter": {
                    "description": "Whether lower values are better for subtest",
                    "title": "Lower is better",
                    "type": "boolean"
                },
                "shouldAlert": {
                    "description": "Whether we should alert",
                    "title": "Should alert",
                    "type": "boolean"
                },
                "alertThreshold": {
                    "description": "% change threshold before alerting",
                    "title": "Alert threshold",
                    "type": "number",
                    "minimum": 0.0,
                    "maximum": 1000.0
                },
                "minBackWindow": {
                    "description": "Minimum back window to use for alerting",
                    "title": "Minimum back window",
                    "type": "number",
                    "minimum": 1,
                    "maximum": 255
                },
                "maxBackWindow": {
                    "description": "Maximum back window to use for alerting",
                    "title": "Maximum back window",
                    "type": "number",
                    "minimum": 1,
                    "maximum": 255
                },
                "foreWindow": {
                    "description": "Fore window to use for alerting",
                    "title": "Fore window",
                    "type": "number",
                    "minimum": 1,
                    "maximum": 255
                }
            },
            "required": [
                "name",
                "value"
            ],
            "type": "object"
        },
        "suite_schema": {
            "properties": {
                "name": {
                    "title": "Suite name",
                    "type": "string"
                },
                "extraOptions": {
                    "type": "array",
                    "title": "Extra options used in running suite",
                    "items": {
                        "type": "string"
                    },
                    "uniqueItems": true
                },
                "subtests": {
                    "items": {
                        "$ref": "#/definitions/subtest_schema"
                    },
                    "title": "Subtests",
                    "type": "array"
                },
                "value": {
                    "title": "Suite value",
                    "type": "number",
                    "minimum": -1000000000000.0,
                    "maximum": 1000000000000.0
                },
                "lowerIsBetter": {
                    "description": "Whether lower values are better for suite",
                    "title": "Lower is better",
                    "type": "boolean"
                },
                "shouldAlert": {
                    "description": "Whether we should alert on this suite (overrides default behaviour)",
                    "title": "Should alert",
                    "type": "boolean"
                },
                "alertThreshold": {
                    "description": "% change threshold before alerting",
                    "title": "Alert threshold",
                    "type": "number",
                    "minimum": 0.0,
                    "maximum": 1000.0
                },
                "minBackWindow": {
                    "description": "Minimum back window to use for alerting",
                    "title": "Minimum back window",
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 255
                },
                "maxBackWindow": {
                    "description": "Maximum back window to use for alerting",
                    "title": "Maximum back window",
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 255
                },
                "foreWindow": {
                    "description": "Fore window to use for alerting",
                    "title": "Fore window",
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 255
                }
            },
            "required": [
                "name",
                "subtests"
            ],
            "type": "object"
        }
    },
    "description": "Structure for submitting performance data as part of a job",
    "id": "https://treeherder.mozilla.org/schemas/v1/performance-artifact.json#",
    "properties": {
        "framework": {
            "$ref": "#/definitions/framework_schema"
        },
        "suites": {
            "description": "List of suite-level data submitted as part of this structure",
            "items": {
                "$ref": "#/definitions/suite_schema"
            },
            "title": "Performance suites",
            "type": "array"
        }
    },
    "required": [
        "framework",
        "suites"
    ],
    "title": "Perfherder Schema",
    "type": "object"
}
