""" Utilities for ComponentMonitoring features """ from __future__ import absolute_import from __future__ import division from __future__ import print_function import datetime import socket from DIRAC import S_OK from DIRAC.FrameworkSystem.Client.ComponentMonitoringClient import ComponentMonitoringClient from DIRAC.Core.Security.ProxyInfo import getProxyInfo def monitorInstallation(componentType, system, component, module=None, cpu=None, hostname=None): """ Register the installation of a component in the ComponentMonitoringDB """ monitoringClient = ComponentMonitoringClient() if not module: module = component # Retrieve user installing the component user = None result = getProxyInfo() if result['OK']: proxyInfo = result['Value'] if 'username' in proxyInfo: user = proxyInfo['username'] else: return result if not user: user = 'unknown' if not cpu: cpu = 'Not available' for line in open('/proc/cpuinfo'): if line.startswith('model name'): cpu = line.split(':')[1][0: 64] cpu = cpu.replace('\n', '').lstrip().rstrip() if not hostname: hostname = socket.getfqdn() instance = component[0: 32] result = monitoringClient.installationExists({'Instance': instance, 'UnInstallationTime': None}, {'Type': componentType, 'DIRACSystem': system, 'DIRACModule': module}, {'HostName': hostname, 'CPU': cpu}) if not result['OK']: return result if result['Value']: return S_OK('Monitoring of %s is already enabled' % component) result = monitoringClient.addInstallation({'InstallationTime': datetime.datetime.utcnow(), 'InstalledBy': user, 'Instance': instance}, {'Type': componentType, 'DIRACSystem': system, 'DIRACModule': module}, {'HostName': hostname, 'CPU': cpu}, True) return result def monitorUninstallation(system, component, cpu=None, hostname=None): """ Register the uninstallation of a component in the ComponentMonitoringDB """ monitoringClient = ComponentMonitoringClient() # Retrieve user uninstalling the component user = None result = getProxyInfo() if result['OK']: proxyInfo = result['Value'] if 'username' in proxyInfo: user = proxyInfo['username'] else: return result if not user: user = 'unknown' if not cpu: cpu = 'Not available' for line in open('/proc/cpuinfo'): if line.startswith('model name'): cpu = line.split(':')[1][0:64] cpu = cpu.replace('\n', '').lstrip().rstrip() if not hostname: hostname = socket.getfqdn() instance = component[0: 32] result = monitoringClient.updateInstallations( {'Instance': instance, 'UnInstallationTime': None}, {'DIRACSystem': system}, {'HostName': hostname, 'CPU': cpu}, {'UnInstallationTime': datetime.datetime.utcnow(), 'UnInstalledBy': user}) return result