import json import logging from pathlib import Path from defence360agent.contracts import sentry from defence360agent.contracts.config import Core as Config from defence360agent.contracts.license import LicenseCLN from defence360agent.subsys.panels import hosting_panel from defence360agent.utils import ( stub_unexpected_error, is_root_user, ) from defence360agent.utils.ipecho import IPEchoAPI logger = logging.getLogger(__name__) SENTRY_TAGS_CACHE_PATH = Path("/var/imunify360/.sentry_tags") def dump_sentry_tags(): SENTRY_TAGS_CACHE_PATH.write_text(json.dumps(sentry._TAGS)) def cached_fill(): if SENTRY_TAGS_CACHE_PATH.exists(): try: sentry._TAGS = json.loads(SENTRY_TAGS_CACHE_PATH.read_text()) return except (json.JSONDecodeError, FileNotFoundError) as e: logger.warning( "Sentry cache file %s is malformed: %s", SENTRY_TAGS_CACHE_PATH, e, ) except PermissionError: pass fill(dump=False) def fill(dump=True) -> None: @stub_unexpected_error def _get_hosting_panel(): return hosting_panel.HostingPanel().NAME sentry.set_av_version(Config.AV_VERSION) sentry.set_version(Config.VERSION) sentry.set_product_name(LicenseCLN.get_product_name()) if not is_root_user(): return sentry.set_server_id(LicenseCLN.get_server_id()) sentry.set_ip(stub_unexpected_error(IPEchoAPI.server_ip)()) sentry.set_hosting_panel(_get_hosting_panel()) sentry.set_test_env() if dump: dump_sentry_tags()