malt666 commited on
Commit
5b44fef
·
verified ·
1 Parent(s): 3351a46

Upload 4 files

Browse files
Files changed (2) hide show
  1. app.py +90 -54
  2. templates/dashboard.html +45 -1
app.py CHANGED
@@ -70,6 +70,8 @@ compute_points_log = {
70
  "log": [] # 日志数据
71
  }
72
 
 
 
73
 
74
  # 记录启动时间
75
  START_TIME = datetime.now()
@@ -821,64 +823,97 @@ def update_model_stats(model, prompt_tokens, completion_tokens):
821
 
822
  # 获取计算点信息
823
  def get_compute_points():
824
- global compute_points, USER_DATA
825
 
826
  if USER_NUM == 0:
827
  return
828
 
829
- try:
830
- # 使用第一个用户的会话和凭据
831
- session, cookies, session_token, _, _ = USER_DATA[0]
832
-
833
- # 检查token是否有效
834
- if is_token_expired(session_token):
835
- session_token = refresh_token(session, cookies)
836
- if not session_token:
837
- print("刷新token失败,无法获取计算点信息")
838
- return
839
- USER_DATA[0] = (session, cookies, session_token, USER_DATA[0][3], USER_DATA[0][4])
840
-
841
- headers = {
842
- "accept": "application/json, text/plain, */*",
843
- "accept-language": "zh-CN,zh;q=0.9",
844
- "baggage": f"sentry-environment=production,sentry-release=93da8385541a6ce339b1f41b0c94428c70657e22,sentry-public_key=3476ea6df1585dd10e92cdae3a66ff49,sentry-trace_id={TRACE_ID}",
845
- "reai-ui": "1",
846
- "sec-ch-ua": "\"Chromium\";v=\"116\", \"Not)A;Brand\";v=\"24\", \"Google Chrome\";v=\"116\"",
847
- "sec-ch-ua-mobile": "?0",
848
- "sec-ch-ua-platform": "\"Windows\"",
849
- "sec-fetch-dest": "empty",
850
- "sec-fetch-mode": "cors",
851
- "sec-fetch-site": "same-origin",
852
- "sentry-trace": SENTRY_TRACE,
853
- "session-token": session_token,
854
- "x-abacus-org-host": "apps",
855
- "cookie": cookies
856
- }
857
-
858
- response = session.get(
859
- COMPUTE_POINTS_URL,
860
- headers=headers
861
- )
862
-
863
- if response.status_code == 200:
864
- result = response.json()
865
- if result.get("success") and "result" in result:
866
- data = result["result"]
867
- compute_points["left"] = data.get("computePointsLeft", 0)
868
- compute_points["total"] = data.get("totalComputePoints", 0)
869
- compute_points["used"] = compute_points["total"] - compute_points["left"]
870
- compute_points["percentage"] = round((compute_points["used"] / compute_points["total"]) * 100, 2) if compute_points["total"] > 0 else 0
871
- compute_points["last_update"] = datetime.now()
872
- print(f"计算点信息更新成功: 剩余 {compute_points['left']}, 总计 {compute_points['total']}")
873
-
874
- # 获取计算点使用日志
875
- get_compute_points_log(session, cookies, session_token)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
876
  else:
877
- print(f"获取计算点信息失败: {result.get('error', '未知错误')}")
878
- else:
879
- print(f"获取计算点信息失败,状态码: {response.status_code}")
880
- except Exception as e:
881
- print(f"获取计算点信息异常: {e}")
 
 
 
 
 
 
 
882
 
883
  # 获取计算点使用日志
884
  def get_compute_points_log(session, cookies, session_token):
@@ -975,7 +1010,8 @@ def dashboard():
975
  total_tokens=total_tokens,
976
  compute_points=compute_points,
977
  compute_points_log=compute_points_log,
978
- space_url=SPACE_URL # 传递空间URL
 
979
  )
980
 
981
 
 
70
  "log": [] # 日志数据
71
  }
72
 
73
+ # 多用户计算点信息
74
+ users_compute_points = []
75
 
76
  # 记录启动时间
77
  START_TIME = datetime.now()
 
823
 
824
  # 获取计算点信息
825
  def get_compute_points():
826
+ global compute_points, USER_DATA, users_compute_points
827
 
828
  if USER_NUM == 0:
829
  return
830
 
