Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
aeb6a08
wip
invisig0th Feb 12, 2025
b894d15
wip
invisig0th Feb 12, 2025
31b687c
wip
invisig0th Feb 13, 2025
5615fef
wip
invisig0th Feb 13, 2025
80b2726
wip
invisig0th Feb 13, 2025
637db6a
wip
invisig0th Feb 13, 2025
c719239
wip
invisig0th Feb 13, 2025
f4d15df
wip
invisig0th Feb 13, 2025
0d18d48
wip
invisig0th Feb 13, 2025
9eaef91
wip
invisig0th Feb 13, 2025
9bf3cd5
Merge branch 'master' into visi-link-errinfo
invisig0th Feb 13, 2025
fd4b617
wip
invisig0th Feb 13, 2025
d7b9333
wip
invisig0th Feb 13, 2025
832e80b
wip
invisig0th Feb 13, 2025
b2d50ef
Merge branch 'master' into visi-link-errinfo
invisig0th Feb 13, 2025
9cf59fd
wip
invisig0th Feb 13, 2025
05b1c3d
wip
invisig0th Feb 13, 2025
5bd5db4
wip
invisig0th Feb 13, 2025
e1c2313
Merge branch 'master' into visi-link-errinfo
invisig0th Feb 13, 2025
ebe3c57
wip
invisig0th Feb 13, 2025
473325e
wip
invisig0th Feb 13, 2025
92ad178
wip
invisig0th Feb 14, 2025
45d09ab
wip
invisig0th Feb 14, 2025
75b6e50
Merge branch 'master' into visi-link-errinfo
invisig0th Feb 14, 2025
35db0b4
Merge branch 'master' into visi-link-errinfo
invisig0th Feb 18, 2025
e170356
wip
invisig0th Feb 18, 2025
1e31864
wip
invisig0th Feb 18, 2025
a2c61f6
wip
invisig0th Feb 18, 2025
371d6b5
revert pool exc context
invisig0th Feb 18, 2025
984481a
wip
invisig0th Feb 18, 2025
376d089
wip
invisig0th Feb 18, 2025
8577c42
wip
invisig0th Feb 18, 2025
84946e8
remove circ deps
invisig0th Feb 18, 2025
83c2fa8
wip
invisig0th Feb 21, 2025
870cb2c
Merge branch 'master' into visi-link-errinfo
invisig0th Feb 24, 2025
6da829a
wip
invisig0th Feb 24, 2025
ff33a19
Merge branch 'master' into visi-link-errinfo
invisig0th Feb 24, 2025
7e3a4a2
wip
invisig0th Feb 25, 2025
efc13c0
wip
invisig0th Feb 26, 2025
5685826
Merge branch 'master' into visi-link-errinfo
invisig0th Feb 26, 2025
c41625b
wip
invisig0th Feb 26, 2025
1c807f4
wip
invisig0th Feb 26, 2025
74c0a59
wip
invisig0th Feb 26, 2025
85ecf63
wip
invisig0th Feb 26, 2025
6494f2b
wip
invisig0th Feb 26, 2025
194e828
Merge branch 'master' into visi-link-errinfo
invisig0th Mar 3, 2025
bfabc3e
wip
invisig0th Mar 3, 2025
f19ad88
wip
invisig0th Mar 3, 2025
606a937
wip
invisig0th Mar 3, 2025
9b20458
wip
invisig0th Mar 3, 2025
b9dd345
wip
invisig0th Mar 3, 2025
009d745
wip
invisig0th Mar 4, 2025
d60e267
wip
invisig0th Mar 4, 2025
94edbd3
wip
invisig0th Mar 6, 2025
3b19013
merge from master
invisig0th Mar 6, 2025
0fef14c
wip
invisig0th Mar 6, 2025
764f176
Apply suggestions from code review
invisig0th Mar 6, 2025
14d7873
wip
invisig0th Mar 6, 2025
998da9e
Merge branch 'visi-link-errinfo' of ssh://github.com/vertexproject/sy…
invisig0th Mar 6, 2025
554ab99
Merge branch 'master' into visi-link-errinfo
invisig0th Mar 6, 2025
48eb003
wip
invisig0th Mar 6, 2025
7203966
wip
invisig0th Mar 6, 2025
3024378
Merge branch 'master' into visi-link-errinfo
invisig0th Mar 7, 2025
de1a111
Merge branch 'master' into visi-link-errinfo
vEpiphyte Mar 11, 2025
1432c5c
Add branch build.
vEpiphyte Mar 11, 2025
93f6fc8
Merge branch 'visi-link-errinfo' of ssh://github.com/vertexproject/sy…
invisig0th Mar 13, 2025
f5a8bc7
edits from feedback
invisig0th Mar 13, 2025
f62a9d0
Merge branch 'master' into visi-link-errinfo
invisig0th Mar 18, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -611,6 +611,7 @@ workflows:
branches:
only:
- master
- visi-link-errinfo

- build_docker_tag:
requires:
Expand Down
41 changes: 25 additions & 16 deletions synapse/axon.py
Original file line number Diff line number Diff line change
Expand Up @@ -895,14 +895,15 @@ async def _axonHealth(self, health):
health.update('axon', 'nominal', '', data=await self.metrics())

