message: Add telemetry to forceReadonly
  Also enhance telemetry for sending ops in readonly mode.
diff: @@ -18,7 +18,7 @@ import {
  ReadOnlyInfo,
  } from "@fluidframework/container-definitions";
  import { assert, performance, TypedEventEmitter } from "@fluidframework/common-utils";
  -import { TelemetryLogger, safeRaiseEvent, logIfFalse } from "@fluidframework/telemetry-utils";
  +import { TelemetryLogger, safeRaiseEvent, logIfFalse, LoggingError } from "@fluidframework/telemetry-utils";
  import {
  IDocumentDeltaStorageService,
  IDocumentService,
  @@ -390,6 +390,12 @@ export class DeltaManager
  * @param readonly - set or clear force readonly.
  */
  public forceReadonly(readonly: boolean) {
  + if (readonly !== this._forceReadonly) {
  + this.logger.sendTelemetryEvent({
  + eventName: "ForceReadOnly",
  + value: readonly,
  + });
  + }
  const oldValue = this.readonly;
  this._forceReadonly = readonly;
  if (oldValue !== this.readonly) {
  @@ -723,9 +729,16 @@ export class DeltaManager
  // const serializedContent = JSON.stringify(this.messageBuffer);
  // const maxOpSize = this.context.deltaManager.maxMessageSize;
  - // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
  - if (this.readonly) {
  - this.close(CreateContainerError("Op is sent in read-only document state"));
  + if (this.readonly === true) {
  + assert(this.readOnlyInfo.readonly === true, "Unexpected mismatch in readonly");
  + const error = new LoggingError("Op is sent in read-only document state", {
  + errorType: ContainerErrorType.genericError,
  + readonly: this.readOnlyInfo.readonly,
  + forcedReadonly: this.readOnlyInfo.forced,
  + readonlyPermissions: this.readOnlyInfo.permissions,
  + storageOnly: this.readOnlyInfo.storageOnly,
  + });
  + this.close(CreateContainerError(error));
  return -1;
  }
  