Удалил docker-compose.dev.yml. поменял наименование контейнера. Убрал дебаг логи.

This commit is contained in:
Первов Артем
2026-07-04 14:06:53 +03:00
parent 0e2a7eeeec
commit b057ea154a
5 changed files with 4 additions and 114 deletions

View File

@@ -5,8 +5,5 @@ DATABASE_URL=postgres://greact:pG3526l4@194.36.208.86:5433/cloud
# Optional. When set, POST /api/ingest requires x-api-key: <value>. # Optional. When set, POST /api/ingest requires x-api-key: <value>.
INGEST_API_KEY= INGEST_API_KEY=
# Optional. Logs POST /api/ingest request metadata without x-api-key.
INGEST_DEBUG_LOG=
# Poll interval for GET /api/current/events SSE snapshots. # Poll interval for GET /api/current/events SSE snapshots.
CURRENT_EVENTS_POLL_MS=1000 CURRENT_EVENTS_POLL_MS=1000

View File

@@ -1,21 +0,0 @@
services:
drill-cloud-v3-dev:
container_name: drill-cloud-v3${branch:+-${branch}}
build: .
restart: unless-stopped
environment:
NODE_ENV: production
BRANCH: ${branch:-}
PORT: ${PORT}
DATABASE_URL: ${DATABASE_URL}
INGEST_API_KEY: ${INGEST_API_KEY}
INGEST_DEBUG_LOG: ${INGEST_DEBUG_LOG:-}
CURRENT_EVENTS_POLL_MS: ${CURRENT_EVENTS_POLL_MS}
expose:
- "3101"
networks:
- proxy
networks:
proxy:
external: true

View File

@@ -1,15 +1,13 @@
services: services:
drill-cloud-v3: drill-cloud-v3:
container_name: drill-cloud-v3${branch:+-${branch}} container_name: container-drill-cloud-v3${branch:+-${branch}}
build: . build: .
restart: unless-stopped restart: unless-stopped
environment: environment:
NODE_ENV: production NODE_ENV: production
BRANCH: ${branch:-}
PORT: ${PORT} PORT: ${PORT}
DATABASE_URL: ${DATABASE_URL} DATABASE_URL: ${DATABASE_URL}
INGEST_API_KEY: ${INGEST_API_KEY} INGEST_API_KEY: ${INGEST_API_KEY}
INGEST_DEBUG_LOG: ${INGEST_DEBUG_LOG:-}
CURRENT_EVENTS_POLL_MS: ${CURRENT_EVENTS_POLL_MS} CURRENT_EVENTS_POLL_MS: ${CURRENT_EVENTS_POLL_MS}
expose: expose:
- "3101" - "3101"

View File

@@ -1,5 +1,4 @@
import { Body, Controller, Logger, Param, Post, Req, UseGuards } from '@nestjs/common'; import { Body, Controller, Param, Post, UseGuards } from '@nestjs/common';
import type { Request } from 'express';
import { IngestApiKeyGuard } from '../common/ingest-api-key.guard'; import { IngestApiKeyGuard } from '../common/ingest-api-key.guard';
import { IngestEdgeValuesDto } from './dto/ingest-edge-values.dto'; import { IngestEdgeValuesDto } from './dto/ingest-edge-values.dto';
import { IngestPointDto } from './dto/ingest-point.dto'; import { IngestPointDto } from './dto/ingest-point.dto';
@@ -8,19 +7,10 @@ import { IngestService } from './ingest.service';
@Controller('ingest') @Controller('ingest')
@UseGuards(IngestApiKeyGuard) @UseGuards(IngestApiKeyGuard)
export class IngestController { export class IngestController {
private readonly logger = new Logger(IngestController.name);
constructor(private readonly ingest: IngestService) {} constructor(private readonly ingest: IngestService) {}
@Post() @Post()
ingestPoint(@Body() point: IngestPointDto, @Req() request: Request) { ingestPoint(@Body() point: IngestPointDto) {
this.logIngestRequest(request, {
kind: 'point',
edge: point.edge,
tag: point.tag,
timestamp: point.timestamp,
});
return this.ingest.ingestPoint(point); return this.ingest.ingestPoint(point);
} }
@@ -28,17 +18,7 @@ export class IngestController {
ingestEdgeValues( ingestEdgeValues(
@Param('edge') edge: string, @Param('edge') edge: string,
@Body() body: IngestEdgeValuesDto, @Body() body: IngestEdgeValuesDto,
@Req() request: Request,
) { ) {
const tags = Object.keys(body.values);
this.logIngestRequest(request, {
kind: 'edge-values',
edge,
tagCount: tags.length,
firstTags: tags.slice(0, 5),
timestamp: body.timestamp,
});
const points = Object.entries(body.values).map(([tag, value]) => ({ const points = Object.entries(body.values).map(([tag, value]) => ({
edge, edge,
tag, tag,
@@ -48,33 +28,4 @@ export class IngestController {
return this.ingest.ingestPoints(points); return this.ingest.ingestPoints(points);
} }
private logIngestRequest(
request: Request,
payload: Record<string, unknown>,
): void {
if (!this.isDebugLogEnabled()) {
return;
}
this.logger.log({
event: 'ingest.received',
method: request.method,
url: request.originalUrl,
host: request.get('host'),
ip: request.ip,
remoteAddress: request.socket.remoteAddress,
forwardedFor: request.get('x-forwarded-for'),
realIp: request.get('x-real-ip'),
userAgent: request.get('user-agent'),
contentLength: request.get('content-length'),
...payload,
});
}
private isDebugLogEnabled(): boolean {
return ['1', 'true', 'yes', 'on'].includes(
(process.env.INGEST_DEBUG_LOG ?? '').toLowerCase(),
);
}
} }

View File

@@ -1,30 +1,9 @@
import { Logger, ValidationPipe } from '@nestjs/common'; import { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core'; import { NestFactory } from '@nestjs/core';
import compression from 'compression'; import compression from 'compression';
import { AppModule } from './app.module'; import { AppModule } from './app.module';
import { DbService } from './db/db.service';
type CurrentDatabaseRow = {
database: string;
};
function getMaskedDatabaseUrl(): string | undefined {
const databaseUrl = process.env.DATABASE_URL;
if (!databaseUrl) {
return undefined;
}
try {
const url = new URL(databaseUrl);
const username = url.username ? `${url.username}:***@` : '';
return `${url.protocol}//${username}${url.host}${url.pathname}`;
} catch {
return databaseUrl.replace(/:\/\/([^:]+):([^@]+)@/, '://$1:***@');
}
}
async function bootstrap() { async function bootstrap() {
const logger = new Logger('Bootstrap');
const app = await NestFactory.create(AppModule); const app = await NestFactory.create(AppModule);
app.use(compression()); app.use(compression());
app.setGlobalPrefix('api'); app.setGlobalPrefix('api');
@@ -38,20 +17,6 @@ async function bootstrap() {
); );
await app.listen(process.env.PORT as string); await app.listen(process.env.PORT as string);
const db = app.get(DbService);
const currentDatabase = await db.query<CurrentDatabaseRow>(
'SELECT current_database() AS database',
);
logger.log({
event: 'cloud.started',
port: process.env.PORT,
branch: process.env.BRANCH ?? process.env.branch ?? '',
database: currentDatabase.rows[0]?.database,
databaseUrl: getMaskedDatabaseUrl(),
ingestDebugLog: process.env.INGEST_DEBUG_LOG ?? '',
});
} }
void bootstrap(); void bootstrap();