Skip to content

Commit

Permalink
added env param TELEMETRY_USER_CHECK
Browse files Browse the repository at this point in the history
  • Loading branch information
o0shojo0o committed Nov 11, 2023
1 parent 8c5abe0 commit 77d6c4f
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 26 deletions.
10 changes: 6 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ pixelit_api:
- /etc/localtime:/etc/localtime:ro
environment:
PORT: 8080
TELEMETRY_USER_CHECK: false
MYSQL_HOST: host
MYSQL_DATABASE: database
MYSQL_USER: user
Expand All @@ -54,19 +55,20 @@ Install dependencies with `npm install` and run dev server with `npn run dev`.

## Changelog

### **WORK IN PROGRESS**
### 1.8.0 (2023-11-11)

- (o0shojo0o) only active telemetry users can see statistics
- (o0shojo0o) added ENV param `TELEMETRY_USER_CHECK`

### 1.7.2 (2023-11-03)*
### 1.7.2 (2023-11-03)

- (o0shojo0o) small fixes

### 1.7.1 (2023-11-03)*
### 1.7.1 (2023-11-03)

- (o0shojo0o) added more statistics to endpoint `Statistics`

### 1.7.0 (2023-11-03)*
### 1.7.0 (2023-11-03)

- (o0shojo0o) added new api endpoint `Statistics`

Expand Down
16 changes: 8 additions & 8 deletions libs/logger.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ let seqAPiKey = null

if (!process.env.SEQ_SERVER || process.env.SEQ_SERVER.length == 0) {
isSEQEnabled = false
console.warn(prepareLogForConsole('SEQ_SERVER not set', null, new Date()))
console.warn(prepareLogForConsole('Warn', 'SEQ_SERVER not set', null, new Date()))
}

if (!process.env.SEQ_APIKEY || process.env.SEQ_APIKEY.length == 0) {
console.warn(prepareLogForConsole('SEQ_APIKEY not set', null, new Date()))
console.warn(prepareLogForConsole('Warn', 'SEQ_APIKEY not set', null, new Date()))
} else {
seqAPiKey = process.env.SEQ_APIKEY
console.log(prepareLogForConsole('SEQ_APIKEY set', null, new Date()))
console.log(prepareLogForConsole('Info', 'SEQ_APIKEY set', null, new Date()))
}