async def _migrateAxonMetrics(self):
logger.warning('migrating Axon metrics data out of hive')
extra = self.getLogExtra()
logger.warning('Migrating Axon metrics data out of hive.', extra=extra)

async with await self.hive.open(('axon', 'metrics')) as hivenode:
axonmetrics = await hivenode.dict()
self.axonmetrics.set('size:bytes', axonmetrics.get('size:bytes', 0))
self.axonmetrics.set('file:count', axonmetrics.get('file:count', 0))

logger.warning('...Axon metrics migration complete!')
logger.warning('...Axon metrics migration complete!', extra=extra)

async def _initBlobStor(self):

Expand All @@ -925,7 +926,8 @@ async def _initBlobStor(self):

async def _setStorVers01(self):

logger.warning('Updating Axon storage version (adding offset index). This may take a while.')
extra = self.getLogExtra()
logger.warning('Updating Axon storage version (adding offset index). This may take a while.', extra=extra)

offs = 0
cursha = b''
Expand Down Expand Up @@ -1067,7 +1069,7 @@ async def get(self, sha256, offs=None, size=None):
fsize = await self._reqHas(sha256)

fhash = s_common.ehex(sha256)
logger.debug(f'Getting blob [{fhash}].', extra=await self.getLogExtra(sha256=fhash))
logger.debug('axon.get()', extra=self.getLogExtra(sha256=fhash))

if offs is not None or size is not None:

Expand Down Expand Up @@ -1203,7 +1205,7 @@ async def hashset(self, sha256):
await self._reqHas(sha256)

fhash = s_common.ehex(sha256)
logger.debug(f'Getting blob [{fhash}].', extra=await self.getLogExtra(sha256=fhash))
logger.debug('axon.hashset()', extra=self.getLogExtra(sha256=fhash))

hashset = s_hashset.HashSet()

Expand Down Expand Up @@ -1251,7 +1253,7 @@ async def _populate(self, sha256, genr, size):
return int.from_bytes(byts, 'big')

fhash = s_common.ehex(sha256)
logger.debug(f'Saving blob [{fhash}].', extra=await self.getLogExtra(sha256=fhash))
logger.debug('axon.save()', extra=self.getLogExtra(sha256=fhash))

size = await self._saveFileGenr(sha256, genr, size)

Expand Down Expand Up @@ -1378,7 +1380,7 @@ async def _axonFileDel(self, sha256):
return False

fhash = s_common.ehex(sha256)
logger.debug(f'Deleting blob [{fhash}].', extra=await self.getLogExtra(sha256=fhash))
logger.debug('axon.del()', extra=self.getLogExtra(sha256=fhash))

size = int.from_bytes(byts, 'big')
self.axonmetrics.inc('file:count', valu=-1)
Expand Down Expand Up @@ -1447,7 +1449,7 @@ async def readlines(self, sha256, errors='ignore'):
todo = s_common.todo(_spawn_readlines, sock00, errors=errors)
async with await s_base.Base.anit() as scope:

scope.schedCoro(s_coro.spawn(todo, log_conf=await self._getSpawnLogConf()))
scope.schedCoro(s_coro.spawn(todo, logconf=self.getLogConf()))
feedtask = scope.schedCoro(self._sha256ToLink(sha256, link00))

while not self.isfini:
Expand Down Expand Up @@ -1481,7 +1483,7 @@ async def csvrows(self, sha256, dialect='excel', errors='ignore', **fmtparams):
todo = s_common.todo(_spawn_readrows, sock00, dialect, fmtparams, errors=errors)
async with await s_base.Base.anit() as scope:

scope.schedCoro(s_coro.spawn(todo, log_conf=await self._getSpawnLogConf()))
scope.schedCoro(s_coro.spawn(todo, logconf=self.getLogConf()))
feedtask = scope.schedCoro(self._sha256ToLink(sha256, link00))

while not self.isfini:
Expand All @@ -1503,17 +1505,20 @@ async def csvrows(self, sha256, dialect='excel', errors='ignore', **fmtparams):
await feedtask

async def jsonlines(self, sha256, errors='ignore'):

async for line in self.readlines(sha256, errors=errors):

line = line.strip()
if not line:
continue

try:
yield s_json.loads(line)
except s_exc.BadJsonText as e:
logger.exception(f'Bad json line encountered for {sha256}')
raise s_exc.BadJsonText(mesg=f'Bad json line encountered while processing {sha256}, ({e})',
sha256=sha256) from None
extra = self.getLogExtra(line=line, sha256=sha256, err=str(e))
logger.warning('Bad JSON line encountered.', extra=extra)
mesg = f'Bad JSON line while processing {sha256}: {e}'
raise s_exc.BadJsonText(mesg=mesg, sha256=sha256) from None

