How to use @shopify/performance - 10 common examples

To help you get started, we’ve selected a few @shopify/performance examples, based on popular ways it is used in public projects.

Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.

github Shopify / quilt / packages / koa-performance / src / middleware.ts View on Github external
function getAnomalousNavigationDurationTag(
  navigation: Navigation,
  anomalousNavigationDurationThreshold: number,
) {
  return {
    anomalous: navigation.duration > anomalousNavigationDurationThreshold,
  };
}

const EVENT_METRIC_MAPPING = {
  [EventType.TimeToFirstByte]: LifecycleMetric.TimeToFirstByte,
  [EventType.TimeToFirstContentfulPaint]:
    LifecycleMetric.TimeToFirstContentfulPaint,
  [EventType.TimeToFirstPaint]: LifecycleMetric.TimeToFirstPaint,
  [EventType.DomContentLoaded]: LifecycleMetric.DomContentLoaded,
  [EventType.FirstInputDelay]: LifecycleMetric.FirstInputDelay,
  [EventType.Load]: LifecycleMetric.Load,
};

function eventMetricName(event: LifecycleEvent) {
  return EVENT_METRIC_MAPPING[event.type] || event.type;
}
github Shopify / quilt / packages / koa-performance / src / middleware.ts View on Github external
}[] = [];

      const additionalTags = getAdditionalTags
        ? getAdditionalTags(body, userAgent)
        : {};

      const tags = {
        browserConnectionType: connection.effectiveType,
        ...additionalTags,
      };

      statsLogger.log(`Adding event tags: ${JSON.stringify(tags)}`);

      for (const event of events) {
        const value =
          event.type === EventType.FirstInputDelay
            ? event.duration
            : event.start;

        metrics.push({
          name: eventMetricName(event),
          value: Math.round(value),
          tags,
        });
      }

      for (const {details, metadata} of navigations) {
        const navigation = new Navigation(details, metadata);

        const additionalNavigationTags = getAdditionalNavigationTags
          ? getAdditionalNavigationTags(navigation)
          : {};
github Shopify / quilt / packages / react-graphql / src / links / operations-details-link.ts View on Github external
function logOperation(result: FetchResult | Error) {
      const end = now();
      const duration = end - start;
      const success =
        result != null && !(result instanceof Error) && result.data != null;

      const errors =
        result != null && !(result instanceof Error) && result.errors
          ? result.errors.map(({message, path}) => ({
              message,
              path: path && Array.isArray(path) ? path.join(',') : undefined,
            }))
          : undefined;

      const {response} = operation.getContext();

      const requestId =
        response instanceof Response
github Shopify / quilt / packages / react-graphql / src / links / operations-details-link.ts View on Github external
return new ApolloLink((operation, forward) => {
    if (forward == null) {
      return null;
    }

    const start = now();

    function logOperation(result: FetchResult | Error) {
      const end = now();
      const duration = end - start;
      const success =
        result != null && !(result instanceof Error) && result.data != null;

      const errors =
        result != null && !(result instanceof Error) && result.errors
          ? result.errors.map(({message, path}) => ({
              message,
              path: path && Array.isArray(path) ? path.join(',') : undefined,
            }))
          : undefined;

      const {response} = operation.getContext();
github Shopify / quilt / packages / koa-performance / src / middleware.ts View on Github external
function getAnomalousNavigationDurationTag(
  navigation: Navigation,
  anomalousNavigationDurationThreshold: number,
) {
  return {
    anomalous: navigation.duration > anomalousNavigationDurationThreshold,
  };
}

const EVENT_METRIC_MAPPING = {
  [EventType.TimeToFirstByte]: LifecycleMetric.TimeToFirstByte,
  [EventType.TimeToFirstContentfulPaint]:
    LifecycleMetric.TimeToFirstContentfulPaint,
  [EventType.TimeToFirstPaint]: LifecycleMetric.TimeToFirstPaint,
  [EventType.DomContentLoaded]: LifecycleMetric.DomContentLoaded,
  [EventType.FirstInputDelay]: LifecycleMetric.FirstInputDelay,
  [EventType.Load]: LifecycleMetric.Load,
};

function eventMetricName(event: LifecycleEvent) {
  return EVENT_METRIC_MAPPING[event.type] || event.type;
}
github Shopify / quilt / packages / koa-performance / src / middleware.ts View on Github external
navigation: Navigation,
  anomalousNavigationDurationThreshold: number,
) {
  return {
    anomalous: navigation.duration > anomalousNavigationDurationThreshold,
  };
}

const EVENT_METRIC_MAPPING = {
  [EventType.TimeToFirstByte]: LifecycleMetric.TimeToFirstByte,
  [EventType.TimeToFirstContentfulPaint]:
    LifecycleMetric.TimeToFirstContentfulPaint,
  [EventType.TimeToFirstPaint]: LifecycleMetric.TimeToFirstPaint,
  [EventType.DomContentLoaded]: LifecycleMetric.DomContentLoaded,
  [EventType.FirstInputDelay]: LifecycleMetric.FirstInputDelay,
  [EventType.Load]: LifecycleMetric.Load,
};

function eventMetricName(event: LifecycleEvent) {
  return EVENT_METRIC_MAPPING[event.type] || event.type;
}
github Shopify / quilt / packages / koa-performance / src / middleware.ts View on Github external
Array.isArray(value.navigations) &&
    typeof value.pathname === 'string'
  );
}

function getAnomalousNavigationDurationTag(
  navigation: Navigation,
  anomalousNavigationDurationThreshold: number,
) {
  return {
    anomalous: navigation.duration > anomalousNavigationDurationThreshold,
  };
}

const EVENT_METRIC_MAPPING = {
  [EventType.TimeToFirstByte]: LifecycleMetric.TimeToFirstByte,
  [EventType.TimeToFirstContentfulPaint]:
    LifecycleMetric.TimeToFirstContentfulPaint,
  [EventType.TimeToFirstPaint]: LifecycleMetric.TimeToFirstPaint,
  [EventType.DomContentLoaded]: LifecycleMetric.DomContentLoaded,
  [EventType.FirstInputDelay]: LifecycleMetric.FirstInputDelay,
  [EventType.Load]: LifecycleMetric.Load,
};

function eventMetricName(event: LifecycleEvent) {
  return EVENT_METRIC_MAPPING[event.type] || event.type;
}
github Shopify / quilt / packages / koa-performance / src / middleware.ts View on Github external
typeof value.pathname === 'string'
  );
}

function getAnomalousNavigationDurationTag(
  navigation: Navigation,
  anomalousNavigationDurationThreshold: number,
) {
  return {
    anomalous: navigation.duration > anomalousNavigationDurationThreshold,
  };
}

const EVENT_METRIC_MAPPING = {
  [EventType.TimeToFirstByte]: LifecycleMetric.TimeToFirstByte,
  [EventType.TimeToFirstContentfulPaint]:
    LifecycleMetric.TimeToFirstContentfulPaint,
  [EventType.TimeToFirstPaint]: LifecycleMetric.TimeToFirstPaint,
  [EventType.DomContentLoaded]: LifecycleMetric.DomContentLoaded,
  [EventType.FirstInputDelay]: LifecycleMetric.FirstInputDelay,
  [EventType.Load]: LifecycleMetric.Load,
};

function eventMetricName(event: LifecycleEvent) {
  return EVENT_METRIC_MAPPING[event.type] || event.type;
}
github Shopify / quilt / packages / koa-performance / src / middleware.ts View on Github external
}

function getAnomalousNavigationDurationTag(
  navigation: Navigation,
  anomalousNavigationDurationThreshold: number,
) {
  return {
    anomalous: navigation.duration > anomalousNavigationDurationThreshold,
  };
}

const EVENT_METRIC_MAPPING = {
  [EventType.TimeToFirstByte]: LifecycleMetric.TimeToFirstByte,
  [EventType.TimeToFirstContentfulPaint]:
    LifecycleMetric.TimeToFirstContentfulPaint,
  [EventType.TimeToFirstPaint]: LifecycleMetric.TimeToFirstPaint,
  [EventType.DomContentLoaded]: LifecycleMetric.DomContentLoaded,
  [EventType.FirstInputDelay]: LifecycleMetric.FirstInputDelay,
  [EventType.Load]: LifecycleMetric.Load,
};

function eventMetricName(event: LifecycleEvent) {
  return EVENT_METRIC_MAPPING[event.type] || event.type;
}
github Shopify / quilt / packages / koa-performance / src / middleware.ts View on Github external
for (const event of events) {
        const value =
          event.type === EventType.FirstInputDelay
            ? event.duration
            : event.start;

        metrics.push({
          name: eventMetricName(event),
          value: Math.round(value),
          tags,
        });
      }

      for (const {details, metadata} of navigations) {
        const navigation = new Navigation(details, metadata);

        const additionalNavigationTags = getAdditionalNavigationTags
          ? getAdditionalNavigationTags(navigation)
          : {};

        const anomalousNavigationDurationTag = anomalousNavigationDurationThreshold
          ? getAnomalousNavigationDurationTag(
              navigation,
              anomalousNavigationDurationThreshold,
            )
          : {};

        const navigationTags = {
          ...tags,
          ...additionalNavigationTags,
          ...anomalousNavigationDurationTag,