This commit is contained in:
2024-02-20 17:15:27 +08:00
committed by huty
parent 6706e1a633
commit 34158042ad
1529 changed files with 177765 additions and 0 deletions

View File

@@ -0,0 +1,16 @@
FROM node:16.13.1-alpine3.14 AS builder
WORKDIR /src
COPY src/package.json .
RUN npm install
# app
FROM node:16.13.1-alpine3.14
EXPOSE 80
ENV PORT=80
CMD ["node", "server.js"]
WORKDIR /app
COPY --from=builder /src/node_modules/ /app/node_modules/
COPY src/ .

View File

@@ -0,0 +1,14 @@
const { format, transports } = require('winston');
var logConfig = module.exports = {};
logConfig.options = {
format: format.combine(
format.splat(),
format.simple()
),
transports: [
new transports.Console({
level: 'info'
})
]
};

View File

@@ -0,0 +1,5 @@
const winston = require('winston');
var logConfig = require('./config/logConfig');
const logger = winston.createLogger(logConfig.options);
exports.Logger = logger;

View File

@@ -0,0 +1,11 @@
{
"name": "access-log",
"version": "1.0.0",
"main": "server.js",
"author": "kiamol",
"dependencies": {
"restify": "8.5.1",
"winston": "3.3.3",
"prom-client": "12.0.0"
}
}

View File

@@ -0,0 +1,58 @@
const restify = require("restify");
const prom = require("prom-client");
const log = require("./log");
const os = require("os");
const accessCounter = new prom.Counter({
name: "access_log_total",
help: "Access Log - total log requests"
});
const clientIpGauge = new prom.Gauge({
name: "access_client_ip_current",
help: "Access Log - current unique IP addresses"
});
//setup Prometheus with standard metrics:
prom.collectDefaultMetrics();
function stats(req, res, next) {
log.Logger.debug("** GET /stats called");
var data = {
logs: logCount
};
res.send(data);
next();
}
function respond(req, res, next) {
log.Logger.debug("** POST /access-log called");
log.Logger.info("Access log, client IP: %s", req.body.clientIp);
logCount++;
//metrics:
accessCounter.inc();
ipAddresses.push(req.body.clientIp);
let uniqueIps = Array.from(new Set(ipAddresses));
clientIpGauge.set(uniqueIps.length);
res.send(201, "Created");
next();
}
var logCount = 0;
var ipAddresses = new Array();
var server = restify.createServer();
server.use(restify.plugins.bodyParser());
server.get("/stats", stats);
server.post("/access-log", respond);
server.get("/metrics", function(req, res, next) {
res.end(prom.register.metrics());
});
server.headersTimeout = 20;
server.keepAliveTimeout = 10;
server.listen(process.env.PORT, function() {
log.Logger.info("%s listening at %s", server.name, server.url);
});