i0110 commited on
Commit
2e0d9e6
·
verified ·
1 Parent(s): 3add203

Update server.js

Browse files
Files changed (1) hide show
  1. server.js +10 -29
server.js CHANGED
@@ -22,6 +22,10 @@ if (hfUserConfig) {
22
  });
23
  }
24
 
 
 
 
 
25
  // 缓存管理
26
  class SpaceCache {
27
  constructor() {
@@ -160,7 +164,7 @@ app.post('/api/proxy/rebuild/:repoId(*)', async (req, res) => {
160
  const payload = { factoryReboot: true };
161
  console.log(`发送重建请求,payload: ${JSON.stringify(payload)}`);
162
  const response = await axios.post(`https://huggingface.co/api/spaces/${repoId}/restart`, payload, { headers });
163
- console.log(`重建 Space ${repoId} 成功,状态码: ${response.status}, 响应数据:`, response.data);
164
  res.json({ success: true, message: `Space ${repoId} 重建成功` });
165
  } catch (error) {
166
  console.error(`重建 space 失败 (${req.params.repoId}):`, error.message);
@@ -260,9 +264,9 @@ app.post('/api/v1/action/:token/:spaceId(*)/rebuild', async (req, res) => {
260
 
261
  const headers = { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' };
262
  const payload = { factoryReboot: true };
263
- console.log(`外部 API 发送重建请求,spaceId: ${spaceId}, payload: ${JSON.stringify(payload)}`);
264
  const response = await axios.post(`https://huggingface.co/api/spaces/${spaceId}/restart`, payload, { headers });
265
- console.log(`外部 API 重建 Space ${spaceId} 成功,状态码: ${response.status}, 响应数据:`, response.data);
266
  res.json({ success: true, message: `Space ${spaceId} 重建成功` });
267
  } catch (error) {
268
  console.error(`重建 space 失败 (外部 API):`, error.message);
@@ -295,29 +299,22 @@ app.get('/api/proxy/live-metrics/:username/:instanceId', async (req, res) => {
295
 
296
  const token = userTokenMapping[username];
297
  let headers = {
298
- 'Accept': 'text/event-stream', // 明确指定接受 SSE 格式
299
  'Cache-Control': 'no-cache',
300
  'Connection': 'keep-alive'
301
  };
302
  if (token) {
303
  headers['Authorization'] = `Bearer ${token}`;
304
- console.log(`使用 Token 访问监控数据 (${username}/${instanceId})`);
305
- } else {
306
- console.warn(`用户 ${username} 没有配置 API Token,将尝试无认证访问公开数据`);
307
  }
308
 
309
- console.log(`尝试获取监控数据: ${url}`);
310
-
311
  const response = await axios({
312
  method: 'get',
313
  url,
314
  headers,
315
  responseType: 'stream',
316
- timeout: 10000 // 设置超时,防止请求挂起
317
  });
318
 
319
- console.log(`成功连接监控数据流 (${username}/${instanceId}),状态码: ${response.status}`);
320
-
321
  res.set({
322
  'Content-Type': 'text/event-stream',
323
  'Cache-Control': 'no-cache',
@@ -325,28 +322,11 @@ app.get('/api/proxy/live-metrics/:username/:instanceId', async (req, res) => {
325
  });
326
  response.data.pipe(res);
327
 
328
- response.data.on('data', (chunk) => {
329
- console.log(`接收到监控数据片段 (${username}/${instanceId}): ${chunk.length} 字节`);
330
- });
331
-
332
- response.data.on('error', (err) => {
333
- console.error(`直播监控数据流错误 (${username}/${instanceId}):`, err.message);
334
- res.status(500).end();
335
- });
336
-
337
  req.on('close', () => {
338
- console.log(`客户端关闭监控数据连接 (${username}/${instanceId})`);
339
  response.data.destroy();
340
  });
341
  } catch (error) {
342
  console.error(`代理获取直播监控数据失败 (${req.params.username}/${req.params.instanceId}):`, error.message);
343
- if (error.response) {
344
- console.error(`状态码: ${error.response.status}, 响应头:`, error.response.headers);
345
- } else if (error.request) {
346
- console.error(`请求未收到响应:`, error.message);
347
- } else {
348
- console.error(`请求配置错误:`, error.message);
349
- }
350
  res.status(error.response?.status || 500).json({ error: '获取监控数据失败', details: error.message });
351
  }
352
  });
@@ -359,4 +339,5 @@ app.get('*', (req, res) => {
359
  app.listen(port, () => {
360
  console.log(`Server running on port ${port}`);
361
  console.log(`User configurations:`, usernames.map(user => `${user}: ${userTokenMapping[user] ? 'Token Configured' : 'No Token'}`).join(', ') || 'None');
 
362
  });
 
22
  });
23
  }
24
 
25
+ // 从环境变量获取登录凭据
26
+ const ADMIN_USERNAME = process.env.USER_NAME || 'admin';
27
+ const ADMIN_PASSWORD = process.env.USER_PASSWORD || 'password';
28
+
29
  // 缓存管理
30
  class SpaceCache {
31
  constructor() {
 
164
  const payload = { factoryReboot: true };
165
  console.log(`发送重建请求,payload: ${JSON.stringify(payload)}`);
166
  const response = await axios.post(`https://huggingface.co/api/spaces/${repoId}/restart`, payload, { headers });
167
+ console.log(`重建 Space ${repoId} 成功,状态码: ${response.status}`);
168
  res.json({ success: true, message: `Space ${repoId} 重建成功` });
169
  } catch (error) {
170
  console.error(`重建 space 失败 (${req.params.repoId}):`, error.message);
 
264
 
265
  const headers = { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' };
266
  const payload = { factoryReboot: true };
267
+ console.log(`外部 API 发送重建请求,spaceId: ${spaceId}`);
268
  const response = await axios.post(`https://huggingface.co/api/spaces/${spaceId}/restart`, payload, { headers });
269
+ console.log(`外部 API 重建 Space ${spaceId} 成功,状态码: ${response.status}`);
270
  res.json({ success: true, message: `Space ${spaceId} 重建成功` });
271
  } catch (error) {
272
  console.error(`重建 space 失败 (外部 API):`, error.message);
 
299
 
300
  const token = userTokenMapping[username];
301
  let headers = {
302
+ 'Accept': 'text/event-stream',
303
  'Cache-Control': 'no-cache',
304
  'Connection': 'keep-alive'
305
  };
306
  if (token) {
307
  headers['Authorization'] = `Bearer ${token}`;
 
 
 
308
  }
309
 
 
 
310
  const response = await axios({
311
  method: 'get',
312
  url,
313
  headers,
314
  responseType: 'stream',
315
+ timeout: 10000
316
  });
317
 
 
 
318
  res.set({
319
  'Content-Type': 'text/event-stream',
320
  'Cache-Control': 'no-cache',
 
322
  });
323
  response.data.pipe(res);
324
 
 
 
 
 
 
 
 
 
 
325
  req.on('close', () => {
 
326
  response.data.destroy();
327
  });
328
  } catch (error) {
329
  console.error(`代理获取直播监控数据失败 (${req.params.username}/${req.params.instanceId}):`, error.message);
 
 
 
 
 
 
 
330
  res.status(error.response?.status || 500).json({ error: '获取监控数据失败', details: error.message });
331
  }
332
  });
 
339
  app.listen(port, () => {
340
  console.log(`Server running on port ${port}`);
341
  console.log(`User configurations:`, usernames.map(user => `${user}: ${userTokenMapping[user] ? 'Token Configured' : 'No Token'}`).join(', ') || 'None');
342
+ console.log(`Admin login enabled: Username=${ADMIN_USERNAME}, Password=${ADMIN_PASSWORD ? 'Configured' : 'Not Configured'}`);
343
  });