831
+ # 清空用户计算点列表
832
+ users_compute_points = []
833
+
834
+ # 累计总计算点
835
+ total_left = 0
836
+ total_points = 0
837
+
838
+ # 获取每个用户的计算点信息
839
+ for i, user_data in enumerate(USER_DATA):
840
+ try:
841
+ session, cookies, session_token, _, _ = user_data
842
+
843
+ # 检查token是否有效
844
+ if is_token_expired(session_token):
845
+ session_token = refresh_token(session, cookies)
846
+ if not session_token:
847
+ print(f"用户{i+1}刷新token失败,无法获取计算点信息")
848
+ continue
849
+ USER_DATA[i] = (session, cookies, session_token, user_data[3], user_data[4])
850
+
851
+ headers = {
852
+ "accept": "application/json, text/plain, */*",
853
+ "accept-language": "zh-CN,zh;q=0.9",
854
+ "baggage": f"sentry-environment=production,sentry-release=93da8385541a6ce339b1f41b0c94428c70657e22,sentry-public_key=3476ea6df1585dd10e92cdae3a66ff49,sentry-trace_id={TRACE_ID}",
855
+ "reai-ui": "1",
856
+ "sec-ch-ua": "\"Chromium\";v=\"116\", \"Not)A;Brand\";v=\"24\", \"Google Chrome\";v=\"116\"",
857
+ "sec-ch-ua-mobile": "?0",
858
+ "sec-ch-ua-platform": "\"Windows\"",
859
+ "sec-fetch-dest": "empty",
860
+ "sec-fetch-mode": "cors",
861
+ "sec-fetch-site": "same-origin",
862
+ "sentry-trace": SENTRY_TRACE,
863
+ "session-token": session_token,
864
+ "x-abacus-org-host": "apps",
865
+ "cookie": cookies
866
+ }
867
+
868
+ response = session.get(
869
+ COMPUTE_POINTS_URL,
870
+ headers=headers
871
+ )
872
+
873
+ if response.status_code == 200:
874
+ result = response.json()
875
+ if result.get("success") and "result" in result:
876
+ data = result["result"]
877
+ left = data.get("computePointsLeft", 0)
878
+ total = data.get("totalComputePoints", 0)
879
+ used = total - left
880
+ percentage = round((used / total) * 100, 2) if total > 0 else 0
881
+
882
+ # 添加到用户列表
883
+ user_points = {
884
+ "user_id": i + 1, # 用户ID从1开始
885
+ "left": left,
886
+ "total": total,
887
+ "used": used,
888
+ "percentage": percentage,
889
+ "last_update": datetime.now()
890
+ }
891
+ users_compute_points.append(user_points)
892
+
893
+ # 累计总数
894
+ total_left += left
895
+ total_points += total
896
+
897
+ print(f"用户{i+1}计算点信息更新成功: 剩余 {left}, 总计 {total}")
898
+
899
+ # 对于第一个用户,获取计算点使用日志
900
+ if i == 0:
901
+ get_compute_points_log(session, cookies, session_token)
902
+ else:
903
+ print(f"获取用户{i+1}计算点信息失败: {result.get('error', '未知错误')}")
904
  else:
905
+ print(f"获取用户{i+1}计算点信息失败,状态码: {response.status_code}")
906
+ except Exception as e:
907
+ print(f"获取用户{i+1}计算点信息异常: {e}")
908
+
909
+ # 更新全局计算点信息(所有用户总和)
910
+ if users_compute_points:
911
+ compute_points["left"] = total_left
912
+ compute_points["total"] = total_points
913
+ compute_points["used"] = total_points - total_left
914
+ compute_points["percentage"] = round((compute_points["used"] / compute_points["total"]) * 100, 2) if compute_points["total"] > 0 else 0
915
+ compute_points["last_update"] = datetime.now()
916
+ print(f"所有用户计算点总计: 剩余 {total_left}, 总计 {total_points}")
917
 
918
  # 获取计算点使用日志
919
  def get_compute_points_log(session, cookies, session_token):
 
1010
  total_tokens=total_tokens,
1011
  compute_points=compute_points,
1012
  compute_points_log=compute_points_log,
1013
+ space_url=SPACE_URL, # 传递空间URL
1014
+ users_compute_points=users_compute_points # 传递用户计算点信息
1015
  )
1016
 
1017
 
templates/dashboard.html CHANGED
@@ -554,7 +554,7 @@
554
  <div class="card-header">
555
  <h2 class="card-title">
556
  <span class="card-icon">💰</span>
557
- 计算点信息
558
  </h2>
559
  </div>
560
  <div class="status-item">
@@ -635,6 +635,50 @@
635
  </div>
636
  </div>
637
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
638
  <div class="card">
639
  <div class="card-header">
640
  <h2 class="card-title">
 
554
  <div class="card-header">
555
  <h2 class="card-title">
556
  <span class="card-icon">💰</span>
557
+ 计算点总计
558
  </h2>
559
  </div>
560
  <div class="status-item">
 
635
  </div>
636
  </div>
637
 
638
+ {% if users_compute_points|length > 0 %}
639
+ <div class="card">
640
+ <div class="card-header">
641
+ <h2 class="card-title">
642
+ <span class="card-icon">👥</span>
643
+ 用户计算点详情
644
+ </h2>
645
+ </div>
646
+ <div class="table-container">
647
+ <table class="data-table">
648
+ <thead>
649
+ <tr>
650
+ <th>用户</th>
651
+ <th>总计算点</th>
652
+ <th>已使用</th>
653
+ <th>剩余</th>
654
+ <th>使用比例</th>
655
+ </tr>
656
+ </thead>
657
+ <tbody>
658
+ {% for user in users_compute_points %}
659
+ <tr>
660
+ <td>用户 {{ user.user_id }}</td>
661
+ <td class="compute-points">{{ user.total|int }}</td>
662
+ <td class="compute-points">{{ user.used|int }}</td>
663
+ <td class="compute-points">{{ user.left|int }}</td>
664
+ <td>
665
+ <div style="width: 100%; position: relative;">
666
+ <span class="status-value compute-points {% if user.percentage > 80 %}danger{% elif user.percentage > 50 %}warning{% endif %}">
667
+ {{ user.percentage }}%
668
+ </span>
669
+ <div class="progress-container">
670
+ <div class="progress-bar {% if user.percentage > 80 %}danger{% elif user.percentage > 50 %}warning{% endif %}" style="width: {{ user.percentage }}%"></div>
671
+ </div>
672
+ </div>
673
+ </td>
674
+ </tr>
675
+ {% endfor %}
676
+ </tbody>
677
+ </table>
678
+ </div>
679
+ </div>
680
+ {% endif %}
681
+
682
  <div class="card">
683
  <div class="card-header">
684
  <h2 class="card-title">