Skip to content

Commit 445a871

Browse files
authored
feat: system profile (#3193)
1 parent 28c09ae commit 445a871

File tree

7 files changed

+98
-1
lines changed

7 files changed

+98
-1
lines changed

apps/common/constants/cache_version.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@ class Cache_Version(Enum):
2020
ROLE_LIST = "ROLE:LIST", lambda user_id: user_id
2121
# 当前用户所有权限
2222
PERMISSION_LIST = "PERMISSION:LIST", lambda user_id: user_id
23-
23+
# 验证码
2424
CAPTCHA = "CAPTCHA", lambda captcha: captcha
25+
# 系统
26+
SYSTEM = "SYSTEM", lambda key: key
2527

2628
def get_version(self):
2729
return self.value[0]

apps/maxkb/settings/base.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,3 +155,5 @@
155155
# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field
156156

157157
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
158+
159+
edition = 'CE'

apps/system_manage/api/system.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# coding=utf-8
2+
"""
3+
@project: MaxKB
4+
@Author:虎虎
5+
@file: system_setting.py
6+
@date:2025/6/4 16:34
7+
@desc:
8+
"""
9+
from common.mixins.api_mixin import APIMixin
10+
from common.result import ResultSerializer
11+
from system_manage.serializers.system import SystemProfileResponseSerializer
12+
13+
14+
class SystemProfileResult(ResultSerializer):
15+
def get_data(self):
16+
return SystemProfileResponseSerializer()
17+
18+
19+
class SystemProfileAPI(APIMixin):
20+
@staticmethod
21+
def get_response():
22+
return SystemProfileResult
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# coding=utf-8
2+
"""
3+
@project: MaxKB
4+
@Author:虎虎
5+
@file: system.py
6+
@date:2025/6/4 16:01
7+
@desc:
8+
"""
9+
import os
10+
11+
from django.db import models
12+
from rest_framework import serializers
13+
from django.core.cache import cache
14+
15+
from common.constants.cache_version import Cache_Version
16+
from maxkb import settings
17+
18+
19+
class SettingType(models.CharField):
20+
# Community Edition
21+
CE = "CE", "社区"
22+
# Enterprise Edition
23+
PE = "PE", "专业版"
24+
# Professional Edition
25+
EE = "EE", '企业版'
26+
27+
28+
class SystemProfileResponseSerializer(serializers.Serializer):
29+
version = serializers.CharField(required=True, label="version")
30+
edition = serializers.CharField(required=True, label="edition")
31+
license_is_valid = serializers.BooleanField(required=True, label="License is valid")
32+
33+
34+
class SystemProfileSerializer(serializers.Serializer):
35+
@staticmethod
36+
def profile():
37+
version = os.environ.get('MAXKB_VERSION')
38+
license_is_valid = cache.get(Cache_Version.SYSTEM.get_key(key='license_is_valid'),
39+
version=Cache_Version.SYSTEM.get_version())
40+
return {'version': version, 'edition': settings.edition,
41+
'license_is_valid': license_is_valid if license_is_valid is not None else False}

apps/system_manage/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@
77
path('workspace/<str:workspace_id>/user_resource_permission/user/<str:user_id>',
88
views.WorkSpaceUserResourcePermissionView.as_view()),
99
path('email_setting', views.SystemSetting.Email.as_view()),
10+
path('profile', views.SystemProfile.as_view())
1011
]

apps/system_manage/views/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@
88
"""
99
from .user_resource_permission import *
1010
from .email_setting import *
11+
from .system_profile import *
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# coding=utf-8
2+
"""
3+
@project: MaxKB
4+
@Author:虎虎
5+
@file: system_profile.py
6+
@date:2025/6/4 15:59
7+
@desc:
8+
"""
9+
from django.utils.translation import gettext_lazy as _
10+
from drf_spectacular.utils import extend_schema
11+
from rest_framework.request import Request
12+
from rest_framework.views import APIView
13+
14+
from common import result
15+
from system_manage.api.system import SystemProfileAPI
16+
from system_manage.serializers.system import SystemProfileSerializer
17+
18+
19+
class SystemProfile(APIView):
20+
@extend_schema(
21+
methods=['GET'],
22+
description=_('Get MaxKB related information'),
23+
operation_id=_('Get MaxKB related information'), # type: ignore
24+
responses=SystemProfileAPI.get_response(),
25+
tags=[_('System parameters')] # type: ignore
26+
)
27+
def get(self, request: Request):
28+
return result.success(SystemProfileSerializer.profile())

0 commit comments

Comments
 (0)