Server IP : 184.154.167.98 / Your IP : 3.139.93.168 Web Server : Apache System : Linux pink.dnsnetservice.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 User : puertode ( 1767) PHP Version : 7.2.34 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /lib/python3.6/site-packages/tracer/resources/ |
Upload File : |
#-*- coding: utf-8 -*- # system.py # Module for getting data about your operating system # Dont worry, only necessary data required for this application. # Tracer *will not* store, collect or send your data anywhere. # # Copyright (C) 2016 Jakub Kadlcik # # This copyrighted material is made available to anyone wishing to use, # modify, copy, or redistribute it subject to the terms and conditions of # the GNU General Public License v.2, or (at your option) any later version. # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY expressed or implied, including the implied warranties of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. You should have received a copy of the # GNU General Public License along with this program; if not, write to the # Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # from __future__ import absolute_import # WARNING: There are imports in package_manager() import os import pwd import importlib import distro import psutil from sys import version_info from tracer.resources.PackageManager import PackageManager from tracer.resources.processes import Process class System(object): @staticmethod def distribution(): """ Checks if /etc/os-release exists, and if it does, uses it to divine the name of the distribution or distribution like. e.g It will return 'debian' on Ubuntu systems. Otherwise, revert to using distro.id() """ if os.path.isfile("/etc/os-release"): with open("/etc/os-release") as os_release_file: os_release_data = {} distros = ["gentoo", "debian", "rhel", "centos", "ol", "mageia", "arch", "archarm", "fedora", "suse"] # Remove empty lines and trailing spaces lines = [line.rstrip() for line in os_release_file if line.rstrip()] for line in lines: os_release_key, os_release_value = line.split("=") os_release_data[os_release_key] = os_release_value.strip('"') if os_release_data["ID"] in distros: # Special case since centos 7 has only yum, but centos-8 uses dnf if os_release_data["ID"] == "centos" and os_release_data["VERSION_ID"] == 7: return "centos-7" return os_release_data["ID"] else: if "ID_LIKE" in os_release_data: for distribution in os_release_data["ID_LIKE"].split(): if distribution in distros: return distribution else: return distro.id() @staticmethod def package_manager(**kwargs): """Returns instance of package manager according to installed linux distribution""" def get_instance(pair): # WARNING: Imports here path, name = pair module = importlib.import_module(path) return getattr(module, name)(**kwargs) managers = { "gentoo": [("tracer.packageManagers.portage", "Portage")], "debian": [("tracer.packageManagers.dpkg", "Dpkg")], "rhel": [ ("tracer.packageManagers.dnf", "Dnf"), ("tracer.packageManagers.yum", "Yum"), ], "centos": [ ("tracer.packageManagers.dnf", "Dnf"), ("tracer.packageManagers.yum", "Yum"), ], "centos-7": [("tracer.packageManagers.yum", "Yum")], "ol": [ ("tracer.packageManagers.dnf", "Dnf"), ("tracer.packageManagers.yum", "Yum"), ], "mageia": [("tracer.packageManagers.dnf", "Dnf")], "arch": [("tracer.packageManagers.alpm", "Alpm")], "archarm": [("tracer.packageManagers.alpm", "Alpm")], "fedora": [ ("tracer.packageManagers.dnf", "Dnf"), ("tracer.packageManagers.yum", "Yum"), ], "suse": [("tracer.packageManagers.dnf", "Dnf")], } distribution = System.distribution() if distribution not in managers: return None return PackageManager(*list(map(get_instance, managers[distribution]))) @staticmethod def init_system(): """ Returns name of init system you are using e.g. init, systemd, upstart """ init = Process(1) name = init.name().split(" ")[0] return name @staticmethod def boot_time(): # psutil-2.x.x is not backward compatible to psutil-1.x.x try: return psutil.boot_time() except AttributeError: return psutil.get_boot_time() @staticmethod def python_version(): return "{}.{}.{}".format(version_info.major, version_info.minor, version_info.micro) @staticmethod def running_kernel_package(): return System.package_manager().find_package(System.kernel_package_name(), os.uname()[2]) @staticmethod def kernel_package_name(): """ TODO: infer kernel package from current distribution """ return 'kernel' @staticmethod def user(): # getlogin is preferred because it return current username even # if python process is executed with sudo try: return os.getlogin() except OSError: return pwd.getpwuid(os.getuid())[0]