Merged in chore/redirect-counter (pull request #3302)

Counter name is now searchable and add counter for redirects

* refactor: createCounter() only takes one argument, the name of the counter. Makes it easier to search for

* feat: add counter when we do a redirect from redirect-service


Approved-by: Linus Flood
This commit is contained in:
Joakim Jäderberg
2025-12-08 10:24:05 +00:00
parent edca33c49f
commit 8b94540d19
61 changed files with 146 additions and 236 deletions

View File

@@ -35,7 +35,7 @@ async function linkEmployeeToUser(
employeeId: string,
accessToken: string
): Promise<LinkEmployeeResult> {
const apiCallCounter = createCounter("dtmc.api", "team_member_card")
const apiCallCounter = createCounter("dtmc.api.team_member_card")
const metricsApiCall = apiCallCounter.init({ employee_id: employeeId })
metricsApiCall.start()
@@ -121,7 +121,7 @@ async function linkEmployeeToUser(
* here we can check both sessions, the Scandic Friends one and the Azure one.
*/
export async function GET(request: NextRequest) {
const dtmcLinkCounter = createCounter("dtmc.employee", "link")
const dtmcLinkCounter = createCounter("dtmc.employee.link")
const metricsEmployeeLink = dtmcLinkCounter.init()
metricsEmployeeLink.start()

View File

@@ -25,7 +25,7 @@ import {
export const dynamic = "force-dynamic"
export async function GET(request: NextRequest) {
const generateSitemapCounter = createCounter("sitemap", "generate")
const generateSitemapCounter = createCounter("sitemap.generate")
const metricsGenerateSitemap = generateSitemapCounter.init()
try {
metricsGenerateSitemap.start()
@@ -44,7 +44,7 @@ export async function GET(request: NextRequest) {
const responseData = await contentstackSync(syncToken)
const mergedEntries = mergeEntries(currentEntries, responseData.entries)
const entriesSaveCounter = createCounter("sitemap", "entries.save")
const entriesSaveCounter = createCounter("sitemap.entries.save")
const metricsEntriesSave = entriesSaveCounter.init({
entriesCount: mergedEntries.length,
})
@@ -59,7 +59,7 @@ export async function GET(request: NextRequest) {
const sitemapData = mapEntriesToSitemapData(mergedEntries, hotelFilters)
const lastUpdated = dt().utc().format()
const saveDataCounter = createCounter("sitemap", "data.save")
const saveDataCounter = createCounter("sitemap.data.save")
const metricsDataSave = saveDataCounter.init({
sitemapEntriesCount: sitemapData.length,
lastUpdated,
@@ -70,7 +70,7 @@ export async function GET(request: NextRequest) {
metricsDataSave.success()
if (syncToken !== responseData.syncToken) {
const syncTokenSaveCounter = createCounter("sitemap", "syncToken.save")
const syncTokenSaveCounter = createCounter("sitemap.syncToken.save")
const metricsSyncTokenSave = syncTokenSaveCounter.init({
syncToken: responseData.syncToken,
})

View File

@@ -19,7 +19,7 @@ export async function contentstackSync(syncToken: string | null) {
const entries = []
const syncOptions = syncToken ? { sync_token: syncToken } : { init: true }
const entriesSyncCounter = createCounter("sitemap", "entries.sync")
const entriesSyncCounter = createCounter("sitemap.entries.sync")
const metricsEntriesSync = entriesSyncCounter.init({
environment,
...syncOptions,
@@ -33,8 +33,7 @@ export async function contentstackSync(syncToken: string | null) {
entries.push(...syncResponse.items)
const entriesSyncPaginationCounter = createCounter(
"sitemap",
"entries.sync.pagination"
"sitemap.entries.sync.pagination"
)
const metricsEntriesSyncPagination = entriesSyncPaginationCounter.init({
environment,

View File

@@ -15,7 +15,7 @@ export function mergeEntries(
currentEntries: SyncItem[],
newEntries: SyncItem[]
) {
const entriesMergeCounter = createCounter("sitemap", "entries.merge")
const entriesMergeCounter = createCounter("sitemap.entries.merge")
const metricsEntriesMerge = entriesMergeCounter.init({
currentEntriesCount: currentEntries.length,
newEntriesCount: newEntries.length,
@@ -57,8 +57,7 @@ export function mergeEntries(
export function mapEntriesToHotelFilters(entries: SyncItem[]) {
const entriesTransformToHotelFiltersCounter = createCounter(
"sitemap",
"entries.transform.hotelFilters"
"sitemap.entries.transform.hotelFilters"
)
const metricsEntriesTransformToHotelFilters =
entriesTransformToHotelFiltersCounter.init({
@@ -93,11 +92,10 @@ export function mapEntriesToSitemapData(
entries: SyncItem[],
hotelFilters: HotelFilterEntries
) {
const entriesTransformCounter = createCounter("sitemap", "entries.transform")
const entriesTransformCounter = createCounter("sitemap.entries.transform")
const metricsEntriesTransform = entriesTransformCounter.init({
entriesCount: entries.length,
})
metricsEntriesTransform.start()
const filteredEntries = filterEntriesToSitemapEntries(entries)

View File

@@ -10,7 +10,7 @@ import { env } from "@/env/server"
import type { JWT } from "next-auth/jwt"
import type { OIDCConfig } from "next-auth/providers"
export const signInCounter = createCounter("auth", "signIn")
export const signInCounter = createCounter("auth.signIn")
function getLoginType(user: User) {
if (user?.login_with.includes("@")) {

View File

@@ -2,6 +2,7 @@ import { type NextMiddleware, NextResponse } from "next/server"
import { getCacheClient } from "@scandic-hotels/common/dataCache"
import { logger } from "@scandic-hotels/common/logger"
import { createCounter } from "@scandic-hotels/common/telemetry"
import { findLang } from "@scandic-hotels/common/utils/languages"
import { notFound } from "@/server/errors/next"
@@ -45,7 +46,7 @@ async function fetchAndCacheRedirect(lang: Lang, pathname: string) {
"1d"
)
}
const redirectCounter = createCounter("middleware.redirect")
export const middleware: NextMiddleware = async (request) => {
const lang = findLang(request.nextUrl.pathname)!
const headers = getDefaultRequestHeaders(request)
@@ -56,6 +57,14 @@ export const middleware: NextMiddleware = async (request) => {
)
if (matchedRedirect) {
redirectCounter
.init({
lang,
pathname: request.nextUrl.pathname,
newPathname: matchedRedirect,
})
.success()
const newUrl = new URL(matchedRedirect, getPublicNextURL(request))
headers.set("Cache-control", "public, max-age=14400") // 4 hours
return NextResponse.redirect(newUrl, {