Skip to content

Commit

Permalink
feat: add OccupancyConfigAdmin
Browse files Browse the repository at this point in the history
  • Loading branch information
Ehco1996 committed Dec 26, 2023
1 parent 28c2818 commit 30c2c6e
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 0 deletions.
29 changes: 29 additions & 0 deletions apps/proxy/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,34 @@ def total_traffic(self, instance):
total_traffic.short_description = "流量"


class OccupancyConfigAdmin(admin.ModelAdmin):
list_display = [
"proxy_node",
"occupancy_price",
"traffic_info",
"limit_info",
]
list_filter = ["proxy_node"]
list_per_page = 10
show_full_result_count = False

@admin.display(description="流量")
def traffic_info(self, instance):
return f"{traffic_format(instance.occupancy_traffic)}"

@admin.display(description="已购/总人数")
def limit_info(self, instance):
return f"{instance.active_user_count()}/{instance.occupancy_user_limit}"

def get_form(self, request, obj=None, **kwargs):
if obj:
help_texts = {
"occupancy_traffic": f"={traffic_format(obj.occupancy_traffic)}",
}
kwargs.update({"help_texts": help_texts})
return super().get_form(request, obj, **kwargs)


class UserProxyNodeOccupancyAdmin(admin.ModelAdmin):
list_display = [
"proxy_node",
Expand Down Expand Up @@ -265,3 +293,4 @@ def get_form(self, request, obj=None, **kwargs):
admin.site.register(models.RelayNode, RelayNodeAdmin)
admin.site.register(models.UserTrafficLog, UserTrafficLogAdmin)
admin.site.register(models.UserProxyNodeOccupancy, UserProxyNodeOccupancyAdmin)
admin.site.register(models.OccupancyConfig, OccupancyConfigAdmin)
7 changes: 7 additions & 0 deletions apps/proxy/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -942,6 +942,13 @@ def reach_limit(self, user: User):
else:
return len(node_user_ids) >= self.occupancy_user_limit

def active_user_count(self):
node_user_ids = [
i["user_id"]
for i in UserProxyNodeOccupancy.get_node_occupancy_user_ids(self.proxy_node)
]
return len(node_user_ids)

@property
def human_occupancy_traffic(self):
return utils.traffic_format(self.occupancy_traffic)
Expand Down

0 comments on commit 30c2c6e

Please sign in to comment.