1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-02 07:27:04 +00:00

timing face cluster (#6950)

* timing face cluster

* update

* update

* update

---------

Co-authored-by: zheng.shen <zheng.shen@seafile.com>
This commit is contained in:
shenzheng-1
2024-10-29 17:41:08 +08:00
committed by GitHub
parent 7124d8792f
commit 2e7e5f41f9
5 changed files with 48 additions and 11 deletions

View File

@@ -134,6 +134,7 @@ class MetadataManage(APIView):
try:
record.enabled = False
record.face_recognition_enabled = False
record.save()
RepoMetadataViews.objects.filter(repo_id=repo_id).delete()
except Exception as e:
@@ -1020,20 +1021,17 @@ class FaceRecognitionManage(APIView):
error_msg = 'Permission denied.'
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
metadata_server_api = MetadataServerAPI(repo_id, request.user.username)
from seafevents.repo_metadata.utils import FACES_TABLE
try:
metadata = metadata_server_api.get_metadata()
record = RepoMetadata.objects.filter(repo_id=repo_id).first()
if record and record.face_recognition_enabled:
is_enabled = True
else:
is_enabled = False
except Exception as e:
logger.error(e)
error_msg = 'Internal Server Error'
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
tables = metadata.get('tables', [])
faces_table_id = [table['id'] for table in tables if table['name'] == FACES_TABLE.name]
is_enabled = True if faces_table_id else False
return Response({'enabled': is_enabled})
def post(self, request, repo_id):
@@ -1052,13 +1050,19 @@ class FaceRecognitionManage(APIView):
error_msg = 'Permission denied.'
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
metadata_server_api = MetadataServerAPI(repo_id, request.user.username)
init_faces(metadata_server_api)
try:
RepoMetadata.objects.enable_face_recognition(repo_id)
except Exception as e:
logger.exception(e)
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, 'Internal Server Error')
params = {
'repo_id': repo_id,
}
metadata_server_api = MetadataServerAPI(repo_id, request.user.username)
init_faces(metadata_server_api)
try:
task_id = add_init_face_recognition_task(params=params)
except Exception as e:

View File

@@ -184,3 +184,8 @@ class MetadataServerAPI:
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}/metadata'
response = requests.get(url, headers=self.headers, timeout=self.timeout)
return parse_response(response)
def delete_table(self, table_id):
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}/tables/{table_id}'
response = requests.delete(url, headers=self.headers, timeout=self.timeout)
return parse_response(response)

View File

@@ -44,6 +44,13 @@ class RepoMetadataManager(models.Manager):
metadata.save()
return metadata
def enable_face_recognition(self, repo_id):
metadata = self.filter(repo_id=repo_id).first()
face_recognition_enabled = True
metadata.face_recognition_enabled = face_recognition_enabled
metadata.save()
return metadata
class RepoMetadata(models.Model):
@@ -51,6 +58,7 @@ class RepoMetadata(models.Model):
created_time = models.DateTimeField(auto_now_add=True)
modified_time = models.DateTimeField(auto_now=True)
enabled = models.BooleanField(db_index=True)
face_recognition_enabled = models.BooleanField(db_index=True)
from_commit = models.CharField(max_length=40)
to_commit = models.CharField(max_length=40)

View File

@@ -105,6 +105,7 @@ def get_sys_columns():
def get_link_column(face_table_id):
from seafevents.repo_metadata.utils import METADATA_TABLE, FACES_TABLE
columns = [
METADATA_TABLE.columns.face_vectors.to_dict(),
METADATA_TABLE.columns.face_links.to_dict({
'link_id': FACES_TABLE.link_id,
'table_id': METADATA_TABLE.id,
@@ -168,6 +169,7 @@ def init_metadata(metadata_server_api):
def init_faces(metadata_server_api):
from seafevents.repo_metadata.utils import METADATA_TABLE, FACES_TABLE
remove_faces_table(metadata_server_api)
resp = metadata_server_api.create_table(FACES_TABLE.name)
# init link column
@@ -179,6 +181,21 @@ def init_faces(metadata_server_api):
metadata_server_api.add_columns(resp['id'], face_columns)
def remove_faces_table(metadata_server_api):
from seafevents.repo_metadata.utils import METADATA_TABLE, FACES_TABLE
metadata = metadata_server_api.get_metadata()
tables = metadata.get('tables', [])
for table in tables:
if table['name'] == FACES_TABLE.name:
metadata_server_api.delete_table(table['id'])
elif table['name'] == METADATA_TABLE.name:
columns = table.get('columns', [])
for column in columns:
if column['key'] in [METADATA_TABLE.columns.face_vectors.key, METADATA_TABLE.columns.face_links.key]:
metadata_server_api.delete_column(table['id'], column['key'])
def get_file_download_token(repo_id, file_id, username):
return seafile_api.get_fileserver_access_token(repo_id, file_id, 'download', username, use_onetime=True)

View File

@@ -1528,6 +1528,8 @@ CREATE TABLE `repo_metadata` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`repo_id` VARCHAR(36) NOT NULL,
`enabled` TINYINT(1) NOT NULL,
`face_recognition_enabled` TINYINT(1) NULL,
`last_face_cluster_time` DATETIME NULL,
`modified_time` DATETIME NOT NULL,
`created_time` DATETIME NOT NULL,
`from_commit` varchar(40) NULL,
@@ -1536,6 +1538,7 @@ CREATE TABLE `repo_metadata` (
`last_face_cluster_time` datetime DEFAULT NULL,
UNIQUE KEY `key_repo_metadata_repo_id`(`repo_id`),
KEY `key_repo_metadata_enabled`(`enabled`),
KEY `key_repo_metadata_face_recognition_enabled`(`face_recognition_enabled`),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;