Unverified Commit 35cde4e3 authored by Hong Minhee's avatar Hong Minhee
Browse files

Instrument `#fetch*()` methods

parent 50033827
Loading
Loading
Loading
Loading
+6539 −3142

File changed.

Preview size limit exceeded, changes collapsed.

+1 −1
Original line number Diff line number Diff line
@@ -107,7 +107,7 @@ export async function* generateConstructor(
    }
    `;
  } else {
    yield "super(values, { documentLoader, contextLoader });";
    yield "super(values, { documentLoader, contextLoader, tracerProvider });";
  }
  for (const property of type.properties) {
    const fieldName = await getFieldName(property.uri);
+47 −23
Original line number Diff line number Diff line
import { toPascalCase } from "@std/text/to-pascal-case";
import metadata from "../deno.json" with { type: "json" };
import { getFieldName } from "./field.ts";
import type { PropertySchema, TypeSchema } from "./schema.ts";
import { areAllScalarTypes, getTypeNames } from "./type.ts";
@@ -64,10 +65,20 @@ async function* generateProperty(
        options.contextLoader ?? this._contextLoader ?? getDocumentLoader();
      const tracerProvider = options.tracerProvider ??
        this._tracerProvider ?? trace.getTracerProvider();
      const tracer = tracerProvider.getTracer(
        ${JSON.stringify(metadata.name)},
        ${JSON.stringify(metadata.version)},
      );
      return await tracer.startActiveSpan("activitypub.lookup_object", async (span) => {
        let fetchResult: RemoteDocument;
        try {
          fetchResult = await documentLoader(url.href);
        } catch (error) {
          span.setStatus({
            code: SpanStatusCode.ERROR,
            message: String(error),
          });
          span.end();
          if (options.suppressError) {
            getLogger(["fedify", "vocab"]).error(
              "Failed to fetch {url}: {error}",
@@ -84,11 +95,23 @@ async function* generateProperty(
      const rangeType = types[range];
      yield `
        try {
        return await ${rangeType.name}.fromJsonLd(
          const obj = await ${rangeType.name}.fromJsonLd(
            document,
            { documentLoader, contextLoader, tracerProvider },
          );
          span.setAttribute("activitypub.object.id", (obj.id ?? url).href);
          span.setAttribute(
            "activitypub.object.type",
            (obj.constructor as typeof ${rangeType.name}).typeId.href
          );
          span.end();
          return obj;
        } catch (e) {
          span.setStatus({
            code: SpanStatusCode.ERROR,
            message: String(e),
          });
          span.end();
          if (!(e instanceof TypeError)) throw e;
        }
      `;
@@ -96,6 +119,7 @@ async function* generateProperty(
    yield `
        throw new TypeError("Expected an object of any type of: " +
          ${JSON.stringify(property.range)}.join(", "));
      });
    }
    `;
    if (property.functional || property.singularAccessor) {
+1 −1
Original line number Diff line number Diff line
import { TracerProvider } from "@opentelemetry/api";
import type { TracerProvider } from "@opentelemetry/api";
import type { DocumentLoader } from "../runtime/docloader.ts";
import type { Actor, Recipient } from "../vocab/actor.ts";
import type {