add server log

This commit is contained in:
itsrubberduck
2026-02-17 15:31:32 +01:00
parent 1e69c52b70
commit 59bede6ad4
8 changed files with 368 additions and 5 deletions

View File

@@ -1,6 +1,7 @@
import { createError } from 'h3'
import { requireUserSession } from '../../utils/auth'
import { getBridgeTokenFromHeader } from '../../utils/bridge'
import { logBridgeEvent } from '../../utils/bridgeLog'
import { BridgeToken } from '../../models/BridgeToken'
export default defineEventHandler(async (event) => {
@@ -35,7 +36,7 @@ export default defineEventHandler(async (event) => {
throw createError({ statusCode: 500, statusMessage: 'Token konnte nicht gespeichert werden.' })
}
return {
const result = {
success: true,
token: document.token,
connectedAt: document.connectedAt?.toISOString() ?? now.toISOString(),
@@ -45,4 +46,15 @@ export default defineEventHandler(async (event) => {
name: user.name,
},
}
logBridgeEvent(token, {
endpoint: '/api/bridge/connect',
method: 'POST',
statusCode: 200,
color: '#22c55e',
summary: `Linked to ${user.name || user.email}`,
data: result as unknown as Record<string, unknown>,
})
return result
})

View File

@@ -1,6 +1,7 @@
import { createError, defineEventHandler, readBody } from 'h3'
import { BridgeToken } from '../../models/BridgeToken'
import { getBridgeTokenFromHeader } from '../../utils/bridge'
import { logBridgeEvent } from '../../utils/bridgeLog'
import { flightlabTelemetryStore } from '../../utils/flightlabTelemetry'
import type { FlightLabTelemetryState } from '../../../shared/data/flightlab/types'
@@ -59,6 +60,15 @@ export default defineEventHandler(async (event) => {
const mapped = mapBridgeTelemetry(body)
flightlabTelemetryStore.update(userId, mapped)
logBridgeEvent(bridgeToken, {
endpoint: '/api/bridge/data',
method: 'POST',
statusCode: 200,
color: '#d946ef',
summary: `Telemetry ${telemetryKeys.length} keys — IAS ${mapped.AIRSPEED_INDICATED.toFixed(0)}kt ALT ${mapped.PLANE_ALTITUDE.toFixed(0)}ft`,
data: mapped as unknown as Record<string, unknown>,
})
return {
// n1_pct: (mapped.TURB_ENG_N1_1 ?? 0) + 10,
// n1_pct_2: (mapped.TURB_ENG_N1_2 ?? 0) + 10,

View File

@@ -1,6 +1,7 @@
import { createError } from 'h3'
import { requireUserSession } from '../../utils/auth'
import { getBridgeTokenFromHeader } from '../../utils/bridge'
import { logBridgeEvent } from '../../utils/bridgeLog'
import { BridgeToken } from '../../models/BridgeToken'
export default defineEventHandler(async (event) => {
@@ -46,6 +47,14 @@ export default defineEventHandler(async (event) => {
},
)
logBridgeEvent(token, {
endpoint: '/api/bridge/disconnect',
method: 'POST',
statusCode: 200,
color: '#ef4444',
summary: `Unlinked from ${user.name || user.email}`,
})
return {
success: true,
token,

View File

@@ -0,0 +1,15 @@
import { createError, getQuery } from 'h3'
import { getBridgeTokenFromHeader } from '../../utils/bridge'
import { getBridgeLog } from '../../utils/bridgeLog'
export default defineEventHandler((event) => {
const token = getBridgeTokenFromHeader(event)
if (!token) {
throw createError({ statusCode: 401, statusMessage: 'x-bridge-token header fehlt oder ist ungültig.' })
}
const query = getQuery(event)
const since = Number(query.since) || 0
return getBridgeLog(token, since)
})

View File

@@ -1,6 +1,7 @@
import { createError } from 'h3'
import { BridgeToken } from '../../models/BridgeToken'
import { getBridgeTokenFromHeader } from '../../utils/bridge'
import { logBridgeEvent } from '../../utils/bridgeLog'
import type { UserDocument } from '../../models/User'
export default defineEventHandler(async (event) => {
@@ -15,7 +16,7 @@ export default defineEventHandler(async (event) => {
const document = await BridgeToken.findOne({ token }).populate('user', 'name email')
if (!document || !document.user) {
return {
const result = {
token,
connected: false,
user: null,
@@ -24,11 +25,21 @@ export default defineEventHandler(async (event) => {
connectedAt: document?.connectedAt ? document.connectedAt.toISOString() : null,
lastStatusAt: document?.lastStatusAt ? document.lastStatusAt.toISOString() : null,
}
logBridgeEvent(token, {
endpoint: '/api/bridge/me',
method: 'GET',
statusCode: 200,
color: '#06b6d4',
summary: 'Status check — not connected',
})
return result
}
const bridgeUser = document.user as UserDocument
return {
const result = {
token: document.token,
connected: true,
user: {
@@ -41,4 +52,14 @@ export default defineEventHandler(async (event) => {
connectedAt: document.connectedAt?.toISOString() ?? document.updatedAt.toISOString(),
lastStatusAt: document.lastStatusAt ? document.lastStatusAt.toISOString() : null,
}
logBridgeEvent(token, {
endpoint: '/api/bridge/me',
method: 'GET',
statusCode: 200,
color: '#06b6d4',
summary: `Status check — connected as ${bridgeUser.name || bridgeUser.email}`,
})
return result
})

View File

@@ -1,6 +1,7 @@
import { createError, readBody } from 'h3'
import { BridgeToken } from '../../models/BridgeToken'
import { getBridgeTokenFromHeader } from '../../utils/bridge'
import { logBridgeEvent } from '../../utils/bridgeLog'
import type { UserDocument } from '../../models/User'
interface StatusBody {
@@ -46,7 +47,7 @@ export default defineEventHandler(async (event) => {
const user = document.user as UserDocument | undefined
return {
const result = {
token: document.token,
connected: Boolean(user),
user: user
@@ -61,4 +62,15 @@ export default defineEventHandler(async (event) => {
connectedAt: document.connectedAt ? document.connectedAt.toISOString() : null,
lastStatusAt: document.lastStatusAt ? document.lastStatusAt.toISOString() : null,
}
logBridgeEvent(token, {
endpoint: '/api/bridge/status',
method: 'POST',
statusCode: 200,
color: '#eab308',
summary: `sim=${String(body.simConnected)} flight=${String(body.flightActive)}`,
data: body as Record<string, unknown>,
})
return result
})