aripbae commited on
Commit
15dceae
·
verified ·
1 Parent(s): 95e6d7f

Create index.js

Browse files
Files changed (1) hide show
  1. index.js +81 -0
index.js ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const node = {},
2
+ modules = 'child_process|fs|os|process|timers|util'
3
+ for (let m of modules.split`|`) node[m] = require(`node:${m}`)
4
+
5
+ const prettyBytes = require('bytes'),
6
+ express = require('express'),
7
+ morgan = require('morgan'),
8
+ { default: prettyMs } = require('pretty-ms')
9
+
10
+ const limitSize = '69mb',
11
+ tmpDir = node.os.tmpdir(),
12
+ { env } = node.process,
13
+ PORT = env.SERVER_PORT || env.PORT || 7860,
14
+ timeZone = env.TZ || 'Asia/Jakarta'
15
+
16
+ const execPromise = node.util.promisify(
17
+ node.child_process.exec
18
+ ),
19
+ formatBytes = (val) => prettyBytes(val, { unitSeparator: ' ' }),
20
+ isNumber = (val) => typeof val === 'number',
21
+ logger = (...args) => console.log(
22
+ new Date().toLocaleTimeString('fr', { timeZone }),
23
+ ...args
24
+ ),
25
+ transformObj = (obj, cb) => JSON.parse(
26
+ JSON.stringify(
27
+ obj,
28
+ (key, val) => cb(key, val) ? formatBytes(val) : val
29
+ ).replace(/_(\w)/g, (_, g) => g.toUpperCase())
30
+ ),
31
+ getServerStats = () => {
32
+ const proc = node.process
33
+ const stats = {}
34
+ stats.uptime = prettyMs(proc.uptime() * 1e3)
35
+ stats.osUptime = prettyMs(node.os.uptime() * 1e3)
36
+ const report = proc.report?.getReport?.()
37
+ if (report) Object.assign(stats, {
38
+ getReport: report.header,
39
+ javascriptHeap: transformObj(
40
+ report.javascriptHeap,
41
+ (k, v) => !/(ContextCount|Garbage)/i.test(k) && isNumber(v)
42
+ ),
43
+ resourceUsage: transformObj(
44
+ report.resourceUsage,
45
+ (k, v) => !/(Percent|IO|reads|write)/i.test(k) && isNumber(v)
46
+ ),
47
+ uvthreadResourceUsage: report.uvthreadResourceUsage
48
+ })
49
+
50
+ const memUsage = proc.memoryUsage()
51
+ stats.memoryUsage = {}
52
+ for (let [k, v] of Object.entries(memUsage))
53
+ stats.memoryUsage[k] = formatBytes(v)
54
+
55
+ return stats
56
+ }
57
+
58
+ express()
59
+ .enable('trust proxy')
60
+ .set('etag', false)
61
+ .set('json spaces', 2)
62
+ .use(express.json({ limit: limitSize }))
63
+ .use(express.urlencoded({ extended: true, limit: limitSize }))
64
+ .use(morgan('dev'))
65
+ .all('/stats', (_, res) => {
66
+ res.set(
67
+ 'Cache-Control',
68
+ 'no-store, no-cache, must-revalidate, proxy-revalidate'
69
+ )
70
+ res.set('Pragma', 'no-cache')
71
+ res.set('Expires', '0')
72
+ res.json(getServerStats())
73
+ })
74
+ .post('/eval', async (req, res) => {
75
+ let code = req.body.code, o
76
+ code = `(async function MengEval() { ${code} })()`
77
+ try { o = await eval(code) }
78
+ catch (e) { o = e }
79
+ finally { res.send(node.util.format(o)) }
80
+ })
81
+ .listen(PORT, () => logger('Running at port', PORT))