Update matcher binary path to /app/bin/face_matcher in configuration and documentation
All checks were successful
Publish FaceAI Container / publish (push) Successful in 2m53s
All checks were successful
Publish FaceAI Container / publish (push) Successful in 2m53s
This commit is contained in:
parent
cf316c8563
commit
c0732c142c
7 changed files with 76 additions and 8 deletions
|
|
@ -60,6 +60,35 @@ app.use(cors({
|
|||
credentials: true
|
||||
}));
|
||||
|
||||
function summarizeRace(race) {
|
||||
return {
|
||||
id: race?.id || null,
|
||||
name: race?.name || null,
|
||||
storage: race?.storage || null
|
||||
};
|
||||
}
|
||||
|
||||
function summarizeUser(user) {
|
||||
return {
|
||||
id: user?.id || null,
|
||||
displayName: user?.displayName || null,
|
||||
membershipStatus: user?.membershipStatus || null
|
||||
};
|
||||
}
|
||||
|
||||
function clientIp(req) {
|
||||
const forwardedFor = String(req.headers['x-forwarded-for'] || '').split(',')[0].trim();
|
||||
return forwardedFor || req.ip || req.socket?.remoteAddress || null;
|
||||
}
|
||||
|
||||
function logFaceAiAccess(event, req, details = {}) {
|
||||
console.log(`[FaceAI] ${event} ${JSON.stringify({
|
||||
ip: clientIp(req),
|
||||
userAgent: req.headers['user-agent'] || null,
|
||||
...details
|
||||
})}`);
|
||||
}
|
||||
|
||||
function getFaceAiSession(req) {
|
||||
const sessionId = req.cookies[config.sessionCookieName];
|
||||
return sessionId ? getSession(sessionId) : null;
|
||||
|
|
@ -318,6 +347,15 @@ app.post('/api/auth/exchange', async (req, res) => {
|
|||
}
|
||||
});
|
||||
|
||||
logFaceAiAccess('Session exchange', req, {
|
||||
sessionId,
|
||||
user: summarizeUser(payload.user),
|
||||
race: summarizeRace(race),
|
||||
lang: payload.lang,
|
||||
availability,
|
||||
returnUrl: payload.returnUrl
|
||||
});
|
||||
|
||||
res.cookie(config.sessionCookieName, sessionId, {
|
||||
httpOnly: true,
|
||||
sameSite: 'lax',
|
||||
|
|
@ -341,6 +379,13 @@ app.post('/api/auth/exchange', async (req, res) => {
|
|||
});
|
||||
|
||||
app.get('/api/session', requireSession, (req, res) => {
|
||||
logFaceAiAccess('Session viewed', req, {
|
||||
sessionId: req.cookies[config.sessionCookieName] || null,
|
||||
user: summarizeUser(req.faceaiSession.user),
|
||||
race: summarizeRace(req.faceaiSession.race),
|
||||
lang: req.faceaiSession.lang,
|
||||
availability: req.faceaiSession.availability || null
|
||||
});
|
||||
res.json(req.faceaiSession);
|
||||
});
|
||||
|
||||
|
|
@ -420,6 +465,16 @@ app.post('/api/searches', requireSession, enforceSearchRateLimit, upload.single(
|
|||
removeOnFail: 100
|
||||
});
|
||||
|
||||
logFaceAiAccess('Identification requested', req, {
|
||||
searchId: updatedSearch.id,
|
||||
user: summarizeUser(req.faceaiSession.user),
|
||||
race: summarizeRace(race),
|
||||
lang: req.faceaiSession.lang,
|
||||
selfieName: updatedSearch.selfieName,
|
||||
uploadPath: updatedSearch.uploadPath,
|
||||
availability
|
||||
});
|
||||
|
||||
res.status(201).json({
|
||||
id: updatedSearch.id,
|
||||
status: updatedSearch.status,
|
||||
|
|
@ -476,8 +531,19 @@ app.get('/api/searches/:id/redirect', requireSession, async (req, res) => {
|
|||
|
||||
const token = issueReturnToken(result);
|
||||
|
||||
const redirectUrl = `${config.legacyReturnUrl}?resultId=${encodeURIComponent(result.id)}&token=${encodeURIComponent(token)}`;
|
||||
|
||||
logFaceAiAccess('Identification redirect issued', req, {
|
||||
searchId: search.id,
|
||||
resultId: result.id,
|
||||
user: summarizeUser(req.faceaiSession.user),
|
||||
race: summarizeRace(req.faceaiSession.race),
|
||||
matchCount: result.matches?.length || 0,
|
||||
redirectUrl
|
||||
});
|
||||
|
||||
res.json({
|
||||
url: `${config.legacyReturnUrl}?resultId=${encodeURIComponent(result.id)}&token=${encodeURIComponent(token)}`
|
||||
url: redirectUrl
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ export const config = {
|
|||
runtimeRoot: process.env.FACEAI_RUNTIME_ROOT || '/data/runtime',
|
||||
logRoot: process.env.FACEAI_LOG_ROOT || path.join(process.env.FACEAI_RUNTIME_ROOT || '/data/runtime', 'logs'),
|
||||
pklRoot: process.env.FACEAI_PKL_ROOT || '/data/pkl',
|
||||
matcherBinary: process.env.FACEAI_MATCHER_BINARY || '/opt/face-recognition/face_matcher',
|
||||
matcherBinary: process.env.FACEAI_MATCHER_BINARY || '/app/bin/face_matcher',
|
||||
searchTtlSeconds: Number(process.env.FACEAI_SEARCH_TTL_SECONDS || 24 * 60 * 60),
|
||||
resultTtlSeconds: Number(process.env.FACEAI_RESULT_TTL_SECONDS || 24 * 60 * 60)
|
||||
};
|
||||
|
|
@ -32,6 +32,8 @@ async function ensureMatcherBinaryAvailable() {
|
|||
}
|
||||
}
|
||||
|
||||
console.log(`FaceAI processor configured matcher binary: ${config.matcherBinary}`);
|
||||
|
||||
function formatLogLine(message, details) {
|
||||
const timestamp = new Date().toISOString();
|
||||
if (details === undefined) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue