Skip to content

Commit e41ae7a

Browse files
authored
Merge pull request #72 from authorizon/fix_logs
Fix logging as JSON to centralized drain - some log messages were not JSONable
2 parents 4a9f7ac + a2ec82b commit e41ae7a

File tree

11 files changed

+30
-30
lines changed

11 files changed

+30
-30
lines changed

opal_client/client.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ async def launch_policy_store_dependent_tasks(self):
184184
for task in asyncio.as_completed([self.launch_policy_updater(), self.launch_data_updater()]):
185185
await task
186186
except websockets.exceptions.InvalidStatusCode as err:
187-
logger.error("Failed to launch background task -- {err}", err=err)
187+
logger.error("Failed to launch background task -- {err}", err=repr(err))
188188
self._trigger_shutdown()
189189

190190
async def maybe_init_healthcheck_policy(self):
@@ -208,13 +208,13 @@ async def maybe_init_healthcheck_policy(self):
208208
try:
209209
healthcheck_policy_code = open(healthcheck_policy_path, 'r').read()
210210
except IOError as err:
211-
logger.error("Critical: Cannot read healthcheck policy: {err}", err=err)
211+
logger.error("Critical: Cannot read healthcheck policy: {err}", err=repr(err))
212212
raise
213213

214214
try:
215215
await self.policy_store.init_healthcheck_policy(policy_id=healthcheck_policy_relpath, policy_code=healthcheck_policy_code)
216216
except aiohttp.ClientError as err:
217-
logger.error("Failed to connect to OPA agent while init healthcheck policy -- {err}", err=err)
217+
logger.error("Failed to connect to OPA agent while init healthcheck policy -- {err}", err=repr(err))
218218
raise
219219

220220
def _trigger_shutdown(self):

opal_client/data/updater.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ def trigger_data_update(self, update: DataUpdate):
101101
# make sure the id has a unique id for tracking
102102
if update.id is None:
103103
update.id = uuid.uuid4().hex
104-
logger.info("Triggering data update with id: {id}", update=update, id=update.id)
104+
logger.info("Triggering data update with id: {id}", id=update.id)
105105
asyncio.create_task(self.update_policy_data(
106106
update, policy_store=self._policy_store, data_fetcher=self._data_fetcher))
107107

