Skip to content

Commit

Permalink
feat: Server logging polish and cleanup.
Browse files Browse the repository at this point in the history
  • Loading branch information
SamTolmay committed Jun 22, 2023
1 parent 909a611 commit fe46d23
Show file tree
Hide file tree
Showing 21 changed files with 47 additions and 41 deletions.
2 changes: 1 addition & 1 deletion packages/api/src/routes/auth/createLogger.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ function createLogger({ logger }) {
return {
error: (code, metadata) => logger.error({ code, metadata, event: 'auth_error' }),
warn: (code, metadata) => logger.warn({ code, metadata, event: 'auth_warning' }),
debug: (code, metadata) => logger.debug({ code, metadata }),
debug: (code, metadata) => logger.debug({ code, metadata, event: 'auth_debug' }),
};
}

Expand Down
12 changes: 10 additions & 2 deletions packages/api/src/routes/request/authorizeRequest.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,19 @@ import { ConfigurationError } from '../../context/errors.js';

function authorizeRequest({ authorize, logger }, { requestConfig }) {
if (!authorize(requestConfig)) {
logger.warn({ authorized: false }, 'Unauthorized Request');
logger.debug({
event: 'debug_request_authorize',
authorized: false,
auth_config: requestConfig.auth,
});
// Throw does not exist error to avoid leaking information that request exists to unauthorized users
throw new ConfigurationError(`Request "${requestConfig.requestId}" does not exist.`);
}
logger.debug({ authorized: true }, 'Authorize Request');
logger.debug({
event: 'debug_request_authorize',
authorized: true,
auth_config: requestConfig.auth,
});
}

export default authorizeRequest;
5 changes: 1 addition & 4 deletions packages/api/src/routes/request/callRequest.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,7 @@ import validateSchemas from './validateSchemas.js';

