Source code for satnogsconfig.helpers.support

"""SatNOGS support info module"""
import json
import platform
from datetime import datetime, timezone

import psutil

from satnogsconfig._version import get_versions
from satnogsconfig.helpers import apt

__version__ = get_versions()['version']

del get_versions


[docs]class Support(): """Create support information to be used for reporting bugs""" def __init__(self, config, satnogs_setup, ansible): """Class constructor""" self._config = config self._satnogs_setup = satnogs_setup self._ansible = ansible @property def info(self): """Support information :return: Support information dictionary :rtype: dict """ config = self._config.config.copy() redacted_keys = ['satnogs_api_token', 'satnogs_artifacts_api_token'] for key in redacted_keys: if config.get(key) is not None: config[key] = '[redacted]' data = { 'versions': { 'satnogs-client': self._satnogs_setup.satnogs_client_version, 'satnogs-client-ansible': self._satnogs_setup.satnogs_client_ansible_version, 'satnogs-flowgraphs': self._satnogs_setup.satnogs_flowgraphs_version, 'gr-satnogs': self._satnogs_setup.gr_satnogs_version, 'gr-soapy': self._satnogs_setup.gr_soapy_version, 'gnuradio': self._satnogs_setup.gnuradio_version, 'satnogs-config': __version__, }, 'state': { 'is-applied': self._satnogs_setup.is_applied, 'pending-tags': None, }, 'system': { 'date': datetime.now(timezone.utc).isoformat(), 'distribution': apt.get_distro(), 'pending-updates': apt.has_updates(), 'platform': dict(platform.uname()._asdict()), 'memory': dict(psutil.virtual_memory()._asdict()), 'disk': dict(psutil.disk_usage('/')._asdict()), }, 'configuration': config, } if tags := self._satnogs_setup.tags: data['state']['pending-tags'] = list(tags) return data
[docs] def dump(self, *args, **kwargs): """Dump support information :return: JSON dump of support information :rtype: str """ return json.dumps(self.info, *args, **kwargs)