diff --git a/lib/entry-points.js b/lib/entry-points.js index 347343d0ed..14c662839a 100644 --- a/lib/entry-points.js +++ b/lib/entry-points.js @@ -147779,13 +147779,16 @@ function flushDiagnostics(config) { unwrittenDiagnostics = []; unwrittenDefaultLanguageDiagnostics = []; } -function makeTelemetryDiagnostic(id, name, attributes) { +function makeTelemetryDiagnostic(id, name, attributes, tags) { return makeDiagnostic(id, name, { attributes, visibility: { cliSummaryTable: false, statusPage: false, telemetry: true + }, + source: { + tags } }); } @@ -147987,7 +147990,8 @@ function mergeDefaultSetupAndUserConfigs(logger, fromConfigInput, fromConfigFile "Invalid Default Setup configuration keys", { invalidKeys: schemaCheckResult.invalidKeys - } + }, + ["internal-error"] ) ); } @@ -148002,7 +148006,8 @@ function mergeDefaultSetupAndUserConfigs(logger, fromConfigInput, fromConfigFile "Unrecognised Default Setup configuration keys", { unrecognisedKeys: schemaCheckResult.unknownKeys - } + }, + ["internal-error"] ) ); } diff --git a/src/config/db-config.ts b/src/config/db-config.ts index 582cfe8afc..7b5bdbd8ce 100644 --- a/src/config/db-config.ts +++ b/src/config/db-config.ts @@ -125,6 +125,7 @@ export function mergeDefaultSetupAndUserConfigs( { invalidKeys: schemaCheckResult.invalidKeys, }, + ["internal-error"], ), ); } @@ -140,6 +141,7 @@ export function mergeDefaultSetupAndUserConfigs( { unrecognisedKeys: schemaCheckResult.unknownKeys, }, + ["internal-error"], ), ); } diff --git a/src/diagnostics.ts b/src/diagnostics.ts index 65e82ce1af..fa0e87c046 100644 --- a/src/diagnostics.ts +++ b/src/diagnostics.ts @@ -6,24 +6,45 @@ import { Language } from "./languages"; import { getActionsLogger } from "./logging"; import { getCodeQLDatabasePath } from "./util"; -/** Represents a diagnostic message for the tool status page, etc. */ -export interface DiagnosticMessage { +/** + * Known tags for diagnostics. There is currently only "internal-error", + * but others may be added in the future. + */ +export type DiagnosticTag = "internal-error"; + +/** Optional information about the origin of a diagnostic. */ +export type DiagnosticSourceOptions = { + /** + * Name of the CodeQL extractor. This is used to identify which tool component the reporting + * descriptor object should be nested under in SARIF. + */ + extractorName?: string; + /** An array of tags for the diagnostic. */ + tags?: DiagnosticTag[]; +}; + +/** Represents information about the origin of a diagnostic. */ +export type DiagnosticSource = { + /** + * An identifier under which it makes sense to group this diagnostic message. + * This is used to build the SARIF reporting descriptor object. + */ + id: string; + /** Display name for the ID. This is used to build the SARIF reporting descriptor object. */ + name: string; +} & DiagnosticSourceOptions; + +/** + * Represents a diagnostic message for the tool status page, etc. + * + * Unlike {@link DiagnosticMessage}, properties which can automatically + * be populated are optional in this type. + */ +export type DiagnosticMessageOptions = { /** ISO 8601 timestamp */ - timestamp: string; - source: { - /** - * An identifier under which it makes sense to group this diagnostic message. - * This is used to build the SARIF reporting descriptor object. - */ - id: string; - /** Display name for the ID. This is used to build the SARIF reporting descriptor object. */ - name: string; - /** - * Name of the CodeQL extractor. This is used to identify which tool component the reporting - * descriptor object should be nested under in SARIF. - */ - extractorName?: string; - }; + timestamp?: string; + /** Information about the origin of the diagnostic. */ + source?: DiagnosticSourceOptions; /** GitHub flavored Markdown formatted message. Should include inline links to any help pages. */ markdownMessage?: string; /** Plain text message. Used by components where the string processing needed to support Markdown is cumbersome. */ @@ -53,7 +74,15 @@ export interface DiagnosticMessage { }; /** Structured metadata about the diagnostic message */ attributes?: { [key: string]: any }; -} +}; + +/** Represents a diagnostic message for the tool status page, etc. */ +export type DiagnosticMessage = DiagnosticMessageOptions & { + /** ISO 8601 timestamp */ + timestamp: string; + /** Information about the origin of the diagnostic. */ + source: DiagnosticSource; +}; /** Represents a diagnostic message that has not yet been written to the database. */ interface UnwrittenDiagnostic { @@ -90,7 +119,7 @@ let diagnosticCounter = 0; export function makeDiagnostic( id: string, name: string, - data: Partial | undefined = undefined, + data: DiagnosticMessageOptions | undefined = undefined, ): DiagnosticMessage { return { ...data, @@ -243,6 +272,7 @@ export function makeTelemetryDiagnostic( id: string, name: string, attributes: { [key: string]: any }, + tags?: DiagnosticTag[], ): DiagnosticMessage { return makeDiagnostic(id, name, { attributes, @@ -251,5 +281,8 @@ export function makeTelemetryDiagnostic( statusPage: false, telemetry: true, }, + source: { + tags, + }, }); }