@@ -136,7 +136,7 @@ async def get_base_policy_data(self, config_url: str = None, data_fetch_reason="
136136
config_url (str, optional): URL to retrive data sources config from. Defaults to None ( self._data_sources_config_url).
137137
data_fetch_reason (str, optional): Reason to log for the update operation. Defaults to "Initial load".
138138
"""
139-
logger.info("Performing data configuration, reason: {reason}", reason={data_fetch_reason})
139+
logger.info("Performing data configuration, reason: {reason}", reason=data_fetch_reason)
140140
sources_config = await self.get_policy_data_config(url=config_url)
141141
# translate config to a data update
142142
entries = sources_config.entries
@@ -200,7 +200,7 @@ async def stop(self):
200200
try:
201201
await self._subscriber_task
202202
except asyncio.CancelledError as exc:
203-
logger.debug("DataUpdater subscriber task was force-cancelled: {e}", exc=exc)
203+
logger.debug("DataUpdater subscriber task was force-cancelled: {exc}", exc=repr(exc))
204204
self._subscriber_task = None
205205
logger.debug("DataUpdater subscriber task was cancelled")
206206

@@ -243,7 +243,7 @@ async def report_update_results(self, update: DataUpdate, reports: List[DataEntr
243243
callback_config.data = whole_report.json()
244244
urls.append((url, callback_config))
245245

246-
logger.info("Reporting the update to requested callbacks", urls=urls)
246+
logger.info("Reporting the update to requested callbacks", urls=repr(urls))
247247
report_results = await data_fetcher.handle_urls(urls)
248248
# log reports which we failed to send
249249
for (url, config), result in zip(urls,report_results):
@@ -270,7 +270,7 @@ async def update_policy_data(self, update: DataUpdate = None, policy_store: Base
270270
urls = [(entry.url, entry.config) for entry in entries]
271271

272272
# get the data for the update
273-
logger.info("Fetching policy data", urls=urls)
273+
logger.info("Fetching policy data", urls=repr(urls))
274274
# Urls may be None - handle_urls has a default for None
275275
policy_data_with_urls = await data_fetcher.handle_urls(urls)
276276
# Save the data from the update

opal_client/policy/fetcher.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def force_valid_bundle(bundle) -> PolicyBundle:
1616
try:
1717
return PolicyBundle(**bundle)
1818
except ValidationError as e:
19-
logger.warning("server returned invalid bundle: {err}", bundle=bundle, err=e)
19+
logger.warning("server returned invalid bundle: {err}", bundle=bundle, err=repr(e))
2020
raise
2121

2222
async def throw_if_bad_status_code(response: aiohttp.ClientResponse, expected: List[int]) -> aiohttp.ClientResponse:
@@ -58,7 +58,7 @@ async def fetch_policy_bundle(
5858
try:
5959
return await attempter(directories=directories, base_hash=base_hash)
6060
except Exception as err:
61-
logger.warning("Failed all attempts to fetch bundle, got error: {err}", err=err)
61+
logger.warning("Failed all attempts to fetch bundle, got error: {err}", err=repr(err))
6262
return None
6363

6464
async def _fetch_policy_bundle(
@@ -90,6 +90,6 @@ async def _fetch_policy_bundle(
9090
bundle = await response.json()
9191
return force_valid_bundle(bundle)
9292
except aiohttp.ClientError as e:
93-
logger.warning("server connection error: {err}", err=e)
93+
logger.warning("server connection error: {err}", err=repr(e))
9494
raise
9595

opal_client/policy/updater.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ async def stop(self):
142142
try:
143143
await self._subscriber_task
144144
except asyncio.CancelledError as exc:
145-
logger.debug("PolicyUpdater subscriber task was force-cancelled: {e}", exc=exc)
145+
logger.debug("PolicyUpdater subscriber task was force-cancelled: {exc}", exc=repr(exc))
146146
self._subscriber_task = None
147147
logger.debug("PolicyUpdater subscriber task was cancelled")
148148

opal_client/policy_store/base_policy_store_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,5 +152,5 @@ async def end_transcation(self, exc_type=None, exc=None, tb=None, transaction_id
152152
# transaction context. If they fail, we do nothing special.
153153
logger.error("Cannot write to OPAL transaction log, transaction id={id}, error={err}",
154154
id=transaction.id,
155-
err=e
155+
err=repr(e)
156156
)

opal_client/policy_store/opa_client.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ async def set_policy(self, policy_id: str, policy_code: str, transaction_id:Opti
165165
) as opa_response:
166166
return await proxy_response_unless_invalid(opa_response, accepted_status_codes=[status.HTTP_200_OK])
167167
except aiohttp.ClientError as e:
168-
logger.warning("Opa connection error: {err}", err=e)
168+
logger.warning("Opa connection error: {err}", err=repr(e))
169169
raise
170170

171171
@fail_silently()
@@ -179,7 +179,7 @@ async def get_policy(self, policy_id: str) -> Optional[str]:
179179
result = await opa_response.json()
180180
return result.get("result", {}).get("raw", None)
181181
except aiohttp.ClientError as e:
182-
logger.warning("Opa connection error: {err}", err=e)
182+
logger.warning("Opa connection error: {err}", err=repr(e))
183183
raise
184184

185185
@affects_transaction
@@ -195,7 +195,7 @@ async def delete_policy(self, policy_id: str, transaction_id:Optional[str]=None)
195195
status.HTTP_404_NOT_FOUND
196196
])
197197
except aiohttp.ClientError as e:
198-
logger.warning("Opa connection error: {err}", err=e)
198+
logger.warning("Opa connection error: {err}", err=repr(e))
199199
raise
200200

201201
@fail_silently()
@@ -209,7 +209,7 @@ async def get_policy_module_ids(self) -> List[str]:
209209
result = await opa_response.json()
210210
return OpaClient._extract_module_ids_from_policies_json(result)
211211
except aiohttp.ClientError as e:
212-
logger.warning("Opa connection error: {err}", err=e)
212+
logger.warning("Opa connection error: {err}", err=repr(e))
213213
raise
214214

215215
@staticmethod
@@ -291,12 +291,12 @@ async def _set_policy_data_from_bundle_data_module(self, module: DataModule, has
291291
path=module_path,
292292
)
293293
except aiohttp.ClientError as e:
294-
logger.warning("Opa connection error: {err}", err=e)
294+
logger.warning("Opa connection error: {err}", err=repr(e))
295295
raise
296296
except json.JSONDecodeError as e:
297297
logger.warning(
298298
"bundle contains non-json data module: {module_path}",
299-
err=e,
299+
err=repr(e),
300300
module_path=module_path,
301301
bundle_hash=hash
302302
)
@@ -317,7 +317,7 @@ async def set_policy_data(self, policy_data: JsonableValue, path: str = "", tran
317317
status.HTTP_304_NOT_MODIFIED
318318
])
319319
except aiohttp.ClientError as e:
320-
logger.warning("Opa connection error: {err}", err=e)
320+
logger.warning("Opa connection error: {err}", err=repr(e))
321321
raise
322322

323323
@affects_transaction
@@ -337,7 +337,7 @@ async def delete_policy_data(self, path: str = "", transaction_id:Optional[str]=
337337
status.HTTP_404_NOT_FOUND
338338
])
339339
except aiohttp.ClientError as e:
340-
logger.warning("Opa connection error: {err}", err=e)
340+
logger.warning("Opa connection error: {err}", err=repr(e))
341341
raise
342342

343343
@affects_transaction
@@ -355,7 +355,7 @@ async def patch_data(self, path: str, patch_document: JSONPatchDocument, transac
355355
) as opa_response:
356356
return await proxy_response_unless_invalid(opa_response, accepted_status_codes=[status.HTTP_204_NO_CONTENT])
357357
except aiohttp.ClientError as e:
358-
logger.warning("Opa connection error: {err}", err=e)
358+
logger.warning("Opa connection error: {err}", err=repr(e))
359359
raise
360360

361361
@fail_silently()
@@ -375,7 +375,7 @@ async def get_data(self, path: str) -> Dict:
375375
async with session.get(f"{self._opa_url}/data/{path}") as opa_response:
376376
return await opa_response.json()
377377
except aiohttp.ClientError as e:
378-
logger.warning("Opa connection error: {err}", err=e)
378+
logger.warning("Opa connection error: {err}", err=repr(e))
379379
raise
380380

381381
@retry(**RETRY_CONFIG)
@@ -404,7 +404,7 @@ async def get_data_with_input(self, path: str, input: BaseModel) -> Dict:
404404
) as opa_response:
405405
return await proxy_response(opa_response)
406406
except aiohttp.ClientError as e:
407-
logger.warning("Opa connection error: {err}", err=e)
407+
logger.warning("Opa connection error: {err}", err=repr(e))
408408
raise
409409

410410
@retry(**RETRY_CONFIG)

opal_common/authentication/signer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ def _verify_crypto_keys(self):
8686
try:
8787
jwt.decode(token, self._public_key, algorithms=[self._algorithm])
8888
except jwt.PyJWTError as exc:
89-
logger.info("JWT Signer key verification failed with error: {err}", err=exc)
89+
logger.info("JWT Signer key verification failed with error: {err}", err=repr(exc))
9090
raise InvalidJWTCryptoKeysException("private key and public key do not match!") from exc
9191
# save jwk
9292
self._jwk: PyJWK = PyJWK.from_json(self.get_jwk(), algorithm=self._algorithm)

opal_common/fetcher/engine/fetching_engine.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ async def __aenter__(self):
6464

6565
async def __aexit__(self, exc_type, exc, tb):
6666
if (exc is not None):
67-
logger.error("Error occurred within FetchingEngine context", exc_info=(exc_type, exc, tb))
67+
logger.error("Error occurred within FetchingEngine context", exc_info=repr((exc_type, exc, tb)))
6868
await self.terminate_workers()
6969

7070
async def terminate_workers(self):

opal_server/deps/authentication.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def verify_logged_in(signer: JWTSigner, token: Optional[str]) -> UUID:
2929
forces bearer token authentication with valid JWT or throws 401.
3030
"""
3131
if not signer.enabled:
32-
logger.debug("signer diabled, cannot verify request!")
32+
logger.debug("signer diabled, cannot verify requests!")
3333
return
3434
if token is None:
3535
raise Unauthorized(token=token, description="access token was not provided")

opal_server/policy/watcher/task.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,5 +71,5 @@ async def _fail(self, exc: Exception):
7171
"""
7272
called when the watcher fails, and stops all tasks gracefully
7373
"""
74-
logger.error("watcher failed with exception: {err}", err=exc)
74+
logger.error("watcher failed with exception: {err}", err=repr(exc))
7575
await self.stop()

0 commit comments

Comments
 (0)