Compare commits

..

No commits in common. "2a985757900209181fd5a4de3934c7986c535ce3" and "52209a5ebd05df89913c23680c5beb98c12d5804" have entirely different histories.

4 changed files with 178 additions and 173 deletions

View File

@ -1,12 +1,12 @@
CREATE TABLE RisottoLog(
LogId SERIAL PRIMARY KEY,
ContextId INTEGER,
Msg VARCHAR(255) NOT NULL,
URI VARCHAR(255),
URIS VARCHAR(255),
UserLogin VARCHAR(100) NOT NULL,
Level VARCHAR(10) NOT NULL,
Kwargs JSON,
ContextId INTEGER,
Data JSON,
Returns JSON,
StartDate timestamp DEFAULT current_timestamp,
StopDate timestamp

View File

@ -126,8 +126,9 @@ class CallDispatcher:
decoder=loads,
schema='pg_catalog'
)
risotto_context.log_connection = log_connection
async with log_connection.transaction():
try:
risotto_context.log_connection = log_connection
async with self.pool.acquire() as connection:
await connection.set_type_codec(
'json',
@ -259,7 +260,6 @@ class PublishDispatcher:
False,
False,
)
for function_obj in self.messages[version][message]['functions']:
async with self.pool.acquire() as log_connection:
await log_connection.set_type_codec(
'json',
@ -267,6 +267,7 @@ class PublishDispatcher:
decoder=loads,
schema='pg_catalog'
)
async with log_connection.transaction():
risotto_context.log_connection = log_connection
async with self.pool.acquire() as connection:
await connection.set_type_codec(
@ -276,6 +277,7 @@ class PublishDispatcher:
schema='pg_catalog'
)
risotto_context.connection = connection
for function_obj in self.messages[version][message]['functions']:
function_name = function_obj['function'].__name__
info_msg = _(f"call function {function_obj['full_module_name']}.{function_name}")
try:

View File

@ -13,24 +13,24 @@ class Logger:
"""
async def insert(self,
msg: str,
uri: str,
uris: str,
risotto_context: Context,
level: str,
kwargs: Any=None,
data: Any=None,
start: bool=False,
) -> None:
uri = self._get_last_uri(risotto_context)
uris = " ".join(risotto_context.paths)
insert = 'INSERT INTO RisottoLog(Msg, URI, URIS, UserLogin, Level'
values = 'VALUES($1,$2,$3,$4,$5'
args = [msg, uri, uris, risotto_context.username, level]
if kwargs:
insert += ', Kwargs'
if data:
insert += ', Data'
values += ',$6'
args.append(dumps(kwargs))
args.append(dumps(data))
context_id = risotto_context.context_id
if context_id is not None:
insert += ', ContextId'
if kwargs:
if data:
values += ',$7'
else:
values += ',$6'
@ -38,7 +38,6 @@ class Logger:
sql = insert + ') ' + values + ') RETURNING LogId'
try:
async with risotto_context.log_connection.transaction():
log_id = await risotto_context.log_connection.fetchval(sql, *args)
if context_id is None and start:
risotto_context.context_id = log_id
@ -52,7 +51,7 @@ class Logger:
context_id: int,
uri: Optional[str],
) -> list:
sql = '''SELECT Msg as msg, URI as uri_name, URIS as uris, UserLogin as user_login, Level as level, Kwargs as kwargs, Returns as returns, StartDate as start_date, StopDate as stop_date
sql = '''SELECT Msg as msg, URI as uri_name, URIS as uris, UserLogin as user_login, Level as level, Data as data, StartDate as start_date, StopDate as stop_date
FROM RisottoLog
WHERE UserLogin = $1 AND (LogId = $2 OR ContextId = $2)
'''
@ -61,19 +60,16 @@ class Logger:
sql += ' AND URI = $3'
args.append(uri)
ret = []
async with risotto_context.log_connection.transaction():
for row in await risotto_context.log_connection.fetch(*args):
d = {}
for key, value in row.items():
if key in ['kwargs', 'returns']:
if key == 'data':
if isinstance(value, dict):
pass
elif not value:
value = {}
else:
value = loads(value)
if key == 'uris':
value = value.split(' ')
elif key in ['start_date', 'stop_date']:
value = str(value)
d[key] = value
@ -115,6 +111,8 @@ class Logger:
paths_msg = self._get_message_paths(risotto_context)
print(_(f'{risotto_context.username}: ERROR: {error} ({paths_msg} with arguments "{arguments}": {msg})'))
await self.insert(msg,
self._get_last_uri(risotto_context),
paths_msg,
risotto_context,
'Error',
arguments,
@ -131,6 +129,8 @@ class Logger:
if get_config()['global']['debug']:
print(_(f'{risotto_context.username}: INFO:{paths_msg}: {msg}'))
await self.insert(msg,
self._get_last_uri(risotto_context),
paths_msg,
risotto_context,
'Info',
arguments,
@ -149,6 +149,8 @@ class Logger:
context = ''
print(_(f'{risotto_context.username}: START{context}:{paths_msg}: {msg}'))
await self.insert(msg,
self._get_last_uri(risotto_context),
paths_msg,
risotto_context,
'Start',
arguments,
@ -173,7 +175,6 @@ class Logger:
args.append(dumps(returns))
sql += """WHERE LogId = $1
"""
async with risotto_context.log_connection.transaction():
await risotto_context.log_connection.execute(sql,
risotto_context.start_id,
*args,
@ -189,14 +190,13 @@ class Logger:
context = f'({risotto_context.context_id})'
else:
context = ''
print(_(f'{risotto_context.username}: FAILED({risotto_context.context_id}):{paths_msg}: {err}'))
print(_(f'{risotto_context.username}: FAILED({risotto_context.context_id}):{paths_msg}: err'))
sql = """UPDATE RisottoLog
SET StopDate = $2,
Level = 'FAILED',
Msg = $3
WHERE LogId = $1
"""
async with risotto_context.log_connection.transaction():
await risotto_context.log_connection.execute(sql,
risotto_context.start_id,
datetime.now(),
@ -210,6 +210,8 @@ class Logger:
if get_config()['global']['debug']:
print(msg)
await self.insert(msg,
'',
None,
risotto_context,
'Info',
)

View File

@ -298,6 +298,7 @@ class RegisterDispatcher:
) -> None:
internal_user = get_config()['global']['internal_user']
async with self.pool.acquire() as log_connection:
async with log_connection.transaction():
async with self.pool.acquire() as connection:
await connection.set_type_codec(
'json',