From fc6cb2dfdd50ed00e26fdcef4f8d8f34cd57d1be Mon Sep 17 00:00:00 2001 From: Matchu Date: Fri, 23 Apr 2021 12:31:41 -0700 Subject: [PATCH] Fix Honeycomb trace labels for API endpoints I'm learning that top-level traces should use operation_name as well as name, because name is the low-level thing that every trace gets (including child traces like db queries and net requests)! Also there was an incorrect label in one of these, and validPetPoses was missing it altogether --- api/allWakaValues.js | 5 ++++- api/outfitImage.js | 5 ++++- api/sendFeedback.js | 5 ++++- api/uploadLayerImage.js | 5 ++++- api/validPetPoses.js | 17 ++++++++++++++++- 5 files changed, 32 insertions(+), 5 deletions(-) diff --git a/api/allWakaValues.js b/api/allWakaValues.js index 06e1563..b00acd7 100644 --- a/api/allWakaValues.js +++ b/api/allWakaValues.js @@ -131,5 +131,8 @@ function normalizeItemName(name) { } export default async (req, res) => { - beeline.withTrace({ name: "allWakaValues" }, () => handle(req, res)); + beeline.withTrace( + { name: "api/allWakaValues", operation_name: "api/allWakaValues" }, + () => handle(req, res) + ); }; diff --git a/api/outfitImage.js b/api/outfitImage.js index 158c417..72fef32 100644 --- a/api/outfitImage.js +++ b/api/outfitImage.js @@ -67,5 +67,8 @@ async function handle(req, res) { } export default async (req, res) => { - beeline.withTrace({ name: "outfitImage" }, () => handle(req, res)); + beeline.withTrace( + { name: "api/outfitImage", operation_name: "api/outfitImage" }, + () => handle(req, res) + ); }; diff --git a/api/sendFeedback.js b/api/sendFeedback.js index 4a3d96e..2b2c07c 100644 --- a/api/sendFeedback.js +++ b/api/sendFeedback.js @@ -47,5 +47,8 @@ async function handle(req, res) { } export default async (req, res) => { - beeline.withTrace({ name: "uploadLayerImage" }, () => handle(req, res)); + beeline.withTrace( + { name: "api/sendFeedback", operation_name: "api/sendFeedback" }, + () => handle(req, res) + ); }; diff --git a/api/uploadLayerImage.js b/api/uploadLayerImage.js index 429cebe..d805dde 100644 --- a/api/uploadLayerImage.js +++ b/api/uploadLayerImage.js @@ -171,5 +171,8 @@ async function handle(req, res) { } export default async (req, res) => { - beeline.withTrace({ name: "uploadLayerImage" }, () => handle(req, res)); + beeline.withTrace( + { name: "api/uploadLayerImage", operation_name: "api/uploadLayerImage" }, + () => handle(req, res) + ); }; diff --git a/api/validPetPoses.js b/api/validPetPoses.js index 647392b..04ea0fa 100644 --- a/api/validPetPoses.js +++ b/api/validPetPoses.js @@ -1,3 +1,11 @@ +const beeline = require("honeycomb-beeline")({ + writeKey: process.env["HONEYCOMB_WRITE_KEY"], + dataset: + process.env["NODE_ENV"] === "production" + ? "Dress to Impress (2020)" + : "Dress to Impress (2020, dev)", + serviceName: "impress-2020-gql-server", +}); import connectToDb from "../src/server/db"; import { getPoseFromPetState, normalizeRow } from "../src/server/util"; @@ -83,7 +91,7 @@ async function getDistinctPetStates(db) { return rows.map(normalizeRow); } -export default async (req, res) => { +async function handle(req, res) { const buffer = await getValidPetPoses(); // Cache for 1 hour. This will also cache at Vercel's CDN, so the function @@ -91,4 +99,11 @@ export default async (req, res) => { res.setHeader("Cache-Control", "max-age=3600"); res.status(200).send(buffer); +} + +export default async (req, res) => { + beeline.withTrace( + { name: "api/validPetPoses", operation_name: "api/validPetPoses" }, + () => handle(req, res) + ); };