feat: Add GA_ID
and LOG_LEVEL
environment variables
This commit is contained in:
parent
f16899d51e
commit
16948c7038
@ -12,3 +12,9 @@ DB_TYPE=sqlite
|
|||||||
|
|
||||||
# Database write interval in seconds (0 for real-time)
|
# Database write interval in seconds (0 for real-time)
|
||||||
DB_INTERVAL=60
|
DB_INTERVAL=60
|
||||||
|
|
||||||
|
# Log level: either 'debug' | 'info' | 'warn' | 'error' | 'none'
|
||||||
|
LOG_LEVEL=debug
|
||||||
|
|
||||||
|
# Google Analytics `G-Tag` ID
|
||||||
|
# GA_ID=G-XXXX
|
||||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -16,6 +16,7 @@ count.db
|
|||||||
|
|
||||||
# misc
|
# misc
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
.env
|
||||||
.env.local
|
.env.local
|
||||||
.env.development.local
|
.env.development.local
|
||||||
.env.test.local
|
.env.test.local
|
||||||
|
@ -145,8 +145,8 @@
|
|||||||
|
|
||||||
const lazyLoadOptions = {
|
const lazyLoadOptions = {
|
||||||
selector: 'img[data-src]:not([src])',
|
selector: 'img[data-src]:not([src])',
|
||||||
loading: '/img/loading.svg',
|
loading: `${__global_data.site}/img/loading.svg`,
|
||||||
failed: '/img/failed.svg',
|
failed: `${__global_data.site}/img/failed.svg`,
|
||||||
rootMargin: '200px',
|
rootMargin: '200px',
|
||||||
threshold: 0.01
|
threshold: 0.01
|
||||||
};
|
};
|
||||||
|
16
index.js
16
index.js
@ -8,7 +8,7 @@ const { z } = require("zod");
|
|||||||
const db = require("./db");
|
const db = require("./db");
|
||||||
const { themeList, getCountImage } = require("./utils/themify");
|
const { themeList, getCountImage } = require("./utils/themify");
|
||||||
const { cors, ZodValid } = require("./utils/middleware");
|
const { cors, ZodValid } = require("./utils/middleware");
|
||||||
const { randomArray } = require("./utils");
|
const { randomArray, logger } = require("./utils");
|
||||||
|
|
||||||
const app = express();
|
const app = express();
|
||||||
|
|
||||||
@ -19,8 +19,10 @@ app.set("view engine", "pug");
|
|||||||
|
|
||||||
app.get('/', (req, res) => {
|
app.get('/', (req, res) => {
|
||||||
const site = process.env.APP_SITE || `${req.protocol}://${req.get('host')}`
|
const site = process.env.APP_SITE || `${req.protocol}://${req.get('host')}`
|
||||||
|
const ga_id = process.env.GA_ID || null
|
||||||
res.render('index', {
|
res.render('index', {
|
||||||
site,
|
site,
|
||||||
|
ga_id,
|
||||||
themeList,
|
themeList,
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
@ -71,7 +73,7 @@ app.get(["/@:name", "/get/@:name"],
|
|||||||
|
|
||||||
res.send(renderSvg);
|
res.send(renderSvg);
|
||||||
|
|
||||||
console.log(
|
logger.debug(
|
||||||
data,
|
data,
|
||||||
{ theme, ...req.query },
|
{ theme, ...req.query },
|
||||||
`ip: ${req.headers['x-forwarded-for'] || req.connection.remoteAddress}`,
|
`ip: ${req.headers['x-forwarded-for'] || req.connection.remoteAddress}`,
|
||||||
@ -93,11 +95,11 @@ app.get("/record/@:name", async (req, res) => {
|
|||||||
app.get("/heart-beat", (req, res) => {
|
app.get("/heart-beat", (req, res) => {
|
||||||
res.set("cache-control", "max-age=0, no-cache, no-store, must-revalidate");
|
res.set("cache-control", "max-age=0, no-cache, no-store, must-revalidate");
|
||||||
res.send("alive");
|
res.send("alive");
|
||||||
console.log("heart-beat");
|
logger.debug("heart-beat");
|
||||||
});
|
});
|
||||||
|
|
||||||
const listener = app.listen(process.env.APP_PORT || 3000, () => {
|
const listener = app.listen(process.env.APP_PORT || 3000, () => {
|
||||||
console.log("Your app is listening on port " + listener.address().port);
|
logger.info("Your app is listening on port " + listener.address().port);
|
||||||
});
|
});
|
||||||
|
|
||||||
let __cache_counter = {};
|
let __cache_counter = {};
|
||||||
@ -116,7 +118,7 @@ async function pushDB() {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
needPush = false;
|
needPush = false;
|
||||||
console.log("pushDB", __cache_counter);
|
logger.info("pushDB", __cache_counter);
|
||||||
|
|
||||||
const counters = Object.keys(__cache_counter).map((key) => {
|
const counters = Object.keys(__cache_counter).map((key) => {
|
||||||
return {
|
return {
|
||||||
@ -128,7 +130,7 @@ async function pushDB() {
|
|||||||
await db.setNumMulti(counters);
|
await db.setNumMulti(counters);
|
||||||
__cache_counter = {};
|
__cache_counter = {};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log("pushDB is error: ", error);
|
logger.error("pushDB is error: ", error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -151,7 +153,7 @@ async function getCountByName(name, num) {
|
|||||||
|
|
||||||
return { name, num: __cache_counter[name] };
|
return { name, num: __cache_counter[name] };
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log("get count by name is error: ", error);
|
logger.error("get count by name is error: ", error);
|
||||||
return defaultCount;
|
return defaultCount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,28 @@
|
|||||||
|
const log_level = process.env.LOG_LEVEL || 'info';
|
||||||
|
|
||||||
|
const levels = ['none', 'error', 'warn', 'info', 'debug'];
|
||||||
|
const currentLevelIndex = levels.indexOf(log_level);
|
||||||
|
|
||||||
|
const buildLogMethod = (level) => (...args) => {
|
||||||
|
const levelIndex = levels.indexOf(level);
|
||||||
|
const shouldLog = levelIndex <= currentLevelIndex;
|
||||||
|
|
||||||
|
if (shouldLog) {
|
||||||
|
console[level](...args);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
randomArray: (arr) => {
|
randomArray: (arr) => {
|
||||||
return arr[Math.floor(Math.random() * arr.length)]
|
return arr[Math.floor(Math.random() * arr.length)]
|
||||||
},
|
},
|
||||||
toFixed: (num, digits = 2) => {
|
toFixed: (num, digits = 2) => {
|
||||||
return parseFloat(Number(num).toFixed(digits))
|
return parseFloat(Number(num).toFixed(digits))
|
||||||
|
},
|
||||||
|
logger: {
|
||||||
|
debug: buildLogMethod('debug'),
|
||||||
|
info: buildLogMethod('info'),
|
||||||
|
warn: buildLogMethod('warn'),
|
||||||
|
error: buildLogMethod('error')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,19 +2,20 @@ html
|
|||||||
head
|
head
|
||||||
title='Moe Counter!'
|
title='Moe Counter!'
|
||||||
meta(name='viewport', content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no')
|
meta(name='viewport', content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no')
|
||||||
link(rel='icon', type='image/png', href='favicon.png')
|
link(rel='icon', type='image/png', href=`${site}/favicon.png`)
|
||||||
link(rel='stylesheet', href='https://cdn.jsdelivr.net/npm/normalize.css')
|
link(rel='stylesheet', href='https://cdn.jsdelivr.net/npm/normalize.css')
|
||||||
link(rel='stylesheet', href='https://cdn.jsdelivr.net/npm/bamboo.css')
|
link(rel='stylesheet', href='https://cdn.jsdelivr.net/npm/bamboo.css')
|
||||||
link(rel='stylesheet/less', href='style.less')
|
link(rel='stylesheet/less', href=`${site}/style.less`)
|
||||||
script(less, src='https://cdn.jsdelivr.net/npm/less')
|
script(less, src='https://cdn.jsdelivr.net/npm/less')
|
||||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
if ga_id
|
||||||
script(async, src='https://www.googletagmanager.com/gtag/js?id=G-2RLWN5JXRL')
|
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||||
|
script(async, src='https://www.googletagmanager.com/gtag/js?id=#{ga_id}')
|
||||||
script.
|
script.
|
||||||
window.dataLayer = window.dataLayer || [];
|
window.dataLayer = window.dataLayer || [];
|
||||||
function gtag() {dataLayer.push(arguments); }
|
function gtag() { dataLayer.push(arguments); }
|
||||||
gtag('js', new Date());
|
gtag('js', new Date());
|
||||||
|
|
||||||
gtag('config', 'G-2RLWN5JXRL');
|
gtag('config', '#{ga_id}');
|
||||||
|
|
||||||
function _evt_push(type, category, label) {
|
function _evt_push(type, category, label) {
|
||||||
gtag('event', type, {
|
gtag('event', type, {
|
||||||
@ -148,4 +149,4 @@ html
|
|||||||
div.back-to-top
|
div.back-to-top
|
||||||
|
|
||||||
script(async, src='https://cdn.jsdelivr.net/npm/party-js@2/bundle/party.min.js')
|
script(async, src='https://cdn.jsdelivr.net/npm/party-js@2/bundle/party.min.js')
|
||||||
script(async, src='script.js')
|
script(async, src=`${site}/script.js`)
|
||||||
|
Loading…
Reference in New Issue
Block a user