新建
This commit is contained in:
parent
c2ec21defe
commit
4c16540bf1
@ -1,3 +1,6 @@
|
||||
# rpi_status_http_server
|
||||
# 树莓派状态 JSON 数据接口
|
||||
|
||||
树莓派状态HTTP JSON数据接口
|
||||
``` bash
|
||||
npm install
|
||||
npm start
|
||||
```
|
||||
|
32
package-lock.json
generated
Normal file
32
package-lock.json
generated
Normal file
@ -0,0 +1,32 @@
|
||||
{
|
||||
"name": "rpi_status_http_server",
|
||||
"version": "0.0.1",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "rpi_status_http_server",
|
||||
"version": "0.0.1",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"dotenv": "^16.0.2"
|
||||
}
|
||||
},
|
||||
"node_modules/dotenv": {
|
||||
"version": "16.0.2",
|
||||
"resolved": "https://mirrors.cloud.tencent.com/npm/dotenv/-/dotenv-16.0.2.tgz",
|
||||
"integrity": "sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA==",
|
||||
"license": "BSD-2-Clause",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"dotenv": {
|
||||
"version": "16.0.2",
|
||||
"resolved": "https://mirrors.cloud.tencent.com/npm/dotenv/-/dotenv-16.0.2.tgz",
|
||||
"integrity": "sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA=="
|
||||
}
|
||||
}
|
||||
}
|
20
package.json
Normal file
20
package.json
Normal file
@ -0,0 +1,20 @@
|
||||
{
|
||||
"name": "rpi_status_http_server",
|
||||
"version": "0.0.1",
|
||||
"description": "树莓派状态 JSON 数据接口",
|
||||
"main": "server.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"start": "node server.js"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "ssh://git@nas:2222/zhaoxin/rpi_status_http_server.git"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "Zhao Xin <7176466@qq.com>",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"dotenv": "^16.0.2"
|
||||
}
|
||||
}
|
41
server.js
Normal file
41
server.js
Normal file
@ -0,0 +1,41 @@
|
||||
/**
|
||||
* 树莓派状态 JSON 数据接口
|
||||
*/
|
||||
require('dotenv').config()
|
||||
const fs = require('fs')
|
||||
const http = require('http')
|
||||
const hostname = require('os').hostname()
|
||||
const exec = require('child_process').exec
|
||||
const MEMINFO_FILE_PATH = '/proc/meminfo'
|
||||
const TEMPERATURE_FILE_PATH = '/sys/class/thermal/thermal_zone0/temp'
|
||||
const server = http.createServer(function (request, response) {
|
||||
response.setHeader('Access-Control-Allow-Origin', '*')
|
||||
response.setHeader('Access-Control-Allow-Methods', 'HEAD,GET,POST,OPTIONS,PATCH,PUT,DELETE')
|
||||
response.setHeader('Access-Control-Allow-Headers', 'Origin,X-Requested-With,Authorization,Content-Type,Accept,Z-Key')
|
||||
response.setHeader('Content-Type', 'application/json')
|
||||
try {
|
||||
const temp_string = fs.readFileSync(TEMPERATURE_FILE_PATH)
|
||||
const meminfo_string = String(fs.readFileSync(MEMINFO_FILE_PATH))
|
||||
const meminfo_total = meminfo_string.match(/MemTotal\:\s+(\d+) kB/)
|
||||
const meminfo_available = meminfo_string.match(/MemAvailable\:\s+(\d+) kB/)
|
||||
const result = {
|
||||
hostname,
|
||||
cpu: {
|
||||
temperature: Number((temp_string / 1000).toFixed(3)),
|
||||
},
|
||||
memory: {
|
||||
total: Number((meminfo_total[1] / 1024).toFixed(2)),
|
||||
available: Number((meminfo_available[1] / 1024).toFixed(2))
|
||||
},
|
||||
}
|
||||
exec("cat /proc/stat |grep cpu |tail -1|awk '{print ($5*100)/($2+$3+$4+$5+$6+$7+$8+$9+$10)}'|awk '{print 100 - $1}'", (err, stdout, stderr) => {
|
||||
result.cpu.load = Number((stdout / 100).toFixed(4))
|
||||
response.end(JSON.stringify(result))
|
||||
})
|
||||
} catch (error) {
|
||||
response.statusCode = 500
|
||||
response.end(JSON.stringify({ error }))
|
||||
}
|
||||
})
|
||||
const port = process.env.PORT || 3000
|
||||
server.listen(port, () => console.log(`rpi status http server running at http://localhost:${port}`);)
|
Loading…
Reference in New Issue
Block a user