Skip to content

Allow for custom reports to be generated & queued #259

Open
@scottpledger

Description

@scottpledger

Allowing individual execution contexts to construct and send their own reports would allow this API to provide a single, consistent approach for the reporting of important client-side information such as unhandled errors, timing metrics, and usage information.

One API I have in mind for this is loosely based on the Performance API and goes something like:

class Reporter extends EventHandler {
  constructor(options?: ReporterOptions);
  static report<T extends string>(type: T, options?: ReportOptions): CustomReport;
  report(type: T, options?: ReportOptions): CustomReport;
}

interface ReporterOptions {
  readonly name?: string;
  readonly detail?: any;
}

interface ReportOptions {
  readonly detail: any;
  readonly timestamp: DomHighResTimeStamp;
}

class CustomReport extends Report {
  readonly body: CustomReportBody;
}

class CustomReportBody extends ReportBody {
  readonly reporter?: ReporterOptions;
  readonly detail?: any;
}

An execution context may then initialize a new report as:

Reporter.report('unhandled-error');
// or
const myReporter = new Reporter({name: 'toolbar'});
myReporter.report('item-clicked', {detail: {'item-name': 'Save'}});

All custom reports' types would be prefixed with 'custom-' so that they are clearly differentiated from browser-native events. Individual Reporter instances provide additional details about the context of a report.

The "body" of these reports would include a "detail" entry containing the "detail" value from the report as well as a "reporter" entry which contains values from the ReporterOptions of the Reporter instance that constructed the report, if any.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions