chore: More tracing improvements

This commit is contained in:
Tom Moor
2022-12-31 09:04:45 -05:00
parent c6fb764631
commit cdbc6df485
29 changed files with 64 additions and 53 deletions

View File

@@ -142,6 +142,4 @@ export class Mailer {
}
}
const mailer = new Mailer();
export default mailer;
export default new Mailer();

View File

@@ -23,7 +23,8 @@
import { SpanOptions } from "dd-trace";
import DDTags from "dd-trace/ext/tags";
import env from "@server/env";
import tracer, { setError } from "./tracer";
import tracer from "./tracer";
import * as Tracing from "./tracer";
type DDTag = typeof DDTags[keyof typeof DDTags];
@@ -64,20 +65,15 @@ export const traceFunction = (config: TraceConfig) => <
env.ENVIRONMENT === "test"
? target
: (function wrapperFn(this: any, ...args: P): R {
const {
className,
methodName = target.name,
spanName = "DEFAULT_SPAN_NAME",
makeSearchable: useAnalytics,
tags,
} = config;
const { className, methodName = target.name, tags } = config;
const childOf = config.isRoot
? undefined
: tracer.scope().active() || undefined;
const spanName = config.spanName || className || "DEFAULT_SPAN_NAME";
const resourceName = config.resourceName
? config.resourceName
: className
? `${className}.${methodName}`
: methodName;
const spanOptions: SpanOptions = {
childOf,
@@ -100,7 +96,7 @@ export const traceFunction = (config: TraceConfig) => <
);
}
if (useAnalytics) {
if (config.makeSearchable) {
span.setTag(DDTags.ANALYTICS, true);
}
@@ -111,7 +107,7 @@ export const traceFunction = (config: TraceConfig) => <
if (output && typeof output.then === "function") {
output
.catch((error: Error) => {
setError(error, span);
Tracing.setError(error, span);
})
.finally(() => {
span.finish();

View File

@@ -1,6 +1,6 @@
import ApiKey from "@server/models/ApiKey";
export default function present(key: ApiKey) {
export default function presentApiKey(key: ApiKey) {
return {
id: key.id,
name: key.name,

View File

@@ -1,6 +1,6 @@
import { Attachment } from "@server/models";
export default function present(attachment: Attachment) {
export default function presentAttachment(attachment: Attachment) {
return {
documentId: attachment.documentId,
contentType: attachment.contentType,

View File

@@ -1,6 +1,6 @@
import { AuthenticationProvider } from "@server/models";
export default function present(
export default function presentAuthenticationProvider(
authenticationProvider: AuthenticationProvider
) {
return {

View File

@@ -1,6 +1,6 @@
import { Team } from "@server/models";
export default function present(team: Team, isSignedIn = false) {
export default function presentAvailableTeam(team: Team, isSignedIn = false) {
return {
id: team.id,
name: team.name,

View File

@@ -1,6 +1,6 @@
import Collection from "@server/models/Collection";
export default function present(collection: Collection) {
export default function presentCollection(collection: Collection) {
return {
id: collection.id,
url: collection.url,

View File

@@ -8,11 +8,13 @@ type Membership = {
permission: CollectionPermission;
};
export default (membership: CollectionGroup): Membership => {
export default function presentCollectionGroupMembership(
membership: CollectionGroup
): Membership {
return {
id: `${membership.groupId}-${membership.collectionId}`,
groupId: membership.groupId,
collectionId: membership.collectionId,
permission: membership.permission,
};
};
}

View File

@@ -7,7 +7,7 @@ type Options = {
isPublic?: boolean;
};
async function present(
async function presentDocument(
document: Document,
options: Options | null | undefined = {}
) {
@@ -64,5 +64,5 @@ async function present(
}
export default traceFunction({
spanName: "presentDocument",
})(present);
spanName: "presenters",
})(presentDocument);

View File

@@ -1,7 +1,7 @@
import { Event } from "@server/models";
import presentUser from "./user";
export default function present(event: Event, isAdmin = false) {
export default function presentEvent(event: Event, isAdmin = false) {
const data = {
id: event.id,
name: event.name,

View File

@@ -2,7 +2,7 @@ import path from "path";
import { FileOperation } from "@server/models";
import { presentUser } from ".";
export default function present(data: FileOperation) {
export default function presentFileOperation(data: FileOperation) {
return {
id: data.id,
type: data.type,

View File

@@ -1,6 +1,6 @@
import Group from "@server/models/Group";
export default function present(group: Group) {
export default function presentGroup(group: Group) {
return {
id: group.id,
name: group.name,

View File

@@ -8,14 +8,14 @@ type GroupMembership = {
user?: ReturnType<typeof presentUser>;
};
export default (
export default function presentGroupMembership(
membership: GroupUser,
options?: { includeUser: boolean }
): GroupMembership => {
): GroupMembership {
return {
id: `${membership.userId}-${membership.groupId}`,
userId: membership.userId,
groupId: membership.groupId,
user: options?.includeUser ? presentUser(membership.user) : undefined,
};
};
}

View File

@@ -1,6 +1,6 @@
import { Integration } from "@server/models";
export default function present(integration: Integration) {
export default function presentIntegration(integration: Integration) {
return {
id: integration.id,
type: integration.type,

View File

@@ -8,11 +8,13 @@ type Membership = {
permission: CollectionPermission;
};
export default (membership: CollectionUser): Membership => {
export default function presentMembership(
membership: CollectionUser
): Membership {
return {
id: `${membership.userId}-${membership.collectionId}`,
userId: membership.userId,
collectionId: membership.collectionId,
permission: membership.permission,
};
};
}

View File

@@ -1,6 +1,8 @@
import { NotificationSetting } from "@server/models";
export default function present(setting: NotificationSetting) {
export default function presentNotificationSetting(
setting: NotificationSetting
) {
return {
id: setting.id,
event: setting.event,

View File

@@ -1,6 +1,6 @@
import { Pin } from "@server/models";
export default function present(pin: Pin) {
export default function presentPin(pin: Pin) {
return {
id: pin.id,
documentId: pin.documentId,

View File

@@ -6,7 +6,7 @@ type Policy = {
abilities: Record<string, boolean>;
};
function present(user: User, objects: Record<string, any>[]): Policy[] {
function presentPolicy(user: User, objects: Record<string, any>[]): Policy[] {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const { serialize } = require("../policies");
@@ -17,5 +17,5 @@ function present(user: User, objects: Record<string, any>[]): Policy[] {
}
export default traceFunction({
spanName: "presentPolicy",
})(present);
spanName: "presenters",
})(presentPolicy);

View File

@@ -1,8 +1,10 @@
import { traceFunction } from "@server/logging/tracing";
import { Revision } from "@server/models";
import presentUser from "./user";
export default async function present(revision: Revision, diff?: string) {
async function presentRevision(revision: Revision, diff?: string) {
await revision.migrateVersion();
return {
id: revision.id,
documentId: revision.documentId,
@@ -13,3 +15,7 @@ export default async function present(revision: Revision, diff?: string) {
createdBy: presentUser(revision.user),
};
}
export default traceFunction({
spanName: "presenters",
})(presentRevision);

View File

@@ -1,6 +1,6 @@
import { SearchQuery } from "@server/models";
export default function present(searchQuery: SearchQuery) {
export default function presentSearchQuery(searchQuery: SearchQuery) {
return {
id: searchQuery.id,
query: searchQuery.query,

View File

@@ -1,7 +1,7 @@
import { Share } from "@server/models";
import { presentUser } from ".";
export default function present(share: Share, isAdmin = false) {
export default function presentShare(share: Share, isAdmin = false) {
const data = {
id: share.id,
documentId: share.documentId,

View File

@@ -8,7 +8,7 @@ type Action = {
value: string;
};
function present(
function presentSlackAttachment(
document: Document,
team: Team,
collection?: Collection | null,
@@ -34,5 +34,5 @@ function present(
}
export default traceFunction({
spanName: "presentSlackAttachment",
})(present);
spanName: "presenters",
})(presentSlackAttachment);

View File

@@ -1,6 +1,6 @@
import { Star } from "@server/models";
export default function present(star: Star) {
export default function presentStar(star: Star) {
return {
id: star.id,
documentId: star.documentId,

View File

@@ -1,6 +1,6 @@
import { Subscription } from "@server/models";
export default function present(subscription: Subscription) {
export default function presentSubscription(subscription: Subscription) {
return {
id: subscription.id,
userId: subscription.userId,

View File

@@ -1,6 +1,6 @@
import { Team } from "@server/models";
export default function present(team: Team) {
export default function presentTeam(team: Team) {
return {
id: team.id,
name: team.name,

View File

@@ -22,7 +22,10 @@ type UserPresentation = {
preferences?: UserPreferences | null;
};
export default (user: User, options: Options = {}): UserPresentation => {
export default function presentUser(
user: User,
options: Options = {}
): UserPresentation {
const userData: UserPresentation = {
id: user.id,
name: user.name,
@@ -43,4 +46,4 @@ export default (user: User, options: Options = {}): UserPresentation => {
}
return userData;
};
}

View File

@@ -1,7 +1,7 @@
import { View } from "@server/models";
import { presentUser } from "../presenters";
export default function present(view: View) {
export default function presentView(view: View) {
return {
id: view.id,
documentId: view.documentId,

View File

@@ -22,7 +22,7 @@ export interface WebhookPresentation {
createdAt: Date;
}
export default function present({
export default function presentWebhook({
event,
delivery,
payload,

View File

@@ -1,6 +1,8 @@
import { WebhookSubscription } from "@server/models";
export default function present(webhook: WebhookSubscription) {
export default function presentWebhookSubscription(
webhook: WebhookSubscription
) {
return {
id: webhook.id,
name: webhook.name,