This commit is contained in:
2026-02-01 17:37:16 +07:00
parent e16a4b2ce1
commit e8a01d3de7

84
app.js
View File

@@ -78,34 +78,33 @@ app.get('/api/summary', async (req, res) => {
}
})
// Эндпоинт: статистика майнера
app.get('/api/stats', async (req, res) => {
const abortController = new AbortController()
const timeout = setTimeout(() => abortController.abort(), 5000)
try {
const stats = await client.stats(abortController.signal)
clearTimeout(timeout)
res.json({
success: true,
timestamp: new Date().toISOString(),
data: stats
})
} catch (err) {
clearTimeout(timeout)
errorHandler(err, res, 'Failed to fetch stats')
}
})
// Эндпоинт: информация об устройствах (чипах)
app.get('/api/devs', async (req, res) => {
const abortController = new AbortController()
const timeout = setTimeout(() => abortController.abort(), 5000)
try {
const devs = await client.devs(abortController.signal)
const devs = await client.edevs(abortController.signal)
clearTimeout(timeout)
res.json({
success: true,
timestamp: new Date().toISOString(),
data: devs
})
} catch (err) {
clearTimeout(timeout)
errorHandler(err, res, 'Failed to fetch devices')
}
})
app.get('/api/devdetails', async (req, res) => {
const abortController = new AbortController()
const timeout = setTimeout(() => abortController.abort(), 5000)
try {
const devs = await client.devDetails(abortController.signal)
clearTimeout(timeout)
@@ -147,16 +146,24 @@ app.get('/api/temperature', async (req, res) => {
const timeout = setTimeout(() => abortController.abort(), 5000)
try {
const summary = await client.summary(abortController.signal)
const devs = await client.edevs(abortController.signal)
clearTimeout(timeout)
// Извлечение температурных данных
const temperatureData = {
board_temp: summary.BoardTemp || summary.temp || null,
chip_temp: summary.ChipTemp || summary.temp2 || null,
fan_speed: summary.FanSpeed || summary.fan || null,
fan_percent: summary.FanPercent || null
chip1: {
temp_current: devs[0]['Temperature'] || null,
temp_awg: devs[0]['Chip Temp Avg'] || null,
temp_min: devs[0]['Chip Temp Min'] || null,
temp_max: devs[0]['Chip Temp Max'] || null
},
chip2: {
temp_current: devs[1]['Temperature'] || null,
temp_awg: devs[1]['Chip Temp Avg'] || null,
temp_min: devs[1]['Chip Temp Min'] || null,
temp_max: devs[1]['Chip Temp Max'] || null
}
}
res.json({
@@ -174,17 +181,25 @@ app.get('/api/temperature', async (req, res) => {
app.get('/api/hashrate', async (req, res) => {
const abortController = new AbortController()
const timeout = setTimeout(() => abortController.abort(), 5000)
function format(num) {
const del = 1_000_000
return Math.round(num / del * 100) / 100
}
try {
const summary = await client.summary(abortController.signal)
clearTimeout(timeout)
const hashrateData = {
current: summary.GHS_5s || summary.hashrate || 0,
average: summary.GHS_av || summary.hashrate_avg || 0,
realtime: summary.GHS_rt || summary.hashrate_rt || 0,
unit: 'GH/s'
current: format(summary[0]['HS RT']),
average: format(summary[0]['MHS av']),
'1_sec': format(summary[0]['MHS 5s']),
'1_min': format(summary[0]['MHS 1m']),
'5_min': format(summary[0]['MHS 5m']),
'15_min': format(summary[0]['MHS 15m']),
unit: 'TH/s',
power_watt: summary[0]['Power'],
'watt/th': summary[0]['Power Rate']
}
res.json({
@@ -308,16 +323,15 @@ app.get('/', (req, res) => {
},
endpoints: {
'GET /api/summary': 'Общая информация о майнере',
'GET /api/stats': 'Статистика майнера',
'GET /api/devs': 'Информация об устройствах (чипах)',
'GET /api/devdetails': 'Информация об устройствах',
'GET /api/pools': 'Информация о пулах',
'GET /api/temperature': 'Температура и вентиляторы',
'GET /api/hashrate': 'Текущий хешрейт',
'GET /api/health': 'Проверка состояния',
'GET /api/all': 'Все данные (агрегированные)',
'POST /api/reboot': 'Перезагрузка майнера'
},
documentation: 'https://github.com/thermocline-labs/whats-miner'
}
})
})