feat: 排除内部员工补偿账号
This commit is contained in:
@@ -69,6 +69,15 @@ def credits_active_usage(token, since, active_start, active_end, active_start_ut
|
||||
}
|
||||
page += 1
|
||||
|
||||
def credits_excluded_selector(user, payload):
|
||||
user_id = str(user.get("id")) if user.get("id") is not None else ""
|
||||
email = str(user.get("email") or "").strip().lower()
|
||||
for selector in payload.get("excludedUsers") or []:
|
||||
normalized = str(selector).strip().lower()
|
||||
if normalized == user_id or normalized == email:
|
||||
return str(selector)
|
||||
return None
|
||||
|
||||
def credits_selected_users(token, payload):
|
||||
users = credits_all_users(token)
|
||||
users_by_id = {str(item.get("id")): item for item in users if item.get("id") is not None}
|
||||
@@ -85,8 +94,14 @@ def credits_selected_users(token, payload):
|
||||
excluded = []
|
||||
for user_id, request_count in requests.items():
|
||||
user = users_by_id.get(user_id)
|
||||
excluded_selector = credits_excluded_selector(user, payload) if isinstance(user, dict) else None
|
||||
if not isinstance(user, dict):
|
||||
excluded.append({"userId": user_id, "reason": "user-not-found"})
|
||||
elif excluded_selector is not None:
|
||||
excluded.append({
|
||||
"userId": user.get("id"), "email": user.get("email"), "requestCount": request_count,
|
||||
"reason": "yaml-excluded-user", "matchedSelector": excluded_selector,
|
||||
})
|
||||
elif user.get("role") == "admin":
|
||||
excluded.append({"userId": user.get("id"), "email": user.get("email"), "reason": "admin-excluded"})
|
||||
elif user.get("status") != "active" or user.get("deleted_at") is not None:
|
||||
@@ -95,6 +110,7 @@ def credits_selected_users(token, payload):
|
||||
selected.append((user, request_count))
|
||||
return selected, excluded, selection
|
||||
selected = []
|
||||
excluded = []
|
||||
seen = set()
|
||||
for selector in payload.get("users") or []:
|
||||
user = users_by_id.get(str(selector)) or users_by_email.get(str(selector).strip().lower())
|
||||
@@ -104,8 +120,15 @@ def credits_selected_users(token, payload):
|
||||
if user_id in seen:
|
||||
raise RuntimeError("duplicate user selector: " + str(selector))
|
||||
seen.add(user_id)
|
||||
selected.append((user, None))
|
||||
return selected, [], {"kind": "exact-users", "selectors": payload.get("users") or []}
|
||||
excluded_selector = credits_excluded_selector(user, payload)
|
||||
if excluded_selector is not None:
|
||||
excluded.append({
|
||||
"userId": user.get("id"), "email": user.get("email"), "requestCount": None,
|
||||
"reason": "yaml-excluded-user", "matchedSelector": excluded_selector,
|
||||
})
|
||||
else:
|
||||
selected.append((user, None))
|
||||
return selected, excluded, {"kind": "exact-users", "selectors": payload.get("users") or []}
|
||||
|
||||
def run_credits_grant():
|
||||
payload = json.loads(base64.b64decode(PAYLOAD_B64).decode("utf-8")) if PAYLOAD_B64 else {}
|
||||
|
||||
Reference in New Issue
Block a user