Skip to content

Commit

Permalink
feat: 标识符生成器模块
Browse files Browse the repository at this point in the history
  • Loading branch information
RockChinQ committed Dec 20, 2023
1 parent 998d07f commit 3f29464
Show file tree
Hide file tree
Showing 5 changed files with 134 additions and 2 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,5 @@ qcapi
claude.json
bard.json
/*yaml
!/docker-compose.yaml
!/docker-compose.yaml
res/instance_id.json
5 changes: 5 additions & 0 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,11 @@ async def start_process(first_time_init=False):
global known_exception_caught
import pkg.utils.context

# 计算host和instance标识符
import pkg.audit.identifier
pkg.audit.identifier.init()
pkg.audit.identifier.print_out()

# 加载配置
cfg_inst: pymodule_cfg.PythonModuleConfigFile = pymodule_cfg.PythonModuleConfigFile(
'config.py',
Expand Down
83 changes: 83 additions & 0 deletions pkg/audit/identifier.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import os
import uuid
import json
import time


identifier = {
'host_id': '',
'instance_id': '',
'host_create_ts': 0,
'instance_create_ts': 0,
}

HOST_ID_FILE = os.path.expanduser('~/.qchatgpt/host_id.json')
INSTANCE_ID_FILE = 'res/instance_id.json'

def init():
global identifier

if not os.path.exists(os.path.expanduser('~/.qchatgpt')):
os.mkdir(os.path.expanduser('~/.qchatgpt'))

if not os.path.exists(HOST_ID_FILE):
new_host_id = 'host_'+str(uuid.uuid4())
new_host_create_ts = int(time.time())

with open(HOST_ID_FILE, 'w') as f:
json.dump({
'host_id': new_host_id,
'host_create_ts': new_host_create_ts
}, f)

identifier['host_id'] = new_host_id
identifier['host_create_ts'] = new_host_create_ts
else:
loaded_host_id = ''
loaded_host_create_ts = 0

with open(HOST_ID_FILE, 'r') as f:
file_content = json.load(f)
loaded_host_id = file_content['host_id']
loaded_host_create_ts = file_content['host_create_ts']

identifier['host_id'] = loaded_host_id
identifier['host_create_ts'] = loaded_host_create_ts

# 检查实例 id
if os.path.exists(INSTANCE_ID_FILE):
instance_id = {}
with open(INSTANCE_ID_FILE, 'r') as f:
instance_id = json.load(f)

if instance_id['host_id'] != identifier['host_id']: # 如果实例 id 不是当前主机的,删除
os.remove(INSTANCE_ID_FILE)

if not os.path.exists(INSTANCE_ID_FILE):
new_instance_id = 'instance_'+str(uuid.uuid4())
new_instance_create_ts = int(time.time())

with open(INSTANCE_ID_FILE, 'w') as f:
json.dump({
'host_id': identifier['host_id'],
'instance_id': new_instance_id,
'instance_create_ts': new_instance_create_ts
}, f)

identifier['instance_id'] = new_instance_id
identifier['instance_create_ts'] = new_instance_create_ts
else:
loaded_instance_id = ''
loaded_instance_create_ts = 0

with open(INSTANCE_ID_FILE, 'r') as f:
file_content = json.load(f)
loaded_instance_id = file_content['instance_id']
loaded_instance_create_ts = file_content['instance_create_ts']

identifier['instance_id'] = loaded_instance_id
identifier['instance_create_ts'] = loaded_instance_create_ts

def print_out():
global identifier
print(identifier)
2 changes: 1 addition & 1 deletion pkg/database/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ def initialize_database(self):
`json` text not null
)
""")
print('Database initialized.')
# print('Database initialized.')

# session持久化
def persistence_session(self, subject_type: str, subject_number: int, create_timestamp: int,
Expand Down
43 changes: 43 additions & 0 deletions tests/identifier_test/host_identifier.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import os
import uuid
import json

# 向 ~/.qchatgpt 写入一个 标识符

if not os.path.exists(os.path.expanduser('~/.qchatgpt')):
os.mkdir(os.path.expanduser('~/.qchatgpt'))

identifier = {
"host_id": "host_"+str(uuid.uuid4()),
}

if not os.path.exists(os.path.expanduser('~/.qchatgpt/host.json')):
print('create ~/.qchatgpt/host.json')
with open(os.path.expanduser('~/.qchatgpt/host.json'), 'w') as f:
json.dump(identifier, f)
else:
print('load ~/.qchatgpt/host.json')
with open(os.path.expanduser('~/.qchatgpt/host.json'), 'r') as f:
identifier = json.load(f)

print(identifier)

instance_id = {
"host_id": identifier['host_id'],
"instance_id": "instance_"+str(uuid.uuid4()),
}

# 实例 id
if os.path.exists("res/instance_id.json"):
with open("res/instance_id.json", 'r') as f:
instance_id = json.load(f)

if instance_id['host_id'] != identifier['host_id']:
os.remove("res/instance_id.json")

if not os.path.exists("res/instance_id.json"):
print('create res/instance_id.json')
with open("res/instance_id.json", 'w') as f:
json.dump(instance_id, f)

print(instance_id)

0 comments on commit 3f29464

Please sign in to comment.