{ "definitions": { "application_schema": { "properties": { "name": { "title": "Application under performance test", "enum": [ "firefox", "chrome", "chrome-m", "fennec", "geckoview", "refbrow", "fenix", "focus", "safari", "safari-tp", "custom-car", "cstm-car-m" ], "maxLength": 10, "type": "string" }, "version": { "title": "Application's version", "maxLength": 40, "type": "string" } }, "required": ["name"], "type": "object" }, "os_schema": { "type": "object", "properties": { "name": { "title": "Operating system name", "type": "string", "minLength": 1, "maxLength": 100 }, "platform_version": { "title": "Operating system version", "type": "string", "minLength": 1, "maxLength": 100 } } }, "framework_schema": { "properties": { "name": { "title": "Framework name", "type": "string" } }, "type": "object" }, "detection_technique_schema": { "title": "Detection technique", "description": "Either the name of a change detection technique to run, or an object configuring one", "oneOf": [ { "title": "Technique name", "description": "Runs the technique with its default settings", "type": "string", "minLength": 1, "maxLength": 50 }, { "title": "Technique configuration", "properties": { "name": { "title": "Detection technique name", "description": "Name surfaced in the alerts this technique produces. Defaults to \"-\", where is a hash of this object, or to \"-\" when a preset is given without custom arguments", "type": "string", "minLength": 1, "maxLength": 50 }, "technique": { "title": "Technique", "description": "Name of the change detection technique to run, e.g. \"mwu\"", "type": "string", "minLength": 1, "maxLength": 50 }, "preset": { "title": "Preset", "description": "Named set of settings to run the technique with, e.g. \"sensitive\"", "type": "string", "minLength": 1, "maxLength": 50 }, "args": { "title": "Technique arguments", "description": "Settings for the technique, overriding those of the preset, or the technique's defaults when no preset is given, e.g. {\"p_value_threshold\": 0.01}", "type": "object", "additionalProperties": { "type": ["number", "string", "boolean"] } } }, "required": ["technique"], "additionalProperties": false, "type": "object" } ] }, "subtest_schema": { "properties": { "name": { "title": "Subtest name", "type": "string", "maxLength": 80 }, "publicName": { "title": "Public subtest name", "description": "Allows renaming test's name, without breaking existing performance data series", "maxLength": 30, "type": "string" }, "value": { "description": "Summary value for subtest", "title": "Subtest value", "type": "number", "minimum": -1000000000000.0, "maximum": 1000000000000.0 }, "unit": { "title": "Measurement unit", "type": "string", "minLength": 1, "maxLength": 20 }, "lowerIsBetter": { "description": "Whether lower values are better for subtest", "title": "Lower is better", "type": "boolean" }, "orderedTrials": { "description": "Whether the replicates list is ordered (default is by trial run).", "title": "Trials ordered", "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 }, "alertSeverity": { "description": "Severity level for alerts produced by this subtest", "title": "Alert severity", "enum": ["critical", "subcritical", "normal"], "type": "string" }, "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 }, "detectionTechniques": { "title": "Detection techniques", "description": "Change detection techniques to run on this subtest's data, and how to configure them", "type": "array", "items": { "$ref": "#/definitions/detection_technique_schema" }, "uniqueItems": true, "maxItems": 8 } }, "required": ["name", "value"], "type": "object" }, "suite_schema": { "properties": { "name": { "title": "Suite name", "type": "string", "maxLength": 80 }, "publicName": { "title": "Public suite name", "description": "Allows renaming suite's name, without breaking existing performance data series", "maxLength": 30, "type": "string" }, "tags": { "type": "array", "title": "Free form tags, which ease the grouping & searching of performance tests", "description": "Similar to extraOptions, except it does not break existing performance data series", "items": { "type": "string", "pattern": "^[a-zA-Z0-9-]{1,24}$" }, "uniqueItems": true, "maxItems": 14 }, "extraOptions": { "type": "array", "title": "Extra options used in running suite", "items": { "type": "string", "maxLength": 100 }, "uniqueItems": true, "maxItems": 8 }, "subtests": { "items": { "$ref": "#/definitions/subtest_schema" }, "title": "Subtests", "type": "array" }, "value": { "title": "Suite value", "type": "number", "minimum": -1000000000000.0, "maximum": 1000000000000.0 }, "unit": { "title": "Measurement unit", "type": "string", "minLength": 1, "maxLength": 20 }, "replicates": { "title": "Suite replicates", "type": "array", "items": { "type": "number", "minimum": -1000000000000.0, "maximum": 1000000000000.0 } }, "lowerIsBetter": { "description": "Whether lower values are better for suite", "title": "Lower is better", "type": "boolean" }, "orderedTrials": { "description": "Whether the replicates list is ordered (default is by trial run).", "title": "Trials ordered", "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 }, "alertSeverity": { "description": "Severity level for alerts produced by this suite", "title": "Alert severity", "enum": ["critical", "subcritical", "normal"], "type": "string" }, "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 }, "monitor": { "description": "Enable non-sheriffed alerting (ignores shouldAlert settings)", "title": "Monitor", "type": "boolean" }, "alertNotifyEmails": { "type": "array", "title": "Notify these emails for any alerts produced", "items": { "type": "string", "maxLength": 100 }, "uniqueItems": true, "maxItems": 8 }, "detectionTechniques": { "title": "Detection techniques", "description": "Change detection techniques to run on this suite's data, and how to configure them", "type": "array", "items": { "$ref": "#/definitions/detection_technique_schema" }, "uniqueItems": true, "maxItems": 8 } }, "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": { "application": { "$ref": "#/definitions/application_schema" }, "os": { "$ref": "#/definitions/os_schema" }, "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" }