async def unpack(self, sha256, fmt, offs=0):
'''
Expand Down Expand Up @@ -1664,7 +1669,8 @@ async def postfiles(self, fields, url, params=None, headers=None, method='POST',
return info

except Exception as e:
logger.exception(f'Error POSTing files to [{s_urlhelp.sanitizeUrl(url)}]')
extra = self.getLogExtra(url=s_urlhelp.sanitizeUrl(url))
logger.exception('Axon file HTTP POST request failed.', extra=extra)
err = s_common.err(e)
errmsg = err[1].get('mesg')
if errmsg:
Expand Down Expand Up @@ -1711,7 +1717,8 @@ async def wput(self, sha256, url, params=None, headers=None, method='PUT', ssl=T
return info

except Exception as e:
logger.exception(f'Error streaming [{sha256}] to [{s_urlhelp.sanitizeUrl(url)}]')
extra = self.getLogExtra(sha256=sha256, url=s_urlhelp.sanitizeUrl(url))
logger.exception('Axon file HTTP PUT request failed.', extra=extra)
err = s_common.err(e)
errmsg = err[1].get('mesg')
if errmsg:
Expand Down Expand Up @@ -1814,7 +1821,8 @@ async def wget(self, url, params=None, headers=None, json=None, body=None, metho
Returns:
dict: An information dictionary containing the results of the request.
'''
logger.debug(f'Wget called for [{url}].', extra=await self.getLogExtra(url=s_urlhelp.sanitizeUrl(url)))
extra = self.getLogExtra(url=s_urlhelp.sanitizeUrl(url))
logger.debug('axon.wget()', extra=extra)

ssl = self.getCachedSslCtx(opts=ssl_opts, verify=ssl)

Expand Down Expand Up @@ -1848,7 +1856,8 @@ async def wget(self, url, params=None, headers=None, json=None, body=None, metho
raise

except Exception as e:
logger.exception(f'Failed to wget {s_urlhelp.sanitizeUrl(url)}')
extra = self.getLogExtra(url=s_urlhelp.sanitizeUrl(url))
logger.exception('Axon failed to retrieve URL.', extra=extra)
err = s_common.err(e)
errmsg = err[1].get('mesg')
if errmsg:
Expand Down
78 changes: 0 additions & 78 deletions synapse/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@
import synapse.exc as s_exc
import synapse.lib.const as s_const
import synapse.lib.msgpack as s_msgpack
import synapse.lib.structlog as s_structlog

import synapse.vendor.cpython.lib.ipaddress as ipaddress
import synapse.vendor.cpython.lib.http.cookies as v_cookies
Expand Down Expand Up @@ -763,83 +762,6 @@ def makedirs(path, mode=0o777):
def iterzip(*args, fillvalue=None):
return itertools.zip_longest(*args, fillvalue=fillvalue)

def _getLogConfFromEnv(defval=None, structlog=None, datefmt=None):
if structlog:
structlog = 'true'
else:
structlog = 'false'
defval = os.getenv('SYN_LOG_LEVEL', defval)
datefmt = os.getenv('SYN_LOG_DATEFORMAT', datefmt)
structlog = envbool('SYN_LOG_STRUCT', structlog)
ret = {'defval': defval, 'structlog': structlog, 'datefmt': datefmt}
return ret

def normLogLevel(valu):
'''
Norm a log level value to a integer.

Args:
valu: The value to norm ( a string or integer ).

Returns:
int: A valid Logging log level.
'''
if isinstance(valu, int):
if valu not in s_const.LOG_LEVEL_INVERSE_CHOICES:
raise s_exc.BadArg(mesg=f'Invalid log level provided: {valu}', valu=valu)
return valu
if isinstance(valu, str):
valu = valu.strip()
try:
valu = int(valu)
except ValueError:
valu = valu.upper()
ret = s_const.LOG_LEVEL_CHOICES.get(valu)
if ret is None:
raise s_exc.BadArg(mesg=f'Invalid log level provided: {valu}', valu=valu) from None
return ret
else:
return normLogLevel(valu)
raise s_exc.BadArg(mesg=f'Unknown log level type: {type(valu)} {valu}', valu=valu)

def setlogging(mlogger, defval=None, structlog=None, log_setup=True, datefmt=None):
'''
Configure synapse logging.

Args:
mlogger (logging.Logger): Reference to a logging.Logger()
defval (str): Default log level. May be an integer.
structlog (bool): Enabled structured (jsonl) logging output.
datefmt (str): Optional strftime format string.

Notes:
This calls logging.basicConfig and should only be called once per process.

Returns:
None
'''
ret = _getLogConfFromEnv(defval, structlog, datefmt)

datefmt = ret.get('datefmt')
log_level = ret.get('defval')
log_struct = ret.get('structlog')

if log_level: # pragma: no cover

log_level = normLogLevel(log_level)

if log_struct:
handler = logging.StreamHandler()
formatter = s_structlog.JsonFormatter(datefmt=datefmt)
handler.setFormatter(formatter)
logging.basicConfig(level=log_level, handlers=(handler,))
else:
logging.basicConfig(level=log_level, format=s_const.LOG_FORMAT, datefmt=datefmt)
if log_setup:
mlogger.info('log level set to %s', s_const.LOG_LEVEL_INVERSE_CHOICES.get(log_level))

return ret

syndir_default = '~/.syn'
syndir = os.getenv('SYN_DIR')
if syndir is None:
Expand Down
Loading