async function callRequest(context, { blockId, pageId, payload, requestId }) {
const { logger } = context;
logger.debug(
{ route: 'request', params: { blockId, pageId, payload, requestId } },
'Started request'
);
logger.debug({ event: 'debug_request', blockId, pageId, payload, requestId });
const requestConfig = await getRequestConfig(context, { pageId, requestId });
const connectionConfig = await getConnectionConfig(context, { requestConfig });
authorizeRequest(context, { requestConfig });
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ import Client from '@lowdefy/client';
import Head from 'next/head';
import Link from 'next/link';

import actions from '../build/plugins/actions.js';
import blocks from '../build/plugins/blocks.js';
import icons from '../build/plugins/icons.js';
import operators from '../build/plugins/operators/client.js';
import actions from '../../build/plugins/actions.js';
import blocks from '../../build/plugins/blocks.js';
import icons from '../../build/plugins/icons.js';
import operators from '../../build/plugins/operators/client.js';

const Page = ({ auth, lowdefy, pageConfig, rootConfig }) => {
const router = useRouter();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import React from 'react';
import AuthConfigured from './AuthConfigured.js';
import AuthNotConfigured from './AuthNotConfigured.js';

import authConfig from '../../build/auth.json';
import authConfig from '../../../build/auth.json';

function Auth({ children, session }) {
if (authConfig.configured === true) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import React, { useEffect, useRef } from 'react';
import { getSession, SessionProvider, signIn, signOut, useSession } from 'next-auth/react';

import lowdefyConfig from '../../build/config.json';
import lowdefyConfig from '../../../build/config.json';

function Session({ children }) {
const wasAuthenticated = useRef(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,21 @@ import crypto from 'crypto';
import { createApiContext } from '@lowdefy/api';
import { getSecretsFromEnv } from '@lowdefy/node-utils';

import config from '../build/config.json';
import connections from '../build/plugins/connections.js';
import config from '../../build/config.json';
import connections from '../../build/plugins/connections.js';
import createLogger from './log/createLogger.js';
import fileCache from './fileCache.js';
import getServerSession from './auth/getServerSession.js';
import logRequest from './log/logRequest.js';
import operators from '../build/plugins/operators/server.js';
import operators from '../../build/plugins/operators/server.js';
import getAuthOptions from './auth/getAuthOptions.js';

function apiWrapper(handler) {
return async function wrappedHandler(req, res) {
let logger = console;
try {
const traceId = crypto.randomUUID();
logger = createLogger({ traceId });
const rid = crypto.randomUUID();
logger = createLogger({ rid });
const authOptions = getAuthOptions({ logger });
const session = await getServerSession({ authOptions, req, res });
// Important to give absolute path so Next can trace build files
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@
import { getNextAuthConfig } from '@lowdefy/api';
import { getSecretsFromEnv } from '@lowdefy/node-utils';

import adapters from '../../build/plugins/auth/adapters.js';
import authJson from '../../build/auth.json';
import callbacks from '../../build/plugins/auth/callbacks.js';
import events from '../../build/plugins/auth/events.js';
import providers from '../../build/plugins/auth/providers.js';
import adapters from '../../../build/plugins/auth/adapters.js';
import authJson from '../../../build/auth.json';
import callbacks from '../../../build/plugins/auth/callbacks.js';
import events from '../../../build/plugins/auth/events.js';
import providers from '../../../build/plugins/auth/providers.js';

function getAuthOptions({ logger }) {
return getNextAuthConfig({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

import { getServerSession as getNextAuthServerSession } from 'next-auth/next';

import authJson from '../../build/auth.json';
import authJson from '../../../build/auth.json';

function getServerSession({ authOptions, req, res }) {
if (authJson.configured === true) {
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,11 @@ import pino from 'pino';

const logger = pino({
name: 'lowdefy_server',
level: 'info', // TODO:
level: process.env.LOWDEFY_LOG_LEVEL ?? 'info',
base: { pid: undefined, hostname: undefined },
});

function createLogger(metadata = {}) {
// TODO: Also configure level here?
return logger.child(metadata);
}

Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,21 @@ import path from 'path';
import crypto from 'crypto';
import { createApiContext } from '@lowdefy/api';

import config from '../build/config.json';
import config from '../../build/config.json';
import createLogger from './log/createLogger.js';
import fileCache from './fileCache.js';
import getServerSession from './auth/getServerSession.js';
import logRequest from './log/logRequest.js';
import getAuthOptions from './auth/getAuthOptions.js';

// TODO: Merge serverSidePropsWrapper and apiWrapper?
function serverSidePropsWrapper(handler) {
return async function wrappedHandler(nextContext) {
let logger = console;
try {
const { req, res } = nextContext;
const traceId = crypto.randomUUID();
logger = createLogger({ traceId });
const rid = crypto.randomUUID();
logger = createLogger({ rid });
const authOptions = getAuthOptions({ logger });
const session = await getServerSession({ authOptions, req, res });
// Important to give absolute path so Next can trace build files
Expand Down
2 changes: 2 additions & 0 deletions packages/server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@
"@lowdefy/blocks-basic": "4.0.0-rc.8",
"@lowdefy/blocks-loaders": "4.0.0-rc.8",
"@lowdefy/client": "4.0.0-rc.8",
"@lowdefy/connection-axios-http": "4.0.0-rc.8",
"@lowdefy/connection-mongodb": "4.0.0-rc.8",
"@lowdefy/helpers": "4.0.0-rc.8",
"@lowdefy/layout": "4.0.0-rc.8",
"@lowdefy/node-utils": "4.0.0-rc.8",
Expand Down
7 changes: 3 additions & 4 deletions packages/server/pages/404.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,16 @@ import path from 'path';
import { createApiContext, getPageConfig, getRootConfig } from '@lowdefy/api';

import config from '../build/config.json';
import createLogger from '../lib/log/createLogger.js';
import fileCache from '../lib/fileCache.js';
import Page from '../lib/Page.js';
import fileCache from '../lib/server/fileCache.js';
import Page from '../lib/client/Page.js';

export async function getStaticProps() {
// Important to give absolute path so Next can trace build files
const context = createApiContext({
buildDirectory: path.join(process.cwd(), 'build'),
config,
fileCache,
logger: createLogger(), // TODO: pino or console or 🤷‍♂️?
logger: console, // TODO: pino or console or 🤷‍♂️?
});

const [rootConfig, pageConfig] = await Promise.all([
Expand Down
5 changes: 3 additions & 2 deletions packages/server/pages/[pageId].js
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,13 @@

import { getPageConfig, getRootConfig } from '@lowdefy/api';

import serverSidePropsWrapper from '../lib/serverSidePropsWrapper.js';
import Page from '../lib/Page.js';
import serverSidePropsWrapper from '../lib/server/serverSidePropsWrapper.js';
import Page from '../lib/client/Page.js';

async function getServerSidePropsHandler({ context, nextContext }) {
const { pageId } = nextContext.params;
const { logger } = context;
// throw new Error('Test', { cause: { a: 4, pageId } });
const [rootConfig, pageConfig] = await Promise.all([
getRootConfig(context),
getPageConfig(context, { pageId }),
Expand Down
2 changes: 1 addition & 1 deletion packages/server/pages/_app.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import React, { useRef } from 'react';
import dynamic from 'next/dynamic';

import Auth from '../lib/auth/Auth.js';
import Auth from '../lib/client/auth/Auth.js';

// Must be in _app due to next specifications.
import '../build/plugins/styles.less';
Expand Down
2 changes: 1 addition & 1 deletion packages/server/pages/api/auth/[...nextauth].js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

import NextAuth from 'next-auth';

import apiWrapper from '../../../lib/apiWrapper.js';
import apiWrapper from '../../../lib/server/apiWrapper.js';
import authJson from '../../../build/auth.json';

async function handler({ context, req, res }) {
Expand Down
3 changes: 1 addition & 2 deletions packages/server/pages/api/request/[pageId]/[requestId].js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

import { callRequest } from '@lowdefy/api';

import apiWrapper from '../../../../lib/apiWrapper.js';
import apiWrapper from '../../../../lib/server/apiWrapper.js';

async function handler({ context, req, res }) {
if (req.method !== 'POST') {
Expand All @@ -25,7 +25,6 @@ async function handler({ context, req, res }) {
const { pageId, requestId } = req.query;
const { blockId, payload } = req.body;
context.logger.info({ event: 'call_request', pageId, requestId, blockId });
context.logger.debug({ payload });
const response = await callRequest(context, { blockId, pageId, payload, requestId });
res.status(200).json(response);
}
Expand Down
4 changes: 2 additions & 2 deletions packages/server/pages/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@

import { getPageConfig, getRootConfig } from '@lowdefy/api';

import serverSidePropsWrapper from '../lib/serverSidePropsWrapper.js';
import Page from '../lib/Page.js';
import serverSidePropsWrapper from '../lib/server/serverSidePropsWrapper.js';
import Page from '../lib/client/Page.js';

async function getServerSidePropsHandler({ context }) {
const rootConfig = await getRootConfig(context);
Expand Down

0 comments on commit fe46d23

Please sign in to comment.