const logger = new seq.Logger({
Expand All @@ -27,7 +27,7 @@ function enrichProperties(properties) {
return properties
}

function prepareLogForConsole(message, properties, dateTime) {
function prepareLogForConsole(lvl, message, properties, dateTime) {
let extendedInformation = ''
if (properties && properties.sourceIP) {
extendedInformation += `[SourceIP: ${properties.sourceIP}`
Expand All @@ -45,14 +45,14 @@ function prepareLogForConsole(message, properties, dateTime) {
message = message.replace(`{${key}}`, properties[key])
}
}
return `[${dateTime.toISOString().slice(0, 10)}T${dateTime.toLocaleTimeString()}]${extendedInformation} ${message}`
return `[${dateTime.toISOString()}][${lvl}]${extendedInformation} ${message}`
}

module.exports = {
info: (message, properties) => {
const dateTime = new Date()
properties = enrichProperties(properties)
console.log(prepareLogForConsole(message, properties, dateTime))
console.log(prepareLogForConsole('Info', message, properties, dateTime))
if (isSEQEnabled) {
logger.emit({
timestamp: dateTime,
Expand All @@ -65,7 +65,7 @@ module.exports = {
warn: (message, properties) => {
const dateTime = new Date()
properties = enrichProperties(properties)
console.warn(prepareLogForConsole(message, properties, dateTime))
console.warn(prepareLogForConsole('Warn', message, properties, dateTime))
if (isSEQEnabled) {
logger.emit({
timestamp: dateTime,
Expand All @@ -78,7 +78,7 @@ module.exports = {
error: (message, properties) => {
const dateTime = new Date()
properties = enrichProperties(properties)
console.error(prepareLogForConsole(message, properties, dateTime))
console.error(prepareLogForConsole('Error', message, properties, dateTime))
if (isSEQEnabled) {
logger.emit({
timestamp: dateTime,
Expand Down
1 change: 0 additions & 1 deletion libs/pixelItRepo.js
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,6 @@ async function isTelemetryUser(uuid) {
let sqlResult
try {
sqlResult = await connection.query(`SELECT EXISTS(SELECT uuid FROM pixel_it_telemetry where last_change >= CURRENT_DATE - INTERVAL 30 DAY AND UUID = ? LIMIT 1) as isTelemetryUser`, uuid);
console.log(sqlResult[0])
return sqlResult[0][0].isTelemetryUser == 1
} catch (error) {
log.error('isTelemetryUser: {error}', { error: error })
Expand Down
33 changes: 20 additions & 13 deletions main.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ const repo = require('./libs/pixelItRepo');
const { apiLimiter, telemetryLimiter, saveBitmapLimiter } = require('./libs/rateLimit');

const port = process.env.PORT || 8080;
const telemetryUserCheck = process.env.TELEMETRY_USER_CHECK ? process.env.TELEMETRY_USER_CHECK.toUpperCase() == "TRUE" : false

// defining the Express app
const app = express();
Expand Down Expand Up @@ -86,39 +87,45 @@ app.post('/api/Telemetry', telemetryLimiter, async (req, res) => {
res.sendStatus(200);
});

app.get(['/api/UserMap'], async (req, res) => {
app.get(['/api/UserMap', '/api/UserMapData'], async (req, res) => {
const sourceIP = tools.getIPFromRequest(req);
const rawUrl = tools.getRawURLFromRequest(req);
const uuid = req.query.uuid || '';

const isTelemetryUser = (await cache.getOrSet(`IsTelemetryUser_UUID:${req.query.uuid}`, () => { return repo.isTelemetryUser(req.query.uuid) }, 30)) ?? {};
if (telemetryUserCheck == true) {
const isTelemetryUser = (await cache.getOrSet(`IsTelemetryUser_UUID:${uuid}`, () => { return repo.isTelemetryUser(uuid) }, 30)) ?? {};

if (!isTelemetryUser && isTelemetryUser == false) {
res.send({ coords: [], error: { telemetryUser: false } });
log.info('{apiPath}: UserMap NOT delivered, reason: no telemetry user!', { apiPath: 'UserMap', sourceIP, rawUrl, useragent: req.useragent, uuid: req.query.uuid, rateLimit: req.rateLimit, });
return;
if (!isTelemetryUser && isTelemetryUser == false) {
res.send({ coords: [], error: { telemetryUser: false } });
log.info('{apiPath}: UserMap NOT delivered, reason: no telemetry user!', { apiPath: 'UserMap', sourceIP, rawUrl, useragent: req.useragent, uuid: uuid, rateLimit: req.rateLimit, });
return;
}
}

const userMapData = (await cache.getOrSet('UserMap', () => { return repo.getUserMapData() }, 30)) ?? [];

log.info('{apiPath}: UserMap ({count} user) successfully delivered', { apiPath: 'UserMap', count: userMapData.length, sourceIP, rawUrl, useragent: req.useragent, rateLimit: req.rateLimit, });
log.info('{apiPath}: UserMap ({count} user) successfully delivered', { apiPath: 'UserMap', count: userMapData.length, sourceIP, rawUrl, useragent: req.useragent, rateLimit: req.rateLimit, uuid: uuid, });
res.send({ coords: userMapData });
});

app.get('/api/Statistics', async (req, res) => {
const sourceIP = tools.getIPFromRequest(req);
const rawUrl = tools.getRawURLFromRequest(req);
const uuid = req.query.uuid || '';

const isTelemetryUser = (await cache.getOrSet(`IsTelemetryUser_UUID:${req.query.uuid}`, () => { return repo.isTelemetryUser(req.query.uuid) }, 30)) ?? {};
if (telemetryUserCheck == true) {
const isTelemetryUser = (await cache.getOrSet(`IsTelemetryUser_UUID:${uuid}`, () => { return repo.isTelemetryUser(uuid) }, 30)) ?? {};

if (!isTelemetryUser && isTelemetryUser == false) {
res.send({ error: { telemetryUser: false } });
log.info('{apiPath}: Statistics NOT delivered, reason: no telemetry user!', { apiPath: 'Statistics', sourceIP, rawUrl, useragent: req.useragent, uuid: req.query.uuid, rateLimit: req.rateLimit, });
return;
if (telemetryUserCheck == true && !isTelemetryUser && isTelemetryUser == false) {
res.send({ error: { telemetryUser: false } });
log.info('{apiPath}: Statistics NOT delivered, reason: no telemetry user!', { apiPath: 'Statistics', sourceIP, rawUrl, useragent: req.useragent, uuid: uuid, rateLimit: req.rateLimit, });
return;
}
}

const statistics = (await cache.getOrSet('Statistics', () => { return repo.getStatistics() }, 30)) ?? {};

log.info('{apiPath}: Statistics successfully delivered', { apiPath: 'Statistics', sourceIP, rawUrl, useragent: req.useragent, rateLimit: req.rateLimit, uuid: req.query.uuid, });
log.info('{apiPath}: Statistics successfully delivered', { apiPath: 'Statistics', sourceIP, rawUrl, useragent: req.useragent, rateLimit: req.rateLimit, uuid: uuid, });
res.send(statistics);
});

Expand Down

0 comments on commit 77d6c4f

Please sign in to comment.