Merge branch 'main' into iain/ratelimiter-should-respect-configuration

This commit is contained in:
Iain Sproat
2025-02-28 09:23:48 +00:00
120 changed files with 430 additions and 183 deletions
+33 -6
View File
@@ -2,21 +2,48 @@
// README at: https://github.com/devcontainers/templates/tree/main/src/typescript-node
{
"name": "Node.js & TypeScript",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
"image": "mcr.microsoft.com/devcontainers/typescript-node:1-18-bullseye",
// We want to deploy all the dependencies (Postgres, Redis, etc.) alongside the devcontainer
// so we can run the app in the container.
"dockerComposeFile": [
"../docker-compose-deps.yml",
"./docker-compose-devcontainer.yml"
],
// name of the service within the docker-compose file which devcontainer tools should connect to
"service": "devcontainer",
//services in the docker-compose file which should run when the devcontainer starts
//"runServices": [] // defaults to all
// Path to the workspace within the container.
// Needs to match destination volume ('volumes' property) in docker-compose-devcontainer.yml.
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
// Features to add to the dev container. More info: https://containers.dev/features.
// "features": {},
"features": {
"ghcr.io/devcontainers/features/docker-outside-of-docker:1": {}
},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// Use 'forwardPorts' to make a list of ports inside the container available locally (e.g. via your browser on your desktop)
"forwardPorts": [
3000, //speckle server
6006, //storybook
8081 //speckle frontend
],
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "yarn && yarn build:public"
"postCreateCommand": "yarn && yarn build:public && cp -n /workspaces/${localWorkspaceFolderBasename}/packages/server/.env-example /workspaces/${localWorkspaceFolderBasename}/packages/server/.env && cp -n /workspaces/${localWorkspaceFolderBasename}/packages/frontend-2/.env.example /workspaces/${localWorkspaceFolderBasename}/packages/frontend-2/.env",
// Configure tool-specific properties.
// "customizations": {},
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root"
"hostRequirements": {
"cpus": 4,
"memory": "8gb"
},
// Environment variables to set in the container.
"remoteEnv": { "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}" }
}
@@ -0,0 +1,194 @@
services:
devcontainer:
image: 'mcr.microsoft.com/devcontainers/typescript-node:1-18-bullseye'
volumes:
- ..:/workspaces:cached # mounts our local directory (git root) to the container in /workspaces directory (with access mode of cached)
# We need to override all node_modules directories
# by mounting an empty volume to avoid conflicting
# CPU build instructions between the host machine and the DevContainer's docker image
# (this allows the devcontainer to be based on linux yet work on Apple Silicon etc..)
# If you add a new package with a new `node_modules`, it needs to be added here
- type: volume
source: node_modules # top-level volume
target: /workspaces/speckle-server/node_modules
read_only: false
- type: volume
source: dui3-node_modules
target: /workspaces/speckle-server/packages/dui3/node_modules
read_only: false
- type: volume
source: fileimport-service-node_modules
target: /workspaces/speckle-server/packages/fileimport-service/node_modules
read_only: false
- type: volume
source: frontend-2-node_modules
target: /workspaces/speckle-server/packages/frontend-2/node_modules
read_only: false
- type: volume
source: monitor-deployment-node_modules
target: /workspaces/speckle-server/packages/monitor-deployment/node_modules
read_only: false
- type: volume
source: objectloader-node_modules
target: /workspaces/speckle-server/packages/objectloader/node_modules
read_only: false
- type: volume
source: objectsender-node_modules
target: /workspaces/speckle-server/packages/objectsender/node_modules
read_only: false
- type: volume
source: preview-frontend-node_modules
target: /workspaces/speckle-server/packages/preview-frontend/node_modules
read_only: false
- type: volume
source: preview-service-node_modules
target: /workspaces/speckle-server/packages/preview-service/node_modules
read_only: false
- type: volume
source: server-node_modules
target: /workspaces/speckle-server/packages/server/node_modules
read_only: false
- type: volume
source: shared-node_modules
target: /workspaces/speckle-server/packages/shared/node_modules
read_only: false
- type: volume
source: tailwind-theme-node_modules
target: /workspaces/speckle-server/packages/tailwind-theme/node_modules
read_only: false
- type: volume
source: ui-components-node_modules
target: /workspaces/speckle-server/packages/ui-components/node_modules
read_only: false
- type: volume
source: ui-components-nuxt-node_modules
target: /workspaces/speckle-server/packages/ui-components-nuxt/node_modules
read_only: false
- type: volume
source: viewer-node_modules
target: /workspaces/speckle-server/packages/viewer/node_modules
read_only: false
- type: volume
source: viewer-sandbox-node_modules
target: /workspaces/speckle-server/packages/viewer-sandbox/node_modules
read_only: false
- type: volume
source: webhook-service-node_modules
target: /workspaces/speckle-server/packages/webhook-service/node_modules
read_only: false
command: sleep infinity
depends_on:
- init
# 'host' network_mode makes services provided via docker-compose-deps available at 127.0.0.1 or localhost.
# They are not available via Docker Compose DNS resolution of the service name e.g. `postgres`.
# This is to ensure that the .env file used for local development remains compatible when running in devcontainer
network_mode: host
# The mcr.microsoft.com/devcontainers/typescript-node docker image used for devcontainer
# runs as user 'node' and not as 'root'
# The mounted volumes (for the node_module CPU architecture build hack) are owned by 'root' by default
# This container will chown these node_modules volumes to the 'node' user
init:
image: debian:bookworm-slim
restart: 'no'
entrypoint: |
/bin/bash -c "groupadd --gid 1000 node && useradd --uid 1000 --gid node --shell /bin/bash --create-home node && find . -type d -name 'node_modules' | grep '\/node_modules$' | xargs chown node:node {}"
volumes:
# We need to override all node_modules directories
# by mounting an empty volume to avoid conflicting
# CPU build instructions between the host machine and the DevContainer's docker image
# (this allows the devcontainer to be based on linux yet work on Apple Silicon etc..)
# If you add a new package with a new `node_modules`, it needs to be added here
- type: volume
source: node_modules
target: /workspaces/speckle-server/node_modules
read_only: false
- type: volume
source: dui3-node_modules
target: /workspaces/speckle-server/packages/dui3/node_modules
read_only: false
- type: volume
source: fileimport-service-node_modules
target: /workspaces/speckle-server/packages/fileimport-service/node_modules
read_only: false
- type: volume
source: frontend-2-node_modules
target: /workspaces/speckle-server/packages/frontend-2/node_modules
read_only: false
- type: volume
source: monitor-deployment-node_modules
target: /workspaces/speckle-server/packages/monitor-deployment/node_modules
read_only: false
- type: volume
source: objectloader-node_modules
target: /workspaces/speckle-server/packages/objectloader/node_modules
read_only: false
- type: volume
source: objectsender-node_modules
target: /workspaces/speckle-server/packages/objectsender/node_modules
read_only: false
- type: volume
source: preview-frontend-node_modules
target: /workspaces/speckle-server/packages/preview-frontend/node_modules
read_only: false
- type: volume
source: preview-service-node_modules
target: /workspaces/speckle-server/packages/preview-service/node_modules
read_only: false
- type: volume
source: server-node_modules
target: /workspaces/speckle-server/packages/server/node_modules
read_only: false
- type: volume
source: shared-node_modules
target: /workspaces/speckle-server/packages/shared/node_modules
read_only: false
- type: volume
source: tailwind-theme-node_modules
target: /workspaces/speckle-server/packages/tailwind-theme/node_modules
read_only: false
- type: volume
source: ui-components-node_modules
target: /workspaces/speckle-server/packages/ui-components/node_modules
read_only: false
- type: volume
source: ui-components-nuxt-node_modules
target: /workspaces/speckle-server/packages/ui-components-nuxt/node_modules
read_only: false
- type: volume
source: viewer-node_modules
target: /workspaces/speckle-server/packages/viewer/node_modules
read_only: false
- type: volume
source: viewer-sandbox-node_modules
target: /workspaces/speckle-server/packages/viewer-sandbox/node_modules
read_only: false
- type: volume
source: webhook-service-node_modules
target: /workspaces/speckle-server/packages/webhook-service/node_modules
read_only: false
volumes:
# We need to override all node_modules directories
# by mounting an empty volume to avoid conflicting
# CPU build instructions between the host machine and the DevContainer's docker image
# (this allows the devcontainer to be based on linux yet work on Apple Silicon etc..)
# If you add a new package with a new `node_modules`, it needs to be added here
node_modules:
dui3-node_modules:
fileimport-service-node_modules:
frontend-2-node_modules:
monitor-deployment-node_modules:
objectloader-node_modules:
objectsender-node_modules:
preview-frontend-node_modules:
preview-service-node_modules:
server-node_modules:
shared-node_modules:
tailwind-theme-node_modules:
ui-components-node_modules:
ui-components-nuxt-node_modules:
viewer-node_modules:
viewer-sandbox-node_modules:
webhook-service-node_modules:
-1
View File
@@ -1,4 +1,3 @@
version: '3'
services:
# Actual Speckle Server dependencies
@@ -382,6 +382,7 @@ function createLink(params: {
// only log as error if at least one error has a status code of 5xx or has no status code
const shouldLogAsWarn = gqlErrors.every(
(e) =>
e.extensions &&
'statusCode' in e.extensions &&
typeof e.extensions.statusCode === 'number' &&
e.extensions.statusCode < 500
@@ -104,6 +104,12 @@ export const formatAppError = (err: SimpleError): SimpleError => {
finalStatusCode = 429
}
if (finalMessage.match(/\/_nuxt\/builds\/meta.*?404/i)) {
finalMessage =
'Speckle is currently upgrading to a newer version. Please reload the page in a few seconds.'
finalStatusCode = 500
}
finalMessage = upperFirst(finalMessage)
return {
@@ -165,7 +171,7 @@ export function enableCustomLoggerHandling(params: {
})
.filter((arg) => {
// Filter out falsy values
return !!arg
return !!arg && !(['null', 'undefined'] as unknown[]).includes(arg)
})
// If nothing valid to log, skip entirely
@@ -73,7 +73,7 @@ export default defineNuxtRouteMiddleware(async (to) => {
const apollo = useApolloClientFromNuxt()
const resourceBuilder = () => SpeckleViewer.ViewerRoute.resourceBuilder()
if (['/streams', '/commits'].includes(path)) {
if (['/streams', '/commits', '/streams/', '/commits/'].includes(path)) {
return navigateTo(homeRoute)
}
+4
View File
@@ -74,6 +74,10 @@ export default defineNuxtConfig({
}
},
experimental: {
emitRouteChunkError: 'automatic-immediate'
},
alias: {
// Rewriting all lodash calls to lodash-es for proper tree-shaking & chunk splitting
// lodash: 'lodash-es'
+2 -1
View File
@@ -324,7 +324,8 @@ export default defineNuxtPlugin(async (nuxtApp) => {
if (!import.meta.server) {
nuxtApp.hook('app:mounted', () => {
logger.info('App mounted in the client', {
important: true
important: true,
speckleServerVersion
})
})
}
+1 -1
View File
@@ -13,7 +13,7 @@ const ignore = [
/** @type {import("mocha").MochaOptions} */
const config = {
spec: ['modules/**/*.spec.js', 'modules/**/*.spec.ts', 'logging/**/*.spec.ts'],
spec: ['modules/**/*.spec.js', 'modules/**/*.spec.ts', 'observability/**/*.spec.ts'],
require: ['ts-node/register', 'test/hooks.ts'],
...(ignore.length ? { ignore } : {}),
slow: 0,
+9 -9
View File
@@ -1,6 +1,6 @@
/* eslint-disable camelcase */
/* eslint-disable no-restricted-imports */
/* istanbul ignore file */
// eslint-disable-next-line no-restricted-imports
import './bootstrap'
import http from 'http'
import express, { Express } from 'express'
@@ -10,20 +10,20 @@ import 'express-async-errors'
import cookieParser from 'cookie-parser'
import { createTerminus } from '@godaddy/terminus'
import Metrics from '@/logging'
import Metrics from '@/observability'
import {
startupLogger,
shutdownLogger,
subscriptionLogger,
graphqlLogger
} from '@/logging/logging'
} from '@/observability/logging'
import {
DetermineRequestIdMiddleware,
LoggingExpressMiddleware,
sanitizeHeaders
} from '@/logging/expressLogging'
} from '@/observability/components/express/expressLogging'
import { errorMetricsMiddleware } from '@/logging/errorMetrics'
import { errorMetricsMiddleware } from '@/observability/components/express/metrics/errorMetrics'
import prometheusClient from 'prom-client'
import { ApolloServer } from '@apollo/server'
@@ -36,7 +36,7 @@ import { SubscriptionServer } from 'subscriptions-transport-ws'
import { execute, subscribe } from 'graphql'
import knex, { db } from '@/db/knex'
import { monitorActiveConnections } from '@/logging/httpServerMonitoring'
import { monitorActiveConnections } from '@/observability/components/httpServer/httpServerMonitoring'
import { buildErrorFormatter } from '@/modules/core/graph/setup'
import {
getFileSizeLimitMB,
@@ -82,10 +82,10 @@ import {
enterNewRequestContext,
getRequestContext,
initiateRequestContextMiddleware
} from '@/logging/requestContext'
} from '@/observability/components/express/requestContext'
import { randomUUID } from 'crypto'
import { onOperationHandlerFactory } from '@/logging/apolloSubscriptions'
import { initApolloSubscriptionMonitoring } from './logging/apolloSubscriptionMonitoring'
import { onOperationHandlerFactory } from '@/observability/components/apollo/apolloSubscriptions'
import { initApolloSubscriptionMonitoring } from '@/observability/components/apollo/metrics/apolloSubscriptionMonitoring'
import { createRateLimiterMiddleware } from '@/modules/core/rest/ratelimiter'
const GRAPHQL_PATH = '/graphql'
+1 -1
View File
@@ -7,7 +7,7 @@
*/
require('ts-node/register')
const { logger } = require('../logging/logging')
const { logger } = require('../observability/logging')
const { init, startHttp } = require('../app')
init()
+1 -1
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env node
'use strict'
const { logger } = require('../dist/logging/logging')
const { logger } = require('../dist/observability/logging')
const { init, startHttp } = require('../dist/app')
init()
+4 -4
View File
@@ -23,8 +23,8 @@ const {
isApolloMonitoringEnabled,
getApolloServerVersion,
getServerVersion
} = require('./modules/shared/helpers/envHelper')
const { logger } = require('@/logging/logging')
} = require('@/modules/shared/helpers/envHelper')
const { logger } = require('@/observability/logging')
if (isApolloMonitoringEnabled() && !getApolloServerVersion()) {
process.env.APOLLO_SERVER_USER_VERSION = getServerVersion()
@@ -46,10 +46,10 @@ if (isTestEnv()) {
dotenv.config({ path: `${packageRoot}/.env` })
// knex is a singleton controlled by module so can't wait til app init
const { initOpenTelemetry } = require('./otel')
const { initOpenTelemetry } = require('@/observability/otel')
initOpenTelemetry()
const { patchKnex } = require('./modules/core/patches/knex')
const { patchKnex } = require('@/modules/core/patches/knex')
patchKnex()
module.exports = {
+1 -1
View File
@@ -1,7 +1,7 @@
/* istanbul ignore file */
const env = process.env.NODE_ENV || 'development'
import configs from '@/knexfile'
import { dbStartupLogger } from '@/logging/logging'
import { dbStartupLogger } from '@/observability/logging'
import knex from 'knex'
const config = configs[env]
+2 -2
View File
@@ -1,7 +1,7 @@
import { Knex } from 'knex'
import { DatabaseError } from '@/modules/shared/errors'
import { ensureError } from '@speckle/shared'
import { logger } from '@/logging/logging'
import { startupLogger } from '@/observability/logging'
export const migrateDbToLatest = async (params: { db: Knex; region: string }) => {
const { db, region } = params
@@ -11,7 +11,7 @@ export const migrateDbToLatest = async (params: { db: Knex; region: string }) =>
await db.migrate.latest()
const durationMs = endStopWatch().milliseconds
logger.info(
startupLogger.info(
{ region, durationMs },
'Migrated db to latest for region "{region}" in {durationMs}ms.'
)
+1 -1
View File
@@ -1,4 +1,4 @@
import { healthCheckLogger } from '@/logging/logging'
import { healthCheckLogger } from '@/observability/logging'
import { highFrequencyMetricsCollectionPeriodMs } from '@/modules/shared/helpers/envHelper'
import { handleLivenessFactory, handleReadinessFactory } from '@/healthchecks/health'
import { FreeConnectionsCalculator, ReadinessHandler } from '@/healthchecks/types'
+1 -1
View File
@@ -12,7 +12,7 @@ import {
postgresConnectionCreateTimeoutMillis,
knexAsyncStackTracesEnabled
} from '@/modules/shared/helpers/envHelper'
import { dbLogger as logger } from '@/logging/logging'
import { dbLogger as logger } from '@/observability/logging'
import { Knex } from 'knex'
import {
createKnexConfig,
@@ -1,5 +1,5 @@
import { db } from '@/db/knex'
import { moduleLogger } from '@/logging/logging'
import { moduleLogger } from '@/observability/logging'
import { initializeEventListenerFactory } from '@/modules/accessrequests/services/eventListener'
import { getStreamCollaboratorsFactory } from '@/modules/core/repositories/streams'
import { publishNotification } from '@/modules/notifications/services/publication'
@@ -1,6 +1,6 @@
import { Optional, SpeckleModule } from '@/modules/shared/helpers/typeHelper'
import { publishNotification } from '@/modules/notifications/services/publication'
import { activitiesLogger, moduleLogger } from '@/logging/logging'
import { activitiesLogger, moduleLogger } from '@/observability/logging'
import { weeklyEmailDigestEnabled } from '@/modules/shared/helpers/envHelper'
import { EventBus, getEventBus } from '@/modules/shared/services/eventBus'
import { sendActivityNotificationsFactory } from '@/modules/activitystream/services/summary'
+1 -1
View File
@@ -1,5 +1,5 @@
import { SpeckleModule } from '@/modules/shared/helpers/typeHelper'
import { moduleLogger } from '@/logging/logging'
import { moduleLogger } from '@/observability/logging'
import { readFile } from 'fs/promises'
import { getFrontendOrigin } from '@/modules/shared/helpers/envHelper'
+1 -1
View File
@@ -1,7 +1,7 @@
import { SpeckleModule } from '@/modules/shared/helpers/typeHelper'
import { registerOrUpdateScopeFactory } from '@/modules/shared/repositories/scopes'
import { authLogger, moduleLogger } from '@/logging/logging'
import { authLogger, moduleLogger } from '@/observability/logging'
import db from '@/db/knex'
import { initializeDefaultAppsFactory } from '@/modules/auth/services/serverApps'
import {
@@ -1,4 +1,4 @@
import { logger, moduleLogger } from '@/logging/logging'
import { logger, moduleLogger } from '@/observability/logging'
import { getDefaultApp } from '@/modules/auth/defaultApps'
import {
CreateApp,
@@ -1,5 +1,5 @@
import { authLogger, type Logger } from '@/logging/logging'
import { maybeLoggerWithContext } from '@/logging/requestContext'
import { authLogger, type Logger } from '@/observability/logging'
import { maybeLoggerWithContext } from '@/observability/components/express/requestContext'
import {
addToMailchimpAudience,
triggerMailchimpCustomerJourney
@@ -56,7 +56,8 @@ import { RateLimiterMemory } from 'rate-limiter-flexible'
import { TIME } from '@speckle/shared'
import type { Application } from 'express'
import { passportAuthenticationCallbackFactory } from '@/modules/auth/services/passportService'
import { testLogger as logger } from '@/logging/logging'
import { testLogger as logger } from '@/observability/logging'
import { Application } from 'express'
const getServerInfo = getServerInfoFactory({ db })
const getUser = getUserFactory({ db })
@@ -1,4 +1,4 @@
import { automateLogger } from '@/logging/logging'
import { automateLogger } from '@/observability/logging'
import {
ExecutionEngineBadResponseBodyError,
type ExecutionEngineErrorResponse,
+2 -2
View File
@@ -1,4 +1,4 @@
import { automateLogger, moduleLogger } from '@/logging/logging'
import { automateLogger, moduleLogger } from '@/observability/logging'
import { Optional, SpeckleModule } from '@/modules/shared/helpers/typeHelper'
import {
onModelVersionCreateFactory,
@@ -58,7 +58,7 @@ import { getEventBus } from '@/modules/shared/services/eventBus'
import { VersionEvents } from '@/modules/core/domain/commits/events'
import { AutomationEvents, AutomationRunEvents } from '@/modules/automate/domain/events'
import { LogicError } from '@/modules/shared/errors'
import { maybeLoggerWithContext } from '@/logging/requestContext'
import { maybeLoggerWithContext } from '@/observability/components/express/requestContext'
const { FF_AUTOMATE_MODULE_ENABLED } = getFeatureFlags()
let quitListeners: Optional<() => void> = undefined
@@ -1,4 +1,4 @@
import { automateLogger } from '@/logging/logging'
import { automateLogger } from '@/observability/logging'
import { CreateStoredAuthCode } from '@/modules/automate/domain/operations'
import { AutomateAuthCodeHandshakeError } from '@/modules/automate/errors/management'
import { EventBus } from '@/modules/shared/services/eventBus'
@@ -43,7 +43,7 @@ import {
speckleAutomateUrl
} from '@/modules/shared/helpers/envHelper'
import { getFunctionsMarketplaceUrl } from '@/modules/core/helpers/routeHelper'
import { automateLogger } from '@/logging/logging'
import { automateLogger } from '@/observability/logging'
import { CreateStoredAuthCode } from '@/modules/automate/domain/operations'
import { GetUser } from '@/modules/core/domain/users/operations'
import { noop } from 'lodash'
@@ -25,7 +25,7 @@ import {
import { TriggerAutomationError } from '@/modules/automate/errors/runs'
import { ContextResourceAccessRules } from '@/modules/core/helpers/token'
import { TokenResourceIdentifierType } from '@/modules/core/graph/generated/graphql'
import { automateLogger } from '@/logging/logging'
import { automateLogger } from '@/observability/logging'
import { FunctionInputDecryptor } from '@/modules/automate/services/encryption'
import { LibsodiumEncryptionError } from '@/modules/shared/errors/encryption'
import {
+2 -2
View File
@@ -15,7 +15,7 @@ import {
ResourceMismatch,
BadRequestError
} from '@/modules/shared/errors'
import { moduleLogger, logger } from '@/logging/logging'
import { moduleLogger } from '@/observability/logging'
import {
getAllStreamBlobIdsFactory,
upsertBlobFactory,
@@ -68,7 +68,7 @@ const ensureConditions = async () => {
}
if (!process.env.S3_BUCKET) {
logger.warn(
moduleLogger.warn(
'S3_BUCKET env variable was not specified. 📦 BlobStorage will be DISABLED.'
)
return
@@ -1,7 +1,7 @@
import { CommandModule } from 'yargs'
import { initializeQueue } from '@/modules/notifications/services/queue'
import { publishNotification } from '@/modules/notifications/services/publication'
import { cliLogger } from '@/logging/logging'
import { cliLogger } from '@/observability/logging'
import { sendActivityNotificationsFactory } from '@/modules/activitystream/services/summary'
import { getActiveUserStreamsFactory } from '@/modules/activitystream/repositories'
import { db } from '@/db/knex'
@@ -8,7 +8,7 @@ import {
buildNotificationsQueue
} from '@/modules/notifications/services/queue'
import { noop } from 'lodash'
import { cliLogger } from '@/logging/logging'
import { cliLogger } from '@/observability/logging'
const PORT = 3032
@@ -1,4 +1,4 @@
import { cliLogger } from '@/logging/logging'
import { cliLogger } from '@/observability/logging'
import { NotificationType } from '@/modules/notifications/helpers/types'
import { initializeConsumption } from '@/modules/notifications/index'
import { EnvironmentResourceError } from '@/modules/shared/errors'
@@ -1,4 +1,4 @@
import { cliLogger } from '@/logging/logging'
import { cliLogger } from '@/observability/logging'
import {
MentionedInCommentData,
NotificationType
@@ -1,7 +1,7 @@
import knex from '@/db/knex'
import { appRoot } from '@/bootstrap'
import fs from 'fs/promises'
import { logger } from '@/logging/logging'
import { cliLogger as logger } from '@/observability/logging'
import { CommandModule } from 'yargs'
import { ensureError } from '@speckle/shared'
import { MisconfiguredEnvironmentError } from '@/modules/shared/errors'
@@ -1,4 +1,4 @@
import { logger } from '@/logging/logging'
import { cliLogger as logger } from '@/observability/logging'
import { CommonDbArgs, getTargettedDbClients } from '@/modules/cli/commands/db/helpers'
import { CommandModule } from 'yargs'
@@ -1,4 +1,4 @@
import { logger } from '@/logging/logging'
import { cliLogger as logger } from '@/observability/logging'
import { CommonDbArgs, getTargettedDbClients } from '@/modules/cli/commands/db/helpers'
import { CommandModule } from 'yargs'
@@ -1,4 +1,4 @@
import { logger } from '@/logging/logging'
import { cliLogger as logger } from '@/observability/logging'
import { CommonDbArgs, getTargettedDbClients } from '@/modules/cli/commands/db/helpers'
import { resetPubSubFactory } from '@/test/hooks'
import { CommandModule } from 'yargs'
@@ -1,4 +1,4 @@
import { logger } from '@/logging/logging'
import { cliLogger as logger } from '@/observability/logging'
import { CommonDbArgs, getTargettedDbClients } from '@/modules/cli/commands/db/helpers'
import { CommandModule } from 'yargs'
@@ -1,5 +1,5 @@
import { db } from '@/db/knex'
import { cliLogger } from '@/logging/logging'
import { cliLogger as logger } from '@/observability/logging'
import { StreamNotFoundError } from '@/modules/core/errors/stream'
import { UserNotFoundError } from '@/modules/core/errors/user'
import { getStreamFactory } from '@/modules/core/repositories/streams'
@@ -55,7 +55,7 @@ const command: CommandModule<
)
}
cliLogger.info(`Generating ${count} objects & commits for stream ${streamId}...`)
logger.info(`Generating ${count} objects & commits for stream ${streamId}...`)
await createTestCommits(
times(
count,
@@ -68,7 +68,7 @@ const command: CommandModule<
})
)
)
cliLogger.info(`...done`)
logger.info(`...done`)
}
}
@@ -1,4 +1,4 @@
import { logger } from '@/logging/logging'
import { cliLogger as logger } from '@/observability/logging'
import { Users, ServerAcl } from '@/modules/core/dbSchema'
import { Roles } from '@/modules/core/helpers/mainConstants'
import { faker } from '@faker-js/faker'
@@ -1,6 +1,6 @@
import { CommandModule } from 'yargs'
import { downloadCommitFactory } from '@/modules/cross-server-sync/services/commit'
import { cliLogger } from '@/logging/logging'
import { cliLogger as logger } from '@/observability/logging'
import {
getStreamCollaboratorsFactory,
getStreamFactory,
@@ -181,7 +181,7 @@ const command: CommandModule<
createCommentReplyAndNotify
})
await downloadCommit(argv, { logger: cliLogger })
await downloadCommit(argv, { logger })
}
}
@@ -1,5 +1,5 @@
import { CommandModule } from 'yargs'
import { cliLogger } from '@/logging/logging'
import { cliLogger as logger } from '@/observability/logging'
import { downloadProjectFactory } from '@/modules/cross-server-sync/services/project'
import { downloadCommitFactory } from '@/modules/cross-server-sync/services/commit'
import {
@@ -226,7 +226,7 @@ const command: CommandModule<
eventEmit: getEventBus().emit
})
})
await downloadProject({ ...argv, regionKey }, { logger: cliLogger })
await downloadProject({ ...argv, regionKey }, { logger })
}
}
@@ -1,5 +1,5 @@
import { CommandModule } from 'yargs'
import { cliLogger } from '@/logging/logging'
import { cliLogger as logger } from '@/observability/logging'
import * as ModulesSetup from '@/modules'
import { printSchema } from 'graphql/utilities'
import fs from 'node:fs/promises'
@@ -17,11 +17,11 @@ const command: CommandModule<unknown, { file: string }> = {
}
},
handler: async ({ file }) => {
cliLogger.info('Loading GQL schema...')
logger.info('Loading GQL schema...')
const schema = ModulesSetup.graphSchema()
const schemaString = printSchema(schema)
cliLogger.info(`Saving to "${file}"...`)
logger.info(`Saving to "${file}"...`)
const absolutePath = path.isAbsolute(file)
? file
: path.resolve(process.cwd(), file)
@@ -1,5 +1,5 @@
import { db } from '@/db/knex'
import { cliLogger } from '@/logging/logging'
import { cliLogger as logger } from '@/observability/logging'
import {
getBatchedStreamCommentsFactory,
getCommentLinksFactory,
@@ -66,11 +66,11 @@ const command: CommandModule<
emitEvent: getEventBus().emit
})
cliLogger.info(
logger.info(
`Cloning stream ${sourceStreamId} into the account of user ${targetUserId}...`
)
const { id } = await cloneStream(targetUserId, sourceStreamId)
cliLogger.info('Cloning successful! New stream ID: ' + id)
logger.info('Cloning successful! New stream ID: ' + id)
}
}
@@ -1,5 +1,5 @@
import { CommandModule } from 'yargs'
import { cliLogger } from '@/logging/logging'
import { cliLogger as logger } from '@/observability/logging'
import { metaHelpers } from '@/modules/core/helpers/meta'
import { Users } from '@/modules/core/dbSchema'
import { UserRecord, UsersMetaRecord } from '@/modules/core/helpers/types'
@@ -9,28 +9,28 @@ const command: CommandModule = {
command: 'test-meta',
describe: 'Testing users meta behaviour',
handler: async () => {
cliLogger.info('Hello world!')
logger.info('Hello world!')
const testUsers = await Users.knex<UserRecord[]>().limit(5)
const firstUserId = testUsers[0]?.id
const secondUserId = testUsers[1]?.id
if (!firstUserId || !secondUserId) {
cliLogger.error('One or more test users were not found')
logger.error('One or more test users were not found')
return
}
const meta = metaHelpers<UsersMetaRecord, typeof Users>(Users, db)
// set value
cliLogger.info(await meta.set(firstUserId, 'foo', false))
cliLogger.info(await meta.set(firstUserId, 'bar', "I'm happy to see ya brodie'!\""))
cliLogger.info(await meta.set(secondUserId, 'foo', { a: 123 }))
logger.info(await meta.set(firstUserId, 'foo', false))
logger.info(await meta.set(firstUserId, 'bar', "I'm happy to see ya brodie'!\""))
logger.info(await meta.set(secondUserId, 'foo', { a: 123 }))
// get value
cliLogger.info(await meta.get<UsersMetaRecord<string>>(firstUserId, 'bar'))
logger.info(await meta.get<UsersMetaRecord<string>>(firstUserId, 'bar'))
// get multiple values
cliLogger.info(
logger.info(
await meta.getMultiple([
{ id: firstUserId, key: 'foo' },
{ id: firstUserId, key: 'bar' },
@@ -40,7 +40,7 @@ const command: CommandModule = {
)
// delete value
cliLogger.info(await meta.delete(firstUserId, 'bar'))
logger.info(await meta.delete(firstUserId, 'bar'))
}
}
@@ -1,5 +1,5 @@
import { CommandModule } from 'yargs'
import { cliLogger } from '@/logging/logging'
import { cliLogger as logger } from '@/observability/logging'
import { getWorkspaceBySlugOrIdFactory } from '@/modules/workspaces/repositories/workspaces'
import { db } from '@/db/knex'
import { upsertPaidWorkspacePlanFactory } from '@/modules/gatekeeper/repositories/billing'
@@ -42,7 +42,7 @@ const command: CommandModule<
}
},
handler: async (args) => {
cliLogger.info(
logger.info(
`Setting plan for workspace '${args.workspaceSlugOrId}' to '${args.plan}' with status '${args.status}'`
)
const workspace = await getWorkspaceBySlugOrIdFactory({ db })(args)
@@ -60,7 +60,7 @@ const command: CommandModule<
status: args.status
}
})
cliLogger.info(`Plan set!`)
logger.info(`Plan set!`)
}
}
+2 -2
View File
@@ -2,7 +2,7 @@
import path from 'path'
import yargs from 'yargs'
import '../../bootstrap'
import { cliLogger, logger } from '@/logging/logging'
import { cliLogger as logger } from '@/observability/logging'
import { isTestEnv } from '@/modules/shared/helpers/envHelper'
import { mochaHooks } from '@/test/hooks'
@@ -23,7 +23,7 @@ const main = async () => {
// In test env, run beforeAll hooks to properly initialize everything first
if (isBeforeAllSet && isTestEnv()) {
cliLogger.info('Running test beforeAll hooks...')
logger.info('Running test beforeAll hooks...')
await (mochaHooks.beforeAll as () => Promise<void>)()
}
})
+1 -1
View File
@@ -1,5 +1,5 @@
import { db } from '@/db/knex'
import { moduleLogger } from '@/logging/logging'
import { moduleLogger } from '@/observability/logging'
import { saveActivityFactory } from '@/modules/activitystream/repositories'
import { reportSubscriptionEventsFactory } from '@/modules/comments/events/subscriptionListeners'
import { getCommentsResourcesFactory } from '@/modules/comments/repositories/comments'
@@ -1,4 +1,4 @@
import { Logger } from '@/logging/logging'
import type { Logger } from '@/observability/logging'
import {
InsertableSpeckleObject,
RawSpeckleObject,
@@ -1,12 +1,12 @@
/* eslint-disable camelcase */
import { type Registry, Counter } from 'prom-client'
import { graphqlLogger } from '@/logging/logging'
import { redactSensitiveVariables } from '@/logging/loggingHelper'
import { graphqlLogger } from '@/observability/logging'
import { redactSensitiveVariables } from '@/observability/utils/redact'
import { FieldNode, SelectionNode } from 'graphql'
import { ApolloServerPlugin } from '@apollo/server'
import { GraphQLContext } from '@/modules/shared/helpers/typeHelper'
import { shouldLogAsInfoLevel } from '@/logging/graphqlError'
import { getRequestContext } from '@/logging/requestContext'
import { shouldLogAsInfoLevel } from '@/observability/utils/logLevels'
import { getRequestContext } from '@/observability/components/express/requestContext'
type ApolloLoggingPluginTransaction = {
start: number
@@ -35,7 +35,7 @@ import {
deleteStreamFactory,
getUserDeletableStreamsFactory
} from '@/modules/core/repositories/streams'
import { dbLogger } from '@/logging/logging'
import { dbLogger } from '@/observability/logging'
import { getAdminUsersListCollectionFactory } from '@/modules/core/services/users/legacyAdminUsersList'
import { Resolvers } from '@/modules/core/graph/generated/graphql'
import { getServerInfoFactory } from '@/modules/core/repositories/server'
+1 -1
View File
@@ -1,4 +1,4 @@
import { moduleLogger } from '@/logging/logging'
import { moduleLogger } from '@/observability/logging'
import {
setupResultListener,
shutdownResultListener
+1 -1
View File
@@ -1,3 +1,3 @@
import { extendLoggerComponent, moduleLogger } from '@/logging/logging'
import { extendLoggerComponent, moduleLogger } from '@/observability/logging'
export const coreLogger = extendLoggerComponent(moduleLogger, 'core')
@@ -5,7 +5,7 @@ import { Optional, ensureError } from '@speckle/shared'
import { ErrorRequestHandler } from 'express'
import { get, isNumber } from 'lodash'
import { VError } from 'verror'
import { logger as defaultLogger } from '@/logging/logging'
import { logger as defaultLogger } from '@/observability/logging'
export const resolveStatusCode = (e: Error): number => {
if (e instanceof BaseError) {
@@ -3,7 +3,6 @@ import { corsMiddlewareFactory } from '@/modules/core/configs/cors'
import { SpeckleObjectsStream } from '@/modules/core/rest/speckleObjectsStream'
import { pipeline, PassThrough } from 'stream'
import { logger } from '@/logging/logging'
import {
getFormattedObjectFactory,
getObjectChildrenStreamFactory
@@ -25,7 +24,7 @@ export default (app: express.Express) => {
app.options('/objects/:streamId/:objectId', corsMiddlewareFactory())
app.get('/objects/:streamId/:objectId', corsMiddlewareFactory(), async (req, res) => {
const boundLogger = (req.log || logger).child({
const boundLogger = req.log.child({
requestId: req.id,
userId: req.context.userId || '-',
streamId: req.params.streamId,
@@ -112,7 +111,7 @@ export default (app: express.Express) => {
'/objects/:streamId/:objectId/single',
corsMiddlewareFactory(),
async (req, res) => {
const boundLogger = (req.log || logger).child({
const boundLogger = req.log.child({
requestId: req.id,
userId: req.context.userId || '-',
streamId: req.params.streamId,
@@ -9,7 +9,7 @@ import {
estimateStringMegabyteSize
} from '@/modules/core/utils/chunking'
import { ObjectHandlingError } from '@/modules/core/errors/object'
import { servicesLogger } from '@/logging/logging'
import { servicesLogger } from '@/observability/logging'
import {
CreateObject,
CreateObjects,
@@ -1,6 +1,6 @@
import cron from 'node-cron'
import { InvalidArgumentError } from '@/modules/shared/errors'
import { logger } from '@/logging/logging'
import { taskSchedulerLogger as logger } from '@/observability/logging'
import {
AcquireTaskLock,
ReleaseTaskLock,
@@ -48,7 +48,7 @@ import {
DeleteStreamRecord,
GetUserDeletableStreams
} from '@/modules/core/domain/streams/operations'
import { Logger } from '@/logging/logging'
import type { Logger } from '@/observability/logging'
import { DeleteAllUserInvites } from '@/modules/serverinvites/domain/operations'
import { GetServerInfo } from '@/modules/core/domain/server/operations'
import { EventBusEmit } from '@/modules/shared/services/eventBus'
@@ -96,7 +96,7 @@ import {
} from '@/modules/core/services/users/management'
import { validateAndCreateUserEmailFactory } from '@/modules/core/services/userEmails'
import { finalizeInvitedServerRegistrationFactory } from '@/modules/serverinvites/services/processing'
import { dbLogger } from '@/logging/logging'
import { dbLogger } from '@/observability/logging'
import {
storeApiTokenFactory,
storeTokenScopesFactory,
@@ -40,7 +40,7 @@ import {
deleteStreamFactory,
getUserDeletableStreamsFactory
} from '@/modules/core/repositories/streams'
import { dbLogger } from '@/logging/logging'
import { dbLogger } from '@/observability/logging'
import { getServerInfoFactory } from '@/modules/core/repositories/server'
import { getEventBus } from '@/modules/shared/services/eventBus'
import { expect } from 'chai'
@@ -1,5 +1,5 @@
import { MaybeAsync, Optional, md5, wait } from '@speckle/shared'
import { dbNotificationLogger } from '@/logging/logging'
import { dbNotificationLogger } from '@/observability/logging'
import { knex } from '@/modules/core/dbSchema'
import * as Knex from 'knex'
import * as pg from 'pg'
@@ -7,7 +7,7 @@ import {
RateLimiterRes
} from 'rate-limiter-flexible'
import { Nullable, TIME } from '@speckle/shared'
import { rateLimiterLogger } from '@/logging/logging'
import { rateLimiterLogger } from '@/observability/logging'
import { createRedisClient } from '@/modules/shared/redis/redis'
import { RateLimitError } from '@/modules/core/errors/ratelimit'
@@ -1,4 +1,4 @@
import { type Logger } from '@/logging/logging'
import { type Logger } from '@/observability/logging'
import { StreamRecord } from '@/modules/core/helpers/types'
export type DownloadCommit = (
@@ -1,5 +1,5 @@
import { db } from '@/db/knex'
import { moduleLogger, crossServerSyncLogger } from '@/logging/logging'
import { moduleLogger, crossServerSyncLogger } from '@/observability/logging'
import { getBlobsFactory } from '@/modules/blobstorage/repositories'
import {
getCommentFactory,
@@ -5,7 +5,7 @@ import { CreateCommentInput } from '@/test/graphql/generated/graphql'
import { Roles, timeoutAt } from '@speckle/shared'
import ObjectLoader from '@speckle/objectloader'
import { noop } from 'lodash'
import { crossServerSyncLogger } from '@/logging/logging'
import { crossServerSyncLogger } from '@/observability/logging'
import type { SpeckleViewer } from '@speckle/shared'
import { retry } from '@speckle/shared'
import {
@@ -1,4 +1,4 @@
import { crossServerSyncLogger } from '@/logging/logging'
import { crossServerSyncLogger } from '@/observability/logging'
import {
GetOnboardingBaseStream,
MarkOnboardingBaseStream
@@ -1,4 +1,4 @@
import { crossServerSyncLogger, Logger } from '@/logging/logging'
import { crossServerSyncLogger, Logger } from '@/observability/logging'
import { CrossServerProjectSyncError } from '@/modules/cross-server-sync/errors'
import {
createApolloClient,
+1 -1
View File
@@ -1,5 +1,5 @@
/* istanbul ignore file */
import { moduleLogger } from '@/logging/logging'
import { moduleLogger } from '@/observability/logging'
import * as SendingService from '@/modules/emails/services/sending'
import { initializeTransporter } from '@/modules/emails/utils/transporter'
import { SpeckleModule } from '@/modules/shared/helpers/typeHelper'
@@ -1,4 +1,4 @@
import { logger } from '@/logging/logging'
import { emailLogger as logger } from '@/observability/logging'
import { SendEmail, SendEmailParams } from '@/modules/emails/domain/operations'
import { getTransporter } from '@/modules/emails/utils/transporter'
import { getEmailFromAddress } from '@/modules/shared/helpers/envHelper'
@@ -1,4 +1,4 @@
import { logger, moduleLogger } from '@/logging/logging'
import { emailLogger as logger } from '@/observability/logging'
import { MisconfiguredEnvironmentError } from '@/modules/shared/errors'
import { isEmailEnabled, isTestEnv } from '@/modules/shared/helpers/envHelper'
import { createTransport, Transporter } from 'nodemailer'
@@ -37,7 +37,7 @@ export async function initializeTransporter(): Promise<Transporter | undefined>
if (!newTransporter) {
const message =
'📧 Email provider is enabled but transport has not initialized correctly. Please review the email configuration or your email system for problems.'
moduleLogger.error(message)
logger.error(message)
throw new MisconfiguredEnvironmentError(message)
}
}
@@ -47,13 +47,13 @@ export async function initializeTransporter(): Promise<Transporter | undefined>
if (!newTransporter) {
const message =
'📧 In testing a mock email provider is enabled but transport has not initialized correctly.'
moduleLogger.error(message)
logger.error(message)
throw new MisconfiguredEnvironmentError(message)
}
}
if (!newTransporter) {
moduleLogger.warn(
logger.warn(
'📧 Email provider is not configured. Server functionality will be limited.'
)
}
+1 -1
View File
@@ -2,7 +2,7 @@
import { insertNewUploadAndNotifyFactory } from '@/modules/fileuploads/services/management'
import request from 'request'
import { authMiddlewareCreator } from '@/modules/shared/middleware'
import { moduleLogger } from '@/logging/logging'
import { moduleLogger } from '@/observability/logging'
import {
onFileImportProcessedFactory,
onFileProcessingFactory,
@@ -12,7 +12,7 @@ import { GetFileInfo } from '@/modules/fileuploads/domain/operations'
import { GetStreamBranchByName } from '@/modules/core/domain/branches/operations'
import { EventBusEmit } from '@/modules/shared/services/eventBus'
import { ModelEvents } from '@/modules/core/domain/branches/events'
import { fileUploadsLogger as logger } from '@/logging/logging'
import { fileUploadsLogger as logger } from '@/observability/logging'
import { FileUploadConvertedStatus } from '@/modules/fileuploads/helpers/types'
import { FileUploadInternalError } from '@/modules/fileuploads/helpers/errors'
+1 -1
View File
@@ -1,5 +1,5 @@
import cron from 'node-cron'
import { logger, moduleLogger } from '@/logging/logging'
import { logger, moduleLogger } from '@/observability/logging'
import { SpeckleModule } from '@/modules/shared/helpers/typeHelper'
import { getFeatureFlags } from '@/modules/shared/helpers/envHelper'
import { validateModuleLicense } from '@/modules/gatekeeper/services/validateLicense'
@@ -1,4 +1,4 @@
import { Logger } from '@/logging/logging'
import type { Logger } from '@/observability/logging'
import {
GetWorkspacePlan,
GetWorkspacePlanPrice,
@@ -1,4 +1,4 @@
import { logger } from '@/logging/logging'
import { testLogger as logger } from '@/observability/logging'
import {
SubscriptionData,
SubscriptionDataInput,
+1 -1
View File
@@ -1,5 +1,5 @@
import { SpeckleModule } from '@/modules/shared/helpers/typeHelper'
import { moduleLogger } from '@/logging/logging'
import { moduleLogger } from '@/observability/logging'
import { getFeatureFlags } from '@/modules/shared/helpers/envHelper'
import restApi from '@/modules/gendo/rest/index'
+1 -1
View File
@@ -8,7 +8,7 @@ import { values, merge, camelCase, reduce, intersection } from 'lodash'
import baseTypeDefs from '@/modules/core/graph/schema/baseTypeDefs'
import { scalarResolvers } from '@/modules/core/graph/scalars'
import { makeExecutableSchema } from '@graphql-tools/schema'
import { moduleLogger } from '@/logging/logging'
import { moduleLogger } from '@/observability/logging'
import { addMocksToSchema } from '@graphql-tools/mock'
import { getFeatureFlags } from '@/modules/shared/helpers/envHelper'
import { isNonNullable } from '@speckle/shared'
+1 -1
View File
@@ -1,4 +1,4 @@
import { moduleLogger } from '@/logging/logging'
import { moduleLogger } from '@/observability/logging'
import {
getValidDefaultProjectRegionKey,
initializeRegisteredRegionClients as initDb
@@ -10,7 +10,7 @@ import {
} from '@/modules/notifications/helpers/types'
import { SpeckleModule } from '@/modules/shared/helpers/typeHelper'
import { shouldDisableNotificationsConsumption } from '@/modules/shared/helpers/envHelper'
import { moduleLogger } from '@/logging/logging'
import { moduleLogger } from '@/observability/logging'
export async function initializeConsumption(
customHandlers?: Partial<NotificationTypeHandlers>
@@ -16,7 +16,7 @@ import { isProdEnv, isTestEnv } from '@/modules/shared/helpers/envHelper'
import Bull from 'bull'
import { buildBaseQueueOptions } from '@/modules/shared/helpers/bullHelper'
import cryptoRandomString from 'crypto-random-string'
import { logger, notificationsLogger, Observability } from '@/logging/logging'
import { logger, notificationsLogger, Observability } from '@/observability/logging'
import { ensureErrorOrWrapAsCause } from '@/modules/shared/errors/ensureError'
export type NotificationJobResult = {
+1 -1
View File
@@ -2,7 +2,7 @@
import { validateScopes, authorizeResolver } from '@/modules/shared'
import { makeOgImage } from '@/modules/previews/ogImage'
import { moduleLogger } from '@/logging/logging'
import { moduleLogger } from '@/observability/logging'
import { messageProcessor } from '@/modules/previews/resultListener'
import { db } from '@/db/knex'
import {
+1 -1
View File
@@ -1,4 +1,4 @@
import { moduleLogger } from '@/logging/logging'
import { moduleLogger } from '@/observability/logging'
import RestSetup from '@/modules/pwdreset/rest'
import { SpeckleModule } from '@/modules/shared/helpers/typeHelper'
import { noop } from 'lodash'
@@ -1,5 +1,5 @@
import { registerOrUpdateScopeFactory } from '@/modules/shared/repositories/scopes'
import { moduleLogger } from '@/logging/logging'
import { moduleLogger } from '@/observability/logging'
import db from '@/db/knex'
import { Scopes } from '@speckle/shared'
import { SpeckleModule } from '@/modules/shared/helpers/typeHelper'
@@ -33,7 +33,7 @@ import { Netmask } from 'netmask'
import { Merge } from 'type-fest'
import { resourceAccessRuleToIdentifier } from '@/modules/core/helpers/token'
import { delayGraphqlResponsesBy } from '@/modules/shared/helpers/envHelper'
import { subscriptionLogger } from '@/logging/logging'
import { subscriptionLogger } from '@/observability/logging'
import { GetUser } from '@/modules/core/domain/users/operations'
import { validateTokenFactory } from '@/modules/core/services/tokens'
import {
@@ -1,4 +1,4 @@
import { redisLogger } from '@/logging/logging'
import { redisLogger } from '@/observability/logging'
import Redis, { RedisOptions } from 'ioredis'
import {
EnvironmentResourceError,
@@ -8,7 +8,7 @@ import {
import Mixpanel from 'mixpanel'
import type express from 'express'
import type http from 'http'
import { mixpanelLogger } from '@/logging/logging'
import { mixpanelLogger } from '@/observability/logging'
let client: Optional<Mixpanel.Mixpanel> = undefined
let baseTrackingProperties: Optional<Record<string, string>> = undefined
+1 -1
View File
@@ -1,4 +1,4 @@
import { moduleLogger } from '@/logging/logging'
import { moduleLogger } from '@/observability/logging'
import { SpeckleModule } from '@/modules/shared/helpers/typeHelper'
export const init: SpeckleModule['init'] = async () => {
+1 -1
View File
@@ -1,6 +1,6 @@
import cron from 'node-cron'
import { SpeckleModule } from '@/modules/shared/helpers/typeHelper'
import { activitiesLogger, moduleLogger } from '@/logging/logging'
import { activitiesLogger, moduleLogger } from '@/observability/logging'
import { scheduleExecutionFactory } from '@/modules/core/services/taskScheduler'
import {
acquireTaskLockFactory,
@@ -21,7 +21,7 @@ import {
isProjectResourceTarget,
resolveTarget
} from '@/modules/serverinvites/helpers/core'
import { logger, moduleLogger } from '@/logging/logging'
import { logger, moduleLogger } from '@/observability/logging'
import { updateWorkspaceRoleFactory } from '@/modules/workspaces/services/management'
import { EventPayload, getEventBus } from '@/modules/shared/services/eventBus'
import { WorkspaceInviteResourceType } from '@/modules/workspacesCore/domain/constants'
+1 -1
View File
@@ -1,4 +1,4 @@
import { moduleLogger } from '@/logging/logging'
import { moduleLogger } from '@/observability/logging'
import { getFeatureFlags } from '@/modules/shared/helpers/envHelper'
import { registerOrUpdateScopeFactory } from '@/modules/shared/repositories/scopes'
import db from '@/db/knex'
@@ -38,7 +38,7 @@ import {
getEmailFromOidcProfile,
isValidSsoSession
} from '@/modules/workspaces/domain/sso/logic'
import { Logger } from '@/logging/logging'
import type { Logger } from '@/observability/logging'
// this probably should go a lean validation endpoint too
const validateOidcProviderAttributes = ({
@@ -1,5 +1,5 @@
import { SpeckleModule } from '@/modules/shared/helpers/typeHelper'
import { moduleLogger } from '@/logging/logging'
import { moduleLogger } from '@/observability/logging'
export const init: SpeckleModule['init'] = () => {
moduleLogger.info('⚒️ Init workspaces core module')
@@ -1,13 +1,16 @@
/* eslint-disable camelcase */
import type { GraphQLContext } from '@/modules/shared/helpers/typeHelper'
import type { ExecutionParams } from 'subscriptions-transport-ws'
import { shouldLogAsInfoLevel, shouldLogAsWarnLevel } from '@/logging/graphqlError'
import {
shouldLogAsInfoLevel,
shouldLogAsWarnLevel
} from '@/observability/utils/logLevels'
import { BaseError } from '@/modules/shared/errors'
import { GraphQLError } from 'graphql'
import { redactSensitiveVariables } from '@/logging/loggingHelper'
import { redactSensitiveVariables } from '@/observability/utils/redact'
import type { Counter } from 'prom-client'
import { getRequestContext } from '@/logging/requestContext'
import { subscriptionLogger } from '@/logging/logging'
import { getRequestContext } from '@/observability/components/express/requestContext'
import { subscriptionLogger } from '@/observability/logging'
// eslint-disable-next-line @typescript-eslint/no-explicit-any
type SubscriptionResponse = { errors?: GraphQLError[]; data?: any }
@@ -1,4 +1,4 @@
import { logger } from '@/logging/logging'
import { logger } from '@/observability/logging'
import { randomUUID } from 'crypto'
import HttpLogger from 'pino-http'
import type { NextFunction, Response } from 'express'
@@ -1,4 +1,4 @@
import { REQUEST_ID_HEADER } from '@/logging/expressLogging'
import { REQUEST_ID_HEADER } from '@/observability/components/express/expressLogging'
import { asyncRequestContextEnabled } from '@/modules/shared/helpers/envHelper'
import type express from 'express'
import { AsyncLocalStorage } from 'node:async_hooks'
@@ -17,7 +17,7 @@
*/
import { Histogram, Registry } from 'prom-client'
import type { Metric } from '@/logging/highFrequencyMetrics/highfrequencyMonitoring'
import type { Metric } from '@/observability/components/highFrequencyMetrics/highfrequencyMonitoring'
const NODEJS_HEAP_SIZE_TOTAL = 'nodejs_heap_size_total_bytes_high_frequency'
const NODEJS_HEAP_SIZE_USED = 'nodejs_heap_size_used_bytes_high_frequency'
@@ -5,9 +5,9 @@
*/
import { Histogram, Registry } from 'prom-client'
import { processCpuTotal } from '@/logging/highFrequencyMetrics/processCPUTotal'
import { heapSizeAndUsed } from '@/logging/highFrequencyMetrics/heapSizeAndUsed'
import { knexConnections } from '@/logging/highFrequencyMetrics/knexConnectionPool'
import { processCpuTotal } from '@/observability/components/highFrequencyMetrics/processCPUTotal'
import { heapSizeAndUsed } from '@/observability/components/highFrequencyMetrics/heapSizeAndUsed'
import { knexConnections } from '@/observability/components/highFrequencyMetrics/knexConnectionPool'
import { type Knex } from 'knex'
type MetricConfig = {

Some files were not shown because too many files have changed in this diff Show More